Merge remote-tracking branch 'staging/staging-next'
authorStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:47:30 +0000 (12:47 +1000)
committerStephen Rothwell <sfr@canb.auug.org.au>
Tue, 13 Sep 2016 02:47:30 +0000 (12:47 +1000)
618 files changed:
Documentation/devicetree/bindings/i2c/trivial-devices.txt
Documentation/devicetree/bindings/iio/accel/dmard06.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/accel/kionix,kxsd9.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/adc/mt6577_auxadc.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/adc/ti-adc161s626.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/magnetometer/ak8974.txt [new file with mode: 0644]
Documentation/devicetree/bindings/iio/temperature/maxim_thermocouple.txt [new file with mode: 0644]
Documentation/devicetree/bindings/soc/mediatek/auxadc.txt [deleted file]
Documentation/devicetree/bindings/vendor-prefixes.txt
MAINTAINERS
drivers/android/binder.c
drivers/dma-buf/Kconfig
drivers/dma-buf/Makefile
drivers/dma-buf/sw_sync.c [new file with mode: 0644]
drivers/dma-buf/sync_debug.c [new file with mode: 0644]
drivers/dma-buf/sync_debug.h [new file with mode: 0644]
drivers/dma-buf/sync_trace.h [new file with mode: 0644]
drivers/iio/accel/Kconfig
drivers/iio/accel/Makefile
drivers/iio/accel/bma180.c
drivers/iio/accel/dmard06.c [new file with mode: 0644]
drivers/iio/accel/dmard09.c [new file with mode: 0644]
drivers/iio/accel/kxcjk-1013.c
drivers/iio/adc/Kconfig
drivers/iio/adc/Makefile
drivers/iio/adc/ad7298.c
drivers/iio/adc/ad7793.c
drivers/iio/adc/mt6577_auxadc.c [new file with mode: 0644]
drivers/iio/adc/nau7802.c
drivers/iio/adc/ti-adc161s626.c [new file with mode: 0644]
drivers/iio/buffer/industrialio-buffer-cb.c
drivers/iio/chemical/Kconfig
drivers/iio/chemical/atlas-ph-sensor.c
drivers/iio/common/hid-sensors/hid-sensor-trigger.c
drivers/iio/dac/Kconfig
drivers/iio/dac/Makefile
drivers/iio/dac/cio-dac.c [new file with mode: 0644]
drivers/iio/humidity/Kconfig
drivers/iio/light/Kconfig
drivers/iio/light/us5182d.c
drivers/iio/light/vcnl4000.c
drivers/iio/magnetometer/Kconfig
drivers/iio/magnetometer/Makefile
drivers/iio/magnetometer/ak8974.c [new file with mode: 0644]
drivers/iio/magnetometer/mag3110.c
drivers/iio/proximity/sx9500.c
drivers/iio/temperature/Kconfig
drivers/iio/temperature/Makefile
drivers/iio/temperature/maxim_thermocouple.c [new file with mode: 0644]
drivers/staging/Kconfig
drivers/staging/Makefile
drivers/staging/android/Kconfig
drivers/staging/android/Makefile
drivers/staging/android/ion/Kconfig
drivers/staging/android/ion/Makefile
drivers/staging/android/ion/devicetree.txt [new file with mode: 0644]
drivers/staging/android/ion/hisilicon/hi6220_ion.c
drivers/staging/android/ion/ion-ioctl.c [new file with mode: 0644]
drivers/staging/android/ion/ion.c
drivers/staging/android/ion/ion.h
drivers/staging/android/ion/ion_carveout_heap.c
drivers/staging/android/ion/ion_chunk_heap.c
drivers/staging/android/ion/ion_cma_heap.c
drivers/staging/android/ion/ion_dummy_driver.c
drivers/staging/android/ion/ion_heap.c
drivers/staging/android/ion/ion_of.c [new file with mode: 0644]
drivers/staging/android/ion/ion_of.h [new file with mode: 0644]
drivers/staging/android/ion/ion_page_pool.c
drivers/staging/android/ion/ion_priv.h
drivers/staging/android/ion/ion_system_heap.c
drivers/staging/android/ion/ion_test.c
drivers/staging/android/lowmemorykiller.c
drivers/staging/android/sw_sync.c [deleted file]
drivers/staging/android/sync_debug.c [deleted file]
drivers/staging/android/sync_debug.h [deleted file]
drivers/staging/android/trace/sync.h [deleted file]
drivers/staging/android/uapi/ion.h
drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c [deleted file]
drivers/staging/comedi/drivers/addi_apci_3501.c
drivers/staging/comedi/drivers/cb_pcidas64.c
drivers/staging/comedi/drivers/das08_cs.c
drivers/staging/comedi/drivers/dt2811.c
drivers/staging/comedi/drivers/dt9812.c
drivers/staging/comedi/drivers/gsc_hpdi.c
drivers/staging/comedi/drivers/jr3_pci.c
drivers/staging/comedi/drivers/jr3_pci.h
drivers/staging/comedi/drivers/ni_670x.c
drivers/staging/comedi/drivers/ni_at_a2150.c
drivers/staging/comedi/drivers/ni_atmio.c
drivers/staging/comedi/drivers/ni_atmio16d.c
drivers/staging/comedi/drivers/ni_daq_dio24.c
drivers/staging/comedi/drivers/ni_mio_cs.c
drivers/staging/comedi/drivers/ni_pcidio.c
drivers/staging/comedi/drivers/ni_pcimio.c
drivers/staging/comedi/drivers/ni_usb6501.c
drivers/staging/comedi/drivers/plx9080.h
drivers/staging/comedi/drivers/s626.c
drivers/staging/comedi/drivers/s626.h
drivers/staging/comedi/drivers/usbduxfast.c
drivers/staging/comedi/drivers/vmk80xx.c
drivers/staging/dgnc/dgnc_cls.c
drivers/staging/dgnc/dgnc_driver.c
drivers/staging/dgnc/dgnc_driver.h
drivers/staging/dgnc/dgnc_neo.c
drivers/staging/dgnc/dgnc_sysfs.c
drivers/staging/dgnc/dgnc_tty.c
drivers/staging/emxx_udc/emxx_udc.c
drivers/staging/fbtft/fb_agm1264k-fl.c
drivers/staging/fbtft/fb_ili9320.c
drivers/staging/fbtft/fb_ili9325.c
drivers/staging/fbtft/fb_pcd8544.c
drivers/staging/fbtft/fb_s6d02a1.c
drivers/staging/fbtft/fb_s6d1121.c
drivers/staging/fbtft/fb_ssd1289.c
drivers/staging/fbtft/fb_ssd1306.c
drivers/staging/fbtft/fb_ssd1331.c
drivers/staging/fbtft/fb_ssd1351.c
drivers/staging/fbtft/fb_st7735r.c
drivers/staging/fbtft/fb_tls8204.c
drivers/staging/fbtft/fb_uc1611.c
drivers/staging/fbtft/fb_watterott.c
drivers/staging/fbtft/fbtft-bus.c
drivers/staging/fbtft/fbtft-core.c
drivers/staging/fbtft/fbtft.h
drivers/staging/fbtft/fbtft_device.c
drivers/staging/fsl-mc/bus/Makefile
drivers/staging/fsl-mc/bus/dpmcp.c
drivers/staging/fsl-mc/bus/dpmng-cmd.h
drivers/staging/fsl-mc/bus/dpmng.c
drivers/staging/fsl-mc/bus/dprc-cmd.h
drivers/staging/fsl-mc/bus/dprc-driver.c
drivers/staging/fsl-mc/bus/dprc.c
drivers/staging/fsl-mc/bus/fsl-mc-allocator.c [new file with mode: 0644]
drivers/staging/fsl-mc/bus/fsl-mc-bus.c [new file with mode: 0644]
drivers/staging/fsl-mc/bus/fsl-mc-msi.c [new file with mode: 0644]
drivers/staging/fsl-mc/bus/fsl-mc-private.h [new file with mode: 0644]
drivers/staging/fsl-mc/bus/irq-gic-v3-its-fsl-mc-msi.c
drivers/staging/fsl-mc/bus/mc-allocator.c [deleted file]
drivers/staging/fsl-mc/bus/mc-bus.c [deleted file]
drivers/staging/fsl-mc/bus/mc-io.c [new file with mode: 0644]
drivers/staging/fsl-mc/bus/mc-msi.c [deleted file]
drivers/staging/fsl-mc/bus/mc-sys.c
drivers/staging/fsl-mc/include/mc-bus.h [new file with mode: 0644]
drivers/staging/fsl-mc/include/mc-private.h [deleted file]
drivers/staging/fsl-mc/include/mc-sys.h
drivers/staging/fsl-mc/include/mc.h
drivers/staging/gdm724x/gdm_lte.c
drivers/staging/gdm724x/gdm_tty.c
drivers/staging/gdm724x/gdm_usb.c
drivers/staging/gdm724x/netlink_k.c
drivers/staging/i4l/act2000/act2000_isa.c
drivers/staging/i4l/act2000/capi.c
drivers/staging/i4l/act2000/capi.h
drivers/staging/i4l/icn/icn.c
drivers/staging/i4l/pcbit/capi.c
drivers/staging/i4l/pcbit/drv.c
drivers/staging/i4l/pcbit/edss1.c
drivers/staging/i4l/pcbit/layer2.c
drivers/staging/iio/light/isl29018.c
drivers/staging/iio/light/isl29028.c
drivers/staging/iio/meter/ade7854.c
drivers/staging/ks7010/ks7010_sdio.c
drivers/staging/ks7010/ks_hostif.c
drivers/staging/ks7010/ks_wlan_net.c
drivers/staging/ks7010/michael_mic.c
drivers/staging/lustre/include/linux/libcfs/libcfs.h
drivers/staging/lustre/include/linux/libcfs/libcfs_debug.h
drivers/staging/lustre/include/linux/libcfs/libcfs_fail.h
drivers/staging/lustre/include/linux/libcfs/libcfs_private.h
drivers/staging/lustre/include/linux/lnet/lib-lnet.h
drivers/staging/lustre/include/linux/lnet/lib-types.h
drivers/staging/lustre/include/linux/lnet/types.h
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.c
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd.h
drivers/staging/lustre/lnet/klnds/o2iblnd/o2iblnd_cb.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd.h
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_cb.c
drivers/staging/lustre/lnet/klnds/socklnd/socklnd_lib.c
drivers/staging/lustre/lnet/libcfs/debug.c
drivers/staging/lustre/lnet/libcfs/fail.c
drivers/staging/lustre/lnet/libcfs/libcfs_string.c
drivers/staging/lustre/lnet/libcfs/linux/linux-crypto.c
drivers/staging/lustre/lnet/lnet/lib-md.c
drivers/staging/lustre/lnet/lnet/lib-move.c
drivers/staging/lustre/lnet/lnet/lib-msg.c
drivers/staging/lustre/lnet/lnet/lib-socket.c
drivers/staging/lustre/lnet/lnet/lo.c
drivers/staging/lustre/lnet/lnet/router.c
drivers/staging/lustre/lnet/selftest/brw_test.c
drivers/staging/lustre/lnet/selftest/conrpc.c
drivers/staging/lustre/lnet/selftest/framework.c
drivers/staging/lustre/lnet/selftest/rpc.c
drivers/staging/lustre/lustre/fld/fld_internal.h
drivers/staging/lustre/lustre/fld/fld_request.c
drivers/staging/lustre/lustre/include/cl_object.h
drivers/staging/lustre/lustre/include/lprocfs_status.h
drivers/staging/lustre/lustre/include/lu_object.h
drivers/staging/lustre/lustre/include/lustre/lustre_idl.h
drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h [new file with mode: 0644]
drivers/staging/lustre/lustre/include/lustre/lustre_user.h
drivers/staging/lustre/lustre/include/lustre_dlm.h
drivers/staging/lustre/lustre/include/lustre_dlm_flags.h
drivers/staging/lustre/lustre/include/lustre_fid.h
drivers/staging/lustre/lustre/include/lustre_handles.h
drivers/staging/lustre/lustre/include/lustre_import.h
drivers/staging/lustre/lustre/include/lustre_lib.h
drivers/staging/lustre/lustre/include/lustre_lite.h
drivers/staging/lustre/lustre/include/lustre_lmv.h [new file with mode: 0644]
drivers/staging/lustre/lustre/include/lustre_log.h
drivers/staging/lustre/lustre/include/lustre_mdc.h
drivers/staging/lustre/lustre/include/lustre_mds.h
drivers/staging/lustre/lustre/include/lustre_req_layout.h
drivers/staging/lustre/lustre/include/lustre_ver.h
drivers/staging/lustre/lustre/include/obd.h
drivers/staging/lustre/lustre/include/obd_class.h
drivers/staging/lustre/lustre/include/obd_support.h
drivers/staging/lustre/lustre/ldlm/ldlm_extent.c
drivers/staging/lustre/lustre/ldlm/ldlm_flock.c
drivers/staging/lustre/lustre/ldlm/ldlm_internal.h
drivers/staging/lustre/lustre/ldlm/ldlm_lib.c
drivers/staging/lustre/lustre/ldlm/ldlm_lock.c
drivers/staging/lustre/lustre/ldlm/ldlm_lockd.c
drivers/staging/lustre/lustre/ldlm/ldlm_pool.c
drivers/staging/lustre/lustre/ldlm/ldlm_request.c
drivers/staging/lustre/lustre/ldlm/ldlm_resource.c
drivers/staging/lustre/lustre/llite/dcache.c
drivers/staging/lustre/lustre/llite/dir.c
drivers/staging/lustre/lustre/llite/file.c
drivers/staging/lustre/lustre/llite/lcommon_cl.c
drivers/staging/lustre/lustre/llite/llite_internal.h
drivers/staging/lustre/lustre/llite/llite_lib.c
drivers/staging/lustre/lustre/llite/llite_mmap.c
drivers/staging/lustre/lustre/llite/llite_nfs.c
drivers/staging/lustre/lustre/llite/lproc_llite.c
drivers/staging/lustre/lustre/llite/namei.c
drivers/staging/lustre/lustre/llite/rw.c
drivers/staging/lustre/lustre/llite/rw26.c
drivers/staging/lustre/lustre/llite/statahead.c
drivers/staging/lustre/lustre/llite/super25.c
drivers/staging/lustre/lustre/llite/symlink.c
drivers/staging/lustre/lustre/llite/vvp_dev.c
drivers/staging/lustre/lustre/llite/vvp_internal.h
drivers/staging/lustre/lustre/llite/vvp_object.c
drivers/staging/lustre/lustre/llite/vvp_page.c
drivers/staging/lustre/lustre/llite/vvp_req.c
drivers/staging/lustre/lustre/llite/xattr.c
drivers/staging/lustre/lustre/llite/xattr_cache.c
drivers/staging/lustre/lustre/lmv/lmv_intent.c
drivers/staging/lustre/lustre/lmv/lmv_internal.h
drivers/staging/lustre/lustre/lmv/lmv_obd.c
drivers/staging/lustre/lustre/lmv/lproc_lmv.c
drivers/staging/lustre/lustre/lov/lov_cl_internal.h
drivers/staging/lustre/lustre/lov/lov_ea.c
drivers/staging/lustre/lustre/lov/lov_io.c
drivers/staging/lustre/lustre/lov/lov_obd.c
drivers/staging/lustre/lustre/lov/lov_object.c
drivers/staging/lustre/lustre/lov/lov_page.c
drivers/staging/lustre/lustre/lov/lov_pool.c
drivers/staging/lustre/lustre/mdc/lproc_mdc.c
drivers/staging/lustre/lustre/mdc/mdc_internal.h
drivers/staging/lustre/lustre/mdc/mdc_lib.c
drivers/staging/lustre/lustre/mdc/mdc_locks.c
drivers/staging/lustre/lustre/mdc/mdc_reint.c
drivers/staging/lustre/lustre/mdc/mdc_request.c
drivers/staging/lustre/lustre/obdclass/cl_io.c
drivers/staging/lustre/lustre/obdclass/cl_page.c
drivers/staging/lustre/lustre/obdclass/class_obd.c
drivers/staging/lustre/lustre/obdclass/debug.c
drivers/staging/lustre/lustre/obdclass/genops.c
drivers/staging/lustre/lustre/obdclass/linux/linux-module.c
drivers/staging/lustre/lustre/obdclass/linux/linux-obdo.c
drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c
drivers/staging/lustre/lustre/obdclass/llog.c
drivers/staging/lustre/lustre/obdclass/llog_cat.c
drivers/staging/lustre/lustre/obdclass/llog_swab.c
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c
drivers/staging/lustre/lustre/obdclass/lu_object.c
drivers/staging/lustre/lustre/obdclass/lustre_handles.c
drivers/staging/lustre/lustre/obdclass/obd_config.c
drivers/staging/lustre/lustre/obdclass/obd_mount.c
drivers/staging/lustre/lustre/obdclass/obdo.c
drivers/staging/lustre/lustre/obdecho/echo_client.c
drivers/staging/lustre/lustre/obdecho/echo_internal.h
drivers/staging/lustre/lustre/osc/lproc_osc.c
drivers/staging/lustre/lustre/osc/osc_cache.c
drivers/staging/lustre/lustre/osc/osc_cl_internal.h
drivers/staging/lustre/lustre/osc/osc_internal.h
drivers/staging/lustre/lustre/osc/osc_io.c
drivers/staging/lustre/lustre/osc/osc_page.c
drivers/staging/lustre/lustre/osc/osc_request.c
drivers/staging/lustre/lustre/ptlrpc/client.c
drivers/staging/lustre/lustre/ptlrpc/import.c
drivers/staging/lustre/lustre/ptlrpc/layout.c
drivers/staging/lustre/lustre/ptlrpc/lproc_ptlrpc.c
drivers/staging/lustre/lustre/ptlrpc/niobuf.c
drivers/staging/lustre/lustre/ptlrpc/pack_generic.c
drivers/staging/lustre/lustre/ptlrpc/pers.c
drivers/staging/lustre/lustre/ptlrpc/ptlrpcd.c
drivers/staging/lustre/lustre/ptlrpc/sec_bulk.c
drivers/staging/lustre/lustre/ptlrpc/sec_plain.c
drivers/staging/lustre/lustre/ptlrpc/service.c
drivers/staging/lustre/lustre/ptlrpc/wiretest.c
drivers/staging/most/Documentation/ABI/sysfs-class-most.txt
drivers/staging/most/aim-cdev/cdev.c
drivers/staging/most/aim-network/networking.c
drivers/staging/most/aim-v4l2/video.c
drivers/staging/most/hdm-dim2/dim2_hal.c
drivers/staging/most/hdm-dim2/dim2_hal.h
drivers/staging/most/hdm-dim2/dim2_hdm.c
drivers/staging/most/hdm-dim2/dim2_reg.h
drivers/staging/most/hdm-usb/hdm_usb.c
drivers/staging/most/mostcore/core.c
drivers/staging/netlogic/xlr_net.c
drivers/staging/octeon-usb/Kconfig
drivers/staging/octeon/ethernet-rgmii.c
drivers/staging/octeon/ethernet-rx.c
drivers/staging/octeon/ethernet-util.h
drivers/staging/octeon/ethernet.c
drivers/staging/octeon/octeon-ethernet.h
drivers/staging/rtl8188eu/core/rtw_ap.c
drivers/staging/rtl8188eu/core/rtw_cmd.c
drivers/staging/rtl8188eu/core/rtw_debug.c
drivers/staging/rtl8188eu/core/rtw_efuse.c
drivers/staging/rtl8188eu/core/rtw_ieee80211.c
drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
drivers/staging/rtl8188eu/core/rtw_mlme.c
drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
drivers/staging/rtl8188eu/core/rtw_recv.c
drivers/staging/rtl8188eu/core/rtw_sreset.c
drivers/staging/rtl8188eu/core/rtw_wlan_util.c
drivers/staging/rtl8188eu/core/rtw_xmit.c
drivers/staging/rtl8188eu/hal/hal_intf.c
drivers/staging/rtl8188eu/hal/phy.c
drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c
drivers/staging/rtl8188eu/hal/rtl8188e_dm.c
drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c
drivers/staging/rtl8188eu/hal/rtl8188eu_led.c
drivers/staging/rtl8188eu/hal/rtl8188eu_recv.c
drivers/staging/rtl8188eu/hal/rtl8188eu_xmit.c
drivers/staging/rtl8188eu/hal/usb_halinit.c
drivers/staging/rtl8188eu/include/Hal8188EPhyCfg.h
drivers/staging/rtl8188eu/include/HalHWImg8188E_FW.h [deleted file]
drivers/staging/rtl8188eu/include/drv_types.h
drivers/staging/rtl8188eu/include/hal_intf.h
drivers/staging/rtl8188eu/include/ieee80211.h
drivers/staging/rtl8188eu/include/odm.h
drivers/staging/rtl8188eu/include/osdep_intf.h
drivers/staging/rtl8188eu/include/osdep_service.h
drivers/staging/rtl8188eu/include/phy.h
drivers/staging/rtl8188eu/include/recv_osdep.h
drivers/staging/rtl8188eu/include/rtl8188e_cmd.h
drivers/staging/rtl8188eu/include/rtl8188e_dm.h
drivers/staging/rtl8188eu/include/rtl8188e_hal.h
drivers/staging/rtl8188eu/include/rtl8188e_led.h
drivers/staging/rtl8188eu/include/rtl8188e_recv.h
drivers/staging/rtl8188eu/include/rtl8188e_xmit.h
drivers/staging/rtl8188eu/include/rtw_ap.h
drivers/staging/rtl8188eu/include/rtw_cmd.h
drivers/staging/rtl8188eu/include/rtw_debug.h
drivers/staging/rtl8188eu/include/rtw_efuse.h
drivers/staging/rtl8188eu/include/rtw_event.h
drivers/staging/rtl8188eu/include/rtw_ht.h
drivers/staging/rtl8188eu/include/rtw_ioctl.h
drivers/staging/rtl8188eu/include/rtw_mlme.h
drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
drivers/staging/rtl8188eu/include/rtw_pwrctrl.h
drivers/staging/rtl8188eu/include/rtw_recv.h
drivers/staging/rtl8188eu/include/rtw_security.h
drivers/staging/rtl8188eu/include/rtw_sreset.h
drivers/staging/rtl8188eu/include/rtw_xmit.h
drivers/staging/rtl8188eu/include/usb_hal.h
drivers/staging/rtl8188eu/include/wifi.h
drivers/staging/rtl8188eu/include/wlan_bssdef.h
drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
drivers/staging/rtl8188eu/os_dep/os_intfs.c
drivers/staging/rtl8188eu/os_dep/osdep_service.c
drivers/staging/rtl8188eu/os_dep/usb_intf.c
drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c
drivers/staging/rtl8192e/rtl8192e/r8192E_phy.c
drivers/staging/rtl8192e/rtl8192e/rtl_cam.c
drivers/staging/rtl8192e/rtl8192e/rtl_core.c
drivers/staging/rtl8192e/rtl8192e/rtl_core.h
drivers/staging/rtl8192e/rtl8192e/rtl_ps.c
drivers/staging/rtl8192e/rtl8192e/rtl_wx.c
drivers/staging/rtl8192e/rtl819x_Qos.h
drivers/staging/rtl8192e/rtl819x_TSProc.c
drivers/staging/rtl8192e/rtllib.h
drivers/staging/rtl8192e/rtllib_softmac.c
drivers/staging/rtl8192e/rtllib_softmac_wx.c
drivers/staging/rtl8192e/rtllib_wx.c
drivers/staging/rtl8192u/ieee80211/Makefile
drivers/staging/rtl8192u/ieee80211/ieee80211.h
drivers/staging/rtl8192u/r8192U.h
drivers/staging/rtl8192u/r8192U_core.c
drivers/staging/rtl8712/ieee80211.c
drivers/staging/rtl8712/os_intfs.c
drivers/staging/rtl8712/osdep_intf.h
drivers/staging/rtl8712/osdep_service.h
drivers/staging/rtl8712/recv_linux.c
drivers/staging/rtl8712/rtl8712_cmd.c
drivers/staging/rtl8712/rtl8712_led.c
drivers/staging/rtl8712/rtl8712_recv.c
drivers/staging/rtl8712/rtl8712_recv.h
drivers/staging/rtl8712/rtl8712_spec.h
drivers/staging/rtl8712/rtl8712_syscfg_bitdef.h
drivers/staging/rtl8712/rtl8712_xmit.c
drivers/staging/rtl8712/rtl871x_cmd.c
drivers/staging/rtl8712/rtl871x_cmd.h
drivers/staging/rtl8712/rtl871x_ht.h
drivers/staging/rtl8712/rtl871x_ioctl.h
drivers/staging/rtl8712/rtl871x_ioctl_set.c
drivers/staging/rtl8712/rtl871x_led.h
drivers/staging/rtl8712/rtl871x_mlme.c
drivers/staging/rtl8712/rtl871x_mlme.h
drivers/staging/rtl8712/rtl871x_mp.c
drivers/staging/rtl8712/rtl871x_mp.h
drivers/staging/rtl8712/rtl871x_mp_ioctl.h
drivers/staging/rtl8712/rtl871x_mp_phy_regdef.h
drivers/staging/rtl8712/rtl871x_pwrctrl.c
drivers/staging/rtl8712/rtl871x_pwrctrl.h
drivers/staging/rtl8712/rtl871x_recv.c
drivers/staging/rtl8712/rtl871x_recv.h
drivers/staging/rtl8712/rtl871x_security.h
drivers/staging/rtl8712/rtl871x_sta_mgt.c
drivers/staging/rtl8712/rtl871x_xmit.c
drivers/staging/rtl8712/rtl871x_xmit.h
drivers/staging/rtl8712/usb_halinit.c
drivers/staging/rtl8712/usb_intf.c
drivers/staging/rtl8712/usb_ops_linux.c
drivers/staging/rtl8712/wifi.h
drivers/staging/rtl8712/wlan_bssdef.h
drivers/staging/rtl8712/xmit_linux.c
drivers/staging/rtl8723au/Kconfig [deleted file]
drivers/staging/rtl8723au/Makefile [deleted file]
drivers/staging/rtl8723au/TODO [deleted file]
drivers/staging/rtl8723au/core/rtw_ap.c [deleted file]
drivers/staging/rtl8723au/core/rtw_cmd.c [deleted file]
drivers/staging/rtl8723au/core/rtw_efuse.c [deleted file]
drivers/staging/rtl8723au/core/rtw_ieee80211.c [deleted file]
drivers/staging/rtl8723au/core/rtw_mlme.c [deleted file]
drivers/staging/rtl8723au/core/rtw_mlme_ext.c [deleted file]
drivers/staging/rtl8723au/core/rtw_pwrctrl.c [deleted file]
drivers/staging/rtl8723au/core/rtw_recv.c [deleted file]
drivers/staging/rtl8723au/core/rtw_security.c [deleted file]
drivers/staging/rtl8723au/core/rtw_sreset.c [deleted file]
drivers/staging/rtl8723au/core/rtw_sta_mgt.c [deleted file]
drivers/staging/rtl8723au/core/rtw_wlan_util.c [deleted file]
drivers/staging/rtl8723au/core/rtw_xmit.c [deleted file]
drivers/staging/rtl8723au/hal/Hal8723PwrSeq.c [deleted file]
drivers/staging/rtl8723au/hal/Hal8723UHWImg_CE.c [deleted file]
drivers/staging/rtl8723au/hal/HalDMOutSrc8723A_CE.c [deleted file]
drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c [deleted file]
drivers/staging/rtl8723au/hal/HalHWImg8723A_MAC.c [deleted file]
drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c [deleted file]
drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c [deleted file]
drivers/staging/rtl8723au/hal/hal_com.c [deleted file]
drivers/staging/rtl8723au/hal/hal_intf.c [deleted file]
drivers/staging/rtl8723au/hal/odm.c [deleted file]
drivers/staging/rtl8723au/hal/odm_HWConfig.c [deleted file]
drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c [deleted file]
drivers/staging/rtl8723au/hal/odm_debug.c [deleted file]
drivers/staging/rtl8723au/hal/odm_interface.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_cmd.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_dm.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_rxdesc.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723a_sreset.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723au_recv.c [deleted file]
drivers/staging/rtl8723au/hal/rtl8723au_xmit.c [deleted file]
drivers/staging/rtl8723au/hal/usb_halinit.c [deleted file]
drivers/staging/rtl8723au/hal/usb_ops_linux.c [deleted file]
drivers/staging/rtl8723au/include/Hal8723APhyCfg.h [deleted file]
drivers/staging/rtl8723au/include/Hal8723APhyReg.h [deleted file]
drivers/staging/rtl8723au/include/Hal8723PwrSeq.h [deleted file]
drivers/staging/rtl8723au/include/Hal8723UHWImg_CE.h [deleted file]
drivers/staging/rtl8723au/include/HalDMOutSrc8723A.h [deleted file]
drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h [deleted file]
drivers/staging/rtl8723au/include/HalHWImg8723A_FW.h [deleted file]
drivers/staging/rtl8723au/include/HalHWImg8723A_MAC.h [deleted file]
drivers/staging/rtl8723au/include/HalHWImg8723A_RF.h [deleted file]
drivers/staging/rtl8723au/include/HalPwrSeqCmd.h [deleted file]
drivers/staging/rtl8723au/include/HalVerDef.h [deleted file]
drivers/staging/rtl8723au/include/drv_types.h [deleted file]
drivers/staging/rtl8723au/include/hal_com.h [deleted file]
drivers/staging/rtl8723au/include/hal_intf.h [deleted file]
drivers/staging/rtl8723au/include/ieee80211.h [deleted file]
drivers/staging/rtl8723au/include/ioctl_cfg80211.h [deleted file]
drivers/staging/rtl8723au/include/mlme_osdep.h [deleted file]
drivers/staging/rtl8723au/include/odm.h [deleted file]
drivers/staging/rtl8723au/include/odm_HWConfig.h [deleted file]
drivers/staging/rtl8723au/include/odm_RegConfig8723A.h [deleted file]
drivers/staging/rtl8723au/include/odm_RegDefine11N.h [deleted file]
drivers/staging/rtl8723au/include/odm_debug.h [deleted file]
drivers/staging/rtl8723au/include/odm_interface.h [deleted file]
drivers/staging/rtl8723au/include/odm_precomp.h [deleted file]
drivers/staging/rtl8723au/include/odm_reg.h [deleted file]
drivers/staging/rtl8723au/include/osdep_intf.h [deleted file]
drivers/staging/rtl8723au/include/osdep_service.h [deleted file]
drivers/staging/rtl8723au/include/recv_osdep.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_bt-coexist.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_bt_intf.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_cmd.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_dm.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_hal.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_pg.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_recv.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_rf.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_spec.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_sreset.h [deleted file]
drivers/staging/rtl8723au/include/rtl8723a_xmit.h [deleted file]
drivers/staging/rtl8723au/include/rtw_ap.h [deleted file]
drivers/staging/rtl8723au/include/rtw_cmd.h [deleted file]
drivers/staging/rtl8723au/include/rtw_debug.h [deleted file]
drivers/staging/rtl8723au/include/rtw_eeprom.h [deleted file]
drivers/staging/rtl8723au/include/rtw_efuse.h [deleted file]
drivers/staging/rtl8723au/include/rtw_event.h [deleted file]
drivers/staging/rtl8723au/include/rtw_ht.h [deleted file]
drivers/staging/rtl8723au/include/rtw_io.h [deleted file]
drivers/staging/rtl8723au/include/rtw_mlme.h [deleted file]
drivers/staging/rtl8723au/include/rtw_mlme_ext.h [deleted file]
drivers/staging/rtl8723au/include/rtw_pwrctrl.h [deleted file]
drivers/staging/rtl8723au/include/rtw_recv.h [deleted file]
drivers/staging/rtl8723au/include/rtw_rf.h [deleted file]
drivers/staging/rtl8723au/include/rtw_security.h [deleted file]
drivers/staging/rtl8723au/include/rtw_sreset.h [deleted file]
drivers/staging/rtl8723au/include/rtw_version.h [deleted file]
drivers/staging/rtl8723au/include/rtw_xmit.h [deleted file]
drivers/staging/rtl8723au/include/sta_info.h [deleted file]
drivers/staging/rtl8723au/include/usb_ops.h [deleted file]
drivers/staging/rtl8723au/include/usb_ops_linux.h [deleted file]
drivers/staging/rtl8723au/include/wifi.h [deleted file]
drivers/staging/rtl8723au/include/wlan_bssdef.h [deleted file]
drivers/staging/rtl8723au/include/xmit_osdep.h [deleted file]
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c [deleted file]
drivers/staging/rtl8723au/os_dep/mlme_linux.c [deleted file]
drivers/staging/rtl8723au/os_dep/os_intfs.c [deleted file]
drivers/staging/rtl8723au/os_dep/recv_linux.c [deleted file]
drivers/staging/rtl8723au/os_dep/usb_intf.c [deleted file]
drivers/staging/rtl8723au/os_dep/usb_ops_linux.c [deleted file]
drivers/staging/rtl8723au/os_dep/xmit_linux.c [deleted file]
drivers/staging/rts5208/ms.c
drivers/staging/rts5208/ms.h
drivers/staging/rts5208/rtsx.c
drivers/staging/rts5208/rtsx.h
drivers/staging/rts5208/rtsx_card.c
drivers/staging/rts5208/rtsx_chip.h
drivers/staging/rts5208/rtsx_scsi.c
drivers/staging/rts5208/rtsx_transport.h
drivers/staging/rts5208/sd.c
drivers/staging/rts5208/spi.h
drivers/staging/rts5208/xd.c
drivers/staging/slicoss/slic.h
drivers/staging/slicoss/slichw.h
drivers/staging/slicoss/slicoss.c
drivers/staging/sm750fb/ddk750_chip.c
drivers/staging/sm750fb/ddk750_display.c
drivers/staging/sm750fb/ddk750_dvi.c
drivers/staging/sm750fb/ddk750_mode.c
drivers/staging/sm750fb/sm750_hw.c
drivers/staging/speakup/devsynth.c
drivers/staging/speakup/kobjects.c
drivers/staging/speakup/synth.c
drivers/staging/unisys/include/channel.h
drivers/staging/unisys/include/channel_guid.h [deleted file]
drivers/staging/unisys/include/diagchannel.h [deleted file]
drivers/staging/unisys/include/guestlinuxdebug.h [deleted file]
drivers/staging/unisys/include/iochannel.h
drivers/staging/unisys/include/periodic_work.h [deleted file]
drivers/staging/unisys/include/vbushelper.h [deleted file]
drivers/staging/unisys/include/visorbus.h
drivers/staging/unisys/visorbus/Makefile
drivers/staging/unisys/visorbus/controlvmchannel.h
drivers/staging/unisys/visorbus/controlvmcompletionstatus.h [deleted file]
drivers/staging/unisys/visorbus/iovmcall_gnuc.h [deleted file]
drivers/staging/unisys/visorbus/periodic_work.c [deleted file]
drivers/staging/unisys/visorbus/vbuschannel.h
drivers/staging/unisys/visorbus/vbusdeviceinfo.h [deleted file]
drivers/staging/unisys/visorbus/visorbus_main.c
drivers/staging/unisys/visorbus/visorbus_private.h
drivers/staging/unisys/visorbus/visorchannel.c
drivers/staging/unisys/visorbus/visorchipset.c
drivers/staging/unisys/visorbus/vmcallinterface.h
drivers/staging/unisys/visorinput/ultrainputreport.h
drivers/staging/unisys/visorinput/visorinput.c
drivers/staging/unisys/visornic/visornic_main.c
drivers/staging/vt6655/channel.c
drivers/staging/vt6655/device_main.c
drivers/staging/vt6655/power.c
drivers/staging/vt6655/rf.c
drivers/staging/vt6655/rxtx.c
drivers/staging/vt6656/baseband.h
drivers/staging/vt6656/card.c
drivers/staging/vt6656/dpc.c
drivers/staging/vt6656/dpc.h
drivers/staging/vt6656/main_usb.c
drivers/staging/vt6656/usbpipe.c
drivers/staging/wilc1000/TODO
drivers/staging/wilc1000/linux_wlan.c
drivers/staging/wilc1000/wilc_debugfs.c
drivers/staging/wilc1000/wilc_spi.c
drivers/staging/wilc1000/wilc_wfi_netdevice.h
drivers/staging/wilc1000/wilc_wlan.h
drivers/staging/wilc1000/wilc_wlan_if.h
drivers/staging/wlan-ng/cfg80211.c
drivers/staging/wlan-ng/p80211metadef.h
drivers/staging/wlan-ng/p80211req.c
drivers/staging/wlan-ng/prism2mib.c
drivers/staging/wlan-ng/prism2usb.c
include/linux/hid-sensor-hub.h
include/linux/iio/consumer.h
tools/iio/lsiio.c

index 5c70ce9c19544565a035d61718011f324403961a..310b1bbef5fcd28c48408af7c26a5ff08fa6064e 100644 (file)
@@ -38,6 +38,7 @@ dallas,ds4510         CPU Supervisor with Nonvolatile Memory and Programmable I/O
 dallas,ds75            Digital Thermometer and Thermostat
 dlg,da9053             DA9053: flexible system level PMIC with multicore support
 dlg,da9063             DA9063: system PMIC for quad-core application processors
+domintech,dmard09      DMARD09: 3-axis Accelerometer
 epson,rx8010           I2C-BUS INTERFACE REAL TIME CLOCK MODULE
 epson,rx8025           High-Stability. I2C-Bus INTERFACE REAL TIME CLOCK MODULE
 epson,rx8581           I2C-BUS INTERFACE REAL TIME CLOCK MODULE
diff --git a/Documentation/devicetree/bindings/iio/accel/dmard06.txt b/Documentation/devicetree/bindings/iio/accel/dmard06.txt
new file mode 100644 (file)
index 0000000..ce105a1
--- /dev/null
@@ -0,0 +1,19 @@
+Device tree bindings for Domintech DMARD05, DMARD06, DMARD07 accelerometers
+
+Required properties:
+ - compatible          : Should be "domintech,dmard05"
+                                or "domintech,dmard06"
+                                or "domintech,dmard07"
+ - reg                 : I2C address of the chip. Should be 0x1c
+
+Example:
+       &i2c1 {
+               /* ... */
+
+               accelerometer@1c {
+                       compatible = "domintech,dmard06";
+                       reg = <0x1c>;
+               };
+
+               /* ... */
+       };
diff --git a/Documentation/devicetree/bindings/iio/accel/kionix,kxsd9.txt b/Documentation/devicetree/bindings/iio/accel/kionix,kxsd9.txt
new file mode 100644 (file)
index 0000000..b25bf3a
--- /dev/null
@@ -0,0 +1,22 @@
+Kionix KXSD9 Accelerometer device tree bindings
+
+Required properties:
+ - compatible:                 should be set to "kionix,kxsd9"
+ - reg:                        i2c slave address
+
+Optional properties:
+ - vdd-supply:         The input supply for VDD
+ - iovdd-supply:       The input supply for IOVDD
+ - interrupts:         The movement detection interrupt
+ - mount-matrix:       See mount-matrix.txt
+
+Example:
+
+kxsd9@18 {
+       compatible = "kionix,kxsd9";
+       reg = <0x18>;
+       interrupt-parent = <&foo>;
+       interrupts = <57 IRQ_TYPE_EDGE_FALLING>;
+       iovdd-supply = <&bar>;
+       vdd-supply = <&baz>;
+};
diff --git a/Documentation/devicetree/bindings/iio/adc/mt6577_auxadc.txt b/Documentation/devicetree/bindings/iio/adc/mt6577_auxadc.txt
new file mode 100644 (file)
index 0000000..68c45cb
--- /dev/null
@@ -0,0 +1,29 @@
+* Mediatek AUXADC - Analog to Digital Converter on Mediatek mobile soc (mt65xx/mt81xx/mt27xx)
+===============
+
+The Auxiliary Analog/Digital Converter (AUXADC) is an ADC found
+in some Mediatek SoCs which among other things measures the temperatures
+in the SoC. It can be used directly with register accesses, but it is also
+used by thermal controller which reads the temperatures from the AUXADC
+directly via its own bus interface. See
+Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
+for the Thermal Controller which holds a phandle to the AUXADC.
+
+Required properties:
+  - compatible: Should be one of:
+    - "mediatek,mt2701-auxadc": For MT2701 family of SoCs
+    - "mediatek,mt8173-auxadc": For MT8173 family of SoCs
+  - reg: Address range of the AUXADC unit.
+  - clocks: Should contain a clock specifier for each entry in clock-names
+  - clock-names: Should contain "main".
+  - #io-channel-cells: Should be 1, see ../iio-bindings.txt
+
+Example:
+
+auxadc: adc@11001000 {
+       compatible = "mediatek,mt2701-auxadc";
+       reg = <0 0x11001000 0 0x1000>;
+       clocks = <&pericfg CLK_PERI_AUXADC>;
+       clock-names = "main";
+       #io-channel-cells = <1>;
+};
diff --git a/Documentation/devicetree/bindings/iio/adc/ti-adc161s626.txt b/Documentation/devicetree/bindings/iio/adc/ti-adc161s626.txt
new file mode 100644 (file)
index 0000000..9ed2315
--- /dev/null
@@ -0,0 +1,16 @@
+* Texas Instruments ADC141S626 and ADC161S626 chips
+
+Required properties:
+ - compatible: Should be "ti,adc141s626" or "ti,adc161s626"
+ - reg: spi chip select number for the device
+
+Recommended properties:
+ - spi-max-frequency: Definition as per
+               Documentation/devicetree/bindings/spi/spi-bus.txt
+
+Example:
+adc@0 {
+       compatible = "ti,adc161s626";
+       reg = <0>;
+       spi-max-frequency = <4300000>;
+};
diff --git a/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt b/Documentation/devicetree/bindings/iio/chemical/atlas,orp-sm.txt
new file mode 100644 (file)
index 0000000..5d8b687
--- /dev/null
@@ -0,0 +1,22 @@
+* Atlas Scientific ORP-SM OEM sensor
+
+https://www.atlas-scientific.com/_files/_datasheets/_oem/ORP_oem_datasheet.pdf
+
+Required properties:
+
+  - compatible: must be "atlas,orp-sm"
+  - reg: the I2C address of the sensor
+  - interrupt-parent: should be the phandle for the interrupt controller
+  - interrupts: the sole interrupt generated by the device
+
+  Refer to interrupt-controller/interrupts.txt for generic interrupt client
+  node bindings.
+
+Example:
+
+atlas@66 {
+       compatible = "atlas,orp-sm";
+       reg = <0x66>;
+       interrupt-parent = <&gpio1>;
+       interrupts = <16 2>;
+};
diff --git a/Documentation/devicetree/bindings/iio/magnetometer/ak8974.txt b/Documentation/devicetree/bindings/iio/magnetometer/ak8974.txt
new file mode 100644 (file)
index 0000000..77d5aba
--- /dev/null
@@ -0,0 +1,29 @@
+* Asahi Kasei AK8974 magnetometer sensor
+
+Required properties:
+
+- compatible : should be "asahi-kasei,ak8974"
+- reg : the I2C address of the magnetometer
+
+Optional properties:
+
+- avdd-supply: regulator supply for the analog voltage
+  (see regulator/regulator.txt)
+- dvdd-supply: regulator supply for the digital voltage
+  (see regulator/regulator.txt)
+- interrupts: data ready (DRDY) and interrupt (INT1) lines
+  from the chip, the DRDY interrupt must be placed first.
+  The interrupts can be triggered on rising or falling
+  edges alike.
+- mount-matrix: an optional 3x3 mounting rotation matrix
+
+Example:
+
+ak8974@0f {
+       compatible = "asahi-kasei,ak8974";
+       reg = <0x0f>;
+       avdd-supply = <&foo_reg>;
+       dvdd-supply = <&bar_reg>;
+       interrupts = <0 IRQ_TYPE_EDGE_RISING>,
+                    <1 IRQ_TYPE_EDGE_RISING>;
+};
diff --git a/Documentation/devicetree/bindings/iio/temperature/maxim_thermocouple.txt b/Documentation/devicetree/bindings/iio/temperature/maxim_thermocouple.txt
new file mode 100644 (file)
index 0000000..28bc5c4
--- /dev/null
@@ -0,0 +1,21 @@
+Maxim thermocouple support
+
+* https://datasheets.maximintegrated.com/en/ds/MAX6675.pdf
+* https://datasheets.maximintegrated.com/en/ds/MAX31855.pdf
+
+Required properties:
+
+       - compatible: must be "maxim,max31855" or "maxim,max6675"
+       - reg: SPI chip select number for the device
+       - spi-max-frequency: must be 4300000
+       - spi-cpha: must be defined for max6675 to enable SPI mode 1
+
+       Refer to spi/spi-bus.txt for generic SPI slave bindings.
+
+Example:
+
+       max31855@0 {
+               compatible = "maxim,max31855";
+               reg = <0>;
+               spi-max-frequency = <4300000>;
+       };
diff --git a/Documentation/devicetree/bindings/soc/mediatek/auxadc.txt b/Documentation/devicetree/bindings/soc/mediatek/auxadc.txt
deleted file mode 100644 (file)
index bdb7829..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-MediaTek AUXADC
-===============
-
-The Auxiliary Analog/Digital Converter (AUXADC) is an ADC found
-in some Mediatek SoCs which among other things measures the temperatures
-in the SoC. It can be used directly with register accesses, but it is also
-used by thermal controller which reads the temperatures from the AUXADC
-directly via its own bus interface. See
-Documentation/devicetree/bindings/thermal/mediatek-thermal.txt
-for the Thermal Controller which holds a phandle to the AUXADC.
-
-Required properties:
-- compatible: Must be "mediatek,mt8173-auxadc"
-- reg: Address range of the AUXADC unit
-
-Example:
-
-auxadc: auxadc@11001000 {
-       compatible = "mediatek,mt8173-auxadc";
-       reg = <0 0x11001000 0 0x1000>;
-};
index 147e3ebe314072c26960feb014df72d00650eb16..47e3adf6dce0a282ba641e362ab5504d531ce6d9 100644 (file)
@@ -75,6 +75,7 @@ digilent      Diglent, Inc.
 dlg    Dialog Semiconductor
 dlink  D-Link Corporation
 dmo    Data Modul AG
+domintech      Domintech Co., Ltd.
 dptechnics     DPTechnics
 dragino        Dragino Technology Co., Limited
 ea     Embedded Artists AB
index 7da11ca92e7db1ae901f22f4b716103c11432ca1..2c62ea5dce5d5e3e8e4b210726ac2f79a3cc1ffe 100644 (file)
@@ -1980,6 +1980,13 @@ S:       Maintained
 F:     drivers/media/i2c/as3645a.c
 F:     include/media/i2c/as3645a.h
 
+ASAHI KASEI AK8974 DRIVER
+M:     Linus Walleij <linus.walleij@linaro.org>
+L:     linux-iio@vger.kernel.org
+W:     http://www.akm.com/
+S:     Supported
+F:     drivers/iio/magnetometer/ak8974.c
+
 ASC7621 HARDWARE MONITOR DRIVER
 M:     George Joseph <george.joseph@fairview5.com>
 L:     linux-hwmon@vger.kernel.org
@@ -7566,6 +7573,12 @@ L:       linux-iio@vger.kernel.org
 S:     Maintained
 F:     drivers/iio/potentiometer/mcp4531.c
 
+MEASUREMENT COMPUTING CIO-DAC IIO DRIVER
+M:     William Breathitt Gray <vilhelm.gray@gmail.com>
+L:     linux-iio@vger.kernel.org
+S:     Maintained
+F:     drivers/iio/dac/cio-dac.c
+
 MEDIA DRIVERS FOR RENESAS - FCP
 M:     Laurent Pinchart <laurent.pinchart@ideasonboard.com>
 L:     linux-media@vger.kernel.org
@@ -11257,6 +11270,7 @@ F:      drivers/staging/media/lirc/
 STAGING - LUSTRE PARALLEL FILESYSTEM
 M:     Oleg Drokin <oleg.drokin@intel.com>
 M:     Andreas Dilger <andreas.dilger@intel.com>
+M:     James Simmons <jsimmons@infradead.org>
 L:     lustre-devel@lists.lustre.org (moderated for non-subscribers)
 W:     http://wiki.lustre.org/
 S:     Maintained
@@ -11283,13 +11297,6 @@ M:     Florian Schilhabel <florian.c.schilhabel@googlemail.com>.
 S:     Odd Fixes
 F:     drivers/staging/rtl8712/
 
-STAGING - REALTEK RTL8723U WIRELESS DRIVER
-M:     Larry Finger <Larry.Finger@lwfinger.net>
-M:     Jes Sorensen <Jes.Sorensen@redhat.com>
-L:     linux-wireless@vger.kernel.org
-S:     Maintained
-F:     drivers/staging/rtl8723au/
-
 STAGING - SILICON MOTION SM750 FRAME BUFFER DRIVER
 M:     Sudip Mukherjee <sudipm.mukherjee@gmail.com>
 M:     Teddy Wang <teddy.wang@siliconmotion.com>
index 16288e777ec3dfdb50db2b133dd44f7e0045d8ad..562af94bec357f09ab1a33394a2ec742f9f88977 100644 (file)
@@ -59,7 +59,6 @@ static struct dentry *binder_debugfs_dir_entry_proc;
 static struct binder_node *binder_context_mgr_node;
 static kuid_t binder_context_mgr_uid = INVALID_UID;
 static int binder_last_id;
-static struct workqueue_struct *binder_deferred_workqueue;
 
 #define BINDER_DEBUG_ENTRY(name) \
 static int binder_##name##_open(struct inode *inode, struct file *file) \
@@ -3227,7 +3226,7 @@ binder_defer_work(struct binder_proc *proc, enum binder_deferred_state defer)
        if (hlist_unhashed(&proc->deferred_work_node)) {
                hlist_add_head(&proc->deferred_work_node,
                                &binder_deferred_list);
-               queue_work(binder_deferred_workqueue, &binder_deferred_work);
+               schedule_work(&binder_deferred_work);
        }
        mutex_unlock(&binder_deferred_lock);
 }
@@ -3679,10 +3678,6 @@ static int __init binder_init(void)
 {
        int ret;
 
-       binder_deferred_workqueue = create_singlethread_workqueue("binder");
-       if (!binder_deferred_workqueue)
-               return -ENOMEM;
-
        binder_debugfs_dir_entry_root = debugfs_create_dir("binder", NULL);
        if (binder_debugfs_dir_entry_root)
                binder_debugfs_dir_entry_proc = debugfs_create_dir("proc",
index 25bcfa0b474fe3bf9c2584ecd4aa799a7262c0c8..2585821b24ab49622618ef99ed520830fe437b39 100644 (file)
@@ -17,4 +17,17 @@ config SYNC_FILE
          Files fds, to the DRM driver for example. More details at
          Documentation/sync_file.txt.
 
+config SW_SYNC
+       bool "Sync File Validation Framework"
+       default n
+       depends on SYNC_FILE
+       depends on DEBUG_FS
+       ---help---
+         A sync object driver that uses a 32bit counter to coordinate
+         synchronization.  Useful when there is no hardware primitive backing
+         the synchronization.
+
+         WARNING: improper use of this can result in deadlocking kernel
+         drivers from userspace. Intended for test and debug only.
+
 endmenu
index f353db213a8143e41b28869183d4f73e6119d54e..210a10bfad2b8173ec419b302da770a52133677f 100644 (file)
@@ -1,2 +1,3 @@
 obj-y := dma-buf.o fence.o reservation.o seqno-fence.o fence-array.o
 obj-$(CONFIG_SYNC_FILE)                += sync_file.o
+obj-$(CONFIG_SW_SYNC)          += sw_sync.o sync_debug.o
diff --git a/drivers/dma-buf/sw_sync.c b/drivers/dma-buf/sw_sync.c
new file mode 100644 (file)
index 0000000..62e8e6d
--- /dev/null
@@ -0,0 +1,375 @@
+/*
+ * Sync File validation framework
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/uaccess.h>
+#include <linux/slab.h>
+#include <linux/sync_file.h>
+
+#include "sync_debug.h"
+
+#define CREATE_TRACE_POINTS
+#include "sync_trace.h"
+
+/*
+ * SW SYNC validation framework
+ *
+ * A sync object driver that uses a 32bit counter to coordinate
+ * synchronization.  Useful when there is no hardware primitive backing
+ * the synchronization.
+ *
+ * To start the framework just open:
+ *
+ * <debugfs>/sync/sw_sync
+ *
+ * That will create a sync timeline, all fences created under this timeline
+ * file descriptor will belong to the this timeline.
+ *
+ * The 'sw_sync' file can be opened many times as to create different
+ * timelines.
+ *
+ * Fences can be created with SW_SYNC_IOC_CREATE_FENCE ioctl with struct
+ * sw_sync_ioctl_create_fence as parameter.
+ *
+ * To increment the timeline counter, SW_SYNC_IOC_INC ioctl should be used
+ * with the increment as u32. This will update the last signaled value
+ * from the timeline and signal any fence that has a seqno smaller or equal
+ * to it.
+ *
+ * struct sw_sync_ioctl_create_fence
+ * @value:     the seqno to initialise the fence with
+ * @name:      the name of the new sync point
+ * @fence:     return the fd of the new sync_file with the created fence
+ */
+struct sw_sync_create_fence_data {
+       __u32   value;
+       char    name[32];
+       __s32   fence; /* fd of new fence */
+};
+
+#define SW_SYNC_IOC_MAGIC      'W'
+
+#define SW_SYNC_IOC_CREATE_FENCE       _IOWR(SW_SYNC_IOC_MAGIC, 0,\
+               struct sw_sync_create_fence_data)
+
+#define SW_SYNC_IOC_INC                        _IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
+
+static const struct fence_ops timeline_fence_ops;
+
+static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
+{
+       if (fence->ops != &timeline_fence_ops)
+               return NULL;
+       return container_of(fence, struct sync_pt, base);
+}
+
+/**
+ * sync_timeline_create() - creates a sync object
+ * @name:      sync_timeline name
+ *
+ * Creates a new sync_timeline. Returns the sync_timeline object or NULL in
+ * case of error.
+ */
+struct sync_timeline *sync_timeline_create(const char *name)
+{
+       struct sync_timeline *obj;
+
+       obj = kzalloc(sizeof(*obj), GFP_KERNEL);
+       if (!obj)
+               return NULL;
+
+       kref_init(&obj->kref);
+       obj->context = fence_context_alloc(1);
+       strlcpy(obj->name, name, sizeof(obj->name));
+
+       INIT_LIST_HEAD(&obj->child_list_head);
+       INIT_LIST_HEAD(&obj->active_list_head);
+       spin_lock_init(&obj->child_list_lock);
+
+       sync_timeline_debug_add(obj);
+
+       return obj;
+}
+
+static void sync_timeline_free(struct kref *kref)
+{
+       struct sync_timeline *obj =
+               container_of(kref, struct sync_timeline, kref);
+
+       sync_timeline_debug_remove(obj);
+
+       kfree(obj);
+}
+
+static void sync_timeline_get(struct sync_timeline *obj)
+{
+       kref_get(&obj->kref);
+}
+
+static void sync_timeline_put(struct sync_timeline *obj)
+{
+       kref_put(&obj->kref, sync_timeline_free);
+}
+
+/**
+ * sync_timeline_signal() - signal a status change on a sync_timeline
+ * @obj:       sync_timeline to signal
+ * @inc:       num to increment on timeline->value
+ *
+ * A sync implementation should call this any time one of it's fences
+ * has signaled or has an error condition.
+ */
+static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
+{
+       unsigned long flags;
+       struct sync_pt *pt, *next;
+
+       trace_sync_timeline(obj);
+
+       spin_lock_irqsave(&obj->child_list_lock, flags);
+
+       obj->value += inc;
+
+       list_for_each_entry_safe(pt, next, &obj->active_list_head,
+                                active_list) {
+               if (fence_is_signaled_locked(&pt->base))
+                       list_del_init(&pt->active_list);
+       }
+
+       spin_unlock_irqrestore(&obj->child_list_lock, flags);
+}
+
+/**
+ * sync_pt_create() - creates a sync pt
+ * @parent:    fence's parent sync_timeline
+ * @size:      size to allocate for this pt
+ * @inc:       value of the fence
+ *
+ * Creates a new sync_pt as a child of @parent.  @size bytes will be
+ * allocated allowing for implementation specific data to be kept after
+ * the generic sync_timeline struct. Returns the sync_pt object or
+ * NULL in case of error.
+ */
+static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
+                            unsigned int value)
+{
+       unsigned long flags;
+       struct sync_pt *pt;
+
+       if (size < sizeof(*pt))
+               return NULL;
+
+       pt = kzalloc(size, GFP_KERNEL);
+       if (!pt)
+               return NULL;
+
+       spin_lock_irqsave(&obj->child_list_lock, flags);
+       sync_timeline_get(obj);
+       fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
+                  obj->context, value);
+       list_add_tail(&pt->child_list, &obj->child_list_head);
+       INIT_LIST_HEAD(&pt->active_list);
+       spin_unlock_irqrestore(&obj->child_list_lock, flags);
+       return pt;
+}
+
+static const char *timeline_fence_get_driver_name(struct fence *fence)
+{
+       return "sw_sync";
+}
+
+static const char *timeline_fence_get_timeline_name(struct fence *fence)
+{
+       struct sync_timeline *parent = fence_parent(fence);
+
+       return parent->name;
+}
+
+static void timeline_fence_release(struct fence *fence)
+{
+       struct sync_pt *pt = fence_to_sync_pt(fence);
+       struct sync_timeline *parent = fence_parent(fence);
+       unsigned long flags;
+
+       spin_lock_irqsave(fence->lock, flags);
+       list_del(&pt->child_list);
+       if (!list_empty(&pt->active_list))
+               list_del(&pt->active_list);
+       spin_unlock_irqrestore(fence->lock, flags);
+
+       sync_timeline_put(parent);
+       fence_free(fence);
+}
+
+static bool timeline_fence_signaled(struct fence *fence)
+{
+       struct sync_timeline *parent = fence_parent(fence);
+
+       return (fence->seqno > parent->value) ? false : true;
+}
+
+static bool timeline_fence_enable_signaling(struct fence *fence)
+{
+       struct sync_pt *pt = fence_to_sync_pt(fence);
+       struct sync_timeline *parent = fence_parent(fence);
+
+       if (timeline_fence_signaled(fence))
+               return false;
+
+       list_add_tail(&pt->active_list, &parent->active_list_head);
+       return true;
+}
+
+static void timeline_fence_value_str(struct fence *fence,
+                                   char *str, int size)
+{
+       snprintf(str, size, "%d", fence->seqno);
+}
+
+static void timeline_fence_timeline_value_str(struct fence *fence,
+                                            char *str, int size)
+{
+       struct sync_timeline *parent = fence_parent(fence);
+
+       snprintf(str, size, "%d", parent->value);
+}
+
+static const struct fence_ops timeline_fence_ops = {
+       .get_driver_name = timeline_fence_get_driver_name,
+       .get_timeline_name = timeline_fence_get_timeline_name,
+       .enable_signaling = timeline_fence_enable_signaling,
+       .signaled = timeline_fence_signaled,
+       .wait = fence_default_wait,
+       .release = timeline_fence_release,
+       .fence_value_str = timeline_fence_value_str,
+       .timeline_value_str = timeline_fence_timeline_value_str,
+};
+
+/*
+ * *WARNING*
+ *
+ * improper use of this can result in deadlocking kernel drivers from userspace.
+ */
+
+/* opening sw_sync create a new sync obj */
+static int sw_sync_debugfs_open(struct inode *inode, struct file *file)
+{
+       struct sync_timeline *obj;
+       char task_comm[TASK_COMM_LEN];
+
+       get_task_comm(task_comm, current);
+
+       obj = sync_timeline_create(task_comm);
+       if (!obj)
+               return -ENOMEM;
+
+       file->private_data = obj;
+
+       return 0;
+}
+
+static int sw_sync_debugfs_release(struct inode *inode, struct file *file)
+{
+       struct sync_timeline *obj = file->private_data;
+
+       smp_wmb();
+
+       sync_timeline_put(obj);
+       return 0;
+}
+
+static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
+                                      unsigned long arg)
+{
+       int fd = get_unused_fd_flags(O_CLOEXEC);
+       int err;
+       struct sync_pt *pt;
+       struct sync_file *sync_file;
+       struct sw_sync_create_fence_data data;
+
+       if (fd < 0)
+               return fd;
+
+       if (copy_from_user(&data, (void __user *)arg, sizeof(data))) {
+               err = -EFAULT;
+               goto err;
+       }
+
+       pt = sync_pt_create(obj, sizeof(*pt), data.value);
+       if (!pt) {
+               err = -ENOMEM;
+               goto err;
+       }
+
+       sync_file = sync_file_create(&pt->base);
+       if (!sync_file) {
+               fence_put(&pt->base);
+               err = -ENOMEM;
+               goto err;
+       }
+
+       data.fence = fd;
+       if (copy_to_user((void __user *)arg, &data, sizeof(data))) {
+               fput(sync_file->file);
+               err = -EFAULT;
+               goto err;
+       }
+
+       fd_install(fd, sync_file->file);
+
+       return 0;
+
+err:
+       put_unused_fd(fd);
+       return err;
+}
+
+static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg)
+{
+       u32 value;
+
+       if (copy_from_user(&value, (void __user *)arg, sizeof(value)))
+               return -EFAULT;
+
+       sync_timeline_signal(obj, value);
+
+       return 0;
+}
+
+static long sw_sync_ioctl(struct file *file, unsigned int cmd,
+                         unsigned long arg)
+{
+       struct sync_timeline *obj = file->private_data;
+
+       switch (cmd) {
+       case SW_SYNC_IOC_CREATE_FENCE:
+               return sw_sync_ioctl_create_fence(obj, arg);
+
+       case SW_SYNC_IOC_INC:
+               return sw_sync_ioctl_inc(obj, arg);
+
+       default:
+               return -ENOTTY;
+       }
+}
+
+const struct file_operations sw_sync_debugfs_fops = {
+       .open           = sw_sync_debugfs_open,
+       .release        = sw_sync_debugfs_release,
+       .unlocked_ioctl = sw_sync_ioctl,
+       .compat_ioctl   = sw_sync_ioctl,
+};
diff --git a/drivers/dma-buf/sync_debug.c b/drivers/dma-buf/sync_debug.c
new file mode 100644 (file)
index 0000000..2dd4c3d
--- /dev/null
@@ -0,0 +1,236 @@
+/*
+ * Sync File validation framework and debug information
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/debugfs.h>
+#include "sync_debug.h"
+
+static struct dentry *dbgfs;
+
+static LIST_HEAD(sync_timeline_list_head);
+static DEFINE_SPINLOCK(sync_timeline_list_lock);
+static LIST_HEAD(sync_file_list_head);
+static DEFINE_SPINLOCK(sync_file_list_lock);
+
+void sync_timeline_debug_add(struct sync_timeline *obj)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&sync_timeline_list_lock, flags);
+       list_add_tail(&obj->sync_timeline_list, &sync_timeline_list_head);
+       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
+}
+
+void sync_timeline_debug_remove(struct sync_timeline *obj)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&sync_timeline_list_lock, flags);
+       list_del(&obj->sync_timeline_list);
+       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
+}
+
+void sync_file_debug_add(struct sync_file *sync_file)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&sync_file_list_lock, flags);
+       list_add_tail(&sync_file->sync_file_list, &sync_file_list_head);
+       spin_unlock_irqrestore(&sync_file_list_lock, flags);
+}
+
+void sync_file_debug_remove(struct sync_file *sync_file)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&sync_file_list_lock, flags);
+       list_del(&sync_file->sync_file_list);
+       spin_unlock_irqrestore(&sync_file_list_lock, flags);
+}
+
+static const char *sync_status_str(int status)
+{
+       if (status == 0)
+               return "signaled";
+
+       if (status > 0)
+               return "active";
+
+       return "error";
+}
+
+static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
+{
+       int status = 1;
+       struct sync_timeline *parent = fence_parent(fence);
+
+       if (fence_is_signaled_locked(fence))
+               status = fence->status;
+
+       seq_printf(s, "  %s%sfence %s",
+                  show ? parent->name : "",
+                  show ? "_" : "",
+                  sync_status_str(status));
+
+       if (status <= 0) {
+               struct timespec64 ts64 =
+                       ktime_to_timespec64(fence->timestamp);
+
+               seq_printf(s, "@%lld.%09ld", (s64)ts64.tv_sec, ts64.tv_nsec);
+       }
+
+       if (fence->ops->timeline_value_str &&
+               fence->ops->fence_value_str) {
+               char value[64];
+               bool success;
+
+               fence->ops->fence_value_str(fence, value, sizeof(value));
+               success = strlen(value);
+
+               if (success) {
+                       seq_printf(s, ": %s", value);
+
+                       fence->ops->timeline_value_str(fence, value,
+                                                      sizeof(value));
+
+                       if (strlen(value))
+                               seq_printf(s, " / %s", value);
+               }
+       }
+
+       seq_puts(s, "\n");
+}
+
+static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
+{
+       struct list_head *pos;
+       unsigned long flags;
+
+       seq_printf(s, "%s: %d\n", obj->name, obj->value);
+
+       spin_lock_irqsave(&obj->child_list_lock, flags);
+       list_for_each(pos, &obj->child_list_head) {
+               struct sync_pt *pt =
+                       container_of(pos, struct sync_pt, child_list);
+               sync_print_fence(s, &pt->base, false);
+       }
+       spin_unlock_irqrestore(&obj->child_list_lock, flags);
+}
+
+static void sync_print_sync_file(struct seq_file *s,
+                                 struct sync_file *sync_file)
+{
+       int i;
+
+       seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name,
+                  sync_status_str(!fence_is_signaled(sync_file->fence)));
+
+       if (fence_is_array(sync_file->fence)) {
+               struct fence_array *array = to_fence_array(sync_file->fence);
+
+               for (i = 0; i < array->num_fences; ++i)
+                       sync_print_fence(s, array->fences[i], true);
+       } else {
+               sync_print_fence(s, sync_file->fence, true);
+       }
+}
+
+static int sync_debugfs_show(struct seq_file *s, void *unused)
+{
+       unsigned long flags;
+       struct list_head *pos;
+
+       seq_puts(s, "objs:\n--------------\n");
+
+       spin_lock_irqsave(&sync_timeline_list_lock, flags);
+       list_for_each(pos, &sync_timeline_list_head) {
+               struct sync_timeline *obj =
+                       container_of(pos, struct sync_timeline,
+                                    sync_timeline_list);
+
+               sync_print_obj(s, obj);
+               seq_puts(s, "\n");
+       }
+       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
+
+       seq_puts(s, "fences:\n--------------\n");
+
+       spin_lock_irqsave(&sync_file_list_lock, flags);
+       list_for_each(pos, &sync_file_list_head) {
+               struct sync_file *sync_file =
+                       container_of(pos, struct sync_file, sync_file_list);
+
+               sync_print_sync_file(s, sync_file);
+               seq_puts(s, "\n");
+       }
+       spin_unlock_irqrestore(&sync_file_list_lock, flags);
+       return 0;
+}
+
+static int sync_info_debugfs_open(struct inode *inode, struct file *file)
+{
+       return single_open(file, sync_debugfs_show, inode->i_private);
+}
+
+static const struct file_operations sync_info_debugfs_fops = {
+       .open           = sync_info_debugfs_open,
+       .read           = seq_read,
+       .llseek         = seq_lseek,
+       .release        = single_release,
+};
+
+static __init int sync_debugfs_init(void)
+{
+       dbgfs = debugfs_create_dir("sync", NULL);
+
+       /*
+        * The debugfs files won't ever get removed and thus, there is
+        * no need to protect it against removal races. The use of
+        * debugfs_create_file_unsafe() is actually safe here.
+        */
+       debugfs_create_file_unsafe("info", 0444, dbgfs, NULL,
+                                  &sync_info_debugfs_fops);
+       debugfs_create_file_unsafe("sw_sync", 0644, dbgfs, NULL,
+                                  &sw_sync_debugfs_fops);
+
+       return 0;
+}
+late_initcall(sync_debugfs_init);
+
+#define DUMP_CHUNK 256
+static char sync_dump_buf[64 * 1024];
+void sync_dump(void)
+{
+       struct seq_file s = {
+               .buf = sync_dump_buf,
+               .size = sizeof(sync_dump_buf) - 1,
+       };
+       int i;
+
+       sync_debugfs_show(&s, NULL);
+
+       for (i = 0; i < s.count; i += DUMP_CHUNK) {
+               if ((s.count - i) > DUMP_CHUNK) {
+                       char c = s.buf[i + DUMP_CHUNK];
+
+                       s.buf[i + DUMP_CHUNK] = 0;
+                       pr_cont("%s", s.buf + i);
+                       s.buf[i + DUMP_CHUNK] = c;
+               } else {
+                       s.buf[s.count] = 0;
+                       pr_cont("%s", s.buf + i);
+               }
+       }
+}
diff --git a/drivers/dma-buf/sync_debug.h b/drivers/dma-buf/sync_debug.h
new file mode 100644 (file)
index 0000000..d269aa6
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+ * Sync File validation framework and debug infomation
+ *
+ * Copyright (C) 2012 Google, Inc.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef _LINUX_SYNC_H
+#define _LINUX_SYNC_H
+
+#include <linux/list.h>
+#include <linux/spinlock.h>
+#include <linux/fence.h>
+
+#include <linux/sync_file.h>
+#include <uapi/linux/sync_file.h>
+
+/**
+ * struct sync_timeline - sync object
+ * @kref:              reference count on fence.
+ * @name:              name of the sync_timeline. Useful for debugging
+ * @child_list_head:   list of children sync_pts for this sync_timeline
+ * @child_list_lock:   lock protecting @child_list_head and fence.status
+ * @active_list_head:  list of active (unsignaled/errored) sync_pts
+ * @sync_timeline_list:        membership in global sync_timeline_list
+ */
+struct sync_timeline {
+       struct kref             kref;
+       char                    name[32];
+
+       /* protected by child_list_lock */
+       u64                     context;
+       int                     value;
+
+       struct list_head        child_list_head;
+       spinlock_t              child_list_lock;
+
+       struct list_head        active_list_head;
+
+       struct list_head        sync_timeline_list;
+};
+
+static inline struct sync_timeline *fence_parent(struct fence *fence)
+{
+       return container_of(fence->lock, struct sync_timeline,
+                           child_list_lock);
+}
+
+/**
+ * struct sync_pt - sync_pt object
+ * @base: base fence object
+ * @child_list: sync timeline child's list
+ * @active_list: sync timeline active child's list
+ */
+struct sync_pt {
+       struct fence base;
+       struct list_head child_list;
+       struct list_head active_list;
+};
+
+#ifdef CONFIG_SW_SYNC
+
+extern const struct file_operations sw_sync_debugfs_fops;
+
+void sync_timeline_debug_add(struct sync_timeline *obj);
+void sync_timeline_debug_remove(struct sync_timeline *obj);
+void sync_file_debug_add(struct sync_file *fence);
+void sync_file_debug_remove(struct sync_file *fence);
+void sync_dump(void);
+
+#else
+# define sync_timeline_debug_add(obj)
+# define sync_timeline_debug_remove(obj)
+# define sync_file_debug_add(fence)
+# define sync_file_debug_remove(fence)
+# define sync_dump()
+#endif
+
+#endif /* _LINUX_SYNC_H */
diff --git a/drivers/dma-buf/sync_trace.h b/drivers/dma-buf/sync_trace.h
new file mode 100644 (file)
index 0000000..d13d59f
--- /dev/null
@@ -0,0 +1,32 @@
+#undef TRACE_SYSTEM
+#define TRACE_INCLUDE_PATH ../../drivers/dma-buf
+#define TRACE_SYSTEM sync_trace
+
+#if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ)
+#define _TRACE_SYNC_H
+
+#include "sync_debug.h"
+#include <linux/tracepoint.h>
+
+TRACE_EVENT(sync_timeline,
+       TP_PROTO(struct sync_timeline *timeline),
+
+       TP_ARGS(timeline),
+
+       TP_STRUCT__entry(
+                       __string(name, timeline->name)
+                       __field(u32, value)
+       ),
+
+       TP_fast_assign(
+                       __assign_str(name, timeline->name);
+                       __entry->value = timeline->value;
+       ),
+
+       TP_printk("name=%s value=%d", __get_str(name), __entry->value)
+);
+
+#endif /* if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ) */
+
+/* This part must be outside protection */
+#include <trace/define_trace.h>
index 78f148ea9d9f92e42164c26fe980e53871ed1815..13b8a18785de977bf8acebcbc4b42cd1d5fa0e98 100644 (file)
@@ -52,6 +52,27 @@ config BMC150_ACCEL_SPI
        tristate
        select REGMAP_SPI
 
+config DMARD06
+       tristate "Domintech DMARD06 Digital Accelerometer Driver"
+       depends on OF || COMPILE_TEST
+       depends on I2C
+       help
+         Say yes here to build support for the Domintech low-g tri-axial
+         digital accelerometers: DMARD05, DMARD06, DMARD07.
+
+         To compile this driver as a module, choose M here: the
+         module will be called dmard06.
+
+config DMARD09
+       tristate "Domintech DMARD09 3-axis Accelerometer Driver"
+       depends on I2C
+       help
+         Say yes here to get support for the Domintech DMARD09 3-axis
+         accelerometer.
+
+         Choosing M will build the driver as a module. If so, the module
+         will be called dmard09.
+
 config HID_SENSOR_ACCEL_3D
        depends on HID_SENSOR_HUB
        select IIO_BUFFER
index 6cedbecca2eed6db31a527dcdfaa4891e2c4dc00..e974841ec9cf994ee11999e442681ac1253a2491 100644 (file)
@@ -8,6 +8,8 @@ obj-$(CONFIG_BMA220) += bma220_spi.o
 obj-$(CONFIG_BMC150_ACCEL) += bmc150-accel-core.o
 obj-$(CONFIG_BMC150_ACCEL_I2C) += bmc150-accel-i2c.o
 obj-$(CONFIG_BMC150_ACCEL_SPI) += bmc150-accel-spi.o
+obj-$(CONFIG_DMARD06)  += dmard06.o
+obj-$(CONFIG_DMARD09)  += dmard09.o
 obj-$(CONFIG_HID_SENSOR_ACCEL_3D) += hid-sensor-accel-3d.o
 obj-$(CONFIG_KXCJK1013) += kxcjk-1013.o
 obj-$(CONFIG_KXSD9)    += kxsd9.o
index e3f88ba5faf33ff4b7179fb96f603d20875f77a6..0890934ef66f66bca02521ffe71192591afe3aa5 100644 (file)
@@ -469,13 +469,14 @@ static int bma180_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
+
                mutex_lock(&data->mutex);
-               if (iio_buffer_enabled(indio_dev)) {
-                       mutex_unlock(&data->mutex);
-                       return -EBUSY;
-               }
                ret = bma180_get_data_reg(data, chan->scan_index);
                mutex_unlock(&data->mutex);
+               iio_device_release_direct_mode(indio_dev);
                if (ret < 0)
                        return ret;
                *val = sign_extend32(ret >> chan->scan_type.shift,
diff --git a/drivers/iio/accel/dmard06.c b/drivers/iio/accel/dmard06.c
new file mode 100644 (file)
index 0000000..656ca8e
--- /dev/null
@@ -0,0 +1,241 @@
+/*
+ * IIO driver for Domintech DMARD06 accelerometer
+ *
+ * Copyright (C) 2016 Aleksei Mamlin <mamlinav@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ */
+
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/iio/iio.h>
+
+#define DMARD06_DRV_NAME               "dmard06"
+
+/* Device data registers */
+#define DMARD06_CHIP_ID_REG            0x0f
+#define DMARD06_TOUT_REG               0x40
+#define DMARD06_XOUT_REG               0x41
+#define DMARD06_YOUT_REG               0x42
+#define DMARD06_ZOUT_REG               0x43
+#define DMARD06_CTRL1_REG              0x44
+
+/* Device ID value */
+#define DMARD05_CHIP_ID                        0x05
+#define DMARD06_CHIP_ID                        0x06
+#define DMARD07_CHIP_ID                        0x07
+
+/* Device values */
+#define DMARD05_AXIS_SCALE_VAL         15625
+#define DMARD06_AXIS_SCALE_VAL         31250
+#define DMARD06_TEMP_CENTER_VAL                25
+#define DMARD06_SIGN_BIT               7
+
+/* Device power modes */
+#define DMARD06_MODE_NORMAL            0x27
+#define DMARD06_MODE_POWERDOWN         0x00
+
+/* Device channels */
+#define DMARD06_ACCEL_CHANNEL(_axis, _reg) {                   \
+       .type = IIO_ACCEL,                                      \
+       .address = _reg,                                        \
+       .channel2 = IIO_MOD_##_axis,                            \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),           \
+       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),   \
+       .modified = 1,                                          \
+}
+
+#define DMARD06_TEMP_CHANNEL(_reg) {                           \
+       .type = IIO_TEMP,                                       \
+       .address = _reg,                                        \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) |          \
+                             BIT(IIO_CHAN_INFO_OFFSET),        \
+}
+
+struct dmard06_data {
+       struct i2c_client *client;
+       u8 chip_id;
+};
+
+static const struct iio_chan_spec dmard06_channels[] = {
+       DMARD06_ACCEL_CHANNEL(X, DMARD06_XOUT_REG),
+       DMARD06_ACCEL_CHANNEL(Y, DMARD06_YOUT_REG),
+       DMARD06_ACCEL_CHANNEL(Z, DMARD06_ZOUT_REG),
+       DMARD06_TEMP_CHANNEL(DMARD06_TOUT_REG),
+};
+
+static int dmard06_read_raw(struct iio_dev *indio_dev,
+                           struct iio_chan_spec const *chan,
+                           int *val, int *val2, long mask)
+{
+       struct dmard06_data *dmard06 = iio_priv(indio_dev);
+       int ret;
+
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+               ret = i2c_smbus_read_byte_data(dmard06->client,
+                                              chan->address);
+               if (ret < 0) {
+                       dev_err(&dmard06->client->dev,
+                               "Error reading data: %d\n", ret);
+                       return ret;
+               }
+
+               *val = sign_extend32(ret, DMARD06_SIGN_BIT);
+
+               if (dmard06->chip_id == DMARD06_CHIP_ID)
+                       *val = *val >> 1;
+
+               switch (chan->type) {
+               case IIO_ACCEL:
+                       return IIO_VAL_INT;
+               case IIO_TEMP:
+                       if (dmard06->chip_id != DMARD06_CHIP_ID)
+                               *val = *val / 2;
+                       return IIO_VAL_INT;
+               default:
+                       return -EINVAL;
+               }
+       case IIO_CHAN_INFO_OFFSET:
+               switch (chan->type) {
+               case IIO_TEMP:
+                       *val = DMARD06_TEMP_CENTER_VAL;
+                       return IIO_VAL_INT;
+               default:
+                       return -EINVAL;
+               }
+       case IIO_CHAN_INFO_SCALE:
+               switch (chan->type) {
+               case IIO_ACCEL:
+                       *val = 0;
+                       if (dmard06->chip_id == DMARD06_CHIP_ID)
+                               *val2 = DMARD06_AXIS_SCALE_VAL;
+                       else
+                               *val2 = DMARD05_AXIS_SCALE_VAL;
+                       return IIO_VAL_INT_PLUS_MICRO;
+               default:
+                       return -EINVAL;
+               }
+       default:
+               return -EINVAL;
+       }
+}
+
+static const struct iio_info dmard06_info = {
+       .driver_module  = THIS_MODULE,
+       .read_raw       = dmard06_read_raw,
+};
+
+static int dmard06_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+{
+       int ret;
+       struct iio_dev *indio_dev;
+       struct dmard06_data *dmard06;
+
+       if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+               dev_err(&client->dev, "I2C check functionality failed\n");
+               return -ENXIO;
+       }
+
+       indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*dmard06));
+       if (!indio_dev) {
+               dev_err(&client->dev, "Failed to allocate iio device\n");
+               return -ENOMEM;
+       }
+
+       dmard06 = iio_priv(indio_dev);
+       dmard06->client = client;
+
+       ret = i2c_smbus_read_byte_data(dmard06->client, DMARD06_CHIP_ID_REG);
+       if (ret < 0) {
+               dev_err(&client->dev, "Error reading chip id: %d\n", ret);
+               return ret;
+       }
+
+       if (ret != DMARD05_CHIP_ID && ret != DMARD06_CHIP_ID &&
+           ret != DMARD07_CHIP_ID) {
+               dev_err(&client->dev, "Invalid chip id: %02d\n", ret);
+               return -ENODEV;
+       }
+
+       dmard06->chip_id = ret;
+
+       i2c_set_clientdata(client, indio_dev);
+       indio_dev->dev.parent = &client->dev;
+       indio_dev->name = DMARD06_DRV_NAME;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       indio_dev->channels = dmard06_channels;
+       indio_dev->num_channels = ARRAY_SIZE(dmard06_channels);
+       indio_dev->info = &dmard06_info;
+
+       return devm_iio_device_register(&client->dev, indio_dev);
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int dmard06_suspend(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct dmard06_data *dmard06 = iio_priv(indio_dev);
+       int ret;
+
+       ret = i2c_smbus_write_byte_data(dmard06->client, DMARD06_CTRL1_REG,
+                                       DMARD06_MODE_POWERDOWN);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static int dmard06_resume(struct device *dev)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev));
+       struct dmard06_data *dmard06 = iio_priv(indio_dev);
+       int ret;
+
+       ret = i2c_smbus_write_byte_data(dmard06->client, DMARD06_CTRL1_REG,
+                                       DMARD06_MODE_NORMAL);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(dmard06_pm_ops, dmard06_suspend, dmard06_resume);
+#define DMARD06_PM_OPS (&dmard06_pm_ops)
+#else
+#define DMARD06_PM_OPS NULL
+#endif
+
+static const struct i2c_device_id dmard06_id[] = {
+       { "dmard05", 0 },
+       { "dmard06", 0 },
+       { "dmard07", 0 },
+       { }
+};
+MODULE_DEVICE_TABLE(i2c, dmard06_id);
+
+static const struct of_device_id dmard06_of_match[] = {
+       { .compatible = "domintech,dmard05" },
+       { .compatible = "domintech,dmard06" },
+       { .compatible = "domintech,dmard07" },
+       { }
+};
+MODULE_DEVICE_TABLE(of, dmard06_of_match);
+
+static struct i2c_driver dmard06_driver = {
+       .probe = dmard06_probe,
+       .id_table = dmard06_id,
+       .driver = {
+               .name = DMARD06_DRV_NAME,
+               .of_match_table = of_match_ptr(dmard06_of_match),
+               .pm = DMARD06_PM_OPS,
+       },
+};
+module_i2c_driver(dmard06_driver);
+
+MODULE_AUTHOR("Aleksei Mamlin <mamlinav@gmail.com>");
+MODULE_DESCRIPTION("Domintech DMARD06 accelerometer driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/iio/accel/dmard09.c b/drivers/iio/accel/dmard09.c
new file mode 100644 (file)
index 0000000..d3a28f9
--- /dev/null
@@ -0,0 +1,157 @@
+/*
+ * IIO driver for the 3-axis accelerometer Domintech DMARD09.
+ *
+ * Copyright (c) 2016, Jelle van der Waa <jelle@vdwaa.nl>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+
+#include <asm/unaligned.h>
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/iio/iio.h>
+
+#define DMARD09_DRV_NAME       "dmard09"
+
+#define DMARD09_REG_CHIPID      0x18
+#define DMARD09_REG_STAT       0x0A
+#define DMARD09_REG_X          0x0C
+#define DMARD09_REG_Y          0x0E
+#define DMARD09_REG_Z          0x10
+#define DMARD09_CHIPID         0x95
+
+#define DMARD09_BUF_LEN 8
+#define DMARD09_AXIS_X 0
+#define DMARD09_AXIS_Y 1
+#define DMARD09_AXIS_Z 2
+#define DMARD09_AXIS_X_OFFSET ((DMARD09_AXIS_X + 1) * 2)
+#define DMARD09_AXIS_Y_OFFSET ((DMARD09_AXIS_Y + 1 )* 2)
+#define DMARD09_AXIS_Z_OFFSET ((DMARD09_AXIS_Z + 1) * 2)
+
+struct dmard09_data {
+       struct i2c_client *client;
+};
+
+#define DMARD09_CHANNEL(_axis, offset) {                       \
+       .type = IIO_ACCEL,                                      \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),           \
+       .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE),   \
+       .modified = 1,                                          \
+       .address = offset,                                      \
+       .channel2 = IIO_MOD_##_axis,                            \
+}
+
+static const struct iio_chan_spec dmard09_channels[] = {
+       DMARD09_CHANNEL(X, DMARD09_AXIS_X_OFFSET),
+       DMARD09_CHANNEL(Y, DMARD09_AXIS_Y_OFFSET),
+       DMARD09_CHANNEL(Z, DMARD09_AXIS_Z_OFFSET),
+};
+
+static int dmard09_read_raw(struct iio_dev *indio_dev,
+                           struct iio_chan_spec const *chan,
+                           int *val, int *val2, long mask)
+{
+       struct dmard09_data *data = iio_priv(indio_dev);
+       u8 buf[DMARD09_BUF_LEN];
+       int ret;
+       s16 accel;
+
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+               /*
+                * Read from the DMAR09_REG_STAT register, since the chip
+                * caches reads from the individual X, Y, Z registers.
+                */
+               ret = i2c_smbus_read_i2c_block_data(data->client,
+                                                   DMARD09_REG_STAT,
+                                                   DMARD09_BUF_LEN, buf);
+               if (ret < 0) {
+                       dev_err(&data->client->dev, "Error reading reg %d\n",
+                               DMARD09_REG_STAT);
+                       return ret;
+               }
+
+               accel = get_unaligned_le16(&buf[chan->address]);
+
+               /* Remove lower 3 bits and sign extend */
+               accel <<= 4;
+               accel >>= 7;
+
+               *val = accel;
+
+               return IIO_VAL_INT;
+       default:
+               return -EINVAL;
+       }
+}
+
+static const struct iio_info dmard09_info = {
+       .driver_module  = THIS_MODULE,
+       .read_raw       = dmard09_read_raw,
+};
+
+static int dmard09_probe(struct i2c_client *client,
+                       const struct i2c_device_id *id)
+{
+       int ret;
+       struct iio_dev *indio_dev;
+       struct dmard09_data *data;
+
+       indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
+       if (!indio_dev) {
+               dev_err(&client->dev, "iio allocation failed\n");
+               return -ENOMEM;
+       }
+
+       data = iio_priv(indio_dev);
+       data->client = client;
+
+       ret = i2c_smbus_read_byte_data(data->client, DMARD09_REG_CHIPID);
+       if (ret < 0) {
+               dev_err(&client->dev, "Error reading chip id %d\n", ret);
+               return ret;
+       }
+
+       if (ret != DMARD09_CHIPID) {
+               dev_err(&client->dev, "Invalid chip id %d\n", ret);
+               return -ENODEV;
+       }
+
+       i2c_set_clientdata(client, indio_dev);
+       indio_dev->dev.parent = &client->dev;
+       indio_dev->name = DMARD09_DRV_NAME;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       indio_dev->channels = dmard09_channels;
+       indio_dev->num_channels = ARRAY_SIZE(dmard09_channels);
+       indio_dev->info = &dmard09_info;
+
+       return devm_iio_device_register(&client->dev, indio_dev);
+}
+
+static const struct i2c_device_id dmard09_id[] = {
+       { "dmard09", 0},
+       { },
+};
+
+MODULE_DEVICE_TABLE(i2c, dmard09_id);
+
+static struct i2c_driver dmard09_driver = {
+       .driver = {
+               .name = DMARD09_DRV_NAME
+       },
+       .probe = dmard09_probe,
+       .id_table = dmard09_id,
+};
+
+module_i2c_driver(dmard09_driver);
+
+MODULE_AUTHOR("Jelle van der Waa <jelle@vdwaa.nl>");
+MODULE_DESCRIPTION("DMARD09 3-axis accelerometer driver");
+MODULE_LICENSE("GPL");
index 765a72362dc61e37d32ad7cf75e805fcba1cc8a1..3f968c46e6677c416440ed581a4a260239214662 100644 (file)
@@ -1392,6 +1392,7 @@ static const struct acpi_device_id kx_acpi_match[] = {
        {"KXCJ1013", KXCJK1013},
        {"KXCJ1008", KXCJ91008},
        {"KXCJ9000", KXCJ91008},
+       {"KIOX000A", KXCJ91008},
        {"KXTJ1009", KXTJ21009},
        {"SMO8500",  KXCJ91008},
        { },
index 767577298ee3bd9f2cc06814f91a889d503aa589..586830ec880052a8408fc882ff4e71d403c8bb84 100644 (file)
@@ -317,6 +317,19 @@ config MCP3422
          This driver can also be built as a module. If so, the module will be
          called mcp3422.
 
+config MEDIATEK_MT6577_AUXADC
+        tristate "MediaTek AUXADC driver"
+        depends on ARCH_MEDIATEK || COMPILE_TEST
+        depends on HAS_IOMEM
+        help
+          Say yes here to enable support for MediaTek mt65xx AUXADC.
+
+          The driver supports immediate mode operation to read from one of sixteen
+          channels (external or internal).
+
+          This driver can also be built as a module. If so, the module will be
+          called mt6577_auxadc.
+
 config MEN_Z188_ADC
        tristate "MEN 16z188 ADC IP Core support"
        depends on MCB
@@ -427,6 +440,18 @@ config TI_ADC128S052
          This driver can also be built as a module. If so, the module will be
          called ti-adc128s052.
 
+config TI_ADC161S626
+       tristate "Texas Instruments ADC161S626 1-channel differential ADC"
+       depends on SPI
+       select IIO_BUFFER
+       select IIO_TRIGGERED_BUFFER
+       help
+         If you say yes here you get support for Texas Instruments ADC141S626,
+         and ADC161S626 chips.
+
+         This driver can also be built as a module. If so, the module will be
+         called ti-adc161s626.
+
 config TI_ADS1015
        tristate "Texas Instruments ADS1015 ADC"
        depends on I2C && !SENSORS_ADS1015
index 0ba0d500eedbb4c0b1a2ac8bbef3e4a23741cb35..33254eb96bec024bbea45acd81239e1db833a579 100644 (file)
@@ -31,6 +31,7 @@ obj-$(CONFIG_MAX1027) += max1027.o
 obj-$(CONFIG_MAX1363) += max1363.o
 obj-$(CONFIG_MCP320X) += mcp320x.o
 obj-$(CONFIG_MCP3422) += mcp3422.o
+obj-$(CONFIG_MEDIATEK_MT6577_AUXADC) += mt6577_auxadc.o
 obj-$(CONFIG_MEN_Z188_ADC) += men_z188_adc.o
 obj-$(CONFIG_MXS_LRADC) += mxs-lradc.o
 obj-$(CONFIG_NAU7802) += nau7802.o
@@ -41,6 +42,7 @@ obj-$(CONFIG_ROCKCHIP_SARADC) += rockchip_saradc.o
 obj-$(CONFIG_TI_ADC081C) += ti-adc081c.o
 obj-$(CONFIG_TI_ADC0832) += ti-adc0832.o
 obj-$(CONFIG_TI_ADC128S052) += ti-adc128s052.o
+obj-$(CONFIG_TI_ADC161S626) += ti-adc161s626.o
 obj-$(CONFIG_TI_ADS1015) += ti-ads1015.o
 obj-$(CONFIG_TI_ADS8688) += ti-ads8688.o
 obj-$(CONFIG_TI_AM335X_ADC) += ti_am335x_adc.o
index 10ec8fce395fc974dc9befc7cafc1900e9bf1a8b..e399bf04c73ad283702e1e1432bb7bbb4f1a65d0 100644 (file)
@@ -239,16 +239,16 @@ static int ad7298_read_raw(struct iio_dev *indio_dev,
 
        switch (m) {
        case IIO_CHAN_INFO_RAW:
-               mutex_lock(&indio_dev->mlock);
-               if (indio_dev->currentmode == INDIO_BUFFER_TRIGGERED) {
-                       ret = -EBUSY;
-               } else {
-                       if (chan->address == AD7298_CH_TEMP)
-                               ret = ad7298_scan_temp(st, val);
-                       else
-                               ret = ad7298_scan_direct(st, chan->address);
-               }
-               mutex_unlock(&indio_dev->mlock);
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
+
+               if (chan->address == AD7298_CH_TEMP)
+                       ret = ad7298_scan_temp(st, val);
+               else
+                       ret = ad7298_scan_direct(st, chan->address);
+
+               iio_device_release_direct_mode(indio_dev);
 
                if (ret < 0)
                        return ret;
index 847789bae821c6870f64ecc504c5b78d79558cdd..e6706a09e100d271ea5528e3c8b8c289d6fca9a3 100644 (file)
@@ -519,11 +519,9 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
        int ret, i;
        unsigned int tmp;
 
-       mutex_lock(&indio_dev->mlock);
-       if (iio_buffer_enabled(indio_dev)) {
-               mutex_unlock(&indio_dev->mlock);
-               return -EBUSY;
-       }
+       ret = iio_device_claim_direct_mode(indio_dev);
+       if (ret)
+               return ret;
 
        switch (mask) {
        case IIO_CHAN_INFO_SCALE:
@@ -548,7 +546,7 @@ static int ad7793_write_raw(struct iio_dev *indio_dev,
                ret = -EINVAL;
        }
 
-       mutex_unlock(&indio_dev->mlock);
+       iio_device_release_direct_mode(indio_dev);
        return ret;
 }
 
diff --git a/drivers/iio/adc/mt6577_auxadc.c b/drivers/iio/adc/mt6577_auxadc.c
new file mode 100644 (file)
index 0000000..2d104c8
--- /dev/null
@@ -0,0 +1,291 @@
+/*
+ * Copyright (c) 2016 MediaTek Inc.
+ * Author: Zhiyong Tao <zhiyong.tao@mediatek.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/iopoll.h>
+#include <linux/io.h>
+#include <linux/iio/iio.h>
+
+/* Register definitions */
+#define MT6577_AUXADC_CON0                    0x00
+#define MT6577_AUXADC_CON1                    0x04
+#define MT6577_AUXADC_CON2                    0x10
+#define MT6577_AUXADC_STA                     BIT(0)
+
+#define MT6577_AUXADC_DAT0                    0x14
+#define MT6577_AUXADC_RDY0                    BIT(12)
+
+#define MT6577_AUXADC_MISC                    0x94
+#define MT6577_AUXADC_PDN_EN                  BIT(14)
+
+#define MT6577_AUXADC_DAT_MASK                0xfff
+#define MT6577_AUXADC_SLEEP_US                1000
+#define MT6577_AUXADC_TIMEOUT_US              10000
+#define MT6577_AUXADC_POWER_READY_MS          1
+#define MT6577_AUXADC_SAMPLE_READY_US         25
+
+struct mt6577_auxadc_device {
+       void __iomem *reg_base;
+       struct clk *adc_clk;
+       struct mutex lock;
+};
+
+#define MT6577_AUXADC_CHANNEL(idx) {                               \
+               .type = IIO_VOLTAGE,                                \
+               .indexed = 1,                                       \
+               .channel = (idx),                                   \
+               .info_mask_separate = BIT(IIO_CHAN_INFO_PROCESSED), \
+}
+
+static const struct iio_chan_spec mt6577_auxadc_iio_channels[] = {
+       MT6577_AUXADC_CHANNEL(0),
+       MT6577_AUXADC_CHANNEL(1),
+       MT6577_AUXADC_CHANNEL(2),
+       MT6577_AUXADC_CHANNEL(3),
+       MT6577_AUXADC_CHANNEL(4),
+       MT6577_AUXADC_CHANNEL(5),
+       MT6577_AUXADC_CHANNEL(6),
+       MT6577_AUXADC_CHANNEL(7),
+       MT6577_AUXADC_CHANNEL(8),
+       MT6577_AUXADC_CHANNEL(9),
+       MT6577_AUXADC_CHANNEL(10),
+       MT6577_AUXADC_CHANNEL(11),
+       MT6577_AUXADC_CHANNEL(12),
+       MT6577_AUXADC_CHANNEL(13),
+       MT6577_AUXADC_CHANNEL(14),
+       MT6577_AUXADC_CHANNEL(15),
+};
+
+static inline void mt6577_auxadc_mod_reg(void __iomem *reg,
+                                        u32 or_mask, u32 and_mask)
+{
+       u32 val;
+
+       val = readl(reg);
+       val |= or_mask;
+       val &= ~and_mask;
+       writel(val, reg);
+}
+
+static int mt6577_auxadc_read(struct iio_dev *indio_dev,
+                             struct iio_chan_spec const *chan)
+{
+       u32 val;
+       void __iomem *reg_channel;
+       int ret;
+       struct mt6577_auxadc_device *adc_dev = iio_priv(indio_dev);
+
+       reg_channel = adc_dev->reg_base + MT6577_AUXADC_DAT0 +
+                     chan->channel * 0x04;
+
+       mutex_lock(&adc_dev->lock);
+
+       mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_CON1,
+                             0, 1 << chan->channel);
+
+       /* read channel and make sure old ready bit == 0 */
+       ret = readl_poll_timeout(reg_channel, val,
+                                ((val & MT6577_AUXADC_RDY0) == 0),
+                                MT6577_AUXADC_SLEEP_US,
+                                MT6577_AUXADC_TIMEOUT_US);
+       if (ret < 0) {
+               dev_err(indio_dev->dev.parent,
+                       "wait for channel[%d] ready bit clear time out\n",
+                       chan->channel);
+               goto err_timeout;
+       }
+
+       /* set bit to trigger sample */
+       mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_CON1,
+                             1 << chan->channel, 0);
+
+       /* we must delay here for hardware sample channel data */
+       udelay(MT6577_AUXADC_SAMPLE_READY_US);
+
+       /* check MTK_AUXADC_CON2 if auxadc is idle */
+       ret = readl_poll_timeout(adc_dev->reg_base + MT6577_AUXADC_CON2, val,
+                                ((val & MT6577_AUXADC_STA) == 0),
+                                MT6577_AUXADC_SLEEP_US,
+                                MT6577_AUXADC_TIMEOUT_US);
+       if (ret < 0) {
+               dev_err(indio_dev->dev.parent,
+                       "wait for auxadc idle time out\n");
+               goto err_timeout;
+       }
+
+       /* read channel and make sure ready bit == 1 */
+       ret = readl_poll_timeout(reg_channel, val,
+                                ((val & MT6577_AUXADC_RDY0) != 0),
+                                MT6577_AUXADC_SLEEP_US,
+                                MT6577_AUXADC_TIMEOUT_US);
+       if (ret < 0) {
+               dev_err(indio_dev->dev.parent,
+                       "wait for channel[%d] data ready time out\n",
+                       chan->channel);
+               goto err_timeout;
+       }
+
+       /* read data */
+       val = readl(reg_channel) & MT6577_AUXADC_DAT_MASK;
+
+       mutex_unlock(&adc_dev->lock);
+
+       return val;
+
+err_timeout:
+
+       mutex_unlock(&adc_dev->lock);
+
+       return -ETIMEDOUT;
+}
+
+static int mt6577_auxadc_read_raw(struct iio_dev *indio_dev,
+                                 struct iio_chan_spec const *chan,
+                                 int *val,
+                                 int *val2,
+                                 long info)
+{
+       switch (info) {
+       case IIO_CHAN_INFO_PROCESSED:
+               *val = mt6577_auxadc_read(indio_dev, chan);
+               if (*val < 0) {
+                       dev_err(indio_dev->dev.parent,
+                               "failed to sample data on channel[%d]\n",
+                               chan->channel);
+                       return *val;
+               }
+               return IIO_VAL_INT;
+
+       default:
+               return -EINVAL;
+       }
+}
+
+static const struct iio_info mt6577_auxadc_info = {
+       .driver_module = THIS_MODULE,
+       .read_raw = &mt6577_auxadc_read_raw,
+};
+
+static int mt6577_auxadc_probe(struct platform_device *pdev)
+{
+       struct mt6577_auxadc_device *adc_dev;
+       unsigned long adc_clk_rate;
+       struct resource *res;
+       struct iio_dev *indio_dev;
+       int ret;
+
+       indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*adc_dev));
+       if (!indio_dev)
+               return -ENOMEM;
+
+       adc_dev = iio_priv(indio_dev);
+       indio_dev->dev.parent = &pdev->dev;
+       indio_dev->name = dev_name(&pdev->dev);
+       indio_dev->info = &mt6577_auxadc_info;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       indio_dev->channels = mt6577_auxadc_iio_channels;
+       indio_dev->num_channels = ARRAY_SIZE(mt6577_auxadc_iio_channels);
+
+       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+       adc_dev->reg_base = devm_ioremap_resource(&pdev->dev, res);
+       if (IS_ERR(adc_dev->reg_base)) {
+               dev_err(&pdev->dev, "failed to get auxadc base address\n");
+               return PTR_ERR(adc_dev->reg_base);
+       }
+
+       adc_dev->adc_clk = devm_clk_get(&pdev->dev, "main");
+       if (IS_ERR(adc_dev->adc_clk)) {
+               dev_err(&pdev->dev, "failed to get auxadc clock\n");
+               return PTR_ERR(adc_dev->adc_clk);
+       }
+
+       ret = clk_prepare_enable(adc_dev->adc_clk);
+       if (ret) {
+               dev_err(&pdev->dev, "failed to enable auxadc clock\n");
+               return ret;
+       }
+
+       adc_clk_rate = clk_get_rate(adc_dev->adc_clk);
+       if (!adc_clk_rate) {
+               ret = -EINVAL;
+               dev_err(&pdev->dev, "null clock rate\n");
+               goto err_disable_clk;
+       }
+
+       mutex_init(&adc_dev->lock);
+
+       mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
+                             MT6577_AUXADC_PDN_EN, 0);
+       mdelay(MT6577_AUXADC_POWER_READY_MS);
+
+       platform_set_drvdata(pdev, indio_dev);
+
+       ret = iio_device_register(indio_dev);
+       if (ret < 0) {
+               dev_err(&pdev->dev, "failed to register iio device\n");
+               goto err_power_off;
+       }
+
+       return 0;
+
+err_power_off:
+       mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
+                             0, MT6577_AUXADC_PDN_EN);
+err_disable_clk:
+       clk_disable_unprepare(adc_dev->adc_clk);
+       return ret;
+}
+
+static int mt6577_auxadc_remove(struct platform_device *pdev)
+{
+       struct iio_dev *indio_dev = platform_get_drvdata(pdev);
+       struct mt6577_auxadc_device *adc_dev = iio_priv(indio_dev);
+
+       iio_device_unregister(indio_dev);
+
+       mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC,
+                             0, MT6577_AUXADC_PDN_EN);
+
+       clk_disable_unprepare(adc_dev->adc_clk);
+
+       return 0;
+}
+
+static const struct of_device_id mt6577_auxadc_of_match[] = {
+       { .compatible = "mediatek,mt2701-auxadc", },
+       { .compatible = "mediatek,mt8173-auxadc", },
+       { }
+};
+MODULE_DEVICE_TABLE(of, mt6577_auxadc_of_match);
+
+static struct platform_driver mt6577_auxadc_driver = {
+       .driver = {
+               .name   = "mt6577-auxadc",
+               .of_match_table = mt6577_auxadc_of_match,
+       },
+       .probe  = mt6577_auxadc_probe,
+       .remove = mt6577_auxadc_remove,
+};
+module_platform_driver(mt6577_auxadc_driver);
+
+MODULE_AUTHOR("Zhiyong Tao <zhiyong.tao@mediatek.com>");
+MODULE_DESCRIPTION("MTK AUXADC Device Driver");
+MODULE_LICENSE("GPL v2");
index db9b829ccf0daef20b6d9201deeba23e31b4222f..08f446695f976ce202b1c7e9542b4a120de5e1d1 100644 (file)
@@ -197,7 +197,7 @@ static irqreturn_t nau7802_eoc_trigger(int irq, void *private)
        if (st->conversion_count < NAU7802_MIN_CONVERSIONS)
                st->conversion_count++;
        if (st->conversion_count >= NAU7802_MIN_CONVERSIONS)
-               complete_all(&st->value_ok);
+               complete(&st->value_ok);
 
        return IRQ_HANDLED;
 }
diff --git a/drivers/iio/adc/ti-adc161s626.c b/drivers/iio/adc/ti-adc161s626.c
new file mode 100644 (file)
index 0000000..f94b69f
--- /dev/null
@@ -0,0 +1,248 @@
+/*
+ * ti-adc161s626.c - Texas Instruments ADC161S626 1-channel differential ADC
+ *
+ * ADC Devices Supported:
+ *  adc141s626 - 14-bit ADC
+ *  adc161s626 - 16-bit ADC
+ *
+ * Copyright (C) 2016 Matt Ranostay <mranostay@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/err.h>
+#include <linux/spi/spi.h>
+#include <linux/iio/iio.h>
+#include <linux/iio/trigger.h>
+#include <linux/iio/buffer.h>
+#include <linux/iio/trigger_consumer.h>
+#include <linux/iio/triggered_buffer.h>
+
+#define TI_ADC_DRV_NAME        "ti-adc161s626"
+
+enum {
+       TI_ADC141S626,
+       TI_ADC161S626,
+};
+
+static const struct iio_chan_spec ti_adc141s626_channels[] = {
+       {
+               .type = IIO_VOLTAGE,
+               .channel = 0,
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+               .scan_index = 0,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 14,
+                       .storagebits = 16,
+               },
+       },
+       IIO_CHAN_SOFT_TIMESTAMP(1),
+};
+
+static const struct iio_chan_spec ti_adc161s626_channels[] = {
+       {
+               .type = IIO_VOLTAGE,
+               .channel = 0,
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),
+               .scan_index = 0,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 16,
+                       .storagebits = 16,
+               },
+       },
+       IIO_CHAN_SOFT_TIMESTAMP(1),
+};
+
+struct ti_adc_data {
+       struct iio_dev *indio_dev;
+       struct spi_device *spi;
+       u8 read_size;
+       u8 shift;
+
+       u8 buffer[16] ____cacheline_aligned;
+};
+
+static int ti_adc_read_measurement(struct ti_adc_data *data,
+                                  struct iio_chan_spec const *chan, int *val)
+{
+       int ret;
+
+       switch (data->read_size) {
+       case 2: {
+               __be16 buf;
+
+               ret = spi_read(data->spi, (void *) &buf, 2);
+               if (ret)
+                       return ret;
+
+               *val = be16_to_cpu(buf);
+               break;
+       }
+       case 3: {
+               __be32 buf;
+
+               ret = spi_read(data->spi, (void *) &buf, 3);
+               if (ret)
+                       return ret;
+
+               *val = be32_to_cpu(buf) >> 8;
+               break;
+       }
+       default:
+               return -EINVAL;
+       }
+
+       *val = sign_extend32(*val >> data->shift, chan->scan_type.realbits - 1);
+
+       return 0;
+}
+
+static irqreturn_t ti_adc_trigger_handler(int irq, void *private)
+{
+       struct iio_poll_func *pf = private;
+       struct iio_dev *indio_dev = pf->indio_dev;
+       struct ti_adc_data *data = iio_priv(indio_dev);
+       int ret;
+
+       ret = ti_adc_read_measurement(data, &indio_dev->channels[0],
+                                    (int *) &data->buffer);
+       if (!ret)
+               iio_push_to_buffers_with_timestamp(indio_dev,
+                                       data->buffer,
+                                       iio_get_time_ns(indio_dev));
+
+       iio_trigger_notify_done(indio_dev->trig);
+
+       return IRQ_HANDLED;
+}
+
+static int ti_adc_read_raw(struct iio_dev *indio_dev,
+                          struct iio_chan_spec const *chan,
+                          int *val, int *val2, long mask)
+{
+       struct ti_adc_data *data = iio_priv(indio_dev);
+       int ret;
+
+       if (mask != IIO_CHAN_INFO_RAW)
+               return -EINVAL;
+
+       ret = iio_device_claim_direct_mode(indio_dev);
+       if (ret)
+               return ret;
+
+       ret = ti_adc_read_measurement(data, chan, val);
+       iio_device_release_direct_mode(indio_dev);
+
+       if (!ret)
+               return IIO_VAL_INT;
+
+       return 0;
+}
+
+static const struct iio_info ti_adc_info = {
+       .driver_module = THIS_MODULE,
+       .read_raw = ti_adc_read_raw,
+};
+
+static int ti_adc_probe(struct spi_device *spi)
+{
+       struct iio_dev *indio_dev;
+       struct ti_adc_data *data;
+       int ret;
+
+       indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data));
+       if (!indio_dev)
+               return -ENOMEM;
+
+       indio_dev->info = &ti_adc_info;
+       indio_dev->dev.parent = &spi->dev;
+       indio_dev->dev.of_node = spi->dev.of_node;
+       indio_dev->name = TI_ADC_DRV_NAME;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       spi_set_drvdata(spi, indio_dev);
+
+       data = iio_priv(indio_dev);
+       data->spi = spi;
+
+       switch (spi_get_device_id(spi)->driver_data) {
+       case TI_ADC141S626:
+               indio_dev->channels = ti_adc141s626_channels;
+               indio_dev->num_channels = ARRAY_SIZE(ti_adc141s626_channels);
+               data->shift = 0;
+               data->read_size = 2;
+               break;
+       case TI_ADC161S626:
+               indio_dev->channels = ti_adc161s626_channels;
+               indio_dev->num_channels = ARRAY_SIZE(ti_adc161s626_channels);
+               data->shift = 6;
+               data->read_size = 3;
+               break;
+       }
+
+       ret = iio_triggered_buffer_setup(indio_dev, NULL,
+                                        ti_adc_trigger_handler, NULL);
+       if (ret)
+               return ret;
+
+       ret = iio_device_register(indio_dev);
+       if (ret)
+               goto error_unreg_buffer;
+
+       return 0;
+
+error_unreg_buffer:
+       iio_triggered_buffer_cleanup(indio_dev);
+
+       return ret;
+}
+
+static int ti_adc_remove(struct spi_device *spi)
+{
+       struct iio_dev *indio_dev = spi_get_drvdata(spi);
+
+       iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
+
+       return 0;
+}
+
+static const struct of_device_id ti_adc_dt_ids[] = {
+       { .compatible = "ti,adc141s626", },
+       { .compatible = "ti,adc161s626", },
+       {}
+};
+MODULE_DEVICE_TABLE(of, ti_adc_dt_ids);
+
+static const struct spi_device_id ti_adc_id[] = {
+       {"adc141s626", TI_ADC141S626},
+       {"adc161s626", TI_ADC161S626},
+       {},
+};
+MODULE_DEVICE_TABLE(spi, ti_adc_id);
+
+static struct spi_driver ti_adc_driver = {
+       .driver = {
+               .name   = TI_ADC_DRV_NAME,
+               .of_match_table = of_match_ptr(ti_adc_dt_ids),
+       },
+       .probe          = ti_adc_probe,
+       .remove         = ti_adc_remove,
+       .id_table       = ti_adc_id,
+};
+module_spi_driver(ti_adc_driver);
+
+MODULE_AUTHOR("Matt Ranostay <mranostay@gmail.com>");
+MODULE_DESCRIPTION("Texas Instruments ADC1x1S 1-channel differential ADC");
+MODULE_LICENSE("GPL");
index 323079c3ccce6677492e0855a2e9e20d2a200217..b8f550e47d3da86119038d6e8fb4b32604b57ca7 100644 (file)
@@ -18,6 +18,7 @@ struct iio_cb_buffer {
        int (*cb)(const void *data, void *private);
        void *private;
        struct iio_channel *channels;
+       struct iio_dev *indio_dev;
 };
 
 static struct iio_cb_buffer *buffer_to_cb_buffer(struct iio_buffer *buffer)
@@ -52,7 +53,6 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
 {
        int ret;
        struct iio_cb_buffer *cb_buff;
-       struct iio_dev *indio_dev;
        struct iio_channel *chan;
 
        cb_buff = kzalloc(sizeof(*cb_buff), GFP_KERNEL);
@@ -72,17 +72,17 @@ struct iio_cb_buffer *iio_channel_get_all_cb(struct device *dev,
                goto error_free_cb_buff;
        }
 
-       indio_dev = cb_buff->channels[0].indio_dev;
+       cb_buff->indio_dev = cb_buff->channels[0].indio_dev;
        cb_buff->buffer.scan_mask
-               = kcalloc(BITS_TO_LONGS(indio_dev->masklength), sizeof(long),
-                         GFP_KERNEL);
+               = kcalloc(BITS_TO_LONGS(cb_buff->indio_dev->masklength),
+                         sizeof(long), GFP_KERNEL);
        if (cb_buff->buffer.scan_mask == NULL) {
                ret = -ENOMEM;
                goto error_release_channels;
        }
        chan = &cb_buff->channels[0];
        while (chan->indio_dev) {
-               if (chan->indio_dev != indio_dev) {
+               if (chan->indio_dev != cb_buff->indio_dev) {
                        ret = -EINVAL;
                        goto error_free_scan_mask;
                }
@@ -105,17 +105,14 @@ EXPORT_SYMBOL_GPL(iio_channel_get_all_cb);
 
 int iio_channel_start_all_cb(struct iio_cb_buffer *cb_buff)
 {
-       return iio_update_buffers(cb_buff->channels[0].indio_dev,
-                                 &cb_buff->buffer,
+       return iio_update_buffers(cb_buff->indio_dev, &cb_buff->buffer,
                                  NULL);
 }
 EXPORT_SYMBOL_GPL(iio_channel_start_all_cb);
 
 void iio_channel_stop_all_cb(struct iio_cb_buffer *cb_buff)
 {
-       iio_update_buffers(cb_buff->channels[0].indio_dev,
-                          NULL,
-                          &cb_buff->buffer);
+       iio_update_buffers(cb_buff->indio_dev, NULL, &cb_buff->buffer);
 }
 EXPORT_SYMBOL_GPL(iio_channel_stop_all_cb);
 
@@ -133,6 +130,13 @@ struct iio_channel
 }
 EXPORT_SYMBOL_GPL(iio_channel_cb_get_channels);
 
+struct iio_dev
+*iio_channel_cb_get_iio_dev(const struct iio_cb_buffer *cb_buffer)
+{
+       return cb_buffer->indio_dev;
+}
+EXPORT_SYMBOL_GPL(iio_channel_cb_get_iio_dev);
+
 MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
 MODULE_DESCRIPTION("Industrial I/O callback buffer");
 MODULE_LICENSE("GPL");
index 4bcc025e8c8a5a41c5918bbd86cfb3d668fd7969..cea7f9857a1f7ee920ef6db7eb4aaf8bca32980e 100644 (file)
@@ -16,6 +16,7 @@ config ATLAS_PH_SENSOR
         Atlas Scientific OEM SM sensors:
            * pH SM sensor
            * EC SM sensor
+           * ORP SM sensor
 
         To compile this driver as module, choose M here: the
         module will be called atlas-ph-sensor.
index 407f141a1eee9785435cddb1d27b7922434295f3..bd321b305a0a03a38d2a26ec282eb22e7f37d5b6 100644 (file)
 #define ATLAS_REG_TDS_DATA             0x1c
 #define ATLAS_REG_PSS_DATA             0x20
 
+#define ATLAS_REG_ORP_CALIB_STATUS     0x0d
+#define ATLAS_REG_ORP_DATA             0x0e
+
 #define ATLAS_PH_INT_TIME_IN_US                450000
 #define ATLAS_EC_INT_TIME_IN_US                650000
+#define ATLAS_ORP_INT_TIME_IN_US       450000
 
 enum {
        ATLAS_PH_SM,
        ATLAS_EC_SM,
+       ATLAS_ORP_SM,
 };
 
 struct atlas_data {
@@ -84,26 +89,10 @@ struct atlas_data {
        __be32 buffer[6]; /* 96-bit data + 32-bit pad + 64-bit timestamp */
 };
 
-static const struct regmap_range atlas_volatile_ranges[] = {
-       regmap_reg_range(ATLAS_REG_INT_CONTROL, ATLAS_REG_INT_CONTROL),
-       regmap_reg_range(ATLAS_REG_PH_DATA, ATLAS_REG_PH_DATA + 4),
-       regmap_reg_range(ATLAS_REG_EC_DATA, ATLAS_REG_PSS_DATA + 4),
-};
-
-static const struct regmap_access_table atlas_volatile_table = {
-       .yes_ranges     = atlas_volatile_ranges,
-       .n_yes_ranges   = ARRAY_SIZE(atlas_volatile_ranges),
-};
-
 static const struct regmap_config atlas_regmap_config = {
        .name = ATLAS_REGMAP_NAME,
-
        .reg_bits = 8,
        .val_bits = 8,
-
-       .volatile_table = &atlas_volatile_table,
-       .max_register = ATLAS_REG_PSS_DATA + 4,
-       .cache_type = REGCACHE_RBTREE,
 };
 
 static const struct iio_chan_spec atlas_ph_channels[] = {
@@ -175,6 +164,23 @@ static const struct iio_chan_spec atlas_ec_channels[] = {
        },
 };
 
+static const struct iio_chan_spec atlas_orp_channels[] = {
+       {
+               .type = IIO_VOLTAGE,
+               .address = ATLAS_REG_ORP_DATA,
+               .info_mask_separate =
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+               .scan_index = 0,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 32,
+                       .storagebits = 32,
+                       .endianness = IIO_BE,
+               },
+       },
+       IIO_CHAN_SOFT_TIMESTAMP(1),
+};
+
 static int atlas_check_ph_calibration(struct atlas_data *data)
 {
        struct device *dev = &data->client->dev;
@@ -240,6 +246,22 @@ static int atlas_check_ec_calibration(struct atlas_data *data)
        return 0;
 }
 
+static int atlas_check_orp_calibration(struct atlas_data *data)
+{
+       struct device *dev = &data->client->dev;
+       int ret;
+       unsigned int val;
+
+       ret = regmap_read(data->regmap, ATLAS_REG_ORP_CALIB_STATUS, &val);
+       if (ret)
+               return ret;
+
+       if (!val)
+               dev_warn(dev, "device has not been calibrated\n");
+
+       return 0;
+};
+
 struct atlas_device {
        const struct iio_chan_spec *channels;
        int num_channels;
@@ -264,7 +286,13 @@ static struct atlas_device atlas_devices[] = {
                                .calibration = &atlas_check_ec_calibration,
                                .delay = ATLAS_EC_INT_TIME_IN_US,
        },
-
+       [ATLAS_ORP_SM] = {
+                               .channels = atlas_orp_channels,
+                               .num_channels = 2,
+                               .data_reg = ATLAS_REG_ORP_DATA,
+                               .calibration = &atlas_check_orp_calibration,
+                               .delay = ATLAS_ORP_INT_TIME_IN_US,
+       },
 };
 
 static int atlas_set_powermode(struct atlas_data *data, int on)
@@ -402,15 +430,14 @@ static int atlas_read_raw(struct iio_dev *indio_dev,
                case IIO_PH:
                case IIO_CONCENTRATION:
                case IIO_ELECTRICALCONDUCTIVITY:
-                       mutex_lock(&indio_dev->mlock);
+               case IIO_VOLTAGE:
+                       ret = iio_device_claim_direct_mode(indio_dev);
+                       if (ret)
+                               return ret;
 
-                       if (iio_buffer_enabled(indio_dev))
-                               ret = -EBUSY;
-                       else
-                               ret = atlas_read_measurement(data,
-                                                       chan->address, &reg);
+                       ret = atlas_read_measurement(data, chan->address, &reg);
 
-                       mutex_unlock(&indio_dev->mlock);
+                       iio_device_release_direct_mode(indio_dev);
                        break;
                default:
                        ret = -EINVAL;
@@ -440,6 +467,10 @@ static int atlas_read_raw(struct iio_dev *indio_dev,
                        *val = 0; /* 0.000000001 */
                        *val2 = 1000;
                        return IIO_VAL_INT_PLUS_NANO;
+               case IIO_VOLTAGE:
+                       *val = 1; /* 0.1 */
+                       *val2 = 10;
+                       break;
                default:
                        return -EINVAL;
                }
@@ -475,6 +506,7 @@ static const struct iio_info atlas_info = {
 static const struct i2c_device_id atlas_id[] = {
        { "atlas-ph-sm", ATLAS_PH_SM},
        { "atlas-ec-sm", ATLAS_EC_SM},
+       { "atlas-orp-sm", ATLAS_ORP_SM},
        {}
 };
 MODULE_DEVICE_TABLE(i2c, atlas_id);
@@ -482,6 +514,7 @@ MODULE_DEVICE_TABLE(i2c, atlas_id);
 static const struct of_device_id atlas_dt_ids[] = {
        { .compatible = "atlas,ph-sm", .data = (void *)ATLAS_PH_SM, },
        { .compatible = "atlas,ec-sm", .data = (void *)ATLAS_EC_SM, },
+       { .compatible = "atlas,orp-sm", .data = (void *)ATLAS_ORP_SM, },
        { }
 };
 MODULE_DEVICE_TABLE(of, atlas_dt_ids);
index 5b41f9d0d4f3d805b927a6f3bcee9cb85ece1e3f..5264ed6e03e5bca576d6e2db4734845e8c8b9c7d 100644 (file)
@@ -122,6 +122,14 @@ int hid_sensor_power_state(struct hid_sensor_common *st, bool state)
 #endif
 }
 
+static void hid_sensor_set_power_work(struct work_struct *work)
+{
+       struct hid_sensor_common *attrb = container_of(work,
+                                                      struct hid_sensor_common,
+                                                      work);
+       _hid_sensor_power_state(attrb, true);
+}
+
 static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
                                                bool state)
 {
@@ -130,6 +138,7 @@ static int hid_sensor_data_rdy_trigger_set_state(struct iio_trigger *trig,
 
 void hid_sensor_remove_trigger(struct hid_sensor_common *attrb)
 {
+       cancel_work_sync(&attrb->work);
        iio_trigger_unregister(attrb->trigger);
        iio_trigger_free(attrb->trigger);
 }
@@ -170,6 +179,9 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name,
                goto error_unreg_trigger;
 
        iio_device_set_drvdata(indio_dev, attrb);
+
+       INIT_WORK(&attrb->work, hid_sensor_set_power_work);
+
        pm_suspend_ignore_children(&attrb->pdev->dev, true);
        pm_runtime_enable(&attrb->pdev->dev);
        /* Default to 3 seconds, but can be changed from sysfs */
@@ -202,7 +214,15 @@ static int hid_sensor_resume(struct device *dev)
        struct platform_device *pdev = to_platform_device(dev);
        struct iio_dev *indio_dev = platform_get_drvdata(pdev);
        struct hid_sensor_common *attrb = iio_device_get_drvdata(indio_dev);
+       schedule_work(&attrb->work);
+       return 0;
+}
 
+static int hid_sensor_runtime_resume(struct device *dev)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct iio_dev *indio_dev = platform_get_drvdata(pdev);
+       struct hid_sensor_common *attrb = iio_device_get_drvdata(indio_dev);
        return _hid_sensor_power_state(attrb, true);
 }
 
@@ -211,7 +231,7 @@ static int hid_sensor_resume(struct device *dev)
 const struct dev_pm_ops hid_sensor_pm_ops = {
        SET_SYSTEM_SLEEP_PM_OPS(hid_sensor_suspend, hid_sensor_resume)
        SET_RUNTIME_PM_OPS(hid_sensor_suspend,
-                          hid_sensor_resume, NULL)
+                          hid_sensor_runtime_resume, NULL)
 };
 EXPORT_SYMBOL(hid_sensor_pm_ops);
 
index ca814479fadfa0773fd7bb580690b91b745d5349..b9f04424919473ffdef97b3653af761bb7db3707 100644 (file)
@@ -181,6 +181,15 @@ config AD7303
          To compile this driver as module choose M here: the module will be called
          ad7303.
 
+config CIO_DAC
+       tristate "Measurement Computing CIO-DAC IIO driver"
+       depends on X86 && ISA_BUS_API
+       help
+         Say yes here to build support for the Measurement Computing CIO-DAC
+         analog output device family (CIO-DAC16, CIO-DAC08, PC104-DAC06). The
+         base port addresses for the devices may be configured via the base
+         array module parameter.
+
 config LPC18XX_DAC
        tristate "NXP LPC18xx DAC driver"
        depends on ARCH_LPC18XX || COMPILE_TEST
index 8b78d5ca9b11c1d266f946e9ed144546cb9cb4af..b1a120612462195277aaf8407da2fcfd5fa20eab 100644 (file)
@@ -20,6 +20,7 @@ obj-$(CONFIG_AD5764) += ad5764.o
 obj-$(CONFIG_AD5791) += ad5791.o
 obj-$(CONFIG_AD5686) += ad5686.o
 obj-$(CONFIG_AD7303) += ad7303.o
+obj-$(CONFIG_CIO_DAC) += cio-dac.o
 obj-$(CONFIG_LPC18XX_DAC) += lpc18xx_dac.o
 obj-$(CONFIG_M62332) += m62332.o
 obj-$(CONFIG_MAX517) += max517.o
diff --git a/drivers/iio/dac/cio-dac.c b/drivers/iio/dac/cio-dac.c
new file mode 100644 (file)
index 0000000..5a743e2
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * IIO driver for the Measurement Computing CIO-DAC
+ * Copyright (C) 2016 William Breathitt Gray
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2, as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * This driver supports the following Measurement Computing devices: CIO-DAC16,
+ * CIO-DAC06, and PC104-DAC06.
+ */
+#include <linux/bitops.h>
+#include <linux/device.h>
+#include <linux/errno.h>
+#include <linux/iio/iio.h>
+#include <linux/iio/types.h>
+#include <linux/io.h>
+#include <linux/ioport.h>
+#include <linux/isa.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+
+#define CIO_DAC_NUM_CHAN 16
+
+#define CIO_DAC_CHAN(chan) {                           \
+       .type = IIO_VOLTAGE,                            \
+       .channel = chan,                                \
+       .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),   \
+       .indexed = 1,                                   \
+       .output = 1                                     \
+}
+
+#define CIO_DAC_EXTENT 32
+
+static unsigned int base[max_num_isa_dev(CIO_DAC_EXTENT)];
+static unsigned int num_cio_dac;
+module_param_array(base, uint, &num_cio_dac, 0);
+MODULE_PARM_DESC(base, "Measurement Computing CIO-DAC base addresses");
+
+/**
+ * struct cio_dac_iio - IIO device private data structure
+ * @chan_out_states:   channels' output states
+ * @base:              base port address of the IIO device
+ */
+struct cio_dac_iio {
+       int chan_out_states[CIO_DAC_NUM_CHAN];
+       unsigned int base;
+};
+
+static int cio_dac_read_raw(struct iio_dev *indio_dev,
+       struct iio_chan_spec const *chan, int *val, int *val2, long mask)
+{
+       struct cio_dac_iio *const priv = iio_priv(indio_dev);
+
+       if (mask != IIO_CHAN_INFO_RAW)
+               return -EINVAL;
+
+       *val = priv->chan_out_states[chan->channel];
+
+       return IIO_VAL_INT;
+}
+
+static int cio_dac_write_raw(struct iio_dev *indio_dev,
+       struct iio_chan_spec const *chan, int val, int val2, long mask)
+{
+       struct cio_dac_iio *const priv = iio_priv(indio_dev);
+       const unsigned int chan_addr_offset = 2 * chan->channel;
+
+       if (mask != IIO_CHAN_INFO_RAW)
+               return -EINVAL;
+
+       /* DAC can only accept up to a 16-bit value */
+       if ((unsigned int)val > 65535)
+               return -EINVAL;
+
+       priv->chan_out_states[chan->channel] = val;
+       outw(val, priv->base + chan_addr_offset);
+
+       return 0;
+}
+
+static const struct iio_info cio_dac_info = {
+       .driver_module = THIS_MODULE,
+       .read_raw = cio_dac_read_raw,
+       .write_raw = cio_dac_write_raw
+};
+
+static const struct iio_chan_spec cio_dac_channels[CIO_DAC_NUM_CHAN] = {
+       CIO_DAC_CHAN(0), CIO_DAC_CHAN(1), CIO_DAC_CHAN(2), CIO_DAC_CHAN(3),
+       CIO_DAC_CHAN(4), CIO_DAC_CHAN(5), CIO_DAC_CHAN(6), CIO_DAC_CHAN(7),
+       CIO_DAC_CHAN(8), CIO_DAC_CHAN(9), CIO_DAC_CHAN(10), CIO_DAC_CHAN(11),
+       CIO_DAC_CHAN(12), CIO_DAC_CHAN(13), CIO_DAC_CHAN(14), CIO_DAC_CHAN(15)
+};
+
+static int cio_dac_probe(struct device *dev, unsigned int id)
+{
+       struct iio_dev *indio_dev;
+       struct cio_dac_iio *priv;
+       unsigned int i;
+
+       indio_dev = devm_iio_device_alloc(dev, sizeof(*priv));
+       if (!indio_dev)
+               return -ENOMEM;
+
+       if (!devm_request_region(dev, base[id], CIO_DAC_EXTENT,
+               dev_name(dev))) {
+               dev_err(dev, "Unable to request port addresses (0x%X-0x%X)\n",
+                       base[id], base[id] + CIO_DAC_EXTENT);
+               return -EBUSY;
+       }
+
+       indio_dev->info = &cio_dac_info;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       indio_dev->channels = cio_dac_channels;
+       indio_dev->num_channels = CIO_DAC_NUM_CHAN;
+       indio_dev->name = dev_name(dev);
+
+       priv = iio_priv(indio_dev);
+       priv->base = base[id];
+
+       /* initialize DAC outputs to 0V */
+       for (i = 0; i < 32; i += 2)
+               outw(0, base[id] + i);
+
+       return devm_iio_device_register(dev, indio_dev);
+}
+
+static struct isa_driver cio_dac_driver = {
+       .probe = cio_dac_probe,
+       .driver = {
+               .name = "cio-dac"
+       }
+};
+
+module_isa_driver(cio_dac_driver, num_cio_dac);
+
+MODULE_AUTHOR("William Breathitt Gray <vilhelm.gray@gmail.com>");
+MODULE_DESCRIPTION("Measurement Computing CIO-DAC IIO driver");
+MODULE_LICENSE("GPL v2");
index d04124345992c9bfcf857a17cdac19894df21a70..b17e2e2bd4f50736056fbbd3dfa56eafb3308499 100644 (file)
@@ -28,11 +28,11 @@ config HDC100X
        tristate "TI HDC100x relative humidity and temperature sensor"
        depends on I2C
        help
-        Say yes here to build support for the TI HDC100x series of
-        relative humidity and temperature sensors.
+         Say yes here to build support for the Texas Instruments
+         HDC1000 and HDC1008 relative humidity and temperature sensors.
 
-        To compile this driver as a module, choose M here: the module
-        will be called hdc100x.
+         To compile this driver as a module, choose M here: the module
+         will be called hdc100x.
 
 config HTU21
        tristate "Measurement Specialties HTU21 humidity & temperature sensor"
index 3574945183fe8258fcb2bb98d6bc188b9aea5b9e..0db0a0d1bba03db91ddf76f712e7110b43967c86 100644 (file)
@@ -334,11 +334,11 @@ config US5182D
         will be called us5182d.
 
 config VCNL4000
-       tristate "VCNL4000 combined ALS and proximity sensor"
+       tristate "VCNL4000/4010/4020 combined ALS and proximity sensor"
        depends on I2C
        help
-        Say Y here if you want to build a driver for the Vishay VCNL4000
-        combined ambient light and proximity sensor.
+        Say Y here if you want to build a driver for the Vishay VCNL4000,
+        VCNL4010, VCNL4020 combined ambient light and proximity sensor.
 
         To compile this driver as a module, choose M here: the
         module will be called vcnl4000.
index 20c40f7809643342756db86060b98ea6536053e9..18cf2e29e4d5561c94d347ed535ebb9fdcf48788 100644 (file)
@@ -894,7 +894,7 @@ static int us5182d_probe(struct i2c_client *client,
                goto out_err;
 
        if (data->default_continuous) {
-               pm_runtime_set_active(&client->dev);
+               ret = pm_runtime_set_active(&client->dev);
                if (ret < 0)
                        goto out_err;
        }
index c9d85bbc9230059d4483567150b7838f01c65c54..360b6e98137acbfbd604e6492687f0b34f424de5 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * vcnl4000.c - Support for Vishay VCNL4000 combined ambient light and
- * proximity sensor
+ * vcnl4000.c - Support for Vishay VCNL4000/4010/4020 combined ambient
+ * light and proximity sensor
  *
  * Copyright 2012 Peter Meerwald <pmeerw@pmeerw.net>
  *
@@ -13,6 +13,8 @@
  * TODO:
  *   allow to adjust IR current
  *   proximity threshold and event handling
+ *   periodic ALS/proximity measurement (VCNL4010/20)
+ *   interrupts (VCNL4010/20)
  */
 
 #include <linux/module.h>
@@ -24,6 +26,8 @@
 #include <linux/iio/sysfs.h>
 
 #define VCNL4000_DRV_NAME "vcnl4000"
+#define VCNL4000_ID            0x01
+#define VCNL4010_ID            0x02 /* for VCNL4020, VCNL4010 */
 
 #define VCNL4000_COMMAND       0x80 /* Command register */
 #define VCNL4000_PROD_REV      0x81 /* Product ID and Revision ID */
 #define VCNL4000_PS_MOD_ADJ    0x8a /* Proximity modulator timing adjustment */
 
 /* Bit masks for COMMAND register */
-#define VCNL4000_AL_RDY                0x40 /* ALS data ready? */
-#define VCNL4000_PS_RDY                0x20 /* proximity data ready? */
-#define VCNL4000_AL_OD         0x10 /* start on-demand ALS measurement */
-#define VCNL4000_PS_OD         0x08 /* start on-demand proximity measurement */
+#define VCNL4000_AL_RDY                BIT(6) /* ALS data ready? */
+#define VCNL4000_PS_RDY                BIT(5) /* proximity data ready? */
+#define VCNL4000_AL_OD         BIT(4) /* start on-demand ALS measurement */
+#define VCNL4000_PS_OD         BIT(3) /* start on-demand proximity measurement */
 
 struct vcnl4000_data {
        struct i2c_client *client;
+       struct mutex lock;
 };
 
 static const struct i2c_device_id vcnl4000_id[] = {
@@ -59,16 +64,18 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,
        __be16 buf;
        int ret;
 
+       mutex_lock(&data->lock);
+
        ret = i2c_smbus_write_byte_data(data->client, VCNL4000_COMMAND,
                                        req_mask);
        if (ret < 0)
-               return ret;
+               goto fail;
 
        /* wait for data to become ready */
        while (tries--) {
                ret = i2c_smbus_read_byte_data(data->client, VCNL4000_COMMAND);
                if (ret < 0)
-                       return ret;
+                       goto fail;
                if (ret & rdy_mask)
                        break;
                msleep(20); /* measurement takes up to 100 ms */
@@ -77,17 +84,23 @@ static int vcnl4000_measure(struct vcnl4000_data *data, u8 req_mask,
        if (tries < 0) {
                dev_err(&data->client->dev,
                        "vcnl4000_measure() failed, data not ready\n");
-               return -EIO;
+               ret = -EIO;
+               goto fail;
        }
 
        ret = i2c_smbus_read_i2c_block_data(data->client,
                data_reg, sizeof(buf), (u8 *) &buf);
        if (ret < 0)
-               return ret;
+               goto fail;
 
+       mutex_unlock(&data->lock);
        *val = be16_to_cpu(buf);
 
        return 0;
+
+fail:
+       mutex_unlock(&data->lock);
+       return ret;
 }
 
 static const struct iio_chan_spec vcnl4000_channels[] = {
@@ -105,7 +118,7 @@ static int vcnl4000_read_raw(struct iio_dev *indio_dev,
                                struct iio_chan_spec const *chan,
                                int *val, int *val2, long mask)
 {
-       int ret = -EINVAL;
+       int ret;
        struct vcnl4000_data *data = iio_priv(indio_dev);
 
        switch (mask) {
@@ -117,32 +130,27 @@ static int vcnl4000_read_raw(struct iio_dev *indio_dev,
                                VCNL4000_AL_RESULT_HI, val);
                        if (ret < 0)
                                return ret;
-                       ret = IIO_VAL_INT;
-                       break;
+                       return IIO_VAL_INT;
                case IIO_PROXIMITY:
                        ret = vcnl4000_measure(data,
                                VCNL4000_PS_OD, VCNL4000_PS_RDY,
                                VCNL4000_PS_RESULT_HI, val);
                        if (ret < 0)
                                return ret;
-                       ret = IIO_VAL_INT;
-                       break;
+                       return IIO_VAL_INT;
                default:
-                       break;
+                       return -EINVAL;
                }
-               break;
        case IIO_CHAN_INFO_SCALE:
-               if (chan->type == IIO_LIGHT) {
-                       *val = 0;
-                       *val2 = 250000;
-                       ret = IIO_VAL_INT_PLUS_MICRO;
-               }
-               break;
+               if (chan->type != IIO_LIGHT)
+                       return -EINVAL;
+
+               *val = 0;
+               *val2 = 250000;
+               return IIO_VAL_INT_PLUS_MICRO;
        default:
-               break;
+               return -EINVAL;
        }
-
-       return ret;
 }
 
 static const struct iio_info vcnl4000_info = {
@@ -155,7 +163,7 @@ static int vcnl4000_probe(struct i2c_client *client,
 {
        struct vcnl4000_data *data;
        struct iio_dev *indio_dev;
-       int ret;
+       int ret, prod_id;
 
        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data));
        if (!indio_dev)
@@ -164,13 +172,19 @@ static int vcnl4000_probe(struct i2c_client *client,
        data = iio_priv(indio_dev);
        i2c_set_clientdata(client, indio_dev);
        data->client = client;
+       mutex_init(&data->lock);
 
        ret = i2c_smbus_read_byte_data(data->client, VCNL4000_PROD_REV);
        if (ret < 0)
                return ret;
 
-       dev_info(&client->dev, "VCNL4000 Ambient light/proximity sensor, Prod %02x, Rev: %02x\n",
-               ret >> 4, ret & 0xf);
+       prod_id = ret >> 4;
+       if (prod_id != VCNL4010_ID && prod_id != VCNL4000_ID)
+               return -ENODEV;
+
+       dev_dbg(&client->dev, "%s Ambient light/proximity sensor, Rev: %02x\n",
+               (prod_id == VCNL4010_ID) ? "VCNL4010/4020" : "VCNL4000",
+               ret & 0xf);
 
        indio_dev->dev.parent = &client->dev;
        indio_dev->info = &vcnl4000_info;
index 1f842abcb4a4db4ff8b9b24159819f2f9a241274..421ad90a5fbe13b7b2969bcbcc5196a91c01d77f 100644 (file)
@@ -5,8 +5,22 @@
 
 menu "Magnetometer sensors"
 
+config AK8974
+       tristate "Asahi Kasei AK8974 3-Axis Magnetometer"
+       depends on I2C
+       depends on OF
+       select REGMAP_I2C
+       select IIO_BUFFER
+       select IIO_TRIGGERED_BUFFER
+       help
+         Say yes here to build support for Asahi Kasei AK8974 or
+         AMI305 I2C-based 3-axis magnetometer chips.
+
+         To compile this driver as a module, choose M here: the module
+         will be called ak8974.
+
 config AK8975
-       tristate "Asahi Kasei AK 3-Axis Magnetometer"
+       tristate "Asahi Kasei AK8975 3-Axis Magnetometer"
        depends on I2C
        depends on GPIOLIB || COMPILE_TEST
        select IIO_BUFFER
index 92a745c9a6e8d5ee483e7f53e602de4dbfcb6c4b..b86d6cb7f285146fe9358e3a3427d705e611fb58 100644 (file)
@@ -3,6 +3,7 @@
 #
 
 # When adding new entries keep the list in alphabetical order
+obj-$(CONFIG_AK8974)   += ak8974.o
 obj-$(CONFIG_AK8975)   += ak8975.o
 obj-$(CONFIG_BMC150_MAGN) += bmc150_magn.o
 obj-$(CONFIG_BMC150_MAGN_I2C) += bmc150_magn_i2c.o
diff --git a/drivers/iio/magnetometer/ak8974.c b/drivers/iio/magnetometer/ak8974.c
new file mode 100644 (file)
index 0000000..e70e4e2
--- /dev/null
@@ -0,0 +1,863 @@
+/*
+ * Driver for the Asahi Kasei EMD Corporation AK8974
+ * and Aichi Steel AMI305 magnetometer chips.
+ * Based on a patch from Samu Onkalo and the AK8975 IIO driver.
+ *
+ * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2010 NVIDIA Corporation.
+ * Copyright (C) 2016 Linaro Ltd.
+ *
+ * Author: Samu Onkalo <samu.p.onkalo@nokia.com>
+ * Author: Linus Walleij <linus.walleij@linaro.org>
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#include <linux/irq.h> /* For irq_get_irq_data() */
+#include <linux/completion.h>
+#include <linux/err.h>
+#include <linux/mutex.h>
+#include <linux/delay.h>
+#include <linux/bitops.h>
+#include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
+#include <linux/pm_runtime.h>
+
+#include <linux/iio/iio.h>
+#include <linux/iio/sysfs.h>
+#include <linux/iio/buffer.h>
+#include <linux/iio/trigger.h>
+#include <linux/iio/trigger_consumer.h>
+#include <linux/iio/triggered_buffer.h>
+
+/*
+ * 16-bit registers are little-endian. LSB is at the address defined below
+ * and MSB is at the next higher address.
+ */
+
+/* These registers are common for AK8974 and AMI305 */
+#define AK8974_SELFTEST                0x0C
+#define AK8974_SELFTEST_IDLE   0x55
+#define AK8974_SELFTEST_OK     0xAA
+
+#define AK8974_INFO            0x0D
+
+#define AK8974_WHOAMI          0x0F
+#define AK8974_WHOAMI_VALUE_AMI305 0x47
+#define AK8974_WHOAMI_VALUE_AK8974 0x48
+
+#define AK8974_DATA_X          0x10
+#define AK8974_DATA_Y          0x12
+#define AK8974_DATA_Z          0x14
+#define AK8974_INT_SRC         0x16
+#define AK8974_STATUS          0x18
+#define AK8974_INT_CLEAR       0x1A
+#define AK8974_CTRL1           0x1B
+#define AK8974_CTRL2           0x1C
+#define AK8974_CTRL3           0x1D
+#define AK8974_INT_CTRL                0x1E
+#define AK8974_INT_THRES       0x26  /* Absolute any axis value threshold */
+#define AK8974_PRESET          0x30
+
+/* AK8974-specific offsets */
+#define AK8974_OFFSET_X                0x20
+#define AK8974_OFFSET_Y                0x22
+#define AK8974_OFFSET_Z                0x24
+/* AMI305-specific offsets */
+#define AMI305_OFFSET_X                0x6C
+#define AMI305_OFFSET_Y                0x72
+#define AMI305_OFFSET_Z                0x78
+
+/* Different temperature registers */
+#define AK8974_TEMP            0x31
+#define AMI305_TEMP            0x60
+
+#define AK8974_INT_X_HIGH      BIT(7) /* Axis over +threshold  */
+#define AK8974_INT_Y_HIGH      BIT(6)
+#define AK8974_INT_Z_HIGH      BIT(5)
+#define AK8974_INT_X_LOW       BIT(4) /* Axis below -threshold */
+#define AK8974_INT_Y_LOW       BIT(3)
+#define AK8974_INT_Z_LOW       BIT(2)
+#define AK8974_INT_RANGE       BIT(1) /* Range overflow (any axis) */
+
+#define AK8974_STATUS_DRDY     BIT(6) /* Data ready */
+#define AK8974_STATUS_OVERRUN  BIT(5) /* Data overrun */
+#define AK8974_STATUS_INT      BIT(4) /* Interrupt occurred */
+
+#define AK8974_CTRL1_POWER     BIT(7) /* 0 = standby; 1 = active */
+#define AK8974_CTRL1_RATE      BIT(4) /* 0 = 10 Hz; 1 = 20 Hz   */
+#define AK8974_CTRL1_FORCE_EN  BIT(1) /* 0 = normal; 1 = force  */
+#define AK8974_CTRL1_MODE2     BIT(0) /* 0 */
+
+#define AK8974_CTRL2_INT_EN    BIT(4)  /* 1 = enable interrupts              */
+#define AK8974_CTRL2_DRDY_EN   BIT(3)  /* 1 = enable data ready signal */
+#define AK8974_CTRL2_DRDY_POL  BIT(2)  /* 1 = data ready active high   */
+#define AK8974_CTRL2_RESDEF    (AK8974_CTRL2_DRDY_POL)
+
+#define AK8974_CTRL3_RESET     BIT(7) /* Software reset                  */
+#define AK8974_CTRL3_FORCE     BIT(6) /* Start forced measurement */
+#define AK8974_CTRL3_SELFTEST  BIT(4) /* Set selftest register   */
+#define AK8974_CTRL3_RESDEF    0x00
+
+#define AK8974_INT_CTRL_XEN    BIT(7) /* Enable interrupt for this axis */
+#define AK8974_INT_CTRL_YEN    BIT(6)
+#define AK8974_INT_CTRL_ZEN    BIT(5)
+#define AK8974_INT_CTRL_XYZEN  (BIT(7)|BIT(6)|BIT(5))
+#define AK8974_INT_CTRL_POL    BIT(3) /* 0 = active low; 1 = active high */
+#define AK8974_INT_CTRL_PULSE  BIT(1) /* 0 = latched; 1 = pulse (50 usec) */
+#define AK8974_INT_CTRL_RESDEF (AK8974_INT_CTRL_XYZEN | AK8974_INT_CTRL_POL)
+
+/* The AMI305 has elaborate FW version and serial number registers */
+#define AMI305_VER             0xE8
+#define AMI305_SN              0xEA
+
+#define AK8974_MAX_RANGE       2048
+
+#define AK8974_POWERON_DELAY   50
+#define AK8974_ACTIVATE_DELAY  1
+#define AK8974_SELFTEST_DELAY  1
+/*
+ * Set the autosuspend to two orders of magnitude larger than the poweron
+ * delay to make sane reasonable power tradeoff savings (5 seconds in
+ * this case).
+ */
+#define AK8974_AUTOSUSPEND_DELAY 5000
+
+#define AK8974_MEASTIME                3
+
+#define AK8974_PWR_ON          1
+#define AK8974_PWR_OFF         0
+
+/**
+ * struct ak8974 - state container for the AK8974 driver
+ * @i2c: parent I2C client
+ * @orientation: mounting matrix, flipped axis etc
+ * @map: regmap to access the AK8974 registers over I2C
+ * @regs: the avdd and dvdd power regulators
+ * @name: the name of the part
+ * @variant: the whoami ID value (for selecting code paths)
+ * @lock: locks the magnetometer for exclusive use during a measurement
+ * @drdy_irq: uses the DRDY IRQ line
+ * @drdy_complete: completion for DRDY
+ * @drdy_active_low: the DRDY IRQ is active low
+ */
+struct ak8974 {
+       struct i2c_client *i2c;
+       struct iio_mount_matrix orientation;
+       struct regmap *map;
+       struct regulator_bulk_data regs[2];
+       const char *name;
+       u8 variant;
+       struct mutex lock;
+       bool drdy_irq;
+       struct completion drdy_complete;
+       bool drdy_active_low;
+};
+
+static const char ak8974_reg_avdd[] = "avdd";
+static const char ak8974_reg_dvdd[] = "dvdd";
+
+static int ak8974_set_power(struct ak8974 *ak8974, bool mode)
+{
+       int ret;
+       u8 val;
+
+       val = mode ? AK8974_CTRL1_POWER : 0;
+       val |= AK8974_CTRL1_FORCE_EN;
+       ret = regmap_write(ak8974->map, AK8974_CTRL1, val);
+       if (ret < 0)
+               return ret;
+
+       if (mode)
+               msleep(AK8974_ACTIVATE_DELAY);
+
+       return 0;
+}
+
+static int ak8974_reset(struct ak8974 *ak8974)
+{
+       int ret;
+
+       /* Power on to get register access. Sets CTRL1 reg to reset state */
+       ret = ak8974_set_power(ak8974, AK8974_PWR_ON);
+       if (ret)
+               return ret;
+       ret = regmap_write(ak8974->map, AK8974_CTRL2, AK8974_CTRL2_RESDEF);
+       if (ret)
+               return ret;
+       ret = regmap_write(ak8974->map, AK8974_CTRL3, AK8974_CTRL3_RESDEF);
+       if (ret)
+               return ret;
+       ret = regmap_write(ak8974->map, AK8974_INT_CTRL,
+                          AK8974_INT_CTRL_RESDEF);
+       if (ret)
+               return ret;
+
+       /* After reset, power off is default state */
+       return ak8974_set_power(ak8974, AK8974_PWR_OFF);
+}
+
+static int ak8974_configure(struct ak8974 *ak8974)
+{
+       int ret;
+
+       ret = regmap_write(ak8974->map, AK8974_CTRL2, AK8974_CTRL2_DRDY_EN |
+                          AK8974_CTRL2_INT_EN);
+       if (ret)
+               return ret;
+       ret = regmap_write(ak8974->map, AK8974_CTRL3, 0);
+       if (ret)
+               return ret;
+       ret = regmap_write(ak8974->map, AK8974_INT_CTRL, AK8974_INT_CTRL_POL);
+       if (ret)
+               return ret;
+
+       return regmap_write(ak8974->map, AK8974_PRESET, 0);
+}
+
+static int ak8974_trigmeas(struct ak8974 *ak8974)
+{
+       unsigned int clear;
+       u8 mask;
+       u8 val;
+       int ret;
+
+       /* Clear any previous measurement overflow status */
+       ret = regmap_read(ak8974->map, AK8974_INT_CLEAR, &clear);
+       if (ret)
+               return ret;
+
+       /* If we have a DRDY IRQ line, use it */
+       if (ak8974->drdy_irq) {
+               mask = AK8974_CTRL2_INT_EN |
+                       AK8974_CTRL2_DRDY_EN |
+                       AK8974_CTRL2_DRDY_POL;
+               val = AK8974_CTRL2_DRDY_EN;
+
+               if (!ak8974->drdy_active_low)
+                       val |= AK8974_CTRL2_DRDY_POL;
+
+               init_completion(&ak8974->drdy_complete);
+               ret = regmap_update_bits(ak8974->map, AK8974_CTRL2,
+                                        mask, val);
+               if (ret)
+                       return ret;
+       }
+
+       /* Force a measurement */
+       return regmap_update_bits(ak8974->map,
+                                 AK8974_CTRL3,
+                                 AK8974_CTRL3_FORCE,
+                                 AK8974_CTRL3_FORCE);
+}
+
+static int ak8974_await_drdy(struct ak8974 *ak8974)
+{
+       int timeout = 2;
+       unsigned int val;
+       int ret;
+
+       if (ak8974->drdy_irq) {
+               ret = wait_for_completion_timeout(&ak8974->drdy_complete,
+                                       1 + msecs_to_jiffies(1000));
+               if (!ret) {
+                       dev_err(&ak8974->i2c->dev,
+                               "timeout waiting for DRDY IRQ\n");
+                       return -ETIMEDOUT;
+               }
+               return 0;
+       }
+
+       /* Default delay-based poll loop */
+       do {
+               msleep(AK8974_MEASTIME);
+               ret = regmap_read(ak8974->map, AK8974_STATUS, &val);
+               if (ret < 0)
+                       return ret;
+               if (val & AK8974_STATUS_DRDY)
+                       return 0;
+       } while (--timeout);
+       if (!timeout) {
+               dev_err(&ak8974->i2c->dev,
+                       "timeout waiting for DRDY\n");
+               return -ETIMEDOUT;
+       }
+
+       return 0;
+}
+
+static int ak8974_getresult(struct ak8974 *ak8974, s16 *result)
+{
+       unsigned int src;
+       int ret;
+
+       ret = ak8974_await_drdy(ak8974);
+       if (ret)
+               return ret;
+       ret = regmap_read(ak8974->map, AK8974_INT_SRC, &src);
+       if (ret < 0)
+               return ret;
+
+       /* Out of range overflow! Strong magnet close? */
+       if (src & AK8974_INT_RANGE) {
+               dev_err(&ak8974->i2c->dev,
+                       "range overflow in sensor\n");
+               return -ERANGE;
+       }
+
+       ret = regmap_bulk_read(ak8974->map, AK8974_DATA_X, result, 6);
+       if (ret)
+               return ret;
+
+       return ret;
+}
+
+static irqreturn_t ak8974_drdy_irq(int irq, void *d)
+{
+       struct ak8974 *ak8974 = d;
+
+       if (!ak8974->drdy_irq)
+               return IRQ_NONE;
+
+       /* TODO: timestamp here to get good measurement stamps */
+       return IRQ_WAKE_THREAD;
+}
+
+static irqreturn_t ak8974_drdy_irq_thread(int irq, void *d)
+{
+       struct ak8974 *ak8974 = d;
+       unsigned int val;
+       int ret;
+
+       /* Check if this was a DRDY from us */
+       ret = regmap_read(ak8974->map, AK8974_STATUS, &val);
+       if (ret < 0) {
+               dev_err(&ak8974->i2c->dev, "error reading DRDY status\n");
+               return IRQ_HANDLED;
+       }
+       if (val & AK8974_STATUS_DRDY) {
+               /* Yes this was our IRQ */
+               complete(&ak8974->drdy_complete);
+               return IRQ_HANDLED;
+       }
+
+       /* We may be on a shared IRQ, let the next client check */
+       return IRQ_NONE;
+}
+
+static int ak8974_selftest(struct ak8974 *ak8974)
+{
+       struct device *dev = &ak8974->i2c->dev;
+       unsigned int val;
+       int ret;
+
+       ret = regmap_read(ak8974->map, AK8974_SELFTEST, &val);
+       if (ret)
+               return ret;
+       if (val != AK8974_SELFTEST_IDLE) {
+               dev_err(dev, "selftest not idle before test\n");
+               return -EIO;
+       }
+
+       /* Trigger self-test */
+       ret = regmap_update_bits(ak8974->map,
+                       AK8974_CTRL3,
+                       AK8974_CTRL3_SELFTEST,
+                       AK8974_CTRL3_SELFTEST);
+       if (ret) {
+               dev_err(dev, "could not write CTRL3\n");
+               return ret;
+       }
+
+       msleep(AK8974_SELFTEST_DELAY);
+
+       ret = regmap_read(ak8974->map, AK8974_SELFTEST, &val);
+       if (ret)
+               return ret;
+       if (val != AK8974_SELFTEST_OK) {
+               dev_err(dev, "selftest result NOT OK (%02x)\n", val);
+               return -EIO;
+       }
+
+       ret = regmap_read(ak8974->map, AK8974_SELFTEST, &val);
+       if (ret)
+               return ret;
+       if (val != AK8974_SELFTEST_IDLE) {
+               dev_err(dev, "selftest not idle after test (%02x)\n", val);
+               return -EIO;
+       }
+       dev_dbg(dev, "passed self-test\n");
+
+       return 0;
+}
+
+static int ak8974_get_u16_val(struct ak8974 *ak8974, u8 reg, u16 *val)
+{
+       int ret;
+       u16 bulk;
+
+       ret = regmap_bulk_read(ak8974->map, reg, &bulk, 2);
+       if (ret)
+               return ret;
+       *val = le16_to_cpu(bulk);
+
+       return 0;
+}
+
+static int ak8974_detect(struct ak8974 *ak8974)
+{
+       unsigned int whoami;
+       const char *name;
+       int ret;
+       unsigned int fw;
+       u16 sn;
+
+       ret = regmap_read(ak8974->map, AK8974_WHOAMI, &whoami);
+       if (ret)
+               return ret;
+
+       switch (whoami) {
+       case AK8974_WHOAMI_VALUE_AMI305:
+               name = "ami305";
+               ret = regmap_read(ak8974->map, AMI305_VER, &fw);
+               if (ret)
+                       return ret;
+               fw &= 0x7f; /* only bits 0 thru 6 valid */
+               ret = ak8974_get_u16_val(ak8974, AMI305_SN, &sn);
+               if (ret)
+                       return ret;
+               dev_info(&ak8974->i2c->dev,
+                        "detected %s, FW ver %02x, S/N: %04x\n",
+                        name, fw, sn);
+               break;
+       case AK8974_WHOAMI_VALUE_AK8974:
+               name = "ak8974";
+               dev_info(&ak8974->i2c->dev, "detected AK8974\n");
+               break;
+       default:
+               dev_err(&ak8974->i2c->dev, "unsupported device (%02x) ",
+                       whoami);
+               return -ENODEV;
+       }
+
+       ak8974->name = name;
+       ak8974->variant = whoami;
+
+       return 0;
+}
+
+static int ak8974_read_raw(struct iio_dev *indio_dev,
+                          struct iio_chan_spec const *chan,
+                          int *val, int *val2,
+                          long mask)
+{
+       struct ak8974 *ak8974 = iio_priv(indio_dev);
+       s16 hw_values[3];
+       int ret = -EINVAL;
+
+       pm_runtime_get_sync(&ak8974->i2c->dev);
+       mutex_lock(&ak8974->lock);
+
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+               if (chan->address > 2) {
+                       dev_err(&ak8974->i2c->dev, "faulty channel address\n");
+                       ret = -EIO;
+                       goto out_unlock;
+               }
+               ret = ak8974_trigmeas(ak8974);
+               if (ret)
+                       goto out_unlock;
+               ret = ak8974_getresult(ak8974, hw_values);
+               if (ret)
+                       goto out_unlock;
+
+               /*
+                * We read all axes and discard all but one, for optimized
+                * reading, use the triggered buffer.
+                */
+               *val = le16_to_cpu(hw_values[chan->address]);
+
+               ret = IIO_VAL_INT;
+       }
+
+ out_unlock:
+       mutex_unlock(&ak8974->lock);
+       pm_runtime_mark_last_busy(&ak8974->i2c->dev);
+       pm_runtime_put_autosuspend(&ak8974->i2c->dev);
+
+       return ret;
+}
+
+static void ak8974_fill_buffer(struct iio_dev *indio_dev)
+{
+       struct ak8974 *ak8974 = iio_priv(indio_dev);
+       int ret;
+       s16 hw_values[8]; /* Three axes + 64bit padding */
+
+       pm_runtime_get_sync(&ak8974->i2c->dev);
+       mutex_lock(&ak8974->lock);
+
+       ret = ak8974_trigmeas(ak8974);
+       if (ret) {
+               dev_err(&ak8974->i2c->dev, "error triggering measure\n");
+               goto out_unlock;
+       }
+       ret = ak8974_getresult(ak8974, hw_values);
+       if (ret) {
+               dev_err(&ak8974->i2c->dev, "error getting measures\n");
+               goto out_unlock;
+       }
+
+       iio_push_to_buffers_with_timestamp(indio_dev, hw_values,
+                                          iio_get_time_ns(indio_dev));
+
+ out_unlock:
+       mutex_unlock(&ak8974->lock);
+       pm_runtime_mark_last_busy(&ak8974->i2c->dev);
+       pm_runtime_put_autosuspend(&ak8974->i2c->dev);
+}
+
+static irqreturn_t ak8974_handle_trigger(int irq, void *p)
+{
+       const struct iio_poll_func *pf = p;
+       struct iio_dev *indio_dev = pf->indio_dev;
+
+       ak8974_fill_buffer(indio_dev);
+       iio_trigger_notify_done(indio_dev->trig);
+
+       return IRQ_HANDLED;
+}
+
+static const struct iio_mount_matrix *
+ak8974_get_mount_matrix(const struct iio_dev *indio_dev,
+                       const struct iio_chan_spec *chan)
+{
+       struct ak8974 *ak8974 = iio_priv(indio_dev);
+
+       return &ak8974->orientation;
+}
+
+static const struct iio_chan_spec_ext_info ak8974_ext_info[] = {
+       IIO_MOUNT_MATRIX(IIO_SHARED_BY_DIR, ak8974_get_mount_matrix),
+       { },
+};
+
+#define AK8974_AXIS_CHANNEL(axis, index)                               \
+       {                                                               \
+               .type = IIO_MAGN,                                       \
+               .modified = 1,                                          \
+               .channel2 = IIO_MOD_##axis,                             \
+               .info_mask_separate = BIT(IIO_CHAN_INFO_RAW),           \
+               .ext_info = ak8974_ext_info,                            \
+               .address = index,                                       \
+               .scan_index = index,                                    \
+               .scan_type = {                                          \
+                       .sign = 's',                                    \
+                       .realbits = 16,                                 \
+                       .storagebits = 16,                              \
+                       .endianness = IIO_LE                            \
+               },                                                      \
+       }
+
+static const struct iio_chan_spec ak8974_channels[] = {
+       AK8974_AXIS_CHANNEL(X, 0),
+       AK8974_AXIS_CHANNEL(Y, 1),
+       AK8974_AXIS_CHANNEL(Z, 2),
+       IIO_CHAN_SOFT_TIMESTAMP(3),
+};
+
+static const unsigned long ak8974_scan_masks[] = { 0x7, 0 };
+
+static const struct iio_info ak8974_info = {
+       .read_raw = &ak8974_read_raw,
+       .driver_module = THIS_MODULE,
+};
+
+static bool ak8974_writeable_reg(struct device *dev, unsigned int reg)
+{
+       struct i2c_client *i2c = to_i2c_client(dev);
+       struct iio_dev *indio_dev = i2c_get_clientdata(i2c);
+       struct ak8974 *ak8974 = iio_priv(indio_dev);
+
+       switch (reg) {
+       case AK8974_CTRL1:
+       case AK8974_CTRL2:
+       case AK8974_CTRL3:
+       case AK8974_INT_CTRL:
+       case AK8974_INT_THRES:
+       case AK8974_INT_THRES + 1:
+       case AK8974_PRESET:
+       case AK8974_PRESET + 1:
+               return true;
+       case AK8974_OFFSET_X:
+       case AK8974_OFFSET_X + 1:
+       case AK8974_OFFSET_Y:
+       case AK8974_OFFSET_Y + 1:
+       case AK8974_OFFSET_Z:
+       case AK8974_OFFSET_Z + 1:
+               if (ak8974->variant == AK8974_WHOAMI_VALUE_AK8974)
+                       return true;
+               return false;
+       case AMI305_OFFSET_X:
+       case AMI305_OFFSET_X + 1:
+       case AMI305_OFFSET_Y:
+       case AMI305_OFFSET_Y + 1:
+       case AMI305_OFFSET_Z:
+       case AMI305_OFFSET_Z + 1:
+               if (ak8974->variant == AK8974_WHOAMI_VALUE_AMI305)
+                       return true;
+               return false;
+       default:
+               return false;
+       }
+}
+
+static const struct regmap_config ak8974_regmap_config = {
+       .reg_bits = 8,
+       .val_bits = 8,
+       .max_register = 0xff,
+       .writeable_reg = ak8974_writeable_reg,
+};
+
+static int ak8974_probe(struct i2c_client *i2c,
+                       const struct i2c_device_id *id)
+{
+       struct iio_dev *indio_dev;
+       struct ak8974 *ak8974;
+       unsigned long irq_trig;
+       int irq = i2c->irq;
+       int ret;
+
+       /* Register with IIO */
+       indio_dev = devm_iio_device_alloc(&i2c->dev, sizeof(*ak8974));
+       if (indio_dev == NULL)
+               return -ENOMEM;
+
+       ak8974 = iio_priv(indio_dev);
+       i2c_set_clientdata(i2c, indio_dev);
+       ak8974->i2c = i2c;
+       mutex_init(&ak8974->lock);
+
+       ret = of_iio_read_mount_matrix(&i2c->dev,
+                                      "mount-matrix",
+                                      &ak8974->orientation);
+       if (ret)
+               return ret;
+
+       ak8974->regs[0].supply = ak8974_reg_avdd;
+       ak8974->regs[1].supply = ak8974_reg_dvdd;
+
+       ret = devm_regulator_bulk_get(&i2c->dev,
+                                     ARRAY_SIZE(ak8974->regs),
+                                     ak8974->regs);
+       if (ret < 0) {
+               dev_err(&i2c->dev, "cannot get regulators\n");
+               return ret;
+       }
+
+       ret = regulator_bulk_enable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+       if (ret < 0) {
+               dev_err(&i2c->dev, "cannot enable regulators\n");
+               return ret;
+       }
+
+       /* Take runtime PM online */
+       pm_runtime_get_noresume(&i2c->dev);
+       pm_runtime_set_active(&i2c->dev);
+       pm_runtime_enable(&i2c->dev);
+
+       ak8974->map = devm_regmap_init_i2c(i2c, &ak8974_regmap_config);
+       if (IS_ERR(ak8974->map)) {
+               dev_err(&i2c->dev, "failed to allocate register map\n");
+               return PTR_ERR(ak8974->map);
+       }
+
+       ret = ak8974_set_power(ak8974, AK8974_PWR_ON);
+       if (ret) {
+               dev_err(&i2c->dev, "could not power on\n");
+               goto power_off;
+       }
+
+       ret = ak8974_detect(ak8974);
+       if (ret) {
+               dev_err(&i2c->dev, "neither AK8974 nor AMI305 found\n");
+               goto power_off;
+       }
+
+       ret = ak8974_selftest(ak8974);
+       if (ret)
+               dev_err(&i2c->dev, "selftest failed (continuing anyway)\n");
+
+       ret = ak8974_reset(ak8974);
+       if (ret) {
+               dev_err(&i2c->dev, "AK8974 reset failed\n");
+               goto power_off;
+       }
+
+       pm_runtime_set_autosuspend_delay(&i2c->dev,
+                                        AK8974_AUTOSUSPEND_DELAY);
+       pm_runtime_use_autosuspend(&i2c->dev);
+       pm_runtime_put(&i2c->dev);
+
+       indio_dev->dev.parent = &i2c->dev;
+       indio_dev->channels = ak8974_channels;
+       indio_dev->num_channels = ARRAY_SIZE(ak8974_channels);
+       indio_dev->info = &ak8974_info;
+       indio_dev->available_scan_masks = ak8974_scan_masks;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+       indio_dev->name = ak8974->name;
+
+       ret = iio_triggered_buffer_setup(indio_dev, NULL,
+                                        ak8974_handle_trigger,
+                                        NULL);
+       if (ret) {
+               dev_err(&i2c->dev, "triggered buffer setup failed\n");
+               goto disable_pm;
+       }
+
+       /* If we have a valid DRDY IRQ, make use of it */
+       if (irq > 0) {
+               irq_trig = irqd_get_trigger_type(irq_get_irq_data(irq));
+               if (irq_trig == IRQF_TRIGGER_RISING) {
+                       dev_info(&i2c->dev, "enable rising edge DRDY IRQ\n");
+               } else if (irq_trig == IRQF_TRIGGER_FALLING) {
+                       ak8974->drdy_active_low = true;
+                       dev_info(&i2c->dev, "enable falling edge DRDY IRQ\n");
+               } else {
+                       irq_trig = IRQF_TRIGGER_RISING;
+               }
+               irq_trig |= IRQF_ONESHOT;
+               irq_trig |= IRQF_SHARED;
+
+               ret = devm_request_threaded_irq(&i2c->dev,
+                                               irq,
+                                               ak8974_drdy_irq,
+                                               ak8974_drdy_irq_thread,
+                                               irq_trig,
+                                               ak8974->name,
+                                               ak8974);
+               if (ret) {
+                       dev_err(&i2c->dev, "unable to request DRDY IRQ "
+                               "- proceeding without IRQ\n");
+                       goto no_irq;
+               }
+               ak8974->drdy_irq = true;
+       }
+
+no_irq:
+       ret = iio_device_register(indio_dev);
+       if (ret) {
+               dev_err(&i2c->dev, "device register failed\n");
+               goto cleanup_buffer;
+       }
+
+       return 0;
+
+cleanup_buffer:
+       iio_triggered_buffer_cleanup(indio_dev);
+disable_pm:
+       pm_runtime_put_noidle(&i2c->dev);
+       pm_runtime_disable(&i2c->dev);
+       ak8974_set_power(ak8974, AK8974_PWR_OFF);
+power_off:
+       regulator_bulk_disable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+
+       return ret;
+}
+
+static int __exit ak8974_remove(struct i2c_client *i2c)
+{
+       struct iio_dev *indio_dev = i2c_get_clientdata(i2c);
+       struct ak8974 *ak8974 = iio_priv(indio_dev);
+
+       iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
+       pm_runtime_get_sync(&i2c->dev);
+       pm_runtime_put_noidle(&i2c->dev);
+       pm_runtime_disable(&i2c->dev);
+       ak8974_set_power(ak8974, AK8974_PWR_OFF);
+       regulator_bulk_disable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+
+       return 0;
+}
+
+#ifdef CONFIG_PM
+static int ak8974_runtime_suspend(struct device *dev)
+{
+       struct ak8974 *ak8974 =
+               iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
+
+       ak8974_set_power(ak8974, AK8974_PWR_OFF);
+       regulator_bulk_disable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+
+       return 0;
+}
+
+static int ak8974_runtime_resume(struct device *dev)
+{
+       struct ak8974 *ak8974 =
+               iio_priv(i2c_get_clientdata(to_i2c_client(dev)));
+       int ret;
+
+       ret = regulator_bulk_enable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+       if (ret)
+               return ret;
+       msleep(AK8974_POWERON_DELAY);
+       ret = ak8974_set_power(ak8974, AK8974_PWR_ON);
+       if (ret)
+               goto out_regulator_disable;
+
+       ret = ak8974_configure(ak8974);
+       if (ret)
+               goto out_disable_power;
+
+       return 0;
+
+out_disable_power:
+       ak8974_set_power(ak8974, AK8974_PWR_OFF);
+out_regulator_disable:
+       regulator_bulk_disable(ARRAY_SIZE(ak8974->regs), ak8974->regs);
+
+       return ret;
+}
+#endif /* CONFIG_PM */
+
+static const struct dev_pm_ops ak8974_dev_pm_ops = {
+       SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
+                               pm_runtime_force_resume)
+       SET_RUNTIME_PM_OPS(ak8974_runtime_suspend,
+                          ak8974_runtime_resume, NULL)
+};
+
+static const struct i2c_device_id ak8974_id[] = {
+       {"ami305", 0 },
+       {"ak8974", 0 },
+       {}
+};
+MODULE_DEVICE_TABLE(i2c, ak8974_id);
+
+static const struct of_device_id ak8974_of_match[] = {
+       { .compatible = "asahi-kasei,ak8974", },
+       {}
+};
+MODULE_DEVICE_TABLE(of, ak8974_of_match);
+
+static struct i2c_driver ak8974_driver = {
+       .driver  = {
+               .name   = "ak8974",
+               .owner  = THIS_MODULE,
+               .pm = &ak8974_dev_pm_ops,
+               .of_match_table = of_match_ptr(ak8974_of_match),
+       },
+       .probe    = ak8974_probe,
+       .remove   = __exit_p(ak8974_remove),
+       .id_table = ak8974_id,
+};
+module_i2c_driver(ak8974_driver);
+
+MODULE_DESCRIPTION("AK8974 and AMI305 3-axis magnetometer driver");
+MODULE_AUTHOR("Samu Onkalo");
+MODULE_AUTHOR("Linus Walleij");
+MODULE_LICENSE("GPL v2");
index f2be4a04905665426a198bfda9628beaa365d7cb..f2b3bd7bf862114633519070da0901f48b2157e0 100644 (file)
@@ -154,34 +154,41 @@ static int mag3110_read_raw(struct iio_dev *indio_dev,
 
        switch (mask) {
        case IIO_CHAN_INFO_RAW:
-               if (iio_buffer_enabled(indio_dev))
-                       return -EBUSY;
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
 
                switch (chan->type) {
                case IIO_MAGN: /* in 0.1 uT / LSB */
                        ret = mag3110_read(data, buffer);
                        if (ret < 0)
-                               return ret;
+                               goto release;
                        *val = sign_extend32(
                                be16_to_cpu(buffer[chan->scan_index]), 15);
-                       return IIO_VAL_INT;
+                       ret = IIO_VAL_INT;
+                       break;
                case IIO_TEMP: /* in 1 C / LSB */
                        mutex_lock(&data->lock);
                        ret = mag3110_request(data);
                        if (ret < 0) {
                                mutex_unlock(&data->lock);
-                               return ret;
+                               goto release;
                        }
                        ret = i2c_smbus_read_byte_data(data->client,
                                MAG3110_DIE_TEMP);
                        mutex_unlock(&data->lock);
                        if (ret < 0)
-                               return ret;
+                               goto release;
                        *val = sign_extend32(ret, 7);
-                       return IIO_VAL_INT;
+                       ret = IIO_VAL_INT;
+                       break;
                default:
-                       return -EINVAL;
+                       ret = -EINVAL;
                }
+release:
+               iio_device_release_direct_mode(indio_dev);
+               return ret;
+
        case IIO_CHAN_INFO_SCALE:
                switch (chan->type) {
                case IIO_MAGN:
index 1d74b3aafeedbcc7a7c44dc8abd8505424b17932..6f84f53dfe541550af8fef6b5c1d804f27709aa3 100644 (file)
@@ -516,7 +516,7 @@ static irqreturn_t sx9500_irq_thread_handler(int irq, void *private)
                sx9500_push_events(indio_dev);
 
        if (val & SX9500_CONVDONE_IRQ)
-               complete_all(&data->completion);
+               complete(&data->completion);
 
 out:
        mutex_unlock(&data->mutex);
index c4664e5de791577e117a00f2fa276897d343e7a7..5ea77a7e261da87488b257123e152c5278bb41c9 100644 (file)
@@ -3,6 +3,22 @@
 #
 menu "Temperature sensors"
 
+config MAXIM_THERMOCOUPLE
+       tristate "Maxim thermocouple sensors"
+       depends on SPI
+       select IIO_BUFFER
+       select IIO_TRIGGERED_BUFFER
+       help
+         If you say yes here you get support for the Maxim series of
+         thermocouple sensors connected via SPI.
+
+         Supported sensors:
+          * MAX6675
+          * MAX31855
+
+         This driver can also be built as a module. If so, the module will
+         be called maxim_thermocouple.
+
 config MLX90614
        tristate "MLX90614 contact-less infrared sensor"
        depends on I2C
index 02bc79d49b24cf83bb284b36d23bf18f7ebbbfa8..78c3de0dc3f0d002402a06a7a9d471e8d402036a 100644 (file)
@@ -2,6 +2,7 @@
 # Makefile for industrial I/O temperature drivers
 #
 
+obj-$(CONFIG_MAXIM_THERMOCOUPLE) += maxim_thermocouple.o
 obj-$(CONFIG_MLX90614) += mlx90614.o
 obj-$(CONFIG_TMP006) += tmp006.o
 obj-$(CONFIG_TSYS01) += tsys01.o
diff --git a/drivers/iio/temperature/maxim_thermocouple.c b/drivers/iio/temperature/maxim_thermocouple.c
new file mode 100644 (file)
index 0000000..030827e
--- /dev/null
@@ -0,0 +1,281 @@
+/*
+ * maxim_thermocouple.c  - Support for Maxim thermocouple chips
+ *
+ * Copyright (C) 2016 Matt Ranostay <mranostay@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/mutex.h>
+#include <linux/err.h>
+#include <linux/spi/spi.h>
+#include <linux/iio/iio.h>
+#include <linux/iio/trigger.h>
+#include <linux/iio/buffer.h>
+#include <linux/iio/triggered_buffer.h>
+#include <linux/iio/trigger_consumer.h>
+
+#define MAXIM_THERMOCOUPLE_DRV_NAME    "maxim_thermocouple"
+
+enum {
+       MAX6675,
+       MAX31855,
+};
+
+const struct iio_chan_spec max6675_channels[] = {
+       {       /* thermocouple temperature */
+               .type = IIO_TEMP,
+               .info_mask_separate =
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+               .scan_index = 0,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 13,
+                       .storagebits = 16,
+                       .shift = 3,
+                       .endianness = IIO_BE,
+               },
+       },
+       IIO_CHAN_SOFT_TIMESTAMP(1),
+};
+
+const struct iio_chan_spec max31855_channels[] = {
+       {       /* thermocouple temperature */
+               .type = IIO_TEMP,
+               .address = 2,
+               .info_mask_separate =
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+               .scan_index = 0,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 14,
+                       .storagebits = 16,
+                       .shift = 2,
+                       .endianness = IIO_BE,
+               },
+       },
+       {       /* cold junction temperature */
+               .type = IIO_TEMP,
+               .address = 0,
+               .channel2 = IIO_MOD_TEMP_AMBIENT,
+               .modified = 1,
+               .info_mask_separate =
+                       BIT(IIO_CHAN_INFO_RAW) | BIT(IIO_CHAN_INFO_SCALE),
+               .scan_index = 1,
+               .scan_type = {
+                       .sign = 's',
+                       .realbits = 12,
+                       .storagebits = 16,
+                       .shift = 4,
+                       .endianness = IIO_BE,
+               },
+       },
+       IIO_CHAN_SOFT_TIMESTAMP(2),
+};
+
+static const unsigned long max31855_scan_masks[] = {0x3, 0};
+
+struct maxim_thermocouple_chip {
+       const struct iio_chan_spec *channels;
+       const unsigned long *scan_masks;
+       u8 num_channels;
+       u8 read_size;
+
+       /* bit-check for valid input */
+       u32 status_bit;
+};
+
+const struct maxim_thermocouple_chip maxim_thermocouple_chips[] = {
+       [MAX6675] = {
+                       .channels = max6675_channels,
+                       .num_channels = ARRAY_SIZE(max6675_channels),
+                       .read_size = 2,
+                       .status_bit = BIT(2),
+               },
+       [MAX31855] = {
+                       .channels = max31855_channels,
+                       .num_channels = ARRAY_SIZE(max31855_channels),
+                       .read_size = 4,
+                       .scan_masks = max31855_scan_masks,
+                       .status_bit = BIT(16),
+               },
+};
+
+struct maxim_thermocouple_data {
+       struct spi_device *spi;
+       const struct maxim_thermocouple_chip *chip;
+
+       u8 buffer[16] ____cacheline_aligned;
+};
+
+static int maxim_thermocouple_read(struct maxim_thermocouple_data *data,
+                                  struct iio_chan_spec const *chan, int *val)
+{
+       unsigned int storage_bytes = data->chip->read_size;
+       unsigned int shift = chan->scan_type.shift + (chan->address * 8);
+       unsigned int buf;
+       int ret;
+
+       ret = spi_read(data->spi, (void *) &buf, storage_bytes);
+       if (ret)
+               return ret;
+
+       switch (storage_bytes) {
+       case 2:
+               *val = be16_to_cpu(buf);
+               break;
+       case 4:
+               *val = be32_to_cpu(buf);
+               break;
+       }
+
+       /* check to be sure this is a valid reading */
+       if (*val & data->chip->status_bit)
+               return -EINVAL;
+
+       *val = sign_extend32(*val >> shift, chan->scan_type.realbits - 1);
+
+       return 0;
+}
+
+static irqreturn_t maxim_thermocouple_trigger_handler(int irq, void *private)
+{
+       struct iio_poll_func *pf = private;
+       struct iio_dev *indio_dev = pf->indio_dev;
+       struct maxim_thermocouple_data *data = iio_priv(indio_dev);
+       int ret;
+
+       ret = spi_read(data->spi, data->buffer, data->chip->read_size);
+       if (!ret) {
+               iio_push_to_buffers_with_timestamp(indio_dev, data->buffer,
+                                                  iio_get_time_ns(indio_dev));
+       }
+
+       iio_trigger_notify_done(indio_dev->trig);
+
+       return IRQ_HANDLED;
+}
+
+static int maxim_thermocouple_read_raw(struct iio_dev *indio_dev,
+                                      struct iio_chan_spec const *chan,
+                                      int *val, int *val2, long mask)
+{
+       struct maxim_thermocouple_data *data = iio_priv(indio_dev);
+       int ret = -EINVAL;
+
+       switch (mask) {
+       case IIO_CHAN_INFO_RAW:
+               ret = iio_device_claim_direct_mode(indio_dev);
+               if (ret)
+                       return ret;
+
+               ret = maxim_thermocouple_read(data, chan, val);
+               iio_device_release_direct_mode(indio_dev);
+
+               if (!ret)
+                       return IIO_VAL_INT;
+
+               break;
+       case IIO_CHAN_INFO_SCALE:
+               switch (chan->channel2) {
+               case IIO_MOD_TEMP_AMBIENT:
+                       *val = 62;
+                       *val2 = 500000; /* 1000 * 0.0625 */
+                       ret = IIO_VAL_INT_PLUS_MICRO;
+                       break;
+               default:
+                       *val = 250; /* 1000 * 0.25 */
+                       ret = IIO_VAL_INT;
+               };
+               break;
+       }
+
+       return ret;
+}
+
+static const struct iio_info maxim_thermocouple_info = {
+       .driver_module = THIS_MODULE,
+       .read_raw = maxim_thermocouple_read_raw,
+};
+
+static int maxim_thermocouple_probe(struct spi_device *spi)
+{
+       const struct spi_device_id *id = spi_get_device_id(spi);
+       struct iio_dev *indio_dev;
+       struct maxim_thermocouple_data *data;
+       const struct maxim_thermocouple_chip *chip =
+                       &maxim_thermocouple_chips[id->driver_data];
+       int ret;
+
+       indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data));
+       if (!indio_dev)
+               return -ENOMEM;
+
+       indio_dev->info = &maxim_thermocouple_info;
+       indio_dev->name = MAXIM_THERMOCOUPLE_DRV_NAME;
+       indio_dev->channels = chip->channels;
+       indio_dev->available_scan_masks = chip->scan_masks;
+       indio_dev->num_channels = chip->num_channels;
+       indio_dev->modes = INDIO_DIRECT_MODE;
+
+       data = iio_priv(indio_dev);
+       data->spi = spi;
+       data->chip = chip;
+
+       ret = iio_triggered_buffer_setup(indio_dev, NULL,
+                               maxim_thermocouple_trigger_handler, NULL);
+       if (ret)
+               return ret;
+
+       ret = iio_device_register(indio_dev);
+       if (ret)
+               goto error_unreg_buffer;
+
+       return 0;
+
+error_unreg_buffer:
+       iio_triggered_buffer_cleanup(indio_dev);
+
+       return ret;
+}
+
+static int maxim_thermocouple_remove(struct spi_device *spi)
+{
+       struct iio_dev *indio_dev = spi_get_drvdata(spi);
+
+       iio_device_unregister(indio_dev);
+       iio_triggered_buffer_cleanup(indio_dev);
+
+       return 0;
+}
+
+static const struct spi_device_id maxim_thermocouple_id[] = {
+       {"max6675", MAX6675},
+       {"max31855", MAX31855},
+       {},
+};
+MODULE_DEVICE_TABLE(spi, maxim_thermocouple_id);
+
+static struct spi_driver maxim_thermocouple_driver = {
+       .driver = {
+               .name   = MAXIM_THERMOCOUPLE_DRV_NAME,
+       },
+       .probe          = maxim_thermocouple_probe,
+       .remove         = maxim_thermocouple_remove,
+       .id_table       = maxim_thermocouple_id,
+};
+module_spi_driver(maxim_thermocouple_driver);
+
+MODULE_AUTHOR("Matt Ranostay <mranostay@gmail.com>");
+MODULE_DESCRIPTION("Maxim thermocouple sensors");
+MODULE_LICENSE("GPL");
index af9476460023a248b3349765c50e2f51772d65ab..5ebaf0028a10473da153af86a6b741072757fb9f 100644 (file)
@@ -40,8 +40,6 @@ source "drivers/staging/rtl8712/Kconfig"
 
 source "drivers/staging/rtl8188eu/Kconfig"
 
-source "drivers/staging/rtl8723au/Kconfig"
-
 source "drivers/staging/rts5208/Kconfig"
 
 source "drivers/staging/octeon/Kconfig"
index 9f6009dcafa85b45e066c29b42c9ca2ae1ff57d0..29a1672820e61bb8a8b57ec4bcbf7929f62bd6f8 100644 (file)
@@ -9,7 +9,6 @@ obj-$(CONFIG_RTL8192U)          += rtl8192u/
 obj-$(CONFIG_RTL8192E)         += rtl8192e/
 obj-$(CONFIG_R8712U)           += rtl8712/
 obj-$(CONFIG_R8188EU)          += rtl8188eu/
-obj-$(CONFIG_R8723AU)          += rtl8723au/
 obj-$(CONFIG_RTS5208)          += rts5208/
 obj-$(CONFIG_NETLOGIC_XLR_NET) += netlogic/
 obj-$(CONFIG_OCTEON_ETHERNET)  += octeon/
index 06e41d24ec62053c7f698b72ba4d6ca12f6e0f32..6c00d6f765c669027e4bf2ef5c5ed801342da074 100644 (file)
@@ -24,19 +24,6 @@ config ANDROID_LOW_MEMORY_KILLER
          scripts (/init.rc), and it defines priority values with minimum free memory size
          for each priority.
 
-config SW_SYNC
-       bool "Software synchronization framework"
-       default n
-       depends on SYNC_FILE
-       depends on DEBUG_FS
-       ---help---
-         A sync object driver that uses a 32bit counter to coordinate
-         synchronization.  Useful when there is no hardware primitive backing
-         the synchronization.
-
-         WARNING: improper use of this can result in deadlocking kernel
-         drivers from userspace. Intended for test and debug only.
-
 source "drivers/staging/android/ion/Kconfig"
 
 endif # if ANDROID
index 7ca61b77a8d44f2cc95b02066e5d2f1fb33791f6..7ed1be7989097d3f45be6cb63cb741839649cbba 100644 (file)
@@ -4,4 +4,3 @@ obj-y                                   += ion/
 
 obj-$(CONFIG_ASHMEM)                   += ashmem.o
 obj-$(CONFIG_ANDROID_LOW_MEMORY_KILLER)        += lowmemorykiller.o
-obj-$(CONFIG_SW_SYNC)                  += sw_sync.o sync_debug.o
index 19c1572f1525ef5c506f1505dbe48ecb04b819cd..8a54ddc6d51353efcf71c1f35b8e1e34d5238ba9 100644 (file)
@@ -40,3 +40,14 @@ config ION_HISI
          Choose this option if you wish to use ion on Hisilicon Platform.
 
 source "drivers/staging/android/ion/hisilicon/Kconfig"
+
+config ION_OF
+       bool "Devicetree support for Ion"
+       depends on ION && OF
+       help
+         Provides base support for defining Ion heaps in devicetree
+         and setting them up. Also includes functions for platforms
+         to parse the devicetree and expand for their own custom
+         extensions
+
+         If using Ion and devicetree, you should say Y here
index 18cc2aa593c2cec07ad6f3a232518b766a9d6dd3..5d630a088381a40bef3e5026658e51f2b29177f9 100644 (file)
@@ -1,4 +1,5 @@
-obj-$(CONFIG_ION) +=   ion.o ion_heap.o ion_page_pool.o ion_system_heap.o \
+obj-$(CONFIG_ION) +=   ion.o ion-ioctl.o ion_heap.o \
+                       ion_page_pool.o ion_system_heap.o \
                        ion_carveout_heap.o ion_chunk_heap.o ion_cma_heap.o
 obj-$(CONFIG_ION_TEST) += ion_test.o
 ifdef CONFIG_COMPAT
@@ -8,4 +9,5 @@ endif
 obj-$(CONFIG_ION_DUMMY) += ion_dummy_driver.o
 obj-$(CONFIG_ION_TEGRA) += tegra/
 obj-$(CONFIG_ION_HISI) += hisilicon/
+obj-$(CONFIG_ION_OF) += ion_of.o
 
diff --git a/drivers/staging/android/ion/devicetree.txt b/drivers/staging/android/ion/devicetree.txt
new file mode 100644 (file)
index 0000000..1687152
--- /dev/null
@@ -0,0 +1,51 @@
+Ion Memory Manager
+
+Ion is a memory manager that allows for sharing of buffers via dma-buf.
+Ion allows for different types of allocation via an abstraction called
+a 'heap'. A heap represents a specific type of memory. Each heap has
+a different type. There can be multiple instances of the same heap
+type.
+
+Specific heap instances are tied to heap IDs. Heap IDs are not to be specified
+in the devicetree.
+
+Required properties for Ion
+
+- compatible: "linux,ion" PLUS a compatible property for the device
+
+All child nodes of a linux,ion node are interpreted as heaps
+
+required properties for heaps
+
+- compatible: compatible string for a heap type PLUS a compatible property
+for the specific instance of the heap. Current heap types
+-- linux,ion-heap-system
+-- linux,ion-heap-system-contig
+-- linux,ion-heap-carveout
+-- linux,ion-heap-chunk
+-- linux,ion-heap-dma
+-- linux,ion-heap-custom
+
+Optional properties
+- memory-region: A phandle to a memory region. Required for DMA heap type
+(see reserved-memory.txt for details on the reservation)
+
+Example:
+
+       ion {
+               compatbile = "hisilicon,ion", "linux,ion";
+
+               ion-system-heap {
+                       compatbile = "hisilicon,system-heap", "linux,ion-heap-system"
+               };
+
+               ion-camera-region {
+                       compatible = "hisilicon,camera-heap", "linux,ion-heap-dma"
+                       memory-region = <&camera_region>;
+               };
+
+               ion-fb-region {
+                       compatbile = "hisilicon,fb-heap", "linux,ion-heap-dma"
+                       memory-region = <&fb_region>;
+               };
+       }
index fe9f0fd210cdcb2ee1c7f006658fbc7f2ed4fda6..f392db2fe6eb58368226cd82540ec5c848cd7235 100644 (file)
 #include <linux/mm.h>
 #include "../ion_priv.h"
 #include "../ion.h"
+#include "../ion_of.h"
 
-struct hi6220_ion_type_table {
-       const char *name;
-       enum ion_heap_type type;
+struct hisi_ion_dev {
+       struct ion_heap **heaps;
+       struct ion_device *idev;
+       struct ion_platform_data *data;
 };
 
-static struct hi6220_ion_type_table ion_type_table[] = {
-       {"ion_system", ION_HEAP_TYPE_SYSTEM},
-       {"ion_system_contig", ION_HEAP_TYPE_SYSTEM_CONTIG},
-       {"ion_carveout", ION_HEAP_TYPE_CARVEOUT},
-       {"ion_chunk", ION_HEAP_TYPE_CHUNK},
-       {"ion_dma", ION_HEAP_TYPE_DMA},
-       {"ion_custom", ION_HEAP_TYPE_CUSTOM},
+static struct ion_of_heap hisi_heaps[] = {
+       PLATFORM_HEAP("hisilicon,sys_user", 0,
+                       ION_HEAP_TYPE_SYSTEM, "sys_user"),
+       PLATFORM_HEAP("hisilicon,sys_contig", 1,
+                       ION_HEAP_TYPE_SYSTEM_CONTIG, "sys_contig"),
+       PLATFORM_HEAP("hisilicon,cma", ION_HEAP_TYPE_DMA, ION_HEAP_TYPE_DMA,
+                       "cma"),
+       {}
 };
 
-static struct ion_device *idev;
-static int num_heaps;
-static struct ion_heap **heaps;
-static struct ion_platform_heap **heaps_data;
-
-static int get_type_by_name(const char *name, enum ion_heap_type *type)
+static int hi6220_ion_probe(struct platform_device *pdev)
 {
+       struct hisi_ion_dev *ipdev;
        int i;
 
-       for (i = 0; i < ARRAY_SIZE(ion_type_table); i++) {
-               if (strncmp(name, ion_type_table[i].name, strlen(name)))
-                       continue;
-
-               *type = ion_type_table[i].type;
-               return 0;
-       }
-
-       return -EINVAL;
-}
-
-static int hi6220_set_platform_data(struct platform_device *pdev)
-{
-       unsigned int base;
-       unsigned int size;
-       unsigned int id;
-       const char *heap_name;
-       const char *type_name;
-       enum ion_heap_type type;
-       int ret;
-       struct device_node *np;
-       struct ion_platform_heap *p_data;
-       const struct device_node *dt_node = pdev->dev.of_node;
-       int index = 0;
-
-       for_each_child_of_node(dt_node, np)
-               num_heaps++;
-
-       heaps_data = devm_kzalloc(&pdev->dev,
-                                 sizeof(struct ion_platform_heap *) *
-                                 num_heaps,
-                                 GFP_KERNEL);
-       if (!heaps_data)
+       ipdev = devm_kzalloc(&pdev->dev, sizeof(*ipdev), GFP_KERNEL);
+       if (!ipdev)
                return -ENOMEM;
 
-       for_each_child_of_node(dt_node, np) {
-               ret = of_property_read_string(np, "heap-name", &heap_name);
-               if (ret < 0) {
-                       pr_err("check the name of node %s\n", np->name);
-                       continue;
-               }
-
-               ret = of_property_read_u32(np, "heap-id", &id);
-               if (ret < 0) {
-                       pr_err("check the id %s\n", np->name);
-                       continue;
-               }
-
-               ret = of_property_read_u32(np, "heap-base", &base);
-               if (ret < 0) {
-                       pr_err("check the base of node %s\n", np->name);
-                       continue;
-               }
-
-               ret = of_property_read_u32(np, "heap-size", &size);
-               if (ret < 0) {
-                       pr_err("check the size of node %s\n", np->name);
-                       continue;
-               }
-
-               ret = of_property_read_string(np, "heap-type", &type_name);
-               if (ret < 0) {
-                       pr_err("check the type of node %s\n", np->name);
-                       continue;
-               }
-
-               ret = get_type_by_name(type_name, &type);
-               if (ret < 0) {
-                       pr_err("type name error %s!\n", type_name);
-                       continue;
-               }
-               pr_info("heap index %d : name %s base 0x%x size 0x%x id %d type %d\n",
-                       index, heap_name, base, size, id, type);
-
-               p_data = devm_kzalloc(&pdev->dev,
-                                     sizeof(struct ion_platform_heap),
-                                     GFP_KERNEL);
-               if (!p_data)
-                       return -ENOMEM;
+       platform_set_drvdata(pdev, ipdev);
 
-               p_data->name = heap_name;
-               p_data->base = base;
-               p_data->size = size;
-               p_data->id = id;
-               p_data->type = type;
+       ipdev->idev = ion_device_create(NULL);
+       if (!ipdev->idev)
+               return -ENOMEM;
 
-               heaps_data[index] = p_data;
-               index++;
-       }
-       return 0;
-}
+       ipdev->data = ion_parse_dt(pdev, hisi_heaps);
+       if (IS_ERR(ipdev->data))
+               return PTR_ERR(ipdev->data);
 
-static int hi6220_ion_probe(struct platform_device *pdev)
-{
-       int i;
-       int err;
-       static struct ion_platform_heap *p_heap;
-
-       idev = ion_device_create(NULL);
-       err = hi6220_set_platform_data(pdev);
-       if (err) {
-               pr_err("ion set platform data error!\n");
-               goto err_free_idev;
-       }
-       heaps = devm_kzalloc(&pdev->dev,
-                            sizeof(struct ion_heap *) * num_heaps,
-                            GFP_KERNEL);
-       if (!heaps) {
-               err = -ENOMEM;
-               goto err_free_idev;
+       ipdev->heaps = devm_kzalloc(&pdev->dev,
+                               sizeof(struct ion_heap)*ipdev->data->nr,
+                               GFP_KERNEL);
+       if (!ipdev->heaps) {
+               ion_destroy_platform_data(ipdev->data);
+               return -ENOMEM;
        }
 
-       /*
-        * create the heaps as specified in the dts file
-        */
-       for (i = 0; i < num_heaps; i++) {
-               p_heap = heaps_data[i];
-               heaps[i] = ion_heap_create(p_heap);
-               if (IS_ERR_OR_NULL(heaps[i])) {
-                       err = PTR_ERR(heaps[i]);
-                       goto err_free_heaps;
+       for (i = 0; i < ipdev->data->nr; i++) {
+               ipdev->heaps[i] = ion_heap_create(&ipdev->data->heaps[i]);
+               if (!ipdev->heaps) {
+                       ion_destroy_platform_data(ipdev->data);
+                       return -ENOMEM;
                }
-
-               ion_device_add_heap(idev, heaps[i]);
-
-               pr_info("%s: adding heap %s of type %d with %lx@%lx\n",
-                       __func__, p_heap->name, p_heap->type,
-                       p_heap->base, (unsigned long)p_heap->size);
+               ion_device_add_heap(ipdev->idev, ipdev->heaps[i]);
        }
-       return err;
-
-err_free_heaps:
-       for (i = 0; i < num_heaps; ++i) {
-               ion_heap_destroy(heaps[i]);
-               heaps[i] = NULL;
-       }
-err_free_idev:
-       ion_device_destroy(idev);
-
-       return err;
+       return 0;
 }
 
 static int hi6220_ion_remove(struct platform_device *pdev)
 {
+       struct hisi_ion_dev *ipdev;
        int i;
 
-       for (i = 0; i < num_heaps; i++) {
-               ion_heap_destroy(heaps[i]);
-               heaps[i] = NULL;
+       ipdev = platform_get_drvdata(pdev);
+
+       for (i = 0; i < ipdev->data->nr; i++) {
+               ion_heap_destroy(ipdev->heaps[i]);
        }
-       ion_device_destroy(idev);
+       ion_destroy_platform_data(ipdev->data);
+       ion_device_destroy(ipdev->idev);
 
        return 0;
 }
diff --git a/drivers/staging/android/ion/ion-ioctl.c b/drivers/staging/android/ion/ion-ioctl.c
new file mode 100644 (file)
index 0000000..7e7431d
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ *
+ * Copyright (C) 2011 Google, Inc.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/file.h>
+#include <linux/fs.h>
+#include <linux/uaccess.h>
+
+#include "ion.h"
+#include "ion_priv.h"
+#include "compat_ion.h"
+
+union ion_ioctl_arg {
+       struct ion_fd_data fd;
+       struct ion_allocation_data allocation;
+       struct ion_handle_data handle;
+       struct ion_custom_data custom;
+       struct ion_heap_query query;
+};
+
+static int validate_ioctl_arg(unsigned int cmd, union ion_ioctl_arg *arg)
+{
+       int ret = 0;
+
+       switch (cmd) {
+       case ION_IOC_HEAP_QUERY:
+               ret = arg->query.reserved0 != 0;
+               ret |= arg->query.reserved1 != 0;
+               ret |= arg->query.reserved2 != 0;
+               break;
+       default:
+               break;
+       }
+
+       return ret ? -EINVAL : 0;
+}
+
+/* fix up the cases where the ioctl direction bits are incorrect */
+static unsigned int ion_ioctl_dir(unsigned int cmd)
+{
+       switch (cmd) {
+       case ION_IOC_SYNC:
+       case ION_IOC_FREE:
+       case ION_IOC_CUSTOM:
+               return _IOC_WRITE;
+       default:
+               return _IOC_DIR(cmd);
+       }
+}
+
+long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+{
+       struct ion_client *client = filp->private_data;
+       struct ion_device *dev = client->dev;
+       struct ion_handle *cleanup_handle = NULL;
+       int ret = 0;
+       unsigned int dir;
+       union ion_ioctl_arg data;
+
+       dir = ion_ioctl_dir(cmd);
+
+       if (_IOC_SIZE(cmd) > sizeof(data))
+               return -EINVAL;
+
+       /*
+        * The copy_from_user is unconditional here for both read and write
+        * to do the validate. If there is no write for the ioctl, the
+        * buffer is cleared
+        */
+       if (copy_from_user(&data, (void __user *)arg, _IOC_SIZE(cmd)))
+               return -EFAULT;
+
+       ret = validate_ioctl_arg(cmd, &data);
+       if (WARN_ON_ONCE(ret))
+               return ret;
+
+       if (!(dir & _IOC_WRITE))
+               memset(&data, 0, sizeof(data));
+
+       switch (cmd) {
+       case ION_IOC_ALLOC:
+       {
+               struct ion_handle *handle;
+
+               handle = ion_alloc(client, data.allocation.len,
+                                               data.allocation.align,
+                                               data.allocation.heap_id_mask,
+                                               data.allocation.flags);
+               if (IS_ERR(handle))
+                       return PTR_ERR(handle);
+
+               data.allocation.handle = handle->id;
+
+               cleanup_handle = handle;
+               break;
+       }
+       case ION_IOC_FREE:
+       {
+               struct ion_handle *handle;
+
+               mutex_lock(&client->lock);
+               handle = ion_handle_get_by_id_nolock(client, data.handle.handle);
+               if (IS_ERR(handle)) {
+                       mutex_unlock(&client->lock);
+                       return PTR_ERR(handle);
+               }
+               ion_free_nolock(client, handle);
+               ion_handle_put_nolock(handle);
+               mutex_unlock(&client->lock);
+               break;
+       }
+       case ION_IOC_SHARE:
+       case ION_IOC_MAP:
+       {
+               struct ion_handle *handle;
+
+               handle = ion_handle_get_by_id(client, data.handle.handle);
+               if (IS_ERR(handle))
+                       return PTR_ERR(handle);
+               data.fd.fd = ion_share_dma_buf_fd(client, handle);
+               ion_handle_put(handle);
+               if (data.fd.fd < 0)
+                       ret = data.fd.fd;
+               break;
+       }
+       case ION_IOC_IMPORT:
+       {
+               struct ion_handle *handle;
+
+               handle = ion_import_dma_buf_fd(client, data.fd.fd);
+               if (IS_ERR(handle))
+                       ret = PTR_ERR(handle);
+               else
+                       data.handle.handle = handle->id;
+               break;
+       }
+       case ION_IOC_SYNC:
+       {
+               ret = ion_sync_for_device(client, data.fd.fd);
+               break;
+       }
+       case ION_IOC_CUSTOM:
+       {
+               if (!dev->custom_ioctl)
+                       return -ENOTTY;
+               ret = dev->custom_ioctl(client, data.custom.cmd,
+                                               data.custom.arg);
+               break;
+       }
+       case ION_IOC_HEAP_QUERY:
+               ret = ion_query_heaps(client, &data.query);
+               break;
+       default:
+               return -ENOTTY;
+       }
+
+       if (dir & _IOC_READ) {
+               if (copy_to_user((void __user *)arg, &data, _IOC_SIZE(cmd))) {
+                       if (cleanup_handle)
+                               ion_free(client, cleanup_handle);
+                       return -EFAULT;
+               }
+       }
+       return ret;
+}
index a2cf93b590163291bbf26ba5a09980cdd1200062..396ded52ab70242b8b3c069c52cc7fed2c44624d 100644 (file)
 #include "ion_priv.h"
 #include "compat_ion.h"
 
-/**
- * struct ion_device - the metadata of the ion device node
- * @dev:               the actual misc device
- * @buffers:           an rb tree of all the existing buffers
- * @buffer_lock:       lock protecting the tree of buffers
- * @lock:              rwsem protecting the tree of heaps and clients
- * @heaps:             list of all the heaps in the system
- * @user_clients:      list of all the clients created from userspace
- */
-struct ion_device {
-       struct miscdevice dev;
-       struct rb_root buffers;
-       struct mutex buffer_lock;
-       struct rw_semaphore lock;
-       struct plist_head heaps;
-       long (*custom_ioctl)(struct ion_client *client, unsigned int cmd,
-                            unsigned long arg);
-       struct rb_root clients;
-       struct dentry *debug_root;
-       struct dentry *heaps_debug_root;
-       struct dentry *clients_debug_root;
-};
-
-/**
- * struct ion_client - a process/hw block local address space
- * @node:              node in the tree of all clients
- * @dev:               backpointer to ion device
- * @handles:           an rb tree of all the handles in this client
- * @idr:               an idr space for allocating handle ids
- * @lock:              lock protecting the tree of handles
- * @name:              used for debugging
- * @display_name:      used for debugging (unique version of @name)
- * @display_serial:    used for debugging (to make display_name unique)
- * @task:              used for debugging
- *
- * A client represents a list of buffers this client may access.
- * The mutex stored here is used to protect both handles tree
- * as well as the handles themselves, and should be held while modifying either.
- */
-struct ion_client {
-       struct rb_node node;
-       struct ion_device *dev;
-       struct rb_root handles;
-       struct idr idr;
-       struct mutex lock;
-       const char *name;
-       char *display_name;
-       int display_serial;
-       struct task_struct *task;
-       pid_t pid;
-       struct dentry *debug_root;
-};
-
-/**
- * ion_handle - a client local reference to a buffer
- * @ref:               reference count
- * @client:            back pointer to the client the buffer resides in
- * @buffer:            pointer to the buffer
- * @node:              node in the client's handle rbtree
- * @kmap_cnt:          count of times this client has mapped to kernel
- * @id:                        client-unique id allocated by client->idr
- *
- * Modifications to node, map_cnt or mapping should be protected by the
- * lock in the client.  Other fields are never changed after initialization.
- */
-struct ion_handle {
-       struct kref ref;
-       struct ion_client *client;
-       struct ion_buffer *buffer;
-       struct rb_node node;
-       unsigned int kmap_cnt;
-       int id;
-};
-
 bool ion_buffer_fault_user_mappings(struct ion_buffer *buffer)
 {
        return (buffer->flags & ION_FLAG_CACHED) &&
@@ -174,10 +100,10 @@ static void ion_buffer_add(struct ion_device *dev,
 
 /* this function should only be called while dev->lock is held */
 static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
-                                    struct ion_device *dev,
-                                    unsigned long len,
-                                    unsigned long align,
-                                    unsigned long flags)
+                                           struct ion_device *dev,
+                                           unsigned long len,
+                                           unsigned long align,
+                                           unsigned long flags)
 {
        struct ion_buffer *buffer;
        struct sg_table *table;
@@ -205,19 +131,16 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
                        goto err2;
        }
 
-       buffer->dev = dev;
-       buffer->size = len;
-
-       table = heap->ops->map_dma(heap, buffer);
-       if (WARN_ONCE(table == NULL,
-                       "heap->ops->map_dma should return ERR_PTR on error"))
-               table = ERR_PTR(-EINVAL);
-       if (IS_ERR(table)) {
+       if (buffer->sg_table == NULL) {
+               WARN_ONCE(1, "This heap needs to set the sgtable");
                ret = -EINVAL;
                goto err1;
        }
 
-       buffer->sg_table = table;
+       table = buffer->sg_table;
+       buffer->dev = dev;
+       buffer->size = len;
+
        if (ion_buffer_fault_user_mappings(buffer)) {
                int num_pages = PAGE_ALIGN(buffer->size) / PAGE_SIZE;
                struct scatterlist *sg;
@@ -226,7 +149,7 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
                buffer->pages = vmalloc(sizeof(struct page *) * num_pages);
                if (!buffer->pages) {
                        ret = -ENOMEM;
-                       goto err;
+                       goto err1;
                }
 
                for_each_sg(table->sgl, sg, table->nents, i) {
@@ -260,8 +183,6 @@ static struct ion_buffer *ion_buffer_create(struct ion_heap *heap,
        mutex_unlock(&dev->buffer_lock);
        return buffer;
 
-err:
-       heap->ops->unmap_dma(heap, buffer);
 err1:
        heap->ops->free(buffer);
 err2:
@@ -273,7 +194,6 @@ void ion_buffer_destroy(struct ion_buffer *buffer)
 {
        if (WARN_ON(buffer->kmap_cnt > 0))
                buffer->heap->ops->unmap_kernel(buffer->heap, buffer);
-       buffer->heap->ops->unmap_dma(buffer->heap, buffer);
        buffer->heap->ops->free(buffer);
        vfree(buffer->pages);
        kfree(buffer);
@@ -337,7 +257,7 @@ static void ion_buffer_remove_from_handle(struct ion_buffer *buffer)
 }
 
 static struct ion_handle *ion_handle_create(struct ion_client *client,
-                                    struct ion_buffer *buffer)
+                                           struct ion_buffer *buffer)
 {
        struct ion_handle *handle;
 
@@ -377,26 +297,17 @@ static void ion_handle_destroy(struct kref *kref)
        kfree(handle);
 }
 
-struct ion_buffer *ion_handle_buffer(struct ion_handle *handle)
-{
-       return handle->buffer;
-}
-
 static void ion_handle_get(struct ion_handle *handle)
 {
        kref_get(&handle->ref);
 }
 
-static int ion_handle_put_nolock(struct ion_handle *handle)
+int ion_handle_put_nolock(struct ion_handle *handle)
 {
-       int ret;
-
-       ret = kref_put(&handle->ref, ion_handle_destroy);
-
-       return ret;
+       return kref_put(&handle->ref, ion_handle_destroy);
 }
 
-static int ion_handle_put(struct ion_handle *handle)
+int ion_handle_put(struct ion_handle *handle)
 {
        struct ion_client *client = handle->client;
        int ret;
@@ -426,8 +337,8 @@ static struct ion_handle *ion_handle_lookup(struct ion_client *client,
        return ERR_PTR(-EINVAL);
 }
 
-static struct ion_handle *ion_handle_get_by_id_nolock(struct ion_client *client,
-                                               int id)
+struct ion_handle *ion_handle_get_by_id_nolock(struct ion_client *client,
+                                              int id)
 {
        struct ion_handle *handle;
 
@@ -438,7 +349,7 @@ static struct ion_handle *ion_handle_get_by_id_nolock(struct ion_client *client,
        return handle ? handle : ERR_PTR(-EINVAL);
 }
 
-static struct ion_handle *ion_handle_get_by_id(struct ion_client *client,
+struct ion_handle *ion_handle_get_by_id(struct ion_client *client,
                                               int id)
 {
        struct ion_handle *handle;
@@ -551,15 +462,10 @@ struct ion_handle *ion_alloc(struct ion_client *client, size_t len,
 }
 EXPORT_SYMBOL(ion_alloc);
 
-static void ion_free_nolock(struct ion_client *client, struct ion_handle *handle)
+void ion_free_nolock(struct ion_client *client,
+                    struct ion_handle *handle)
 {
-       bool valid_handle;
-
-       BUG_ON(client != handle->client);
-
-       valid_handle = ion_handle_validate(client, handle);
-
-       if (!valid_handle) {
+       if (!ion_handle_validate(client, handle)) {
                WARN(1, "%s: invalid handle passed to free.\n", __func__);
                return;
        }
@@ -576,32 +482,6 @@ void ion_free(struct ion_client *client, struct ion_handle *handle)
 }
 EXPORT_SYMBOL(ion_free);
 
-int ion_phys(struct ion_client *client, struct ion_handle *handle,
-            ion_phys_addr_t *addr, size_t *len)
-{
-       struct ion_buffer *buffer;
-       int ret;
-
-       mutex_lock(&client->lock);
-       if (!ion_handle_validate(client, handle)) {
-               mutex_unlock(&client->lock);
-               return -EINVAL;
-       }
-
-       buffer = handle->buffer;
-
-       if (!buffer->heap->ops->phys) {
-               pr_err("%s: ion_phys is not implemented by this heap (name=%s, type=%d).\n",
-                       __func__, buffer->heap->name, buffer->heap->type);
-               mutex_unlock(&client->lock);
-               return -ENODEV;
-       }
-       mutex_unlock(&client->lock);
-       ret = buffer->heap->ops->phys(buffer->heap, buffer, addr, len);
-       return ret;
-}
-EXPORT_SYMBOL(ion_phys);
-
 static void *ion_buffer_kmap_get(struct ion_buffer *buffer)
 {
        void *vaddr;
@@ -612,7 +492,7 @@ static void *ion_buffer_kmap_get(struct ion_buffer *buffer)
        }
        vaddr = buffer->heap->ops->map_kernel(buffer->heap, buffer);
        if (WARN_ONCE(vaddr == NULL,
-                       "heap->ops->map_kernel should return ERR_PTR on error"))
+                     "heap->ops->map_kernel should return ERR_PTR on error"))
                return ERR_PTR(-EINVAL);
        if (IS_ERR(vaddr))
                return vaddr;
@@ -781,14 +661,14 @@ static const struct file_operations debug_client_fops = {
 };
 
 static int ion_get_client_serial(const struct rb_root *root,
-                                       const unsigned char *name)
+                                const unsigned char *name)
 {
        int serial = -1;
        struct rb_node *node;
 
        for (node = rb_first(root); node; node = rb_next(node)) {
                struct ion_client *client = rb_entry(node, struct ion_client,
-                                               node);
+                                                    node);
 
                if (strcmp(client->name, name))
                        continue;
@@ -863,14 +743,14 @@ struct ion_client *ion_client_create(struct ion_device *dev,
        rb_insert_color(&client->node, &dev->clients);
 
        client->debug_root = debugfs_create_file(client->display_name, 0664,
-                                               dev->clients_debug_root,
-                                               client, &debug_client_fops);
+                                                dev->clients_debug_root,
+                                                client, &debug_client_fops);
        if (!client->debug_root) {
                char buf[256], *path;
 
                path = dentry_path(dev->clients_debug_root, buf, 256);
                pr_err("Failed to create client debugfs at %s/%s\n",
-                       path, client->display_name);
+                      path, client->display_name);
        }
 
        up_write(&dev->lock);
@@ -917,26 +797,6 @@ void ion_client_destroy(struct ion_client *client)
 }
 EXPORT_SYMBOL(ion_client_destroy);
 
-struct sg_table *ion_sg_table(struct ion_client *client,
-                             struct ion_handle *handle)
-{
-       struct ion_buffer *buffer;
-       struct sg_table *table;
-
-       mutex_lock(&client->lock);
-       if (!ion_handle_validate(client, handle)) {
-               pr_err("%s: invalid handle passed to map_dma.\n",
-                      __func__);
-               mutex_unlock(&client->lock);
-               return ERR_PTR(-EINVAL);
-       }
-       buffer = handle->buffer;
-       table = buffer->sg_table;
-       mutex_unlock(&client->lock);
-       return table;
-}
-EXPORT_SYMBOL(ion_sg_table);
-
 static void ion_buffer_sync_for_device(struct ion_buffer *buffer,
                                       struct device *dev,
                                       enum dma_data_direction direction);
@@ -958,7 +818,7 @@ static void ion_unmap_dma_buf(struct dma_buf_attachment *attachment,
 }
 
 void ion_pages_sync_for_device(struct device *dev, struct page *page,
-               size_t size, enum dma_data_direction dir)
+                              size_t size, enum dma_data_direction dir)
 {
        struct scatterlist sg;
 
@@ -998,7 +858,7 @@ static void ion_buffer_sync_for_device(struct ion_buffer *buffer,
 
                if (ion_buffer_page_is_dirty(page))
                        ion_pages_sync_for_device(dev, ion_buffer_page(page),
-                                                       PAGE_SIZE, dir);
+                                                 PAGE_SIZE, dir);
 
                ion_buffer_page_clean(buffer->pages + i);
        }
@@ -1076,7 +936,7 @@ static int ion_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma)
 
        if (!buffer->heap->ops->map_user) {
                pr_err("%s: this heap does not define a method for mapping to userspace\n",
-                       __func__);
+                      __func__);
                return -EINVAL;
        }
 
@@ -1167,7 +1027,7 @@ static struct dma_buf_ops dma_buf_ops = {
 };
 
 struct dma_buf *ion_share_dma_buf(struct ion_client *client,
-                                               struct ion_handle *handle)
+                                 struct ion_handle *handle)
 {
        DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
        struct ion_buffer *buffer;
@@ -1275,7 +1135,7 @@ struct ion_handle *ion_import_dma_buf_fd(struct ion_client *client, int fd)
 }
 EXPORT_SYMBOL(ion_import_dma_buf_fd);
 
-static int ion_sync_for_device(struct ion_client *client, int fd)
+int ion_sync_for_device(struct ion_client *client, int fd)
 {
        struct dma_buf *dmabuf;
        struct ion_buffer *buffer;
@@ -1299,124 +1159,45 @@ static int ion_sync_for_device(struct ion_client *client, int fd)
        return 0;
 }
 
-/* fix up the cases where the ioctl direction bits are incorrect */
-static unsigned int ion_ioctl_dir(unsigned int cmd)
-{
-       switch (cmd) {
-       case ION_IOC_SYNC:
-       case ION_IOC_FREE:
-       case ION_IOC_CUSTOM:
-               return _IOC_WRITE;
-       default:
-               return _IOC_DIR(cmd);
-       }
-}
-
-static long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+int ion_query_heaps(struct ion_client *client, struct ion_heap_query *query)
 {
-       struct ion_client *client = filp->private_data;
        struct ion_device *dev = client->dev;
-       struct ion_handle *cleanup_handle = NULL;
-       int ret = 0;
-       unsigned int dir;
-
-       union {
-               struct ion_fd_data fd;
-               struct ion_allocation_data allocation;
-               struct ion_handle_data handle;
-               struct ion_custom_data custom;
-       } data;
+       struct ion_heap_data __user *buffer = u64_to_user_ptr(query->heaps);
+       int ret = -EINVAL, cnt = 0, max_cnt;
+       struct ion_heap *heap;
+       struct ion_heap_data hdata;
 
-       dir = ion_ioctl_dir(cmd);
+       memset(&hdata, 0, sizeof(hdata));
 
-       if (_IOC_SIZE(cmd) > sizeof(data))
-               return -EINVAL;
+       down_read(&dev->lock);
+       if (!buffer) {
+               query->cnt = dev->heap_cnt;
+               ret = 0;
+               goto out;
+       }
 
-       if (dir & _IOC_WRITE)
-               if (copy_from_user(&data, (void __user *)arg, _IOC_SIZE(cmd)))
-                       return -EFAULT;
+       if (query->cnt <= 0)
+               goto out;
 
-       switch (cmd) {
-       case ION_IOC_ALLOC:
-       {
-               struct ion_handle *handle;
+       max_cnt = query->cnt;
 
-               handle = ion_alloc(client, data.allocation.len,
-                                               data.allocation.align,
-                                               data.allocation.heap_id_mask,
-                                               data.allocation.flags);
-               if (IS_ERR(handle))
-                       return PTR_ERR(handle);
+       plist_for_each_entry(heap, &dev->heaps, node) {
+               strncpy(hdata.name, heap->name, MAX_HEAP_NAME);
+               hdata.name[sizeof(hdata.name) - 1] = '\0';
+               hdata.type = heap->type;
+               hdata.heap_id = heap->id;
 
-               data.allocation.handle = handle->id;
+               ret = copy_to_user(&buffer[cnt],
+                                  &hdata, sizeof(hdata));
 
-               cleanup_handle = handle;
-               break;
-       }
-       case ION_IOC_FREE:
-       {
-               struct ion_handle *handle;
-
-               mutex_lock(&client->lock);
-               handle = ion_handle_get_by_id_nolock(client, data.handle.handle);
-               if (IS_ERR(handle)) {
-                       mutex_unlock(&client->lock);
-                       return PTR_ERR(handle);
-               }
-               ion_free_nolock(client, handle);
-               ion_handle_put_nolock(handle);
-               mutex_unlock(&client->lock);
-               break;
-       }
-       case ION_IOC_SHARE:
-       case ION_IOC_MAP:
-       {
-               struct ion_handle *handle;
-
-               handle = ion_handle_get_by_id(client, data.handle.handle);
-               if (IS_ERR(handle))
-                       return PTR_ERR(handle);
-               data.fd.fd = ion_share_dma_buf_fd(client, handle);
-               ion_handle_put(handle);
-               if (data.fd.fd < 0)
-                       ret = data.fd.fd;
-               break;
-       }
-       case ION_IOC_IMPORT:
-       {
-               struct ion_handle *handle;
-
-               handle = ion_import_dma_buf_fd(client, data.fd.fd);
-               if (IS_ERR(handle))
-                       ret = PTR_ERR(handle);
-               else
-                       data.handle.handle = handle->id;
-               break;
-       }
-       case ION_IOC_SYNC:
-       {
-               ret = ion_sync_for_device(client, data.fd.fd);
-               break;
-       }
-       case ION_IOC_CUSTOM:
-       {
-               if (!dev->custom_ioctl)
-                       return -ENOTTY;
-               ret = dev->custom_ioctl(client, data.custom.cmd,
-                                               data.custom.arg);
-               break;
-       }
-       default:
-               return -ENOTTY;
+               cnt++;
+               if (cnt >= max_cnt)
+                       break;
        }
 
-       if (dir & _IOC_READ) {
-               if (copy_to_user((void __user *)arg, &data, _IOC_SIZE(cmd))) {
-                       if (cleanup_handle)
-                               ion_free(client, cleanup_handle);
-                       return -EFAULT;
-               }
-       }
+       query->cnt = cnt;
+out:
+       up_read(&dev->lock);
        return ret;
 }
 
@@ -1528,7 +1309,7 @@ static int ion_debug_heap_show(struct seq_file *s, void *unused)
        seq_printf(s, "%16s %16zu\n", "total ", total_size);
        if (heap->flags & ION_HEAP_FLAG_DEFER_FREE)
                seq_printf(s, "%16s %16zu\n", "deferred free",
-                               heap->free_list_size);
+                          heap->free_list_size);
        seq_puts(s, "----------------------------------------------------\n");
 
        if (heap->debug_show)
@@ -1588,8 +1369,7 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
 {
        struct dentry *debug_file;
 
-       if (!heap->ops->allocate || !heap->ops->free || !heap->ops->map_dma ||
-           !heap->ops->unmap_dma)
+       if (!heap->ops->allocate || !heap->ops->free)
                pr_err("%s: can not add heap with invalid ops struct.\n",
                       __func__);
 
@@ -1611,15 +1391,15 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
        plist_node_init(&heap->node, -heap->id);
        plist_add(&heap->node, &dev->heaps);
        debug_file = debugfs_create_file(heap->name, 0664,
-                                       dev->heaps_debug_root, heap,
-                                       &debug_heap_fops);
+                                        dev->heaps_debug_root, heap,
+                                        &debug_heap_fops);
 
        if (!debug_file) {
                char buf[256], *path;
 
                path = dentry_path(dev->heaps_debug_root, buf, 256);
                pr_err("Failed to create heap debugfs at %s/%s\n",
-                       path, heap->name);
+                      path, heap->name);
        }
 
        if (heap->shrinker.count_objects && heap->shrinker.scan_objects) {
@@ -1634,10 +1414,11 @@ void ion_device_add_heap(struct ion_device *dev, struct ion_heap *heap)
 
                        path = dentry_path(dev->heaps_debug_root, buf, 256);
                        pr_err("Failed to create heap shrinker debugfs at %s/%s\n",
-                               path, debug_name);
+                              path, debug_name);
                }
        }
 
+       dev->heap_cnt++;
        up_write(&dev->lock);
 }
 EXPORT_SYMBOL(ion_device_add_heap);
@@ -1702,38 +1483,3 @@ void ion_device_destroy(struct ion_device *dev)
        kfree(dev);
 }
 EXPORT_SYMBOL(ion_device_destroy);
-
-void __init ion_reserve(struct ion_platform_data *data)
-{
-       int i;
-
-       for (i = 0; i < data->nr; i++) {
-               if (data->heaps[i].size == 0)
-                       continue;
-
-               if (data->heaps[i].base == 0) {
-                       phys_addr_t paddr;
-
-                       paddr = memblock_alloc_base(data->heaps[i].size,
-                                                   data->heaps[i].align,
-                                                   MEMBLOCK_ALLOC_ANYWHERE);
-                       if (!paddr) {
-                               pr_err("%s: error allocating memblock for heap %d\n",
-                                       __func__, i);
-                               continue;
-                       }
-                       data->heaps[i].base = paddr;
-               } else {
-                       int ret = memblock_reserve(data->heaps[i].base,
-                                              data->heaps[i].size);
-                       if (ret)
-                               pr_err("memblock reserve of %zx@%lx failed\n",
-                                      data->heaps[i].size,
-                                      data->heaps[i].base);
-               }
-               pr_info("%s: %s reserved base %lx size %zu\n", __func__,
-                       data->heaps[i].name,
-                       data->heaps[i].base,
-                       data->heaps[i].size);
-       }
-}
index a1331fc169a11e53f577e2d9cea45558b11c05eb..93dafb4586e43359c050da946f088d95ba35610f 100644 (file)
@@ -72,17 +72,6 @@ struct ion_platform_data {
        struct ion_platform_heap *heaps;
 };
 
-/**
- * ion_reserve() - reserve memory for ion heaps if applicable
- * @data:      platform data specifying starting physical address and
- *             size
- *
- * Calls memblock reserve to set aside memory for heaps that are
- * located at specific memory addresses or of specific sizes not
- * managed by the kernel
- */
-void ion_reserve(struct ion_platform_data *data);
-
 /**
  * ion_client_create() -  allocate a client and returns it
  * @dev:               the global ion device
@@ -129,36 +118,6 @@ struct ion_handle *ion_alloc(struct ion_client *client, size_t len,
  */
 void ion_free(struct ion_client *client, struct ion_handle *handle);
 
-/**
- * ion_phys - returns the physical address and len of a handle
- * @client:    the client
- * @handle:    the handle
- * @addr:      a pointer to put the address in
- * @len:       a pointer to put the length in
- *
- * This function queries the heap for a particular handle to get the
- * handle's physical address.  It't output is only correct if
- * a heap returns physically contiguous memory -- in other cases
- * this api should not be implemented -- ion_sg_table should be used
- * instead.  Returns -EINVAL if the handle is invalid.  This has
- * no implications on the reference counting of the handle --
- * the returned value may not be valid if the caller is not
- * holding a reference.
- */
-int ion_phys(struct ion_client *client, struct ion_handle *handle,
-            ion_phys_addr_t *addr, size_t *len);
-
-/**
- * ion_map_dma - return an sg_table describing a handle
- * @client:    the client
- * @handle:    the handle
- *
- * This function returns the sg_table describing
- * a particular ion handle.
- */
-struct sg_table *ion_sg_table(struct ion_client *client,
-                             struct ion_handle *handle);
-
 /**
  * ion_map_kernel - create mapping for the given handle
  * @client:    the client
index 1fb0d81556da80dbea52e0ac9f6ac36f8384322c..c4f0795fb62e086d41a7d64b753710f46cad075b 100644 (file)
@@ -25,6 +25,8 @@
 #include "ion.h"
 #include "ion_priv.h"
 
+#define ION_CARVEOUT_ALLOCATE_FAIL     -1
+
 struct ion_carveout_heap {
        struct ion_heap heap;
        struct gen_pool *pool;
@@ -56,19 +58,6 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr,
        gen_pool_free(carveout_heap->pool, addr, size);
 }
 
-static int ion_carveout_heap_phys(struct ion_heap *heap,
-                                 struct ion_buffer *buffer,
-                                 ion_phys_addr_t *addr, size_t *len)
-{
-       struct sg_table *table = buffer->priv_virt;
-       struct page *page = sg_page(table->sgl);
-       ion_phys_addr_t paddr = PFN_PHYS(page_to_pfn(page));
-
-       *addr = paddr;
-       *len = buffer->size;
-       return 0;
-}
-
 static int ion_carveout_heap_allocate(struct ion_heap *heap,
                                      struct ion_buffer *buffer,
                                      unsigned long size, unsigned long align,
@@ -95,7 +84,7 @@ static int ion_carveout_heap_allocate(struct ion_heap *heap,
        }
 
        sg_set_page(table->sgl, pfn_to_page(PFN_DOWN(paddr)), size, 0);
-       buffer->priv_virt = table;
+       buffer->sg_table = table;
 
        return 0;
 
@@ -109,7 +98,7 @@ err_free:
 static void ion_carveout_heap_free(struct ion_buffer *buffer)
 {
        struct ion_heap *heap = buffer->heap;
-       struct sg_table *table = buffer->priv_virt;
+       struct sg_table *table = buffer->sg_table;
        struct page *page = sg_page(table->sgl);
        ion_phys_addr_t paddr = PFN_PHYS(page_to_pfn(page));
 
@@ -124,23 +113,9 @@ static void ion_carveout_heap_free(struct ion_buffer *buffer)
        kfree(table);
 }
 
-static struct sg_table *ion_carveout_heap_map_dma(struct ion_heap *heap,
-                                                 struct ion_buffer *buffer)
-{
-       return buffer->priv_virt;
-}
-
-static void ion_carveout_heap_unmap_dma(struct ion_heap *heap,
-                                       struct ion_buffer *buffer)
-{
-}
-
 static struct ion_heap_ops carveout_heap_ops = {
        .allocate = ion_carveout_heap_allocate,
        .free = ion_carveout_heap_free,
-       .phys = ion_carveout_heap_phys,
-       .map_dma = ion_carveout_heap_map_dma,
-       .unmap_dma = ion_carveout_heap_unmap_dma,
        .map_user = ion_heap_map_user,
        .map_kernel = ion_heap_map_kernel,
        .unmap_kernel = ion_heap_unmap_kernel,
index e0553fee9b8aae5e067c3cb957560fbab560c294..70495dc645ea13b03d317b00d6110105e59fede0 100644 (file)
@@ -34,9 +34,9 @@ struct ion_chunk_heap {
 };
 
 static int ion_chunk_heap_allocate(struct ion_heap *heap,
-                                     struct ion_buffer *buffer,
-                                     unsigned long size, unsigned long align,
-                                     unsigned long flags)
+                                  struct ion_buffer *buffer,
+                                  unsigned long size, unsigned long align,
+                                  unsigned long flags)
 {
        struct ion_chunk_heap *chunk_heap =
                container_of(heap, struct ion_chunk_heap, heap);
@@ -71,11 +71,11 @@ static int ion_chunk_heap_allocate(struct ion_heap *heap,
                if (!paddr)
                        goto err;
                sg_set_page(sg, pfn_to_page(PFN_DOWN(paddr)),
-                               chunk_heap->chunk_size, 0);
+                           chunk_heap->chunk_size, 0);
                sg = sg_next(sg);
        }
 
-       buffer->priv_virt = table;
+       buffer->sg_table = table;
        chunk_heap->allocated += allocated_size;
        return 0;
 err:
@@ -95,7 +95,7 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer)
        struct ion_heap *heap = buffer->heap;
        struct ion_chunk_heap *chunk_heap =
                container_of(heap, struct ion_chunk_heap, heap);
-       struct sg_table *table = buffer->priv_virt;
+       struct sg_table *table = buffer->sg_table;
        struct scatterlist *sg;
        int i;
        unsigned long allocated_size;
@@ -106,7 +106,7 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer)
 
        if (ion_buffer_cached(buffer))
                dma_sync_sg_for_device(NULL, table->sgl, table->nents,
-                                                       DMA_BIDIRECTIONAL);
+                                      DMA_BIDIRECTIONAL);
 
        for_each_sg(table->sgl, sg, table->nents, i) {
                gen_pool_free(chunk_heap->pool, page_to_phys(sg_page(sg)),
@@ -117,22 +117,9 @@ static void ion_chunk_heap_free(struct ion_buffer *buffer)
        kfree(table);
 }
 
-static struct sg_table *ion_chunk_heap_map_dma(struct ion_heap *heap,
-                                              struct ion_buffer *buffer)
-{
-       return buffer->priv_virt;
-}
-
-static void ion_chunk_heap_unmap_dma(struct ion_heap *heap,
-                                    struct ion_buffer *buffer)
-{
-}
-
 static struct ion_heap_ops chunk_heap_ops = {
        .allocate = ion_chunk_heap_allocate,
        .free = ion_chunk_heap_free,
-       .map_dma = ion_chunk_heap_map_dma,
-       .unmap_dma = ion_chunk_heap_unmap_dma,
        .map_user = ion_heap_map_user,
        .map_kernel = ion_heap_map_kernel,
        .unmap_kernel = ion_heap_unmap_kernel,
@@ -174,7 +161,7 @@ struct ion_heap *ion_chunk_heap_create(struct ion_platform_heap *heap_data)
        chunk_heap->heap.type = ION_HEAP_TYPE_CHUNK;
        chunk_heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE;
        pr_debug("%s: base %lu size %zu align %ld\n", __func__,
-               chunk_heap->base, heap_data->size, heap_data->align);
+                chunk_heap->base, heap_data->size, heap_data->align);
 
        return &chunk_heap->heap;
 
index a3446da4fdc2a6b70a8fb95a8686895156c781c4..6c7de74bc7ab3d0d9911435a5d2c4986ab663af0 100644 (file)
@@ -78,6 +78,7 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer,
                goto free_table;
        /* keep this for memory release */
        buffer->priv_virt = info;
+       buffer->sg_table = info->table;
        dev_dbg(dev, "Allocate buffer %p\n", buffer);
        return 0;
 
@@ -105,36 +106,6 @@ static void ion_cma_free(struct ion_buffer *buffer)
        kfree(info);
 }
 
-/* return physical address in addr */
-static int ion_cma_phys(struct ion_heap *heap, struct ion_buffer *buffer,
-                       ion_phys_addr_t *addr, size_t *len)
-{
-       struct ion_cma_heap *cma_heap = to_cma_heap(buffer->heap);
-       struct device *dev = cma_heap->dev;
-       struct ion_cma_buffer_info *info = buffer->priv_virt;
-
-       dev_dbg(dev, "Return buffer %p physical address %pa\n", buffer,
-               &info->handle);
-
-       *addr = info->handle;
-       *len = buffer->size;
-
-       return 0;
-}
-
-static struct sg_table *ion_cma_heap_map_dma(struct ion_heap *heap,
-                                            struct ion_buffer *buffer)
-{
-       struct ion_cma_buffer_info *info = buffer->priv_virt;
-
-       return info->table;
-}
-
-static void ion_cma_heap_unmap_dma(struct ion_heap *heap,
-                                  struct ion_buffer *buffer)
-{
-}
-
 static int ion_cma_mmap(struct ion_heap *mapper, struct ion_buffer *buffer,
                        struct vm_area_struct *vma)
 {
@@ -155,16 +126,13 @@ static void *ion_cma_map_kernel(struct ion_heap *heap,
 }
 
 static void ion_cma_unmap_kernel(struct ion_heap *heap,
-                                       struct ion_buffer *buffer)
+                                struct ion_buffer *buffer)
 {
 }
 
 static struct ion_heap_ops ion_cma_ops = {
        .allocate = ion_cma_allocate,
        .free = ion_cma_free,
-       .map_dma = ion_cma_heap_map_dma,
-       .unmap_dma = ion_cma_heap_unmap_dma,
-       .phys = ion_cma_phys,
        .map_user = ion_cma_mmap,
        .map_kernel = ion_cma_map_kernel,
        .unmap_kernel = ion_cma_unmap_kernel,
index 814a3c92a56ef5aa3095fc416b7fcc004105434f..b23f2c76c753e3fb95b191d98e9639a3294f5209 100644 (file)
@@ -99,7 +99,7 @@ static int __init ion_dummy_init(void)
                struct ion_platform_heap *heap_data = &dummy_ion_pdata.heaps[i];
 
                if (heap_data->type == ION_HEAP_TYPE_CARVEOUT &&
-                                                       !heap_data->base)
+                   !heap_data->base)
                        continue;
 
                if (heap_data->type == ION_HEAP_TYPE_CHUNK && !heap_data->base)
@@ -120,12 +120,12 @@ err:
 
        if (carveout_ptr) {
                free_pages_exact(carveout_ptr,
-                               dummy_heaps[ION_HEAP_TYPE_CARVEOUT].size);
+                                dummy_heaps[ION_HEAP_TYPE_CARVEOUT].size);
                carveout_ptr = NULL;
        }
        if (chunk_ptr) {
                free_pages_exact(chunk_ptr,
-                               dummy_heaps[ION_HEAP_TYPE_CHUNK].size);
+                                dummy_heaps[ION_HEAP_TYPE_CHUNK].size);
                chunk_ptr = NULL;
        }
        return err;
@@ -144,12 +144,12 @@ static void __exit ion_dummy_exit(void)
 
        if (carveout_ptr) {
                free_pages_exact(carveout_ptr,
-                               dummy_heaps[ION_HEAP_TYPE_CARVEOUT].size);
+                                dummy_heaps[ION_HEAP_TYPE_CARVEOUT].size);
                carveout_ptr = NULL;
        }
        if (chunk_ptr) {
                free_pages_exact(chunk_ptr,
-                               dummy_heaps[ION_HEAP_TYPE_CHUNK].size);
+                                dummy_heaps[ION_HEAP_TYPE_CHUNK].size);
                chunk_ptr = NULL;
        }
 }
index ca15a87f6fd3d7bd0bee4ca7a77ea488bb8656c8..4e5c0f17f579aec82a8df999680c13f448b78bf2 100644 (file)
@@ -93,7 +93,7 @@ int ion_heap_map_user(struct ion_heap *heap, struct ion_buffer *buffer,
                }
                len = min(len, remainder);
                ret = remap_pfn_range(vma, addr, page_to_pfn(page), len,
-                               vma->vm_page_prot);
+                                     vma->vm_page_prot);
                if (ret)
                        return ret;
                addr += len;
@@ -116,7 +116,7 @@ static int ion_heap_clear_pages(struct page **pages, int num, pgprot_t pgprot)
 }
 
 static int ion_heap_sglist_zero(struct scatterlist *sgl, unsigned int nents,
-                                               pgprot_t pgprot)
+                               pgprot_t pgprot)
 {
        int p = 0;
        int ret = 0;
@@ -181,7 +181,7 @@ size_t ion_heap_freelist_size(struct ion_heap *heap)
 }
 
 static size_t _ion_heap_freelist_drain(struct ion_heap *heap, size_t size,
-                               bool skip_pools)
+                                      bool skip_pools)
 {
        struct ion_buffer *buffer;
        size_t total_drained = 0;
@@ -266,7 +266,7 @@ int ion_heap_init_deferred_free(struct ion_heap *heap)
 }
 
 static unsigned long ion_heap_shrink_count(struct shrinker *shrinker,
-                                               struct shrink_control *sc)
+                                          struct shrink_control *sc)
 {
        struct ion_heap *heap = container_of(shrinker, struct ion_heap,
                                             shrinker);
@@ -279,7 +279,7 @@ static unsigned long ion_heap_shrink_count(struct shrinker *shrinker,
 }
 
 static unsigned long ion_heap_shrink_scan(struct shrinker *shrinker,
-                                               struct shrink_control *sc)
+                                         struct shrink_control *sc)
 {
        struct ion_heap *heap = container_of(shrinker, struct ion_heap,
                                             shrinker);
diff --git a/drivers/staging/android/ion/ion_of.c b/drivers/staging/android/ion/ion_of.c
new file mode 100644 (file)
index 0000000..de0899a
--- /dev/null
@@ -0,0 +1,185 @@
+/*
+ * Based on work from:
+ *   Andrew Andrianov <andrew@ncrmnt.org>
+ *   Google
+ *   The Linux Foundation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/of_address.h>
+#include <linux/clk.h>
+#include <linux/dma-mapping.h>
+#include <linux/cma.h>
+#include <linux/dma-contiguous.h>
+#include <linux/io.h>
+#include <linux/of_reserved_mem.h>
+#include "ion.h"
+#include "ion_priv.h"
+#include "ion_of.h"
+
+int ion_parse_dt_heap_common(struct device_node *heap_node,
+                       struct ion_platform_heap *heap,
+                       struct ion_of_heap *compatible)
+{
+       int i;
+
+       for (i = 0; compatible[i].name != NULL; i++) {
+               if (of_device_is_compatible(heap_node, compatible[i].compat))
+                       break;
+       }
+
+       if (compatible[i].name == NULL)
+               return -ENODEV;
+
+       heap->id = compatible[i].heap_id;
+       heap->type = compatible[i].type;
+       heap->name = compatible[i].name;
+       heap->align = compatible[i].align;
+
+       /* Some kind of callback function pointer? */
+
+       pr_info("%s: id %d type %d name %s align %lx\n", __func__,
+                       heap->id, heap->type, heap->name, heap->align);
+       return 0;
+}
+
+int ion_setup_heap_common(struct platform_device *parent,
+                       struct device_node *heap_node,
+                       struct ion_platform_heap *heap)
+{
+       int ret = 0;
+
+       switch (heap->type) {
+               case ION_HEAP_TYPE_CARVEOUT:
+               case ION_HEAP_TYPE_CHUNK:
+                       if (heap->base && heap->size)
+                               return 0;
+
+                       ret = of_reserved_mem_device_init(heap->priv);
+                       break;
+               default:
+                       break;
+       }
+
+       return ret;
+}
+
+struct ion_platform_data *ion_parse_dt(struct platform_device *pdev,
+                                       struct ion_of_heap *compatible)
+{
+       int num_heaps, ret;
+       const struct device_node *dt_node = pdev->dev.of_node;
+       struct device_node *node;
+       struct ion_platform_heap *heaps;
+       struct ion_platform_data *data;
+       int i = 0;
+
+       num_heaps = of_get_available_child_count(dt_node);
+
+       if (!num_heaps)
+               return ERR_PTR(-EINVAL);
+
+       heaps = devm_kzalloc(&pdev->dev,
+                               sizeof(struct ion_platform_heap)*num_heaps,
+                               GFP_KERNEL);
+       if (!heaps)
+               return ERR_PTR(-ENOMEM);
+
+       data = devm_kzalloc(&pdev->dev, sizeof(struct ion_platform_data),
+                               GFP_KERNEL);
+       if (!data)
+               return ERR_PTR(-ENOMEM);
+
+       for_each_available_child_of_node(dt_node, node) {
+               struct platform_device *heap_pdev;
+
+               ret = ion_parse_dt_heap_common(node, &heaps[i], compatible);
+               if (ret)
+                       return ERR_PTR(ret);
+
+               heap_pdev = of_platform_device_create(node, heaps[i].name,
+                                                       &pdev->dev);
+               if (!pdev)
+                       return ERR_PTR(-ENOMEM);
+               heap_pdev->dev.platform_data = &heaps[i];
+
+               heaps[i].priv = &heap_pdev->dev;
+
+               ret = ion_setup_heap_common(pdev, node, &heaps[i]);
+               if (ret)
+                       goto out_err;
+               i++;
+       }
+
+
+       data->heaps = heaps;
+       data->nr = num_heaps;
+       return data;
+
+out_err:
+       for ( ; i >= 0; i--)
+               if (heaps[i].priv)
+                       of_device_unregister(to_platform_device(heaps[i].priv));
+
+       return ERR_PTR(ret);
+}
+
+void ion_destroy_platform_data(struct ion_platform_data *data)
+{
+       int i;
+
+       for (i = 0; i < data->nr; i++)
+               if (data->heaps[i].priv)
+                       of_device_unregister(to_platform_device(
+                               data->heaps[i].priv));
+}
+
+#ifdef CONFIG_OF_RESERVED_MEM
+#include <linux/of.h>
+#include <linux/of_fdt.h>
+#include <linux/of_reserved_mem.h>
+
+static int rmem_ion_device_init(struct reserved_mem *rmem, struct device *dev)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct ion_platform_heap *heap = pdev->dev.platform_data;
+
+       heap->base = rmem->base;
+       heap->base = rmem->size;
+       pr_debug("%s: heap %s base %pa size %pa dev %p\n", __func__,
+                       heap->name, &rmem->base, &rmem->size, dev);
+       return 0;
+}
+
+static void rmem_ion_device_release(struct reserved_mem *rmem,
+                                       struct device *dev)
+{
+       return;
+}
+
+static const struct reserved_mem_ops rmem_dma_ops = {
+       .device_init    = rmem_ion_device_init,
+       .device_release = rmem_ion_device_release,
+};
+
+static int __init rmem_ion_setup(struct reserved_mem *rmem)
+{
+       phys_addr_t size = rmem->size;
+
+       size = size / 1024;
+
+       pr_info("Ion memory setup at %pa size %pa MiB\n",
+               &rmem->base, &size);
+       rmem->ops = &rmem_dma_ops;
+       return 0;
+}
+RESERVEDMEM_OF_DECLARE(ion, "ion-region", rmem_ion_setup);
+#endif
diff --git a/drivers/staging/android/ion/ion_of.h b/drivers/staging/android/ion/ion_of.h
new file mode 100644 (file)
index 0000000..8241a17
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * Based on work from:
+ *   Andrew Andrianov <andrew@ncrmnt.org>
+ *   Google
+ *   The Linux Foundation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef _ION_OF_H
+#define _ION_OF_H
+
+struct ion_of_heap {
+       const char *compat;
+       int heap_id;
+       int type;
+       const char *name;
+       int align;
+};
+
+#define PLATFORM_HEAP(_compat, _id, _type, _name) \
+{ \
+       .compat = _compat, \
+       .heap_id = _id, \
+       .type = _type, \
+       .name = _name, \
+       .align = PAGE_SIZE, \
+}
+
+struct ion_platform_data *ion_parse_dt(struct platform_device *pdev,
+                                       struct ion_of_heap *compatible);
+
+void ion_destroy_platform_data(struct ion_platform_data *data);
+
+#endif
index 1fe80165a46284613457f12af12e80ad97d5e7a6..aea89c1ec3451e0aace614a93fe2a7cecf928b87 100644 (file)
@@ -30,8 +30,9 @@ static void *ion_page_pool_alloc_pages(struct ion_page_pool *pool)
 
        if (!page)
                return NULL;
-       ion_pages_sync_for_device(NULL, page, PAGE_SIZE << pool->order,
-                                               DMA_BIDIRECTIONAL);
+       if (!pool->cached)
+               ion_pages_sync_for_device(NULL, page, PAGE_SIZE << pool->order,
+                                         DMA_BIDIRECTIONAL);
        return page;
 }
 
@@ -114,7 +115,7 @@ static int ion_page_pool_total(struct ion_page_pool *pool, bool high)
 }
 
 int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
-                               int nr_to_scan)
+                        int nr_to_scan)
 {
        int freed = 0;
        bool high;
@@ -147,7 +148,8 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
        return freed;
 }
 
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order,
+                                          bool cached)
 {
        struct ion_page_pool *pool = kmalloc(sizeof(*pool), GFP_KERNEL);
 
@@ -161,6 +163,8 @@ struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order)
        pool->order = order;
        mutex_init(&pool->mutex);
        plist_node_init(&pool->list, order);
+       if (cached)
+               pool->cached = true;
 
        return pool;
 }
index 0239883bffb72a82c0ffb05bc9aaaf0ee52f32aa..3c3b3245275d4b37cb7a92706fbcb8efee5a9756 100644 (file)
 #include <linux/sched.h>
 #include <linux/shrinker.h>
 #include <linux/types.h>
+#include <linux/miscdevice.h>
 
 #include "ion.h"
 
-struct ion_buffer *ion_handle_buffer(struct ion_handle *handle);
-
 /**
  * struct ion_buffer - metadata for a particular buffer
  * @ref:               reference count
@@ -42,8 +41,6 @@ struct ion_buffer *ion_handle_buffer(struct ion_handle *handle);
  * @size:              size of the buffer
  * @priv_virt:         private data to the buffer representable as
  *                     a void *
- * @priv_phys:         private data to the buffer representable as
- *                     an ion_phys_addr_t (and someday a phys_addr_t)
  * @lock:              protects the buffers cnt fields
  * @kmap_cnt:          number of times the buffer is mapped to the kernel
  * @vaddr:             the kernel mapping if kmap_cnt is not zero
@@ -69,10 +66,7 @@ struct ion_buffer {
        unsigned long flags;
        unsigned long private_flags;
        size_t size;
-       union {
-               void *priv_virt;
-               ion_phys_addr_t priv_phys;
-       };
+       void *priv_virt;
        struct mutex lock;
        int kmap_cnt;
        void *vaddr;
@@ -87,14 +81,85 @@ struct ion_buffer {
 };
 void ion_buffer_destroy(struct ion_buffer *buffer);
 
+/**
+ * struct ion_device - the metadata of the ion device node
+ * @dev:               the actual misc device
+ * @buffers:           an rb tree of all the existing buffers
+ * @buffer_lock:       lock protecting the tree of buffers
+ * @lock:              rwsem protecting the tree of heaps and clients
+ * @heaps:             list of all the heaps in the system
+ * @user_clients:      list of all the clients created from userspace
+ */
+struct ion_device {
+       struct miscdevice dev;
+       struct rb_root buffers;
+       struct mutex buffer_lock;
+       struct rw_semaphore lock;
+       struct plist_head heaps;
+       long (*custom_ioctl)(struct ion_client *client, unsigned int cmd,
+                            unsigned long arg);
+       struct rb_root clients;
+       struct dentry *debug_root;
+       struct dentry *heaps_debug_root;
+       struct dentry *clients_debug_root;
+       int heap_cnt;
+};
+
+/**
+ * struct ion_client - a process/hw block local address space
+ * @node:              node in the tree of all clients
+ * @dev:               backpointer to ion device
+ * @handles:           an rb tree of all the handles in this client
+ * @idr:               an idr space for allocating handle ids
+ * @lock:              lock protecting the tree of handles
+ * @name:              used for debugging
+ * @display_name:      used for debugging (unique version of @name)
+ * @display_serial:    used for debugging (to make display_name unique)
+ * @task:              used for debugging
+ *
+ * A client represents a list of buffers this client may access.
+ * The mutex stored here is used to protect both handles tree
+ * as well as the handles themselves, and should be held while modifying either.
+ */
+struct ion_client {
+       struct rb_node node;
+       struct ion_device *dev;
+       struct rb_root handles;
+       struct idr idr;
+       struct mutex lock;
+       const char *name;
+       char *display_name;
+       int display_serial;
+       struct task_struct *task;
+       pid_t pid;
+       struct dentry *debug_root;
+};
+
+/**
+ * ion_handle - a client local reference to a buffer
+ * @ref:               reference count
+ * @client:            back pointer to the client the buffer resides in
+ * @buffer:            pointer to the buffer
+ * @node:              node in the client's handle rbtree
+ * @kmap_cnt:          count of times this client has mapped to kernel
+ * @id:                        client-unique id allocated by client->idr
+ *
+ * Modifications to node, map_cnt or mapping should be protected by the
+ * lock in the client.  Other fields are never changed after initialization.
+ */
+struct ion_handle {
+       struct kref ref;
+       struct ion_client *client;
+       struct ion_buffer *buffer;
+       struct rb_node node;
+       unsigned int kmap_cnt;
+       int id;
+};
+
 /**
  * struct ion_heap_ops - ops to operate on a given heap
  * @allocate:          allocate memory
  * @free:              free memory
- * @phys               get physical address of a buffer (only define on
- *                     physically contiguous heaps)
- * @map_dma            map the memory for dma to a scatterlist
- * @unmap_dma          unmap the memory for dma
  * @map_kernel         map memory to the kernel
  * @unmap_kernel       unmap memory to the kernel
  * @map_user           map memory to userspace
@@ -111,11 +176,6 @@ struct ion_heap_ops {
                        struct ion_buffer *buffer, unsigned long len,
                        unsigned long align, unsigned long flags);
        void (*free)(struct ion_buffer *buffer);
-       int (*phys)(struct ion_heap *heap, struct ion_buffer *buffer,
-                   ion_phys_addr_t *addr, size_t *len);
-       struct sg_table * (*map_dma)(struct ion_heap *heap,
-                                    struct ion_buffer *buffer);
-       void (*unmap_dma)(struct ion_heap *heap, struct ion_buffer *buffer);
        void * (*map_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
        void (*unmap_kernel)(struct ion_heap *heap, struct ion_buffer *buffer);
        int (*map_user)(struct ion_heap *mapper, struct ion_buffer *buffer,
@@ -327,20 +387,6 @@ void ion_chunk_heap_destroy(struct ion_heap *);
 struct ion_heap *ion_cma_heap_create(struct ion_platform_heap *);
 void ion_cma_heap_destroy(struct ion_heap *);
 
-/**
- * kernel api to allocate/free from carveout -- used when carveout is
- * used to back an architecture specific custom heap
- */
-ion_phys_addr_t ion_carveout_allocate(struct ion_heap *heap, unsigned long size,
-                                     unsigned long align);
-void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr,
-                      unsigned long size);
-/**
- * The carveout heap returns physical addresses, since 0 may be a valid
- * physical address, this is used to indicate allocation failed
- */
-#define ION_CARVEOUT_ALLOCATE_FAIL -1
-
 /**
  * functions for creating and destroying a heap pool -- allows you
  * to keep a pool of pre allocated memory to use from your heap.  Keeping
@@ -360,6 +406,7 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr,
  * @gfp_mask:          gfp_mask to use from alloc
  * @order:             order of pages in the pool
  * @list:              plist node for list of pools
+ * @cached:            it's cached pool or not
  *
  * Allows you to keep a pool of pre allocated pages to use from your heap.
  * Keeping a pool of pages that is ready for dma, ie any cached mapping have
@@ -369,6 +416,7 @@ void ion_carveout_free(struct ion_heap *heap, ion_phys_addr_t addr,
 struct ion_page_pool {
        int high_count;
        int low_count;
+       bool cached;
        struct list_head high_items;
        struct list_head low_items;
        struct mutex mutex;
@@ -377,7 +425,8 @@ struct ion_page_pool {
        struct plist_node list;
 };
 
-struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order);
+struct ion_page_pool *ion_page_pool_create(gfp_t gfp_mask, unsigned int order,
+                                          bool cached);
 void ion_page_pool_destroy(struct ion_page_pool *);
 struct page *ion_page_pool_alloc(struct ion_page_pool *);
 void ion_page_pool_free(struct ion_page_pool *, struct page *);
@@ -403,4 +452,22 @@ int ion_page_pool_shrink(struct ion_page_pool *pool, gfp_t gfp_mask,
 void ion_pages_sync_for_device(struct device *dev, struct page *page,
                size_t size, enum dma_data_direction dir);
 
+long ion_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
+
+int ion_sync_for_device(struct ion_client *client, int fd);
+
+struct ion_handle *ion_handle_get_by_id_nolock(struct ion_client *client,
+                                               int id);
+
+void ion_free_nolock(struct ion_client *client, struct ion_handle *handle);
+
+int ion_handle_put_nolock(struct ion_handle *handle);
+
+struct ion_handle *ion_handle_get_by_id(struct ion_client *client,
+                                               int id);
+
+int ion_handle_put(struct ion_handle *handle);
+
+int ion_query_heaps(struct ion_client *client, struct ion_heap_query *query);
+
 #endif /* _ION_PRIV_H */
index b69dfc706440ebbd25d509d837ed471e2e9a99ba..7e023d505af870ee527e8cce934e8155a7c193de 100644 (file)
 #include "ion.h"
 #include "ion_priv.h"
 
+#define NUM_ORDERS ARRAY_SIZE(orders)
+
 static gfp_t high_order_gfp_flags = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN |
                                     __GFP_NORETRY) & ~__GFP_RECLAIM;
-static gfp_t low_order_gfp_flags  = (GFP_HIGHUSER | __GFP_ZERO | __GFP_NOWARN);
+static gfp_t low_order_gfp_flags  = (GFP_HIGHUSER | __GFP_ZERO);
 static const unsigned int orders[] = {8, 4, 0};
-static const int num_orders = ARRAY_SIZE(orders);
+
 static int order_to_index(unsigned int order)
 {
        int i;
 
-       for (i = 0; i < num_orders; i++)
+       for (i = 0; i < NUM_ORDERS; i++)
                if (order == orders[i])
                        return i;
        BUG();
@@ -49,47 +51,55 @@ static inline unsigned int order_to_size(int order)
 
 struct ion_system_heap {
        struct ion_heap heap;
-       struct ion_page_pool *pools[0];
+       struct ion_page_pool *uncached_pools[NUM_ORDERS];
+       struct ion_page_pool *cached_pools[NUM_ORDERS];
 };
 
+/**
+ * The page from page-pool are all zeroed before. We need do cache
+ * clean for cached buffer. The uncached buffer are always non-cached
+ * since it's allocated. So no need for non-cached pages.
+ */
 static struct page *alloc_buffer_page(struct ion_system_heap *heap,
                                      struct ion_buffer *buffer,
                                      unsigned long order)
 {
        bool cached = ion_buffer_cached(buffer);
-       struct ion_page_pool *pool = heap->pools[order_to_index(order)];
+       struct ion_page_pool *pool;
        struct page *page;
 
-       if (!cached) {
-               page = ion_page_pool_alloc(pool);
-       } else {
-               gfp_t gfp_flags = low_order_gfp_flags;
+       if (!cached)
+               pool = heap->uncached_pools[order_to_index(order)];
+       else
+               pool = heap->cached_pools[order_to_index(order)];
 
-               if (order > 4)
-                       gfp_flags = high_order_gfp_flags;
-               page = alloc_pages(gfp_flags | __GFP_COMP, order);
-               if (!page)
-                       return NULL;
-               ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
-                                               DMA_BIDIRECTIONAL);
-       }
+       page = ion_page_pool_alloc(pool);
 
+       if (cached)
+               ion_pages_sync_for_device(NULL, page, PAGE_SIZE << order,
+                                         DMA_BIDIRECTIONAL);
        return page;
 }
 
 static void free_buffer_page(struct ion_system_heap *heap,
                             struct ion_buffer *buffer, struct page *page)
 {
+       struct ion_page_pool *pool;
        unsigned int order = compound_order(page);
        bool cached = ion_buffer_cached(buffer);
 
-       if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE)) {
-               struct ion_page_pool *pool = heap->pools[order_to_index(order)];
-
-               ion_page_pool_free(pool, page);
-       } else {
+       /* go to system */
+       if (buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE) {
                __free_pages(page, order);
+               return;
        }
+
+       if (!cached)
+               pool = heap->uncached_pools[order_to_index(order)];
+       else
+               pool = heap->cached_pools[order_to_index(order)];
+
+       ion_page_pool_free(pool, page);
 }
 
 
@@ -101,7 +111,7 @@ static struct page *alloc_largest_available(struct ion_system_heap *heap,
        struct page *page;
        int i;
 
-       for (i = 0; i < num_orders; i++) {
+       for (i = 0; i < NUM_ORDERS; i++) {
                if (size < order_to_size(orders[i]))
                        continue;
                if (max_order < orders[i])
@@ -118,9 +128,9 @@ static struct page *alloc_largest_available(struct ion_system_heap *heap,
 }
 
 static int ion_system_heap_allocate(struct ion_heap *heap,
-                                    struct ion_buffer *buffer,
-                                    unsigned long size, unsigned long align,
-                                    unsigned long flags)
+                                   struct ion_buffer *buffer,
+                                   unsigned long size, unsigned long align,
+                                   unsigned long flags)
 {
        struct ion_system_heap *sys_heap = container_of(heap,
                                                        struct ion_system_heap,
@@ -142,7 +152,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
        INIT_LIST_HEAD(&pages);
        while (size_remaining > 0) {
                page = alloc_largest_available(sys_heap, buffer, size_remaining,
-                                               max_order);
+                                              max_order);
                if (!page)
                        goto free_pages;
                list_add_tail(&page->lru, &pages);
@@ -164,7 +174,7 @@ static int ion_system_heap_allocate(struct ion_heap *heap,
                list_del(&page->lru);
        }
 
-       buffer->priv_virt = table;
+       buffer->sg_table = table;
        return 0;
 
 free_table:
@@ -181,16 +191,11 @@ static void ion_system_heap_free(struct ion_buffer *buffer)
                                                        struct ion_system_heap,
                                                        heap);
        struct sg_table *table = buffer->sg_table;
-       bool cached = ion_buffer_cached(buffer);
        struct scatterlist *sg;
        int i;
 
-       /*
-        *  uncached pages come from the page pools, zero them before returning
-        *  for security purposes (other allocations are zerod at
-        *  alloc time
-        */
-       if (!cached && !(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
+       /* zero the buffer before goto page pool */
+       if (!(buffer->private_flags & ION_PRIV_FLAG_SHRINKER_FREE))
                ion_heap_buffer_zero(buffer);
 
        for_each_sg(table->sgl, sg, table->nents, i)
@@ -199,20 +204,11 @@ static void ion_system_heap_free(struct ion_buffer *buffer)
        kfree(table);
 }
 
-static struct sg_table *ion_system_heap_map_dma(struct ion_heap *heap,
-                                               struct ion_buffer *buffer)
-{
-       return buffer->priv_virt;
-}
-
-static void ion_system_heap_unmap_dma(struct ion_heap *heap,
-                                     struct ion_buffer *buffer)
-{
-}
-
 static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
-                                       int nr_to_scan)
+                                 int nr_to_scan)
 {
+       struct ion_page_pool *uncached_pool;
+       struct ion_page_pool *cached_pool;
        struct ion_system_heap *sys_heap;
        int nr_total = 0;
        int i, nr_freed;
@@ -223,28 +219,41 @@ static int ion_system_heap_shrink(struct ion_heap *heap, gfp_t gfp_mask,
        if (!nr_to_scan)
                only_scan = 1;
 
-       for (i = 0; i < num_orders; i++) {
-               struct ion_page_pool *pool = sys_heap->pools[i];
-
-               nr_freed = ion_page_pool_shrink(pool, gfp_mask, nr_to_scan);
-               nr_total += nr_freed;
-
-               if (!only_scan) {
+       for (i = 0; i < NUM_ORDERS; i++) {
+               uncached_pool = sys_heap->uncached_pools[i];
+               cached_pool = sys_heap->cached_pools[i];
+
+               if (only_scan) {
+                       nr_total += ion_page_pool_shrink(uncached_pool,
+                                                        gfp_mask,
+                                                        nr_to_scan);
+
+                       nr_total += ion_page_pool_shrink(cached_pool,
+                                                        gfp_mask,
+                                                        nr_to_scan);
+               } else {
+                       nr_freed = ion_page_pool_shrink(uncached_pool,
+                                                       gfp_mask,
+                                                       nr_to_scan);
+                       nr_to_scan -= nr_freed;
+                       nr_total += nr_freed;
+                       if (nr_to_scan <= 0)
+                               break;
+                       nr_freed = ion_page_pool_shrink(cached_pool,
+                                                       gfp_mask,
+                                                       nr_to_scan);
                        nr_to_scan -= nr_freed;
-                       /* shrink completed */
+                       nr_total += nr_freed;
                        if (nr_to_scan <= 0)
                                break;
                }
        }
-
        return nr_total;
 }
 
 static struct ion_heap_ops system_heap_ops = {
        .allocate = ion_system_heap_allocate,
        .free = ion_system_heap_free,
-       .map_dma = ion_system_heap_map_dma,
-       .unmap_dma = ion_system_heap_unmap_dma,
        .map_kernel = ion_heap_map_kernel,
        .unmap_kernel = ion_heap_unmap_kernel,
        .map_user = ion_heap_map_user,
@@ -259,52 +268,89 @@ static int ion_system_heap_debug_show(struct ion_heap *heap, struct seq_file *s,
                                                        struct ion_system_heap,
                                                        heap);
        int i;
+       struct ion_page_pool *pool;
+
+       for (i = 0; i < NUM_ORDERS; i++) {
+               pool = sys_heap->uncached_pools[i];
+
+               seq_printf(s, "%d order %u highmem pages uncached %lu total\n",
+                          pool->high_count, pool->order,
+                          (PAGE_SIZE << pool->order) * pool->high_count);
+               seq_printf(s, "%d order %u lowmem pages uncached %lu total\n",
+                          pool->low_count, pool->order,
+                          (PAGE_SIZE << pool->order) * pool->low_count);
+       }
 
-       for (i = 0; i < num_orders; i++) {
-               struct ion_page_pool *pool = sys_heap->pools[i];
+       for (i = 0; i < NUM_ORDERS; i++) {
+               pool = sys_heap->cached_pools[i];
 
-               seq_printf(s, "%d order %u highmem pages in pool = %lu total\n",
+               seq_printf(s, "%d order %u highmem pages cached %lu total\n",
                           pool->high_count, pool->order,
                           (PAGE_SIZE << pool->order) * pool->high_count);
-               seq_printf(s, "%d order %u lowmem pages in pool = %lu total\n",
+               seq_printf(s, "%d order %u lowmem pages cached %lu total\n",
                           pool->low_count, pool->order,
                           (PAGE_SIZE << pool->order) * pool->low_count);
        }
        return 0;
 }
 
+static void ion_system_heap_destroy_pools(struct ion_page_pool **pools)
+{
+       int i;
+
+       for (i = 0; i < NUM_ORDERS; i++)
+               if (pools[i])
+                       ion_page_pool_destroy(pools[i]);
+}
+
+static int ion_system_heap_create_pools(struct ion_page_pool **pools,
+                                       bool cached)
+{
+       int i;
+       gfp_t gfp_flags = low_order_gfp_flags;
+
+       for (i = 0; i < NUM_ORDERS; i++) {
+               struct ion_page_pool *pool;
+
+               if (orders[i] > 4)
+                       gfp_flags = high_order_gfp_flags;
+
+               pool = ion_page_pool_create(gfp_flags, orders[i], cached);
+               if (!pool)
+                       goto err_create_pool;
+               pools[i] = pool;
+       }
+       return 0;
+
+err_create_pool:
+       ion_system_heap_destroy_pools(pools);
+       return -ENOMEM;
+}
+
 struct ion_heap *ion_system_heap_create(struct ion_platform_heap *unused)
 {
        struct ion_system_heap *heap;
-       int i;
 
-       heap = kzalloc(sizeof(struct ion_system_heap) +
-                       sizeof(struct ion_page_pool *) * num_orders,
-                       GFP_KERNEL);
+       heap = kzalloc(sizeof(*heap), GFP_KERNEL);
        if (!heap)
                return ERR_PTR(-ENOMEM);
        heap->heap.ops = &system_heap_ops;
        heap->heap.type = ION_HEAP_TYPE_SYSTEM;
        heap->heap.flags = ION_HEAP_FLAG_DEFER_FREE;
 
-       for (i = 0; i < num_orders; i++) {
-               struct ion_page_pool *pool;
-               gfp_t gfp_flags = low_order_gfp_flags;
+       if (ion_system_heap_create_pools(heap->uncached_pools, false))
+               goto free_heap;
 
-               if (orders[i] > 4)
-                       gfp_flags = high_order_gfp_flags;
-               pool = ion_page_pool_create(gfp_flags, orders[i]);
-               if (!pool)
-                       goto destroy_pools;
-               heap->pools[i] = pool;
-       }
+       if (ion_system_heap_create_pools(heap->cached_pools, true))
+               goto destroy_uncached_pools;
 
        heap->heap.debug_show = ion_system_heap_debug_show;
        return &heap->heap;
 
-destroy_pools:
-       while (i--)
-               ion_page_pool_destroy(heap->pools[i]);
+destroy_uncached_pools:
+       ion_system_heap_destroy_pools(heap->uncached_pools);
+
+free_heap:
        kfree(heap);
        return ERR_PTR(-ENOMEM);
 }
@@ -316,8 +362,10 @@ void ion_system_heap_destroy(struct ion_heap *heap)
                                                        heap);
        int i;
 
-       for (i = 0; i < num_orders; i++)
-               ion_page_pool_destroy(sys_heap->pools[i]);
+       for (i = 0; i < NUM_ORDERS; i++) {
+               ion_page_pool_destroy(sys_heap->uncached_pools[i]);
+               ion_page_pool_destroy(sys_heap->cached_pools[i]);
+       }
        kfree(sys_heap);
 }
 
@@ -358,7 +406,7 @@ static int ion_system_contig_heap_allocate(struct ion_heap *heap,
 
        sg_set_page(table->sgl, page, len, 0);
 
-       buffer->priv_virt = table;
+       buffer->sg_table = table;
 
        ion_pages_sync_for_device(NULL, page, len, DMA_BIDIRECTIONAL);
 
@@ -375,7 +423,7 @@ free_pages:
 
 static void ion_system_contig_heap_free(struct ion_buffer *buffer)
 {
-       struct sg_table *table = buffer->priv_virt;
+       struct sg_table *table = buffer->sg_table;
        struct page *page = sg_page(table->sgl);
        unsigned long pages = PAGE_ALIGN(buffer->size) >> PAGE_SHIFT;
        unsigned long i;
@@ -386,34 +434,9 @@ static void ion_system_contig_heap_free(struct ion_buffer *buffer)
        kfree(table);
 }
 
-static int ion_system_contig_heap_phys(struct ion_heap *heap,
-                                      struct ion_buffer *buffer,
-                                      ion_phys_addr_t *addr, size_t *len)
-{
-       struct sg_table *table = buffer->priv_virt;
-       struct page *page = sg_page(table->sgl);
-       *addr = page_to_phys(page);
-       *len = buffer->size;
-       return 0;
-}
-
-static struct sg_table *ion_system_contig_heap_map_dma(struct ion_heap *heap,
-                                               struct ion_buffer *buffer)
-{
-       return buffer->priv_virt;
-}
-
-static void ion_system_contig_heap_unmap_dma(struct ion_heap *heap,
-                                            struct ion_buffer *buffer)
-{
-}
-
 static struct ion_heap_ops kmalloc_ops = {
        .allocate = ion_system_contig_heap_allocate,
        .free = ion_system_contig_heap_free,
-       .phys = ion_system_contig_heap_phys,
-       .map_dma = ion_system_contig_heap_map_dma,
-       .unmap_dma = ion_system_contig_heap_unmap_dma,
        .map_kernel = ion_heap_map_kernel,
        .unmap_kernel = ion_heap_unmap_kernel,
        .map_user = ion_heap_map_user,
index 5a396a1a8238262a554ecf2a63e1a690539b2799..5abf8320a96aaae2387fdf7e42f5a9a85da0567b 100644 (file)
@@ -42,7 +42,8 @@ struct ion_test_data {
 };
 
 static int ion_handle_test_dma(struct device *dev, struct dma_buf *dma_buf,
-               void __user *ptr, size_t offset, size_t size, bool write)
+                              void __user *ptr, size_t offset, size_t size,
+                              bool write)
 {
        int ret = 0;
        struct dma_buf_attachment *attach;
@@ -98,7 +99,7 @@ err:
 }
 
 static int ion_handle_test_kernel(struct dma_buf *dma_buf, void __user *ptr,
-               size_t offset, size_t size, bool write)
+                                 size_t offset, size_t size, bool write)
 {
        int ret;
        unsigned long page_offset = offset >> PAGE_SHIFT;
@@ -144,7 +145,7 @@ err:
 }
 
 static long ion_test_ioctl(struct file *filp, unsigned int cmd,
-                                               unsigned long arg)
+                          unsigned long arg)
 {
        struct ion_test_data *test_data = filp->private_data;
        int ret = 0;
@@ -179,17 +180,19 @@ static long ion_test_ioctl(struct file *filp, unsigned int cmd,
        case ION_IOC_TEST_DMA_MAPPING:
        {
                ret = ion_handle_test_dma(test_data->dev, test_data->dma_buf,
-                                       u64_to_uptr(data.test_rw.ptr),
-                                       data.test_rw.offset, data.test_rw.size,
-                                       data.test_rw.write);
+                                         u64_to_uptr(data.test_rw.ptr),
+                                         data.test_rw.offset,
+                                         data.test_rw.size,
+                                         data.test_rw.write);
                break;
        }
        case ION_IOC_TEST_KERNEL_MAPPING:
        {
                ret = ion_handle_test_kernel(test_data->dma_buf,
-                                       u64_to_uptr(data.test_rw.ptr),
-                                       data.test_rw.offset, data.test_rw.size,
-                                       data.test_rw.write);
+                                            u64_to_uptr(data.test_rw.ptr),
+                                            data.test_rw.offset,
+                                            data.test_rw.size,
+                                            data.test_rw.write);
                break;
        }
        default:
@@ -242,7 +245,7 @@ static int __init ion_test_probe(struct platform_device *pdev)
        struct ion_test_device *testdev;
 
        testdev = devm_kzalloc(&pdev->dev, sizeof(struct ion_test_device),
-                               GFP_KERNEL);
+                              GFP_KERNEL);
        if (!testdev)
                return -ENOMEM;
 
index 45a1b4ec4ca33000e96faee0cb1cff7933b91580..80d7adf439c7b7954bb80a2ae5e80e9b9f84ecd0 100644 (file)
@@ -92,8 +92,8 @@ static unsigned long lowmem_scan(struct shrinker *s, struct shrink_control *sc)
        int array_size = ARRAY_SIZE(lowmem_adj);
        int other_free = global_page_state(NR_FREE_PAGES) - totalreserve_pages;
        int other_file = global_node_page_state(NR_FILE_PAGES) -
-                                               global_node_page_state(NR_SHMEM) -
-                                               total_swapcache_pages();
+                               global_node_page_state(NR_SHMEM) -
+                               total_swapcache_pages();
 
        if (lowmem_adj_size < array_size)
                array_size = lowmem_adj_size;
diff --git a/drivers/staging/android/sw_sync.c b/drivers/staging/android/sw_sync.c
deleted file mode 100644 (file)
index 115c917..0000000
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * drivers/dma-buf/sw_sync.c
- *
- * Copyright (C) 2012 Google, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-
-#include <linux/file.h>
-#include <linux/fs.h>
-#include <linux/uaccess.h>
-#include <linux/slab.h>
-#include <linux/sync_file.h>
-
-#include "sync_debug.h"
-
-#define CREATE_TRACE_POINTS
-#include "trace/sync.h"
-
-struct sw_sync_create_fence_data {
-       __u32   value;
-       char    name[32];
-       __s32   fence; /* fd of new fence */
-};
-
-#define SW_SYNC_IOC_MAGIC      'W'
-
-#define SW_SYNC_IOC_CREATE_FENCE       _IOWR(SW_SYNC_IOC_MAGIC, 0,\
-               struct sw_sync_create_fence_data)
-#define SW_SYNC_IOC_INC                        _IOW(SW_SYNC_IOC_MAGIC, 1, __u32)
-
-static const struct fence_ops timeline_fence_ops;
-
-static inline struct sync_pt *fence_to_sync_pt(struct fence *fence)
-{
-       if (fence->ops != &timeline_fence_ops)
-               return NULL;
-       return container_of(fence, struct sync_pt, base);
-}
-
-/**
- * sync_timeline_create() - creates a sync object
- * @name:      sync_timeline name
- *
- * Creates a new sync_timeline. Returns the sync_timeline object or NULL in
- * case of error.
- */
-struct sync_timeline *sync_timeline_create(const char *name)
-{
-       struct sync_timeline *obj;
-
-       obj = kzalloc(sizeof(*obj), GFP_KERNEL);
-       if (!obj)
-               return NULL;
-
-       kref_init(&obj->kref);
-       obj->context = fence_context_alloc(1);
-       strlcpy(obj->name, name, sizeof(obj->name));
-
-       INIT_LIST_HEAD(&obj->child_list_head);
-       INIT_LIST_HEAD(&obj->active_list_head);
-       spin_lock_init(&obj->child_list_lock);
-
-       sync_timeline_debug_add(obj);
-
-       return obj;
-}
-
-static void sync_timeline_free(struct kref *kref)
-{
-       struct sync_timeline *obj =
-               container_of(kref, struct sync_timeline, kref);
-
-       sync_timeline_debug_remove(obj);
-
-       kfree(obj);
-}
-
-static void sync_timeline_get(struct sync_timeline *obj)
-{
-       kref_get(&obj->kref);
-}
-
-static void sync_timeline_put(struct sync_timeline *obj)
-{
-       kref_put(&obj->kref, sync_timeline_free);
-}
-
-/**
- * sync_timeline_signal() - signal a status change on a sync_timeline
- * @obj:       sync_timeline to signal
- * @inc:       num to increment on timeline->value
- *
- * A sync implementation should call this any time one of it's fences
- * has signaled or has an error condition.
- */
-static void sync_timeline_signal(struct sync_timeline *obj, unsigned int inc)
-{
-       unsigned long flags;
-       struct sync_pt *pt, *next;
-
-       trace_sync_timeline(obj);
-
-       spin_lock_irqsave(&obj->child_list_lock, flags);
-
-       obj->value += inc;
-
-       list_for_each_entry_safe(pt, next, &obj->active_list_head,
-                                active_list) {
-               if (fence_is_signaled_locked(&pt->base))
-                       list_del_init(&pt->active_list);
-       }
-
-       spin_unlock_irqrestore(&obj->child_list_lock, flags);
-}
-
-/**
- * sync_pt_create() - creates a sync pt
- * @parent:    fence's parent sync_timeline
- * @size:      size to allocate for this pt
- * @inc:       value of the fence
- *
- * Creates a new sync_pt as a child of @parent.  @size bytes will be
- * allocated allowing for implementation specific data to be kept after
- * the generic sync_timeline struct. Returns the sync_pt object or
- * NULL in case of error.
- */
-static struct sync_pt *sync_pt_create(struct sync_timeline *obj, int size,
-                            unsigned int value)
-{
-       unsigned long flags;
-       struct sync_pt *pt;
-
-       if (size < sizeof(*pt))
-               return NULL;
-
-       pt = kzalloc(size, GFP_KERNEL);
-       if (!pt)
-               return NULL;
-
-       spin_lock_irqsave(&obj->child_list_lock, flags);
-       sync_timeline_get(obj);
-       fence_init(&pt->base, &timeline_fence_ops, &obj->child_list_lock,
-                  obj->context, value);
-       list_add_tail(&pt->child_list, &obj->child_list_head);
-       INIT_LIST_HEAD(&pt->active_list);
-       spin_unlock_irqrestore(&obj->child_list_lock, flags);
-       return pt;
-}
-
-static const char *timeline_fence_get_driver_name(struct fence *fence)
-{
-       return "sw_sync";
-}
-
-static const char *timeline_fence_get_timeline_name(struct fence *fence)
-{
-       struct sync_timeline *parent = fence_parent(fence);
-
-       return parent->name;
-}
-
-static void timeline_fence_release(struct fence *fence)
-{
-       struct sync_pt *pt = fence_to_sync_pt(fence);
-       struct sync_timeline *parent = fence_parent(fence);
-       unsigned long flags;
-
-       spin_lock_irqsave(fence->lock, flags);
-       list_del(&pt->child_list);
-       if (WARN_ON_ONCE(!list_empty(&pt->active_list)))
-               list_del(&pt->active_list);
-       spin_unlock_irqrestore(fence->lock, flags);
-
-       sync_timeline_put(parent);
-       fence_free(fence);
-}
-
-static bool timeline_fence_signaled(struct fence *fence)
-{
-       struct sync_timeline *parent = fence_parent(fence);
-
-       return (fence->seqno > parent->value) ? false : true;
-}
-
-static bool timeline_fence_enable_signaling(struct fence *fence)
-{
-       struct sync_pt *pt = fence_to_sync_pt(fence);
-       struct sync_timeline *parent = fence_parent(fence);
-
-       if (timeline_fence_signaled(fence))
-               return false;
-
-       list_add_tail(&pt->active_list, &parent->active_list_head);
-       return true;
-}
-
-static void timeline_fence_value_str(struct fence *fence,
-                                   char *str, int size)
-{
-       snprintf(str, size, "%d", fence->seqno);
-}
-
-static void timeline_fence_timeline_value_str(struct fence *fence,
-                                            char *str, int size)
-{
-       struct sync_timeline *parent = fence_parent(fence);
-
-       snprintf(str, size, "%d", parent->value);
-}
-
-static const struct fence_ops timeline_fence_ops = {
-       .get_driver_name = timeline_fence_get_driver_name,
-       .get_timeline_name = timeline_fence_get_timeline_name,
-       .enable_signaling = timeline_fence_enable_signaling,
-       .signaled = timeline_fence_signaled,
-       .wait = fence_default_wait,
-       .release = timeline_fence_release,
-       .fence_value_str = timeline_fence_value_str,
-       .timeline_value_str = timeline_fence_timeline_value_str,
-};
-
-/*
- * *WARNING*
- *
- * improper use of this can result in deadlocking kernel drivers from userspace.
- */
-
-/* opening sw_sync create a new sync obj */
-static int sw_sync_debugfs_open(struct inode *inode, struct file *file)
-{
-       struct sync_timeline *obj;
-       char task_comm[TASK_COMM_LEN];
-
-       get_task_comm(task_comm, current);
-
-       obj = sync_timeline_create(task_comm);
-       if (!obj)
-               return -ENOMEM;
-
-       file->private_data = obj;
-
-       return 0;
-}
-
-static int sw_sync_debugfs_release(struct inode *inode, struct file *file)
-{
-       struct sync_timeline *obj = file->private_data;
-
-       smp_wmb();
-
-       sync_timeline_put(obj);
-       return 0;
-}
-
-static long sw_sync_ioctl_create_fence(struct sync_timeline *obj,
-                                      unsigned long arg)
-{
-       int fd = get_unused_fd_flags(O_CLOEXEC);
-       int err;
-       struct sync_pt *pt;
-       struct sync_file *sync_file;
-       struct sw_sync_create_fence_data data;
-
-       if (fd < 0)
-               return fd;
-
-       if (copy_from_user(&data, (void __user *)arg, sizeof(data))) {
-               err = -EFAULT;
-               goto err;
-       }
-
-       pt = sync_pt_create(obj, sizeof(*pt), data.value);
-       if (!pt) {
-               err = -ENOMEM;
-               goto err;
-       }
-
-       sync_file = sync_file_create(&pt->base);
-       if (!sync_file) {
-               fence_put(&pt->base);
-               err = -ENOMEM;
-               goto err;
-       }
-
-       data.fence = fd;
-       if (copy_to_user((void __user *)arg, &data, sizeof(data))) {
-               fput(sync_file->file);
-               err = -EFAULT;
-               goto err;
-       }
-
-       fd_install(fd, sync_file->file);
-
-       return 0;
-
-err:
-       put_unused_fd(fd);
-       return err;
-}
-
-static long sw_sync_ioctl_inc(struct sync_timeline *obj, unsigned long arg)
-{
-       u32 value;
-
-       if (copy_from_user(&value, (void __user *)arg, sizeof(value)))
-               return -EFAULT;
-
-       sync_timeline_signal(obj, value);
-
-       return 0;
-}
-
-static long sw_sync_ioctl(struct file *file, unsigned int cmd,
-                         unsigned long arg)
-{
-       struct sync_timeline *obj = file->private_data;
-
-       switch (cmd) {
-       case SW_SYNC_IOC_CREATE_FENCE:
-               return sw_sync_ioctl_create_fence(obj, arg);
-
-       case SW_SYNC_IOC_INC:
-               return sw_sync_ioctl_inc(obj, arg);
-
-       default:
-               return -ENOTTY;
-       }
-}
-
-const struct file_operations sw_sync_debugfs_fops = {
-       .open           = sw_sync_debugfs_open,
-       .release        = sw_sync_debugfs_release,
-       .unlocked_ioctl = sw_sync_ioctl,
-       .compat_ioctl   = sw_sync_ioctl,
-};
diff --git a/drivers/staging/android/sync_debug.c b/drivers/staging/android/sync_debug.c
deleted file mode 100644 (file)
index 961a94b..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * drivers/base/sync.c
- *
- * Copyright (C) 2012 Google, Inc.
- *
- * This software is licensed under the terms of the GNU General Public
- * License version 2, as published by the Free Software Foundation, and
- * may be copied, distributed, and modified under those terms.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-
-#include <linux/debugfs.h>
-#include "sync_debug.h"
-
-static struct dentry *dbgfs;
-
-static LIST_HEAD(sync_timeline_list_head);
-static DEFINE_SPINLOCK(sync_timeline_list_lock);
-static LIST_HEAD(sync_file_list_head);
-static DEFINE_SPINLOCK(sync_file_list_lock);
-
-void sync_timeline_debug_add(struct sync_timeline *obj)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&sync_timeline_list_lock, flags);
-       list_add_tail(&obj->sync_timeline_list, &sync_timeline_list_head);
-       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
-}
-
-void sync_timeline_debug_remove(struct sync_timeline *obj)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&sync_timeline_list_lock, flags);
-       list_del(&obj->sync_timeline_list);
-       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
-}
-
-void sync_file_debug_add(struct sync_file *sync_file)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&sync_file_list_lock, flags);
-       list_add_tail(&sync_file->sync_file_list, &sync_file_list_head);
-       spin_unlock_irqrestore(&sync_file_list_lock, flags);
-}
-
-void sync_file_debug_remove(struct sync_file *sync_file)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&sync_file_list_lock, flags);
-       list_del(&sync_file->sync_file_list);
-       spin_unlock_irqrestore(&sync_file_list_lock, flags);
-}
-
-static const char *sync_status_str(int status)
-{
-       if (status == 0)
-               return "signaled";
-
-       if (status > 0)
-               return "active";
-
-       return "error";
-}
-
-static void sync_print_fence(struct seq_file *s, struct fence *fence, bool show)
-{
-       int status = 1;
-       struct sync_timeline *parent = fence_parent(fence);
-
-       if (fence_is_signaled_locked(fence))
-               status = fence->status;
-
-       seq_printf(s, "  %s%sfence %s",
-                  show ? parent->name : "",
-                  show ? "_" : "",
-                  sync_status_str(status));
-
-       if (status <= 0) {
-               struct timespec64 ts64 =
-                       ktime_to_timespec64(fence->timestamp);
-
-               seq_printf(s, "@%lld.%09ld", (s64)ts64.tv_sec, ts64.tv_nsec);
-       }
-
-       if (fence->ops->timeline_value_str &&
-               fence->ops->fence_value_str) {
-               char value[64];
-               bool success;
-
-               fence->ops->fence_value_str(fence, value, sizeof(value));
-               success = strlen(value);
-
-               if (success) {
-                       seq_printf(s, ": %s", value);
-
-                       fence->ops->timeline_value_str(fence, value,
-                                                      sizeof(value));
-
-                       if (strlen(value))
-                               seq_printf(s, " / %s", value);
-               }
-       }
-
-       seq_puts(s, "\n");
-}
-
-static void sync_print_obj(struct seq_file *s, struct sync_timeline *obj)
-{
-       struct list_head *pos;
-       unsigned long flags;
-
-       seq_printf(s, "%s: %d\n", obj->name, obj->value);
-
-       spin_lock_irqsave(&obj->child_list_lock, flags);
-       list_for_each(pos, &obj->child_list_head) {
-               struct sync_pt *pt =
-                       container_of(pos, struct sync_pt, child_list);
-               sync_print_fence(s, &pt->base, false);
-       }
-       spin_unlock_irqrestore(&obj->child_list_lock, flags);
-}
-
-static void sync_print_sync_file(struct seq_file *s,
-                                 struct sync_file *sync_file)
-{
-       int i;
-
-       seq_printf(s, "[%p] %s: %s\n", sync_file, sync_file->name,
-                  sync_status_str(!fence_is_signaled(sync_file->fence)));
-
-       if (fence_is_array(sync_file->fence)) {
-               struct fence_array *array = to_fence_array(sync_file->fence);
-
-               for (i = 0; i < array->num_fences; ++i)
-                       sync_print_fence(s, array->fences[i], true);
-       } else {
-               sync_print_fence(s, sync_file->fence, true);
-       }
-}
-
-static int sync_debugfs_show(struct seq_file *s, void *unused)
-{
-       unsigned long flags;
-       struct list_head *pos;
-
-       seq_puts(s, "objs:\n--------------\n");
-
-       spin_lock_irqsave(&sync_timeline_list_lock, flags);
-       list_for_each(pos, &sync_timeline_list_head) {
-               struct sync_timeline *obj =
-                       container_of(pos, struct sync_timeline,
-                                    sync_timeline_list);
-
-               sync_print_obj(s, obj);
-               seq_puts(s, "\n");
-       }
-       spin_unlock_irqrestore(&sync_timeline_list_lock, flags);
-
-       seq_puts(s, "fences:\n--------------\n");
-
-       spin_lock_irqsave(&sync_file_list_lock, flags);
-       list_for_each(pos, &sync_file_list_head) {
-               struct sync_file *sync_file =
-                       container_of(pos, struct sync_file, sync_file_list);
-
-               sync_print_sync_file(s, sync_file);
-               seq_puts(s, "\n");
-       }
-       spin_unlock_irqrestore(&sync_file_list_lock, flags);
-       return 0;
-}
-
-static int sync_info_debugfs_open(struct inode *inode, struct file *file)
-{
-       return single_open(file, sync_debugfs_show, inode->i_private);
-}
-
-static const struct file_operations sync_info_debugfs_fops = {
-       .open           = sync_info_debugfs_open,
-       .read           = seq_read,
-       .llseek         = seq_lseek,
-       .release        = single_release,
-};
-
-static __init int sync_debugfs_init(void)
-{
-       dbgfs = debugfs_create_dir("sync", NULL);
-
-       /*
-        * The debugfs files won't ever get removed and thus, there is
-        * no need to protect it against removal races. The use of
-        * debugfs_create_file_unsafe() is actually safe here.
-        */
-       debugfs_create_file_unsafe("info", 0444, dbgfs, NULL,
-                                  &sync_info_debugfs_fops);
-       debugfs_create_file_unsafe("sw_sync", 0644, dbgfs, NULL,
-                                  &sw_sync_debugfs_fops);
-
-       return 0;
-}
-late_initcall(sync_debugfs_init);
-
-#define DUMP_CHUNK 256
-static char sync_dump_buf[64 * 1024];
-void sync_dump(void)
-{
-       struct seq_file s = {
-               .buf = sync_dump_buf,
-               .size = sizeof(sync_dump_buf) - 1,
-       };
-       int i;
-
-       sync_debugfs_show(&s, NULL);
-
-       for (i = 0; i < s.count; i += DUMP_CHUNK) {
-               if ((s.count - i) > DUMP_CHUNK) {
-                       char c = s.buf[i + DUMP_CHUNK];
-
-                       s.buf[i + DUMP_CHUNK] = 0;
-                       pr_cont("%s", s.buf + i);
-                       s.buf[i + DUMP_CHUNK] = c;
-               } else {
-                       s.buf[s.count] = 0;
-                       pr_cont("%s", s.buf + i);
-               }
-       }
-}
diff --git a/drivers/staging/android/sync_debug.h b/drivers/staging/android/sync_debug.h
deleted file mode 100644 (file)
index fab6639..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * include/linux/sync.h
- *
- * Copyright (C) 2012 Google, Inc.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- */
-
-#ifndef _LINUX_SYNC_H
-#define _LINUX_SYNC_H
-
-#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <linux/fence.h>
-
-#include <linux/sync_file.h>
-#include <uapi/linux/sync_file.h>
-
-/**
- * struct sync_timeline - sync object
- * @kref:              reference count on fence.
- * @name:              name of the sync_timeline. Useful for debugging
- * @child_list_head:   list of children sync_pts for this sync_timeline
- * @child_list_lock:   lock protecting @child_list_head and fence.status
- * @active_list_head:  list of active (unsignaled/errored) sync_pts
- * @sync_timeline_list:        membership in global sync_timeline_list
- */
-struct sync_timeline {
-       struct kref             kref;
-       char                    name[32];
-
-       /* protected by child_list_lock */
-       u64                     context;
-       int                     value;
-
-       struct list_head        child_list_head;
-       spinlock_t              child_list_lock;
-
-       struct list_head        active_list_head;
-
-       struct list_head        sync_timeline_list;
-};
-
-static inline struct sync_timeline *fence_parent(struct fence *fence)
-{
-       return container_of(fence->lock, struct sync_timeline,
-                           child_list_lock);
-}
-
-/**
- * struct sync_pt - sync_pt object
- * @base: base fence object
- * @child_list: sync timeline child's list
- * @active_list: sync timeline active child's list
- */
-struct sync_pt {
-       struct fence base;
-       struct list_head child_list;
-       struct list_head active_list;
-};
-
-#ifdef CONFIG_SW_SYNC
-
-extern const struct file_operations sw_sync_debugfs_fops;
-
-void sync_timeline_debug_add(struct sync_timeline *obj);
-void sync_timeline_debug_remove(struct sync_timeline *obj);
-void sync_file_debug_add(struct sync_file *fence);
-void sync_file_debug_remove(struct sync_file *fence);
-void sync_dump(void);
-
-#else
-# define sync_timeline_debug_add(obj)
-# define sync_timeline_debug_remove(obj)
-# define sync_file_debug_add(fence)
-# define sync_file_debug_remove(fence)
-# define sync_dump()
-#endif
-
-#endif /* _LINUX_SYNC_H */
diff --git a/drivers/staging/android/trace/sync.h b/drivers/staging/android/trace/sync.h
deleted file mode 100644 (file)
index 6b5ce96..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#undef TRACE_SYSTEM
-#define TRACE_INCLUDE_PATH ../../drivers/staging/android/trace
-#define TRACE_SYSTEM sync
-
-#if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ)
-#define _TRACE_SYNC_H
-
-#include "../sync_debug.h"
-#include <linux/tracepoint.h>
-
-TRACE_EVENT(sync_timeline,
-       TP_PROTO(struct sync_timeline *timeline),
-
-       TP_ARGS(timeline),
-
-       TP_STRUCT__entry(
-                       __string(name, timeline->name)
-                       __field(u32, value)
-       ),
-
-       TP_fast_assign(
-                       __assign_str(name, timeline->name);
-                       __entry->value = timeline->value;
-       ),
-
-       TP_printk("name=%s value=%d", __get_str(name), __entry->value)
-);
-
-#endif /* if !defined(_TRACE_SYNC_H) || defined(TRACE_HEADER_MULTI_READ) */
-
-/* This part must be outside protection */
-#include <trace/define_trace.h>
index 0a8e40f92cd70097e0d9c9d96908b04f6c1e4b7a..647f130c60af25dfd8d82edb995418a185dc4eee 100644 (file)
@@ -44,14 +44,8 @@ enum ion_heap_type {
                               * must be last so device specific heaps always
                               * are at the end of this enum
                               */
-       ION_NUM_HEAPS = 16,
 };
 
-#define ION_HEAP_SYSTEM_MASK           (1 << ION_HEAP_TYPE_SYSTEM)
-#define ION_HEAP_SYSTEM_CONTIG_MASK    (1 << ION_HEAP_TYPE_SYSTEM_CONTIG)
-#define ION_HEAP_CARVEOUT_MASK         (1 << ION_HEAP_TYPE_CARVEOUT)
-#define ION_HEAP_TYPE_DMA_MASK         (1 << ION_HEAP_TYPE_DMA)
-
 #define ION_NUM_HEAP_IDS               (sizeof(unsigned int) * 8)
 
 /**
@@ -134,6 +128,36 @@ struct ion_custom_data {
        unsigned long arg;
 };
 
+#define MAX_HEAP_NAME                  32
+
+/**
+ * struct ion_heap_data - data about a heap
+ * @name - first 32 characters of the heap name
+ * @type - heap type
+ * @heap_id - heap id for the heap
+ */
+struct ion_heap_data {
+       char name[MAX_HEAP_NAME];
+       __u32 type;
+       __u32 heap_id;
+       __u32 reserved0;
+       __u32 reserved1;
+       __u32 reserved2;
+};
+
+/**
+ * struct ion_heap_query - collection of data about all heaps
+ * @cnt - total number of heaps to be copied
+ * @heaps - buffer to copy heap data
+ */
+struct ion_heap_query {
+       __u32 cnt; /* Total number of heaps to be copied */
+       __u32 reserved0; /* align to 64bits */
+       __u64 heaps; /* buffer to be populated */
+       __u32 reserved1;
+       __u32 reserved2;
+};
+
 #define ION_IOC_MAGIC          'I'
 
 /**
@@ -200,4 +224,13 @@ struct ion_custom_data {
  */
 #define ION_IOC_CUSTOM         _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data)
 
+/**
+ * DOC: ION_IOC_HEAP_QUERY - information about available heaps
+ *
+ * Takes an ion_heap_query structure and populates information about
+ * available Ion heaps.
+ */
+#define ION_IOC_HEAP_QUERY     _IOWR(ION_IOC_MAGIC, 8, \
+                                       struct ion_heap_query)
+
 #endif /* _UAPI_LINUX_ION_H */
diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.c
deleted file mode 100644 (file)
index 3757074..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-/* Watchdog Related Defines */
-
-#define ADDIDATA_TIMER                 0
-#define ADDIDATA_WATCHDOG              2
-
-/*
- * (*insn_config) for the timer subdevice
- *
- * Configures The Timer, Counter or Watchdog
- * Data Pointer contains configuration parameters as below
- *     data[0] : 0 Configure As Timer
- *               1 Configure As Counter
- *               2 Configure As Watchdog
- *     data[1] : 1 Enable  Interrupt
- *               0 Disable Interrupt
- *     data[2] : Time Unit
- *     data[3] : Reload Value
- */
-static int apci3501_config_insn_timer(struct comedi_device *dev,
-                                     struct comedi_subdevice *s,
-                                     struct comedi_insn *insn,
-                                     unsigned int *data)
-{
-       struct apci3501_private *devpriv = dev->private;
-       unsigned int ctrl;
-
-       if (data[0] != ADDIDATA_WATCHDOG &&
-           data[0] != ADDIDATA_TIMER)
-               return -EINVAL;
-
-       devpriv->tsk_Current = current;
-
-       devpriv->timer_mode = data[0];
-
-       /* first, disable the watchdog or stop the timer */
-       if (devpriv->timer_mode == ADDIDATA_WATCHDOG) {
-               ctrl = 0;
-       } else {
-               ctrl = inl(devpriv->tcw + ADDI_TCW_CTRL_REG);
-               ctrl &= ~(ADDI_TCW_CTRL_GATE | ADDI_TCW_CTRL_TRIG |
-                         ADDI_TCW_CTRL_ENA);
-       }
-       outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-
-       /* enable/disable the timer interrupt */
-       ctrl = (data[1] == 1) ? ADDI_TCW_CTRL_IRQ_ENA : 0;
-       outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-
-       outl(data[2], devpriv->tcw + ADDI_TCW_TIMEBASE_REG);
-       outl(data[3], devpriv->tcw + ADDI_TCW_RELOAD_REG);
-
-       ctrl = inl(devpriv->tcw + ADDI_TCW_CTRL_REG);
-       if (devpriv->timer_mode == ADDIDATA_WATCHDOG) {
-               /* Set the mode (e2->e0) NOTE: this doesn't look correct */
-               ctrl |= ~(ADDI_TCW_CTRL_CNT_UP | ADDI_TCW_CTRL_EXT_CLK_MASK |
-                         ADDI_TCW_CTRL_MODE_MASK | ADDI_TCW_CTRL_GATE |
-                         ADDI_TCW_CTRL_TRIG | ADDI_TCW_CTRL_TIMER_ENA |
-                         ADDI_TCW_CTRL_RESET_ENA | ADDI_TCW_CTRL_WARN_ENA |
-                         ADDI_TCW_CTRL_IRQ_ENA | ADDI_TCW_CTRL_ENA);
-       } else {
-               /* mode 2 */
-               ctrl &= ~(ADDI_TCW_CTRL_CNTR_ENA | ADDI_TCW_CTRL_MODE_MASK |
-                         ADDI_TCW_CTRL_GATE | ADDI_TCW_CTRL_TRIG |
-                         ADDI_TCW_CTRL_TIMER_ENA | ADDI_TCW_CTRL_RESET_ENA |
-                         ADDI_TCW_CTRL_WARN_ENA | ADDI_TCW_CTRL_ENA);
-               ctrl |= ADDI_TCW_CTRL_MODE(2) | ADDI_TCW_CTRL_TIMER_ENA;
-       }
-       outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-
-       return insn->n;
-}
-
-/*
- * (*insn_write) for the timer subdevice
- *
- * Start / Stop The Selected Timer , Counter or Watchdog
- * Data Pointer contains configuration parameters as below
- *     data[0] : 0 Timer
- *               1 Counter
- *               2 Watchdog
- *     data[1] : 1 Start
- *               0 Stop
- *               2 Trigger
- */
-static int apci3501_write_insn_timer(struct comedi_device *dev,
-                                    struct comedi_subdevice *s,
-                                    struct comedi_insn *insn,
-                                    unsigned int *data)
-{
-       struct apci3501_private *devpriv = dev->private;
-       unsigned int ctrl;
-
-       if (devpriv->timer_mode == ADDIDATA_WATCHDOG ||
-           devpriv->timer_mode == ADDIDATA_TIMER) {
-               ctrl = inl(devpriv->tcw + ADDI_TCW_CTRL_REG);
-               ctrl &= ~(ADDI_TCW_CTRL_GATE | ADDI_TCW_CTRL_TRIG);
-
-               if (data[1] == 1) {             /* enable */
-                       ctrl |= ADDI_TCW_CTRL_ENA;
-               } else if (data[1] == 0) {      /* stop */
-                       if (devpriv->timer_mode == ADDIDATA_WATCHDOG)
-                               ctrl = 0;
-                       else
-                               ctrl &= ~ADDI_TCW_CTRL_ENA;
-               } else if (data[1] == 2) {      /* trigger */
-                       ctrl |= ADDI_TCW_CTRL_TRIG;
-               }
-               outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-       }
-
-       inl(devpriv->tcw + ADDI_TCW_STATUS_REG);
-       return insn->n;
-}
-
-/*
- * (*insn_read) for the timer subdevice
- *
- * Read The Selected Timer, Counter or Watchdog
- * Data Pointer contains configuration parameters as below
- *     data[0] : 0 Timer
- *               1 Counter
- *               2 Watchdog
- *     data[1] : Timer Counter Watchdog Number
- */
-static int apci3501_read_insn_timer(struct comedi_device *dev,
-                                   struct comedi_subdevice *s,
-                                   struct comedi_insn *insn,
-                                   unsigned int *data)
-{
-       struct apci3501_private *devpriv = dev->private;
-
-       if (devpriv->timer_mode != ADDIDATA_TIMER &&
-           devpriv->timer_mode != ADDIDATA_WATCHDOG)
-               return -EINVAL;
-
-       data[0] = inl(devpriv->tcw + ADDI_TCW_STATUS_REG) &
-                 ADDI_TCW_STATUS_OVERFLOW;
-       data[1] = inl(devpriv->tcw + ADDI_TCW_VAL_REG);
-
-       return insn->n;
-}
index 40ff91411139d9c9a28b0e73f2986aa4a163bd1c..57f0f46de0be4f71c904ff5f31918ef7e6a4e91d 100644 (file)
  * more details.
  */
 
+/*
+ * Driver: addi_apci_3501
+ * Description: ADDI-DATA APCI-3501 Analog output board
+ * Devices: [ADDI-DATA] APCI-3501 (addi_apci_3501)
+ * Author: H Hartley Sweeten <hsweeten@visionengravers.com>
+ * Updated: Mon, 20 Jun 2016 10:57:01 -0700
+ * Status: untested
+ *
+ * Configuration Options: not applicable, uses comedi PCI auto config
+ *
+ * This board has the following features:
+ *   - 4 or 8 analog output channels
+ *   - 2 optically isolated digital inputs
+ *   - 2 optically isolated digital outputs
+ *   - 1 12-bit watchdog/timer
+ *
+ * There are 2 versions of the APCI-3501:
+ *   - APCI-3501-4  4 analog output channels
+ *   - APCI-3501-8  8 analog output channels
+ *
+ * These boards use the same PCI Vendor/Device IDs. The number of output
+ * channels used by this driver is determined by reading the EEPROM on
+ * the board.
+ *
+ * The watchdog/timer subdevice is not currently supported.
+ */
+
 #include <linux/module.h>
-#include <linux/interrupt.h>
-#include <linux/sched.h>
 
 #include "../comedi_pci.h"
-#include "addi_tcw.h"
 #include "amcc_s5933.h"
 
 /*
@@ -67,8 +91,6 @@
 
 struct apci3501_private {
        unsigned long amcc;
-       unsigned long tcw;
-       struct task_struct *tsk_Current;
        unsigned char timer_mode;
 };
 
@@ -139,8 +161,6 @@ static int apci3501_ao_insn_write(struct comedi_device *dev,
        return insn->n;
 }
 
-#include "addi-data/hwdrv_apci3501.c"
-
 static int apci3501_di_insn_bits(struct comedi_device *dev,
                                 struct comedi_subdevice *s,
                                 struct comedi_insn *insn,
@@ -253,37 +273,6 @@ static int apci3501_eeprom_insn_read(struct comedi_device *dev,
        return insn->n;
 }
 
-static irqreturn_t apci3501_interrupt(int irq, void *d)
-{
-       struct comedi_device *dev = d;
-       struct apci3501_private *devpriv = dev->private;
-       unsigned int status;
-       unsigned int ctrl;
-
-       /*  Disable Interrupt */
-       ctrl = inl(devpriv->tcw + ADDI_TCW_CTRL_REG);
-       ctrl &= ~(ADDI_TCW_CTRL_GATE | ADDI_TCW_CTRL_TRIG |
-                 ADDI_TCW_CTRL_IRQ_ENA);
-       outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-
-       status = inl(devpriv->tcw + ADDI_TCW_IRQ_REG);
-       if (!(status & ADDI_TCW_IRQ)) {
-               dev_err(dev->class_dev, "IRQ from unknown source\n");
-               return IRQ_NONE;
-       }
-
-       /* Enable Interrupt Send a signal to from kernel to user space */
-       send_sig(SIGIO, devpriv->tsk_Current, 0);
-       ctrl = inl(devpriv->tcw + ADDI_TCW_CTRL_REG);
-       ctrl &= ~(ADDI_TCW_CTRL_GATE | ADDI_TCW_CTRL_TRIG |
-                 ADDI_TCW_CTRL_IRQ_ENA);
-       ctrl |= ADDI_TCW_CTRL_IRQ_ENA;
-       outl(ctrl, devpriv->tcw + ADDI_TCW_CTRL_REG);
-       inl(devpriv->tcw + ADDI_TCW_STATUS_REG);
-
-       return IRQ_HANDLED;
-}
-
 static int apci3501_reset(struct comedi_device *dev)
 {
        unsigned int val;
@@ -333,17 +322,9 @@ static int apci3501_auto_attach(struct comedi_device *dev,
 
        devpriv->amcc = pci_resource_start(pcidev, 0);
        dev->iobase = pci_resource_start(pcidev, 1);
-       devpriv->tcw = dev->iobase + APCI3501_TIMER_BASE;
 
        ao_n_chan = apci3501_eeprom_get_ao_n_chan(dev);
 
-       if (pcidev->irq > 0) {
-               ret = request_irq(pcidev->irq, apci3501_interrupt, IRQF_SHARED,
-                                 dev->board_name, dev);
-               if (ret == 0)
-                       dev->irq = pcidev->irq;
-       }
-
        ret = comedi_alloc_subdevices(dev, 5);
        if (ret)
                return ret;
@@ -383,17 +364,9 @@ static int apci3501_auto_attach(struct comedi_device *dev,
        s->range_table  = &range_digital;
        s->insn_bits    = apci3501_do_insn_bits;
 
-       /* Initialize the timer/watchdog subdevice */
+       /* Timer/Watchdog subdevice */
        s = &dev->subdevices[3];
-       s->type = COMEDI_SUBD_TIMER;
-       s->subdev_flags = SDF_WRITABLE;
-       s->n_chan = 1;
-       s->maxdata = 0;
-       s->len_chanlist = 1;
-       s->range_table = &range_digital;
-       s->insn_write = apci3501_write_insn_timer;
-       s->insn_read = apci3501_read_insn_timer;
-       s->insn_config = apci3501_config_insn_timer;
+       s->type         = COMEDI_SUBD_UNUSED;
 
        /* Initialize the eeprom subdevice */
        s = &dev->subdevices[4];
index 1f9c08a845b61ebb027d3434a5fb3c89cebd9b1f..cb9c2699277e64d254e540eaa0527a798768ca99 100644 (file)
@@ -1,34 +1,34 @@
 /*
   comedi/drivers/cb_pcidas64.c
   This is a driver for the ComputerBoards/MeasurementComputing PCI-DAS
   64xx, 60xx, and 4020 cards.
-
   Author:  Frank Mori Hess <fmhess@users.sourceforge.net>
   Copyright (C) 2001, 2002 Frank Mori Hess
-
   Thanks also go to the following people:
-
   Steve Rosenbluth, for providing the source code for
   his pci-das6402 driver, and source code for working QNX pci-6402
   drivers by Greg Laird and Mariusz Bogacz.  None of the code was
   used directly here, but it was useful as an additional source of
   documentation on how to program the boards.
-
   John Sims, for much testing and feedback on pcidas-4020 support.
-
   COMEDI - Linux Control and Measurement Device Interface
   Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
-
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2 of the License, or
   (at your option) any later version.
-
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
-*/
* comedi/drivers/cb_pcidas64.c
* This is a driver for the ComputerBoards/MeasurementComputing PCI-DAS
* 64xx, 60xx, and 4020 cards.
+ *
* Author:  Frank Mori Hess <fmhess@users.sourceforge.net>
* Copyright (C) 2001, 2002 Frank Mori Hess
+ *
* Thanks also go to the following people:
+ *
* Steve Rosenbluth, for providing the source code for
* his pci-das6402 driver, and source code for working QNX pci-6402
* drivers by Greg Laird and Mariusz Bogacz.  None of the code was
* used directly here, but it was useful as an additional source of
* documentation on how to program the boards.
+ *
* John Sims, for much testing and feedback on pcidas-4020 support.
+ *
* COMEDI - Linux Control and Measurement Device Interface
* Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
+ *
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
+ */
 
 /*
  * Driver: cb_pcidas64
  */
 
 /*
-
-TODO:
-       make it return error if user attempts an ai command that uses the
-       external queue, and an ao command simultaneously user counter subdevice
-       there are a number of boards this driver will support when they are
-       fully released, but does not yet since the pci device id numbers
-       are not yet available.
-
-       support prescaled 100khz clock for slow pacing (not available on 6000
-       series?)
-
-       make ao fifo size adjustable like ai fifo
-*/
+ * TODO:
+ * make it return error if user attempts an ai command that uses the
+ * external queue, and an ao command simultaneously user counter subdevice
+ * there are a number of boards this driver will support when they are
+ * fully released, but does not yet since the pci device id numbers
+ * are not yet available.
+ *
+ * support prescaled 100khz clock for slow pacing (not available on 6000
+ * series?)
+ *
+ * make ao fifo size adjustable like ai fifo
+ */
 
 #include <linux/module.h>
 #include <linux/delay.h>
@@ -90,53 +89,56 @@ TODO:
 #include "plx9080.h"
 
 #define TIMER_BASE 25          /*  40MHz master clock */
-/* 100kHz 'prescaled' clock for slow acquisition,
- * maybe I'll support this someday */
+/*
+ * 100kHz 'prescaled' clock for slow acquisition,
+ * maybe I'll support this someday
+ */
 #define PRESCALED_TIMER_BASE   10000
-#define DMA_BUFFER_SIZE 0x1000
+#define DMA_BUFFER_SIZE                0x1000
+#define DAC_FIFO_SIZE          0x2000
 
-/* maximum value that can be loaded into board's 24-bit counters*/
+/* maximum value that can be loaded into board's 24-bit counters */
 static const int max_counter_value = 0xffffff;
 
 /* PCI-DAS64xxx base addresses */
 
 /* devpriv->main_iobase registers */
 enum write_only_registers {
-       INTR_ENABLE_REG = 0x0,  /*  interrupt enable register */
-       HW_CONFIG_REG = 0x2,    /*  hardware config register */
+       INTR_ENABLE_REG = 0x0,          /* interrupt enable register */
+       HW_CONFIG_REG = 0x2,            /* hardware config register */
        DAQ_SYNC_REG = 0xc,
        DAQ_ATRIG_LOW_4020_REG = 0xc,
-       ADC_CONTROL0_REG = 0x10,        /*  adc control register 0 */
-       ADC_CONTROL1_REG = 0x12,        /*  adc control register 1 */
+       ADC_CONTROL0_REG = 0x10,        /* adc control register 0 */
+       ADC_CONTROL1_REG = 0x12,        /* adc control register 1 */
        CALIBRATION_REG = 0x14,
-       /*  lower 16 bits of adc sample interval counter */
+       /* lower 16 bits of adc sample interval counter */
        ADC_SAMPLE_INTERVAL_LOWER_REG = 0x16,
-       /*  upper 8 bits of adc sample interval counter */
+       /* upper 8 bits of adc sample interval counter */
        ADC_SAMPLE_INTERVAL_UPPER_REG = 0x18,
-       /*  lower 16 bits of delay interval counter */
+       /* lower 16 bits of delay interval counter */
        ADC_DELAY_INTERVAL_LOWER_REG = 0x1a,
-       /*  upper 8 bits of delay interval counter */
+       /* upper 8 bits of delay interval counter */
        ADC_DELAY_INTERVAL_UPPER_REG = 0x1c,
-       /*  lower 16 bits of hardware conversion/scan counter */
+       /* lower 16 bits of hardware conversion/scan counter */
        ADC_COUNT_LOWER_REG = 0x1e,
-       /*  upper 8 bits of hardware conversion/scan counter */
+       /* upper 8 bits of hardware conversion/scan counter */
        ADC_COUNT_UPPER_REG = 0x20,
-       ADC_START_REG = 0x22,   /*  software trigger to start acquisition */
-       ADC_CONVERT_REG = 0x24, /*  initiates single conversion */
-       ADC_QUEUE_CLEAR_REG = 0x26,     /*  clears adc queue */
-       ADC_QUEUE_LOAD_REG = 0x28,      /*  loads adc queue */
+       ADC_START_REG = 0x22,   /* software trigger to start acquisition */
+       ADC_CONVERT_REG = 0x24, /* initiates single conversion */
+       ADC_QUEUE_CLEAR_REG = 0x26,     /* clears adc queue */
+       ADC_QUEUE_LOAD_REG = 0x28,      /* loads adc queue */
        ADC_BUFFER_CLEAR_REG = 0x2a,
-       /*  high channel for internal queue, use adc_chan_bits() inline above */
+       /* high channel for internal queue, use adc_chan_bits() inline above */
        ADC_QUEUE_HIGH_REG = 0x2c,
-       DAC_CONTROL0_REG = 0x50,        /*  dac control register 0 */
-       DAC_CONTROL1_REG = 0x52,        /*  dac control register 0 */
-       /*  lower 16 bits of dac sample interval counter */
+       DAC_CONTROL0_REG = 0x50,        /* dac control register 0 */
+       DAC_CONTROL1_REG = 0x52,        /* dac control register 0 */
+       /* lower 16 bits of dac sample interval counter */
        DAC_SAMPLE_INTERVAL_LOWER_REG = 0x54,
-       /*  upper 8 bits of dac sample interval counter */
+       /* upper 8 bits of dac sample interval counter */
        DAC_SAMPLE_INTERVAL_UPPER_REG = 0x56,
        DAC_SELECT_REG = 0x60,
        DAC_START_REG = 0x64,
-       DAC_BUFFER_CLEAR_REG = 0x66,    /*  clear dac buffer */
+       DAC_BUFFER_CLEAR_REG = 0x66,    /* clear dac buffer */
 };
 
 static inline unsigned int dac_convert_reg(unsigned int channel)
@@ -168,8 +170,8 @@ enum read_only_registers {
 };
 
 enum read_write_registers {
-       I8255_4020_REG = 0x48,  /*  8255 offset, for 4020 only */
-       /*  external channel/gain queue, uses same bits as ADC_QUEUE_LOAD_REG */
+       I8255_4020_REG = 0x48,  /* 8255 offset, for 4020 only */
+       /* external channel/gain queue, uses same bits as ADC_QUEUE_LOAD_REG */
        ADC_QUEUE_FIFO_REG = 0x100,
        ADC_FIFO_REG = 0x200,   /* adc data fifo */
        /* dac data fifo, has weird interactions with external channel queue */
@@ -188,50 +190,51 @@ enum dio_counter_registers {
 /* bit definitions for write-only registers */
 
 enum intr_enable_contents {
-       ADC_INTR_SRC_MASK = 0x3,        /*  adc interrupt source mask */
-       ADC_INTR_QFULL_BITS = 0x0,      /*  interrupt fifo quarter full */
-       ADC_INTR_EOC_BITS = 0x1,        /*  interrupt end of conversion */
-       ADC_INTR_EOSCAN_BITS = 0x2,     /*  interrupt end of scan */
-       ADC_INTR_EOSEQ_BITS = 0x3,      /*  interrupt end of sequence mask */
-       EN_ADC_INTR_SRC_BIT = 0x4,      /*  enable adc interrupt source */
-       EN_ADC_DONE_INTR_BIT = 0x8,     /*  enable adc acquisition done intr */
+       ADC_INTR_SRC_MASK = 0x3,        /* adc interrupt source mask */
+       ADC_INTR_QFULL_BITS = 0x0,      /* interrupt fifo quarter full */
+       ADC_INTR_EOC_BITS = 0x1,        /* interrupt end of conversion */
+       ADC_INTR_EOSCAN_BITS = 0x2,     /* interrupt end of scan */
+       ADC_INTR_EOSEQ_BITS = 0x3,      /* interrupt end of sequence mask */
+       EN_ADC_INTR_SRC_BIT = 0x4,      /* enable adc interrupt source */
+       EN_ADC_DONE_INTR_BIT = 0x8,     /* enable adc acquisition done intr */
        DAC_INTR_SRC_MASK = 0x30,
        DAC_INTR_QEMPTY_BITS = 0x0,
        DAC_INTR_HIGH_CHAN_BITS = 0x10,
-       EN_DAC_INTR_SRC_BIT = 0x40,     /*  enable dac interrupt source */
+       EN_DAC_INTR_SRC_BIT = 0x40,     /* enable dac interrupt source */
        EN_DAC_DONE_INTR_BIT = 0x80,
-       EN_ADC_ACTIVE_INTR_BIT = 0x200, /*  enable adc active interrupt */
-       EN_ADC_STOP_INTR_BIT = 0x400,   /*  enable adc stop trigger interrupt */
-       EN_DAC_ACTIVE_INTR_BIT = 0x800, /*  enable dac active interrupt */
-       EN_DAC_UNDERRUN_BIT = 0x4000,   /*  enable dac underrun status bit */
-       EN_ADC_OVERRUN_BIT = 0x8000,    /*  enable adc overrun status bit */
+       EN_ADC_ACTIVE_INTR_BIT = 0x200, /* enable adc active interrupt */
+       EN_ADC_STOP_INTR_BIT = 0x400,   /* enable adc stop trigger interrupt */
+       EN_DAC_ACTIVE_INTR_BIT = 0x800, /* enable dac active interrupt */
+       EN_DAC_UNDERRUN_BIT = 0x4000,   /* enable dac underrun status bit */
+       EN_ADC_OVERRUN_BIT = 0x8000,    /* enable adc overrun status bit */
 };
 
 enum hw_config_contents {
-       MASTER_CLOCK_4020_MASK = 0x3,   /*  master clock source mask for 4020 */
-       INTERNAL_CLOCK_4020_BITS = 0x1, /*  use 40 MHz internal master clock */
-       BNC_CLOCK_4020_BITS = 0x2,      /*  use BNC input for master clock */
-       EXT_CLOCK_4020_BITS = 0x3,      /*  use dio input for master clock */
-       EXT_QUEUE_BIT = 0x200,          /*  use external channel/gain queue */
-       /*  use 225 nanosec strobe when loading dac instead of 50 nanosec */
+       MASTER_CLOCK_4020_MASK = 0x3,   /* master clock source mask for 4020 */
+       INTERNAL_CLOCK_4020_BITS = 0x1, /* use 40 MHz internal master clock */
+       BNC_CLOCK_4020_BITS = 0x2,      /* use BNC input for master clock */
+       EXT_CLOCK_4020_BITS = 0x3,      /* use dio input for master clock */
+       EXT_QUEUE_BIT = 0x200,          /* use external channel/gain queue */
+       /* use 225 nanosec strobe when loading dac instead of 50 nanosec */
        SLOW_DAC_BIT = 0x400,
-       /*  bit with unknown function yet given as default value in pci-das64
-        *  manual */
+       /*
+        * bit with unknown function yet given as default value in pci-das64
+        * manual
+        */
        HW_CONFIG_DUMMY_BITS = 0x2000,
-       /*  bit selects channels 1/0 for analog input/output, otherwise 0/1 */
+       /* bit selects channels 1/0 for analog input/output, otherwise 0/1 */
        DMA_CH_SELECT_BIT = 0x8000,
-       FIFO_SIZE_REG = 0x4,            /*  allows adjustment of fifo sizes */
-       DAC_FIFO_SIZE_MASK = 0xff00,    /*  bits that set dac fifo size */
-       DAC_FIFO_BITS = 0xf800,         /*  8k sample ao fifo */
+       FIFO_SIZE_REG = 0x4,            /* allows adjustment of fifo sizes */
+       DAC_FIFO_SIZE_MASK = 0xff00,    /* bits that set dac fifo size */
+       DAC_FIFO_BITS = 0xf800,         /* 8k sample ao fifo */
 };
-#define DAC_FIFO_SIZE 0x2000
 
 enum daq_atrig_low_4020_contents {
-       /*  use trig/ext clk bnc input for analog gate signal */
+       /* use trig/ext clk bnc input for analog gate signal */
        EXT_AGATE_BNC_BIT = 0x8000,
-       /*  use trig/ext clk bnc input for external stop trigger signal */
+       /* use trig/ext clk bnc input for external stop trigger signal */
        EXT_STOP_TRIG_BNC_BIT = 0x4000,
-       /*  use trig/ext clk bnc input for external start trigger signal */
+       /* use trig/ext clk bnc input for external start trigger signal */
        EXT_START_TRIG_BNC_BIT = 0x2000,
 };
 
@@ -241,38 +244,38 @@ static inline uint16_t analog_trig_low_threshold_bits(uint16_t threshold)
 }
 
 enum adc_control0_contents {
-       ADC_GATE_SRC_MASK = 0x3,        /*  bits that select gate */
-       ADC_SOFT_GATE_BITS = 0x1,       /*  software gate */
-       ADC_EXT_GATE_BITS = 0x2,        /*  external digital gate */
-       ADC_ANALOG_GATE_BITS = 0x3,     /*  analog level gate */
-       /*  level-sensitive gate (for digital) */
+       ADC_GATE_SRC_MASK = 0x3,        /* bits that select gate */
+       ADC_SOFT_GATE_BITS = 0x1,       /* software gate */
+       ADC_EXT_GATE_BITS = 0x2,        /* external digital gate */
+       ADC_ANALOG_GATE_BITS = 0x3,     /* analog level gate */
+       /* level-sensitive gate (for digital) */
        ADC_GATE_LEVEL_BIT = 0x4,
-       ADC_GATE_POLARITY_BIT = 0x8,    /*  gate active low */
+       ADC_GATE_POLARITY_BIT = 0x8,    /* gate active low */
        ADC_START_TRIG_SOFT_BITS = 0x10,
        ADC_START_TRIG_EXT_BITS = 0x20,
        ADC_START_TRIG_ANALOG_BITS = 0x30,
        ADC_START_TRIG_MASK = 0x30,
-       ADC_START_TRIG_FALLING_BIT = 0x40,      /*  trig 1 uses falling edge */
-       /*  external pacing uses falling edge */
+       ADC_START_TRIG_FALLING_BIT = 0x40,      /* trig 1 uses falling edge */
+       /* external pacing uses falling edge */
        ADC_EXT_CONV_FALLING_BIT = 0x800,
-       /*  enable hardware scan counter */
+       /* enable hardware scan counter */
        ADC_SAMPLE_COUNTER_EN_BIT = 0x1000,
-       ADC_DMA_DISABLE_BIT = 0x4000,   /*  disables dma */
-       ADC_ENABLE_BIT = 0x8000,        /*  master adc enable */
+       ADC_DMA_DISABLE_BIT = 0x4000,   /* disables dma */
+       ADC_ENABLE_BIT = 0x8000,        /* master adc enable */
 };
 
 enum adc_control1_contents {
-       /*  should be set for boards with > 16 channels */
+       /* should be set for boards with > 16 channels */
        ADC_QUEUE_CONFIG_BIT = 0x1,
        CONVERT_POLARITY_BIT = 0x10,
        EOC_POLARITY_BIT = 0x20,
-       ADC_SW_GATE_BIT = 0x40, /*  software gate of adc */
-       ADC_DITHER_BIT = 0x200, /*  turn on extra noise for dithering */
+       ADC_SW_GATE_BIT = 0x40,         /* software gate of adc */
+       ADC_DITHER_BIT = 0x200,         /* turn on extra noise for dithering */
        RETRIGGER_BIT = 0x800,
        ADC_LO_CHANNEL_4020_MASK = 0x300,
        ADC_HI_CHANNEL_4020_MASK = 0xc00,
-       TWO_CHANNEL_4020_BITS = 0x1000, /*  two channel mode for 4020 */
-       FOUR_CHANNEL_4020_BITS = 0x2000, /*  four channel mode for 4020 */
+       TWO_CHANNEL_4020_BITS = 0x1000,         /* two channel mode for 4020 */
+       FOUR_CHANNEL_4020_BITS = 0x2000,        /* four channel mode for 4020 */
        CHANNEL_MODE_4020_MASK = 0x3000,
        ADC_MODE_MASK = 0xf000,
 };
@@ -296,10 +299,10 @@ enum calibration_contents {
        SELECT_8800_BIT = 0x1,
        SELECT_8402_64XX_BIT = 0x2,
        SELECT_1590_60XX_BIT = 0x2,
-       CAL_EN_64XX_BIT = 0x40, /*  calibration enable for 64xx series */
+       CAL_EN_64XX_BIT = 0x40,         /* calibration enable for 64xx series */
        SERIAL_DATA_IN_BIT = 0x80,
        SERIAL_CLOCK_BIT = 0x100,
-       CAL_EN_60XX_BIT = 0x200, /*  calibration enable for 60xx series */
+       CAL_EN_60XX_BIT = 0x200,        /* calibration enable for 60xx series */
        CAL_GAIN_BIT = 0x800,
 };
 
@@ -326,12 +329,12 @@ static inline uint16_t adc_convert_chan_4020_bits(unsigned int channel)
 };
 
 enum adc_queue_load_contents {
-       UNIP_BIT = 0x800,       /*  unipolar/bipolar bit */
-       ADC_SE_DIFF_BIT = 0x1000,       /*  single-ended/ differential bit */
-       /*  non-referenced single-ended (common-mode input) */
+       UNIP_BIT = 0x800,               /* unipolar/bipolar bit */
+       ADC_SE_DIFF_BIT = 0x1000,       /* single-ended/ differential bit */
+       /* non-referenced single-ended (common-mode input) */
        ADC_COMMON_BIT = 0x2000,
-       QUEUE_EOSEQ_BIT = 0x4000,       /*  queue end of sequence */
-       QUEUE_EOSCAN_BIT = 0x8000,      /*  queue end of scan */
+       QUEUE_EOSEQ_BIT = 0x4000,       /* queue end of sequence */
+       QUEUE_EOSCAN_BIT = 0x8000,      /* queue end of scan */
 };
 
 static inline uint16_t adc_chan_bits(unsigned int channel)
@@ -340,7 +343,7 @@ static inline uint16_t adc_chan_bits(unsigned int channel)
 };
 
 enum dac_control0_contents {
-       DAC_ENABLE_BIT = 0x8000,        /*  dac controller enable bit */
+       DAC_ENABLE_BIT = 0x8000,        /* dac controller enable bit */
        DAC_CYCLIC_STOP_BIT = 0x4000,
        DAC_WAVEFORM_MODE_BIT = 0x100,
        DAC_EXT_UPDATE_FALLING_BIT = 0x80,
@@ -360,7 +363,7 @@ enum dac_control1_contents {
        DAC_WRITE_POLARITY_BIT = 0x800, /* board-dependent setting */
        DAC1_EXT_REF_BIT = 0x200,
        DAC0_EXT_REF_BIT = 0x100,
-       DAC_OUTPUT_ENABLE_BIT = 0x80,   /*  dac output enable bit */
+       DAC_OUTPUT_ENABLE_BIT = 0x80,   /* dac output enable bit */
        DAC_UPDATE_POLARITY_BIT = 0x40, /* board-dependent setting */
        DAC_SW_GATE_BIT = 0x20,
        DAC1_UNIPOLAR_BIT = 0x8,
@@ -409,9 +412,9 @@ enum i2c_addresses {
 };
 
 enum range_cal_i2c_contents {
-       /*  bits that set what source the adc converter measures */
+       /* bits that set what source the adc converter measures */
        ADC_SRC_4020_MASK = 0x70,
-       /*  make bnc trig/ext clock threshold 0V instead of 2.5V */
+       /* make bnc trig/ext clock threshold 0V instead of 2.5V */
        BNC_TRIG_THRESHOLD_0V_BIT = 0x80,
 };
 
@@ -422,7 +425,7 @@ static inline uint8_t adc_src_4020_bits(unsigned int source)
 
 static inline uint8_t attenuate_bit(unsigned int channel)
 {
-       /*  attenuate channel (+-5V input range) */
+       /* attenuate channel (+-5V input range) */
        return 1 << (channel & 0x3);
 };
 
@@ -627,18 +630,18 @@ enum pcidas64_boardid {
 
 struct pcidas64_board {
        const char *name;
-       int ai_se_chans;        /*  number of ai inputs in single-ended mode */
-       int ai_bits;            /*  analog input resolution */
-       int ai_speed;           /*  fastest conversion period in ns */
+       int ai_se_chans;        /* number of ai inputs in single-ended mode */
+       int ai_bits;            /* analog input resolution */
+       int ai_speed;           /* fastest conversion period in ns */
        const struct comedi_lrange *ai_range_table;
        const uint8_t *ai_range_code;
-       int ao_nchan;           /*  number of analog out channels */
-       int ao_bits;            /*  analog output resolution */
-       int ao_scan_speed;      /*  analog output scan speed */
+       int ao_nchan;           /* number of analog out channels */
+       int ao_bits;            /* analog output resolution */
+       int ao_scan_speed;      /* analog output scan speed */
        const struct comedi_lrange *ao_range_table;
        const int *ao_range_code;
        const struct hw_fifo_info *const ai_fifo;
-       /*  different board families have slightly different registers */
+       /* different board families have slightly different registers */
        enum register_layout layout;
        unsigned has_8255:1;
 };
@@ -699,7 +702,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
                .has_8255       = 1,
        },
        [BOARD_PCIDAS6402_12] = {
-               .name           = "pci-das6402/12",     /*  XXX check */
+               .name           = "pci-das6402/12",     /* XXX check */
                .ai_se_chans    = 64,
                .ai_bits        = 12,
                .ai_speed       = 5000,
@@ -996,7 +999,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
                .ai_speed       = 50,
                .ao_bits        = 12,
                .ao_nchan       = 2,
-               .ao_scan_speed  = 0,    /*  no hardware pacing on ao */
+               .ao_scan_speed  = 0,    /* no hardware pacing on ao */
                .layout         = LAYOUT_4020,
                .ai_range_table = &ai_ranges_4020,
                .ao_range_table = &ao_ranges_4020,
@@ -1005,9 +1008,7 @@ static const struct pcidas64_board pcidas64_boards[] = {
                .has_8255       = 1,
        },
 #if 0
-       /*
-        * The device id for these boards is unknown
-        */
+       /* The device id for these boards is unknown */
 
        [BOARD_PCIDAS6402_16_JR] = {
                .name           = "pci-das6402/16/jr",
@@ -1116,62 +1117,66 @@ static inline unsigned short se_diff_bit_6xxx(struct comedi_device *dev,
 }
 
 struct ext_clock_info {
-       /*  master clock divisor to use for scans with external master clock */
+       /* master clock divisor to use for scans with external master clock */
        unsigned int divisor;
-       /*  chanspec for master clock input when used as scan begin src */
+       /* chanspec for master clock input when used as scan begin src */
        unsigned int chanspec;
 };
 
 /* this structure is for data unique to this hardware driver. */
 struct pcidas64_private {
-       /*  base addresses (physical) */
+       /* base addresses (physical) */
        resource_size_t main_phys_iobase;
        resource_size_t dio_counter_phys_iobase;
-       /*  base addresses (ioremapped) */
+       /* base addresses (ioremapped) */
        void __iomem *plx9080_iobase;
        void __iomem *main_iobase;
-       /*  local address (used by dma controller) */
+       /* local address (used by dma controller) */
        uint32_t local0_iobase;
        uint32_t local1_iobase;
-       /*  dma buffers for analog input */
+       /* dma buffers for analog input */
        uint16_t *ai_buffer[MAX_AI_DMA_RING_COUNT];
-       /*  physical addresses of ai dma buffers */
+       /* physical addresses of ai dma buffers */
        dma_addr_t ai_buffer_bus_addr[MAX_AI_DMA_RING_COUNT];
-       /*  array of ai dma descriptors read by plx9080,
-        *  allocated to get proper alignment */
+       /*
+        * array of ai dma descriptors read by plx9080,
+        * allocated to get proper alignment
+        */
        struct plx_dma_desc *ai_dma_desc;
-       /*  physical address of ai dma descriptor array */
+       /* physical address of ai dma descriptor array */
        dma_addr_t ai_dma_desc_bus_addr;
-       /*  index of the ai dma descriptor/buffer
-        *  that is currently being used */
+       /*
+        * index of the ai dma descriptor/buffer
+        * that is currently being used
+        */
        unsigned int ai_dma_index;
-       /*  dma buffers for analog output */
+       /* dma buffers for analog output */
        uint16_t *ao_buffer[AO_DMA_RING_COUNT];
-       /*  physical addresses of ao dma buffers */
+       /* physical addresses of ao dma buffers */
        dma_addr_t ao_buffer_bus_addr[AO_DMA_RING_COUNT];
        struct plx_dma_desc *ao_dma_desc;
        dma_addr_t ao_dma_desc_bus_addr;
-       /*  keeps track of buffer where the next ao sample should go */
+       /* keeps track of buffer where the next ao sample should go */
        unsigned int ao_dma_index;
-       unsigned int hw_revision;       /*  stc chip hardware revision number */
-       /*  last bits sent to INTR_ENABLE_REG register */
+       unsigned int hw_revision;       /* stc chip hardware revision number */
+       /* last bits sent to INTR_ENABLE_REG register */
        unsigned int intr_enable_bits;
-       /*  last bits sent to ADC_CONTROL1_REG register */
+       /* last bits sent to ADC_CONTROL1_REG register */
        uint16_t adc_control1_bits;
-       /*  last bits sent to FIFO_SIZE_REG register */
+       /* last bits sent to FIFO_SIZE_REG register */
        uint16_t fifo_size_bits;
-       /*  last bits sent to HW_CONFIG_REG register */
+       /* last bits sent to HW_CONFIG_REG register */
        uint16_t hw_config_bits;
        uint16_t dac_control1_bits;
-       /*  last bits written to plx9080 control register */
+       /* last bits written to plx9080 control register */
        uint32_t plx_control_bits;
-       /*  last bits written to plx interrupt control and status register */
+       /* last bits written to plx interrupt control and status register */
        uint32_t plx_intcsr_bits;
-       /*  index of calibration source readable through ai ch0 */
+       /* index of calibration source readable through ai ch0 */
        int calibration_source;
-       /*  bits written to i2c calibration/range register */
+       /* bits written to i2c calibration/range register */
        uint8_t i2c_cal_range_bits;
-       /*  configure digital triggers to trigger on falling edge */
+       /* configure digital triggers to trigger on falling edge */
        unsigned int ext_trig_falling;
        short ai_cmd_running;
        unsigned int ai_fifo_segment_length;
@@ -1224,7 +1229,7 @@ static void abort_dma(struct comedi_device *dev, unsigned int channel)
        struct pcidas64_private *devpriv = dev->private;
        unsigned long flags;
 
-       /*  spinlock for plx dma control/status reg */
+       /* spinlock for plx dma control/status reg */
        spin_lock_irqsave(&dev->spinlock, flags);
 
        plx9080_abort_dma(devpriv->plx9080_iobase, channel);
@@ -1271,7 +1276,7 @@ static void enable_ai_interrupts(struct comedi_device *dev,
         * if CMDF_WAKE_EOS flag is set.
         */
        if (cmd->flags & CMDF_WAKE_EOS) {
-               /*  4020 doesn't support pio transfers except for fifo dregs */
+               /* 4020 doesn't support pio transfers except for fifo dregs */
                if (board->layout != LAYOUT_4020)
                        bits |= ADC_INTR_EOSCAN_BITS | EN_ADC_INTR_SRC_BIT;
        }
@@ -1305,36 +1310,40 @@ static void init_plx9080(struct comedi_device *dev)
        abort_dma(dev, 0);
        abort_dma(dev, 1);
 
-       /*  configure dma0 mode */
+       /* configure dma0 mode */
        bits = 0;
-       /*  enable ready input, not sure if this is necessary */
+       /* enable ready input, not sure if this is necessary */
        bits |= PLX_DMAMODE_READYIEN;
-       /*  enable bterm, not sure if this is necessary */
+       /* enable bterm, not sure if this is necessary */
        bits |= PLX_DMAMODE_BTERMIEN;
-       /*  enable dma chaining */
+       /* enable dma chaining */
        bits |= PLX_DMAMODE_CHAINEN;
-       /*  enable interrupt on dma done
-        *  (probably don't need this, since chain never finishes) */
+       /*
+        * enable interrupt on dma done
+        * (probably don't need this, since chain never finishes)
+        */
        bits |= PLX_DMAMODE_DONEIEN;
-       /*  don't increment local address during transfers
-        *  (we are transferring from a fixed fifo register) */
+       /*
+        * don't increment local address during transfers
+        * (we are transferring from a fixed fifo register)
+        */
        bits |= PLX_DMAMODE_LACONST;
-       /*  route dma interrupt to pci bus */
+       /* route dma interrupt to pci bus */
        bits |= PLX_DMAMODE_INTRPCI;
-       /*  enable demand mode */
+       /* enable demand mode */
        bits |= PLX_DMAMODE_DEMAND;
-       /*  enable local burst mode */
+       /* enable local burst mode */
        bits |= PLX_DMAMODE_BURSTEN;
-       /*  4020 uses 32 bit dma */
+       /* 4020 uses 32 bit dma */
        if (board->layout == LAYOUT_4020)
-               bits |= PLX_DMAMODE_WIDTH32;
-       else            /*  localspace0 bus is 16 bits wide */
-               bits |= PLX_DMAMODE_WIDTH16;
+               bits |= PLX_DMAMODE_WIDTH_32;
+       else                            /* localspace0 bus is 16 bits wide */
+               bits |= PLX_DMAMODE_WIDTH_16;
        writel(bits, plx_iobase + PLX_REG_DMAMODE1);
        if (ao_cmd_is_supported(board))
                writel(bits, plx_iobase + PLX_REG_DMAMODE0);
 
-       /*  enable interrupts on plx 9080 */
+       /* enable interrupts on plx 9080 */
        devpriv->plx_intcsr_bits |=
            PLX_INTCSR_LSEABORTEN | PLX_INTCSR_LSEPARITYEN | PLX_INTCSR_PIEN |
            PLX_INTCSR_PLIEN | PLX_INTCSR_PABORTIEN | PLX_INTCSR_LIOEN |
@@ -1376,7 +1385,7 @@ static int set_ai_fifo_segment_length(struct comedi_device *dev,
        if (num_entries > fifo->max_segment_length)
                num_entries = fifo->max_segment_length;
 
-       /*  1 == 256 entries, 2 == 512 entries, etc */
+       /* 1 == 256 entries, 2 == 512 entries, etc */
        num_increments = DIV_ROUND_CLOSEST(num_entries, increment_size);
 
        bits = (~(num_increments - 1)) & fifo->fifo_size_reg_mask;
@@ -1442,7 +1451,7 @@ static void init_stc_registers(struct comedi_device *dev)
        writew(devpriv->adc_control1_bits,
               devpriv->main_iobase + ADC_CONTROL1_REG);
 
-       /*  6402/16 manual says this register must be initialized to 0xff? */
+       /* 6402/16 manual says this register must be initialized to 0xff? */
        writew(0xff, devpriv->main_iobase + ADC_SAMPLE_INTERVAL_UPPER_REG);
 
        bits = SLOW_DAC_BIT | DMA_CH_SELECT_BIT;
@@ -1457,7 +1466,7 @@ static void init_stc_registers(struct comedi_device *dev)
 
        spin_unlock_irqrestore(&dev->spinlock, flags);
 
-       /*  set fifos to maximum size */
+       /* set fifos to maximum size */
        devpriv->fifo_size_bits |= DAC_FIFO_BITS;
        set_ai_fifo_segment_length(dev, board->ai_fifo->max_segment_length);
 
@@ -1478,7 +1487,7 @@ static int alloc_and_init_dma_members(struct comedi_device *dev)
        struct pcidas64_private *devpriv = dev->private;
        int i;
 
-       /*  allocate pci dma buffers */
+       /* allocate pci dma buffers */
        for (i = 0; i < ai_dma_ring_count(board); i++) {
                devpriv->ai_buffer[i] =
                        dma_alloc_coherent(&pcidev->dev, DMA_BUFFER_SIZE,
@@ -1499,7 +1508,7 @@ static int alloc_and_init_dma_members(struct comedi_device *dev)
                                return -ENOMEM;
                }
        }
-       /*  allocate dma descriptors */
+       /* allocate dma descriptors */
        devpriv->ai_dma_desc =
                dma_alloc_coherent(&pcidev->dev, sizeof(struct plx_dma_desc) *
                                   ai_dma_ring_count(board),
@@ -1517,7 +1526,7 @@ static int alloc_and_init_dma_members(struct comedi_device *dev)
                if (!devpriv->ao_dma_desc)
                        return -ENOMEM;
        }
-       /*  initialize dma descriptors */
+       /* initialize dma descriptors */
        for (i = 0; i < ai_dma_ring_count(board); i++) {
                devpriv->ai_dma_desc[i].pci_start_addr =
                        cpu_to_le32(devpriv->ai_buffer_bus_addr[i]);
@@ -1618,13 +1627,11 @@ static void i2c_set_sda(struct comedi_device *dev, int state)
        void __iomem *plx_control_addr = devpriv->plx9080_iobase +
                                         PLX_REG_CNTRL;
 
-       if (state) {
-               /*  set data line high */
+       if (state) {                            /* set data line high */
                devpriv->plx_control_bits &= ~data_bit;
                writel(devpriv->plx_control_bits, plx_control_addr);
                udelay(i2c_high_udelay);
-       } else {                /*  set data line low */
-
+       } else {                                /* set data line low */
                devpriv->plx_control_bits |= data_bit;
                writel(devpriv->plx_control_bits, plx_control_addr);
                udelay(i2c_low_udelay);
@@ -1639,13 +1646,11 @@ static void i2c_set_scl(struct comedi_device *dev, int state)
        void __iomem *plx_control_addr = devpriv->plx9080_iobase +
                                         PLX_REG_CNTRL;
 
-       if (state) {
-               /*  set clock line high */
+       if (state) {                            /* set clock line high */
                devpriv->plx_control_bits &= ~clock_bit;
                writel(devpriv->plx_control_bits, plx_control_addr);
                udelay(i2c_high_udelay);
-       } else {                /*  set clock line low */
-
+       } else {                                /* set clock line low */
                devpriv->plx_control_bits |= clock_bit;
                writel(devpriv->plx_control_bits, plx_control_addr);
                udelay(i2c_low_udelay);
@@ -1674,7 +1679,7 @@ static int i2c_read_ack(struct comedi_device *dev)
        i2c_set_sda(dev, 1);
        i2c_set_scl(dev, 1);
 
-       return 0;               /*  return fake acknowledge bit */
+       return 0;               /* return fake acknowledge bit */
 }
 
 /* send start bit */
@@ -1707,23 +1712,23 @@ static void i2c_write(struct comedi_device *dev, unsigned int address,
         * eeprom and i2c bus
         */
 
-       /*  make sure we dont send anything to eeprom */
+       /* make sure we dont send anything to eeprom */
        devpriv->plx_control_bits &= ~PLX_CNTRL_EECS;
 
        i2c_stop(dev);
        i2c_start(dev);
 
-       /*  send address and write bit */
+       /* send address and write bit */
        bitstream = (address << 1) & ~read_bit;
        i2c_write_byte(dev, bitstream);
 
-       /*  get acknowledge */
+       /* get acknowledge */
        if (i2c_read_ack(dev) != 0) {
                dev_err(dev->class_dev, "failed: no acknowledge\n");
                i2c_stop(dev);
                return;
        }
-       /*  write data bytes */
+       /* write data bytes */
        for (i = 0; i < length; i++) {
                i2c_write_byte(dev, data[i]);
                if (i2c_read_ack(dev) != 0) {
@@ -1770,8 +1775,8 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
        range = CR_RANGE(insn->chanspec);
        aref = CR_AREF(insn->chanspec);
 
-       /*  disable card's analog input interrupt sources and pacing */
-       /*  4020 generates dac done interrupts even though they are disabled */
+       /* disable card's analog input interrupt sources and pacing */
+       /* 4020 generates dac done interrupts even though they are disabled */
        disable_ai_pacing(dev);
 
        spin_lock_irqsave(&dev->spinlock, flags);
@@ -1784,12 +1789,12 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
        spin_unlock_irqrestore(&dev->spinlock, flags);
 
        if (board->layout != LAYOUT_4020) {
-               /*  use internal queue */
+               /* use internal queue */
                devpriv->hw_config_bits &= ~EXT_QUEUE_BIT;
                writew(devpriv->hw_config_bits,
                       devpriv->main_iobase + HW_CONFIG_REG);
 
-               /*  ALT_SOURCE is internal calibration reference */
+               /* ALT_SOURCE is internal calibration reference */
                if (insn->chanspec & CR_ALT_SOURCE) {
                        unsigned int cal_en_bit;
 
@@ -1811,19 +1816,19 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                         */
                        writew(0, devpriv->main_iobase + CALIBRATION_REG);
                }
-               /*  load internal queue */
+               /* load internal queue */
                bits = 0;
-               /*  set gain */
+               /* set gain */
                bits |= ai_range_bits_6xxx(dev, CR_RANGE(insn->chanspec));
-               /*  set single-ended / differential */
+               /* set single-ended / differential */
                bits |= se_diff_bit_6xxx(dev, aref == AREF_DIFF);
                if (aref == AREF_COMMON)
                        bits |= ADC_COMMON_BIT;
                bits |= adc_chan_bits(channel);
-               /*  set stop channel */
+               /* set stop channel */
                writew(adc_chan_bits(channel),
                       devpriv->main_iobase + ADC_QUEUE_HIGH_REG);
-               /*  set start channel, and rest of settings */
+               /* set start channel, and rest of settings */
                writew(bits, devpriv->main_iobase + ADC_QUEUE_LOAD_REG);
        } else {
                uint8_t old_cal_range_bits = devpriv->i2c_cal_range_bits;
@@ -1835,7 +1840,7 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                } else {        /* select BNC inputs */
                        devpriv->i2c_cal_range_bits |= adc_src_4020_bits(4);
                }
-               /*  select range */
+               /* select range */
                if (range == 0)
                        devpriv->i2c_cal_range_bits |= attenuate_bit(channel);
                else
@@ -1862,14 +1867,14 @@ static int ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
        }
 
        for (n = 0; n < insn->n; n++) {
-               /*  clear adc buffer (inside loop for 4020 sake) */
+               /* clear adc buffer (inside loop for 4020 sake) */
                writew(0, devpriv->main_iobase + ADC_BUFFER_CLEAR_REG);
 
                /* trigger conversion, bits sent only matter for 4020 */
                writew(adc_convert_chan_4020_bits(CR_CHAN(insn->chanspec)),
                       devpriv->main_iobase + ADC_CONVERT_REG);
 
-               /*  wait for data */
+               /* wait for data */
                ret = comedi_timeout(dev, s, insn, cb_pcidas64_ai_eoc, 0);
                if (ret)
                        return ret;
@@ -2249,7 +2254,7 @@ static void setup_sample_counters(struct comedi_device *dev,
 {
        struct pcidas64_private *devpriv = dev->private;
 
-       /*  load hardware conversion counter */
+       /* load hardware conversion counter */
        if (use_hw_sample_counter(cmd)) {
                writew(cmd->stop_arg & 0xffff,
                       devpriv->main_iobase + ADC_COUNT_LOWER_REG);
@@ -2277,7 +2282,7 @@ static inline unsigned int dma_transfer_size(struct comedi_device *dev)
 static uint32_t ai_convert_counter_6xxx(const struct comedi_device *dev,
                                        const struct comedi_cmd *cmd)
 {
-       /*  supposed to load counter with desired divisor minus 3 */
+       /* supposed to load counter with desired divisor minus 3 */
        return cmd->convert_arg / TIMER_BASE - 3;
 }
 
@@ -2286,7 +2291,7 @@ static uint32_t ai_scan_counter_6xxx(struct comedi_device *dev,
 {
        uint32_t count;
 
-       /*  figure out how long we need to delay at end of scan */
+       /* figure out how long we need to delay at end of scan */
        switch (cmd->scan_begin_src) {
        case TRIG_TIMER:
                count = (cmd->scan_begin_arg -
@@ -2315,13 +2320,13 @@ static uint32_t ai_convert_counter_4020(struct comedi_device *dev,
        case TRIG_OTHER:
                divisor = devpriv->ext_clock.divisor;
                break;
-       default:                /*  should never happen */
+       default:                /* should never happen */
                dev_err(dev->class_dev, "bug! failed to set ai pacing!\n");
                divisor = 1000;
                break;
        }
 
-       /*  supposed to load counter with desired divisor minus 2 for 4020 */
+       /* supposed to load counter with desired divisor minus 2 for 4020 */
        return divisor - 2;
 }
 
@@ -2330,7 +2335,7 @@ static void select_master_clock_4020(struct comedi_device *dev,
 {
        struct pcidas64_private *devpriv = dev->private;
 
-       /*  select internal/external master clock */
+       /* select internal/external master clock */
        devpriv->hw_config_bits &= ~MASTER_CLOCK_4020_MASK;
        if (cmd->scan_begin_src == TRIG_OTHER) {
                int chanspec = devpriv->ext_clock.chanspec;
@@ -2366,7 +2371,7 @@ static inline void dma_start_sync(struct comedi_device *dev,
        struct pcidas64_private *devpriv = dev->private;
        unsigned long flags;
 
-       /*  spinlock for plx dma control/status reg */
+       /* spinlock for plx dma control/status reg */
        spin_lock_irqsave(&dev->spinlock, flags);
        writeb(PLX_DMACSR_ENABLE | PLX_DMACSR_START | PLX_DMACSR_CLEARINTR,
               devpriv->plx9080_iobase + PLX_REG_DMACSR(channel));
@@ -2390,16 +2395,16 @@ static void set_ai_pacing(struct comedi_device *dev, struct comedi_cmd *cmd)
                scan_counter = ai_scan_counter_6xxx(dev, cmd);
        }
 
-       /*  load lower 16 bits of convert interval */
+       /* load lower 16 bits of convert interval */
        writew(convert_counter & 0xffff,
               devpriv->main_iobase + ADC_SAMPLE_INTERVAL_LOWER_REG);
-       /*  load upper 8 bits of convert interval */
+       /* load upper 8 bits of convert interval */
        writew((convert_counter >> 16) & 0xff,
               devpriv->main_iobase + ADC_SAMPLE_INTERVAL_UPPER_REG);
-       /*  load lower 16 bits of scan delay */
+       /* load lower 16 bits of scan delay */
        writew(scan_counter & 0xffff,
               devpriv->main_iobase + ADC_DELAY_INTERVAL_LOWER_REG);
-       /*  load upper 8 bits of scan delay */
+       /* load upper 8 bits of scan delay */
        writew((scan_counter >> 16) & 0xff,
               devpriv->main_iobase + ADC_DELAY_INTERVAL_UPPER_REG);
 }
@@ -2435,26 +2440,26 @@ static int setup_channel_queue(struct comedi_device *dev,
                        writew(devpriv->hw_config_bits,
                               devpriv->main_iobase + HW_CONFIG_REG);
                        bits = 0;
-                       /*  set channel */
+                       /* set channel */
                        bits |= adc_chan_bits(CR_CHAN(cmd->chanlist[0]));
-                       /*  set gain */
+                       /* set gain */
                        bits |= ai_range_bits_6xxx(dev,
                                                   CR_RANGE(cmd->chanlist[0]));
-                       /*  set single-ended / differential */
+                       /* set single-ended / differential */
                        bits |= se_diff_bit_6xxx(dev,
                                                 CR_AREF(cmd->chanlist[0]) ==
                                                 AREF_DIFF);
                        if (CR_AREF(cmd->chanlist[0]) == AREF_COMMON)
                                bits |= ADC_COMMON_BIT;
-                       /*  set stop channel */
+                       /* set stop channel */
                        writew(adc_chan_bits
                               (CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1])),
                               devpriv->main_iobase + ADC_QUEUE_HIGH_REG);
-                       /*  set start channel, and rest of settings */
+                       /* set start channel, and rest of settings */
                        writew(bits,
                               devpriv->main_iobase + ADC_QUEUE_LOAD_REG);
                } else {
-                       /*  use external queue */
+                       /* use external queue */
                        if (dev->write_subdev && dev->write_subdev->busy) {
                                warn_external_queue(dev);
                                return -EBUSY;
@@ -2462,30 +2467,30 @@ static int setup_channel_queue(struct comedi_device *dev,
                        devpriv->hw_config_bits |= EXT_QUEUE_BIT;
                        writew(devpriv->hw_config_bits,
                               devpriv->main_iobase + HW_CONFIG_REG);
-                       /*  clear DAC buffer to prevent weird interactions */
+                       /* clear DAC buffer to prevent weird interactions */
                        writew(0,
                               devpriv->main_iobase + DAC_BUFFER_CLEAR_REG);
-                       /*  clear queue pointer */
+                       /* clear queue pointer */
                        writew(0, devpriv->main_iobase + ADC_QUEUE_CLEAR_REG);
-                       /*  load external queue */
+                       /* load external queue */
                        for (i = 0; i < cmd->chanlist_len; i++) {
                                bits = 0;
-                               /*  set channel */
+                               /* set channel */
                                bits |= adc_chan_bits(CR_CHAN(cmd->
                                                              chanlist[i]));
-                               /*  set gain */
+                               /* set gain */
                                bits |= ai_range_bits_6xxx(dev,
                                                           CR_RANGE(cmd->
                                                                    chanlist
                                                                    [i]));
-                               /*  set single-ended / differential */
+                               /* set single-ended / differential */
                                bits |= se_diff_bit_6xxx(dev,
                                                         CR_AREF(cmd->
                                                                 chanlist[i]) ==
                                                         AREF_DIFF);
                                if (CR_AREF(cmd->chanlist[i]) == AREF_COMMON)
                                        bits |= ADC_COMMON_BIT;
-                               /*  mark end of queue */
+                               /* mark end of queue */
                                if (i == cmd->chanlist_len - 1)
                                        bits |= QUEUE_EOSCAN_BIT |
                                                QUEUE_EOSEQ_BIT;
@@ -2498,7 +2503,7 @@ static int setup_channel_queue(struct comedi_device *dev,
                         * but required for reliable operation
                         */
                        writew(0, devpriv->main_iobase + ADC_QUEUE_CLEAR_REG);
-                       /*  prime queue holding register */
+                       /* prime queue holding register */
                        writew(0, devpriv->main_iobase + ADC_QUEUE_LOAD_REG);
                }
        } else {
@@ -2507,7 +2512,7 @@ static int setup_channel_queue(struct comedi_device *dev,
                devpriv->i2c_cal_range_bits &= ~ADC_SRC_4020_MASK;
                /* select BNC inputs */
                devpriv->i2c_cal_range_bits |= adc_src_4020_bits(4);
-               /*  select ranges */
+               /* select ranges */
                for (i = 0; i < cmd->chanlist_len; i++) {
                        unsigned int channel = CR_CHAN(cmd->chanlist[i]);
                        unsigned int range = CR_RANGE(cmd->chanlist[i]);
@@ -2579,7 +2584,7 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        if (retval < 0)
                return retval;
 
-       /*  make sure internal calibration source is turned off */
+       /* make sure internal calibration source is turned off */
        writew(0, devpriv->main_iobase + CALIBRATION_REG);
 
        set_ai_pacing(dev, cmd);
@@ -2595,10 +2600,10 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        if (board->layout != LAYOUT_4020) {
                devpriv->adc_control1_bits &= ~ADC_MODE_MASK;
                if (cmd->convert_src == TRIG_EXT)
-                       /*  good old mode 13 */
+                       /* good old mode 13 */
                        devpriv->adc_control1_bits |= adc_mode_bits(13);
                else
-                       /*  mode 8.  What else could you need? */
+                       /* mode 8.  What else could you need? */
                        devpriv->adc_control1_bits |= adc_mode_bits(8);
        } else {
                devpriv->adc_control1_bits &= ~CHANNEL_MODE_4020_MASK;
@@ -2618,20 +2623,20 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
               devpriv->main_iobase + ADC_CONTROL1_REG);
        spin_unlock_irqrestore(&dev->spinlock, flags);
 
-       /*  clear adc buffer */
+       /* clear adc buffer */
        writew(0, devpriv->main_iobase + ADC_BUFFER_CLEAR_REG);
 
        if ((cmd->flags & CMDF_WAKE_EOS) == 0 ||
            board->layout == LAYOUT_4020) {
                devpriv->ai_dma_index = 0;
 
-               /*  set dma transfer size */
+               /* set dma transfer size */
                for (i = 0; i < ai_dma_ring_count(board); i++)
                        devpriv->ai_dma_desc[i].transfer_size =
                                cpu_to_le32(dma_transfer_size(dev) *
                                            sizeof(uint16_t));
 
-               /*  give location of first dma descriptor */
+               /* give location of first dma descriptor */
                load_first_dma_descriptor(dev, 1,
                                          devpriv->ai_dma_desc_bus_addr |
                                          PLX_DMADPR_DESCPCI |
@@ -2657,7 +2662,7 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        bits = ADC_ENABLE_BIT | ADC_SOFT_GATE_BITS | ADC_GATE_LEVEL_BIT;
        if (cmd->flags & CMDF_WAKE_EOS)
                bits |= ADC_DMA_DISABLE_BIT;
-       /*  set start trigger */
+       /* set start trigger */
        if (cmd->start_src == TRIG_EXT) {
                bits |= ADC_START_TRIG_EXT_BITS;
                if (cmd->start_arg & CR_INVERT)
@@ -2673,7 +2678,7 @@ static int ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 
        spin_unlock_irqrestore(&dev->spinlock, flags);
 
-       /*  start acquisition */
+       /* start acquisition */
        if (cmd->start_src == TRIG_NOW)
                writew(0, devpriv->main_iobase + ADC_START_REG);
 
@@ -2691,7 +2696,7 @@ static void pio_drain_ai_fifo_16(struct comedi_device *dev)
        int num_samples;
 
        do {
-               /*  get least significant 15 bits */
+               /* get least significant 15 bits */
                read_index = readw(devpriv->main_iobase + ADC_READ_PNTR_REG) &
                             0x7fff;
                write_index = readw(devpriv->main_iobase + ADC_WRITE_PNTR_REG) &
@@ -2796,14 +2801,14 @@ static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel)
 
        pci_addr_reg = devpriv->plx9080_iobase + PLX_REG_DMAPADR(channel);
 
-       /*  loop until we have read all the full buffers */
+       /* loop until we have read all the full buffers */
        for (j = 0, next_transfer_addr = readl(pci_addr_reg);
             (next_transfer_addr <
              devpriv->ai_buffer_bus_addr[devpriv->ai_dma_index] ||
              next_transfer_addr >=
              devpriv->ai_buffer_bus_addr[devpriv->ai_dma_index] +
              DMA_BUFFER_SIZE) && j < ai_dma_ring_count(board); j++) {
-               /*  transfer data from dma buffer to comedi buffer */
+               /* transfer data from dma buffer to comedi buffer */
                num_samples = comedi_nsamples_left(s, dma_transfer_size(dev));
                comedi_buf_write_samples(s,
                                devpriv->ai_buffer[devpriv->ai_dma_index],
@@ -2829,15 +2834,15 @@ static void handle_ai_interrupt(struct comedi_device *dev,
        uint8_t dma1_status;
        unsigned long flags;
 
-       /*  check for fifo overrun */
+       /* check for fifo overrun */
        if (status & ADC_OVERRUN_BIT) {
                dev_err(dev->class_dev, "fifo overrun\n");
                async->events |= COMEDI_CB_ERROR;
        }
-       /*  spin lock makes sure no one else changes plx dma control reg */
+       /* spin lock makes sure no one else changes plx dma control reg */
        spin_lock_irqsave(&dev->spinlock, flags);
        dma1_status = readb(devpriv->plx9080_iobase + PLX_REG_DMACSR1);
-       if (plx_status & PLX_INTCSR_DMA1IA) {   /*  dma chan 1 interrupt */
+       if (plx_status & PLX_INTCSR_DMA1IA) {   /* dma chan 1 interrupt */
                writeb((dma1_status & PLX_DMACSR_ENABLE) | PLX_DMACSR_CLEARINTR,
                       devpriv->plx9080_iobase + PLX_REG_DMACSR1);
 
@@ -2846,7 +2851,7 @@ static void handle_ai_interrupt(struct comedi_device *dev,
        }
        spin_unlock_irqrestore(&dev->spinlock, flags);
 
-       /*  drain fifo with pio */
+       /* drain fifo with pio */
        if ((status & ADC_DONE_BIT) ||
            ((cmd->flags & CMDF_WAKE_EOS) &&
             (status & ADC_INTR_PENDING_BIT) &&
@@ -2859,7 +2864,7 @@ static void handle_ai_interrupt(struct comedi_device *dev,
                        spin_unlock_irqrestore(&dev->spinlock, flags);
                }
        }
-       /*  if we are have all the data, then quit */
+       /* if we are have all the data, then quit */
        if ((cmd->stop_src == TRIG_COUNT &&
             async->scans_done >= cmd->stop_arg) ||
            (cmd->stop_src == TRIG_EXT && (status & ADC_STOP_BIT)))
@@ -3012,7 +3017,7 @@ static void handle_ao_interrupt(struct comedi_device *dev,
        async = s->async;
        cmd = &async->cmd;
 
-       /*  spin lock makes sure no one else changes plx dma control reg */
+       /* spin lock makes sure no one else changes plx dma control reg */
        spin_lock_irqsave(&dev->spinlock, flags);
        dma0_status = readb(devpriv->plx9080_iobase + PLX_REG_DMACSR0);
        if (plx_status & PLX_INTCSR_DMA0IA) {   /*  dma chan 0 interrupt */
@@ -3106,15 +3111,15 @@ static int ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s,
        int chan = CR_CHAN(insn->chanspec);
        int range = CR_RANGE(insn->chanspec);
 
-       /*  do some initializing */
+       /* do some initializing */
        writew(0, devpriv->main_iobase + DAC_CONTROL0_REG);
 
-       /*  set range */
+       /* set range */
        set_dac_range_bits(dev, &devpriv->dac_control1_bits, chan, range);
        writew(devpriv->dac_control1_bits,
               devpriv->main_iobase + DAC_CONTROL1_REG);
 
-       /*  write to channel */
+       /* write to channel */
        if (board->layout == LAYOUT_4020) {
                writew(data[0] & 0xff,
                       devpriv->main_iobase + dac_lsb_4020_reg(chan));
@@ -3124,7 +3129,7 @@ static int ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s,
                writew(data[0], devpriv->main_iobase + dac_convert_reg(chan));
        }
 
-       /*  remember output value */
+       /* remember output value */
        s->readback[chan] = data[0];
 
        return 1;
@@ -3556,7 +3561,7 @@ static int caldac_i2c_write(struct comedi_device *dev,
        uint8_t serial_bytes[3];
        uint8_t i2c_addr;
        enum pointer_bits {
-               /*  manual has gain and offset bits switched */
+               /* manual has gain and offset bits switched */
                OFFSET_0_2 = 0x1,
                GAIN_0_2 = 0x2,
                OFFSET_1_3 = 0x4,
@@ -3567,35 +3572,35 @@ static int caldac_i2c_write(struct comedi_device *dev,
        };
 
        switch (caldac_channel) {
-       case 0:         /*  chan 0 offset */
+       case 0:                                 /* chan 0 offset */
                i2c_addr = CALDAC0_I2C_ADDR;
                serial_bytes[0] = OFFSET_0_2;
                break;
-       case 1:         /*  chan 1 offset */
+       case 1:                                 /* chan 1 offset */
                i2c_addr = CALDAC0_I2C_ADDR;
                serial_bytes[0] = OFFSET_1_3;
                break;
-       case 2:         /*  chan 2 offset */
+       case 2:                                 /* chan 2 offset */
                i2c_addr = CALDAC1_I2C_ADDR;
                serial_bytes[0] = OFFSET_0_2;
                break;
-       case 3:         /*  chan 3 offset */
+       case 3:                                 /* chan 3 offset */
                i2c_addr = CALDAC1_I2C_ADDR;
                serial_bytes[0] = OFFSET_1_3;
                break;
-       case 4:         /*  chan 0 gain */
+       case 4:                                 /* chan 0 gain */
                i2c_addr = CALDAC0_I2C_ADDR;
                serial_bytes[0] = GAIN_0_2;
                break;
-       case 5:         /*  chan 1 gain */
+       case 5:                                 /* chan 1 gain */
                i2c_addr = CALDAC0_I2C_ADDR;
                serial_bytes[0] = GAIN_1_3;
                break;
-       case 6:         /*  chan 2 gain */
+       case 6:                                 /* chan 2 gain */
                i2c_addr = CALDAC1_I2C_ADDR;
                serial_bytes[0] = GAIN_0_2;
                break;
-       case 7:         /*  chan 3 gain */
+       case 7:                                 /* chan 3 gain */
                i2c_addr = CALDAC1_I2C_ADDR;
                serial_bytes[0] = GAIN_1_3;
                break;
@@ -3718,24 +3723,24 @@ static uint16_t read_eeprom(struct comedi_device *dev, uint8_t address)
 
        udelay(eeprom_udelay);
        devpriv->plx_control_bits &= ~PLX_CNTRL_EESK & ~PLX_CNTRL_EECS;
-       /*  make sure we don't send anything to the i2c bus on 4020 */
+       /* make sure we don't send anything to the i2c bus on 4020 */
        devpriv->plx_control_bits |= PLX_CNTRL_USERO;
        writel(devpriv->plx_control_bits, plx_control_addr);
-       /*  activate serial eeprom */
+       /* activate serial eeprom */
        udelay(eeprom_udelay);
        devpriv->plx_control_bits |= PLX_CNTRL_EECS;
        writel(devpriv->plx_control_bits, plx_control_addr);
 
-       /*  write read command and desired memory address */
+       /* write read command and desired memory address */
        for (bit = 1 << (bitstream_length - 1); bit; bit >>= 1) {
-               /*  set bit to be written */
+               /* set bit to be written */
                udelay(eeprom_udelay);
                if (bitstream & bit)
                        devpriv->plx_control_bits |= PLX_CNTRL_EEWB;
                else
                        devpriv->plx_control_bits &= ~PLX_CNTRL_EEWB;
                writel(devpriv->plx_control_bits, plx_control_addr);
-               /*  clock in bit */
+               /* clock in bit */
                udelay(eeprom_udelay);
                devpriv->plx_control_bits |= PLX_CNTRL_EESK;
                writel(devpriv->plx_control_bits, plx_control_addr);
@@ -3743,10 +3748,10 @@ static uint16_t read_eeprom(struct comedi_device *dev, uint8_t address)
                devpriv->plx_control_bits &= ~PLX_CNTRL_EESK;
                writel(devpriv->plx_control_bits, plx_control_addr);
        }
-       /*  read back value from eeprom memory location */
+       /* read back value from eeprom memory location */
        value = 0;
        for (bit = 1 << (value_length - 1); bit; bit >>= 1) {
-               /*  clock out bit */
+               /* clock out bit */
                udelay(eeprom_udelay);
                devpriv->plx_control_bits |= PLX_CNTRL_EESK;
                writel(devpriv->plx_control_bits, plx_control_addr);
@@ -3758,7 +3763,7 @@ static uint16_t read_eeprom(struct comedi_device *dev, uint8_t address)
                        value |= bit;
        }
 
-       /*  deactivate eeprom serial input */
+       /* deactivate eeprom serial input */
        udelay(eeprom_udelay);
        devpriv->plx_control_bits &= ~PLX_CNTRL_EECS;
        writel(devpriv->plx_control_bits, plx_control_addr);
@@ -3775,9 +3780,7 @@ static int eeprom_read_insn(struct comedi_device *dev,
        return 1;
 }
 
-/*
- * Allocate and initialize the subdevice structures.
- */
+/* Allocate and initialize the subdevice structures. */
 static int setup_subdevices(struct comedi_device *dev)
 {
        const struct pcidas64_board *board = dev->board_ptr;
@@ -3816,7 +3819,7 @@ static int setup_subdevices(struct comedi_device *dev)
                 * (not internal calibration sources)
                 */
                devpriv->i2c_cal_range_bits = adc_src_4020_bits(4);
-               /*  set channels to +-5 volt input ranges */
+               /* set channels to +-5 volt input ranges */
                for (i = 0; i < s->n_chan; i++)
                        devpriv->i2c_cal_range_bits |= attenuate_bit(i);
                data = devpriv->i2c_cal_range_bits;
@@ -3849,7 +3852,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       /*  digital input */
+       /* digital input */
        s = &dev->subdevices[2];
        if (board->layout == LAYOUT_64XX) {
                s->type = COMEDI_SUBD_DI;
@@ -3862,7 +3865,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       /*  digital output */
+       /* digital output */
        if (board->layout == LAYOUT_64XX) {
                s = &dev->subdevices[3];
                s->type = COMEDI_SUBD_DO;
@@ -3891,7 +3894,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       /*  8 channel dio for 60xx */
+       /* 8 channel dio for 60xx */
        s = &dev->subdevices[5];
        if (board->layout == LAYOUT_60XX) {
                s->type = COMEDI_SUBD_DIO;
@@ -3905,7 +3908,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       /*  caldac */
+       /* caldac */
        s = &dev->subdevices[6];
        s->type = COMEDI_SUBD_CALIB;
        s->subdev_flags = SDF_READABLE | SDF_WRITABLE | SDF_INTERNAL;
@@ -3925,7 +3928,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->readback[i] = s->maxdata / 2;
        }
 
-       /*  2 channel ad8402 potentiometer */
+       /* 2 channel ad8402 potentiometer */
        s = &dev->subdevices[7];
        if (board->layout == LAYOUT_64XX) {
                s->type = COMEDI_SUBD_CALIB;
@@ -3959,7 +3962,7 @@ static int setup_subdevices(struct comedi_device *dev)
                s->type = COMEDI_SUBD_UNUSED;
        }
 
-       /*  user counter subd XXX */
+       /* user counter subd XXX */
        s = &dev->subdevices[9];
        s->type = COMEDI_SUBD_UNUSED;
 
@@ -4005,7 +4008,7 @@ static int auto_attach(struct comedi_device *dev,
                return -ENOMEM;
        }
 
-       /*  figure out what local addresses are */
+       /* figure out what local addresses are */
        local_range = readl(devpriv->plx9080_iobase + PLX_REG_LAS0RR) &
                      PLX_LASRR_MEM_MASK;
        local_decode = readl(devpriv->plx9080_iobase + PLX_REG_LAS0BA) &
index 9c02b17a28347aff19e4cfe1e6016e615c87ae2e..317a9b5e4a3b16537bd460cbb0c6e0dfc2b09b52 100644 (file)
@@ -1,43 +1,42 @@
 /*
-    comedi/drivers/das08_cs.c
-    DAS08 driver
+ * Comedi driver for DAS008 PCMCIA boards
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 2000 David A. Schleef <ds@schleef.org>
+ * Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * PCMCIA support code for this driver is adapted from the dummy_cs.c
+ * driver of the Linux PCMCIA Card Services package.
+ *
+ * The initial developer of the original code is David A. Hinds
+ * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
+ * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
+ */
 
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 2000 David A. Schleef <ds@schleef.org>
-    Copyright (C) 2001,2002,2003 Frank Mori Hess <fmhess@users.sourceforge.net>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    PCMCIA support code for this driver is adapted from the dummy_cs.c
-    driver of the Linux PCMCIA Card Services package.
-
-    The initial developer of the original code is David A. Hinds
-    <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
-    are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
-*/
 /*
-Driver: das08_cs
-Description: DAS-08 PCMCIA boards
-Author: Warren Jasper, ds, Frank Hess
-Devices: [ComputerBoards] PCM-DAS08 (pcm-das08)
-Status: works
-
-This is the PCMCIA-specific support split off from the
-das08 driver.
-
-Options (for pcm-das08):
-       NONE
-
-Command support does not exist, but could be added for this board.
-*/
+ * Driver: das08_cs
+ * Description: DAS-08 PCMCIA boards
+ * Author: Warren Jasper, ds, Frank Hess
+ * Devices: [ComputerBoards] PCM-DAS08 (pcm-das08)
+ * Status: works
+ *
+ * This is the PCMCIA-specific support split off from the
+ * das08 driver.
+ *
+ * Configuration Options: none, uses PCMCIA auto config
+ *
+ * Command support does not exist, but could be added for this board.
+ */
 
 #include <linux/module.h>
 
index 8bbd938143408a70b1b364f606f4df6768ab6f00..fcd85475e4294a6c49e96d93a6738a1408407fbf 100644 (file)
  *    6      6      100 kHz     6   1000000
  *    7     12       50 kHz     7   10000000
  */
-const unsigned int dt2811_clk_dividers[] = {
+static const unsigned int dt2811_clk_dividers[] = {
        1, 10, 2, 3, 4, 5, 6, 12
 };
 
-const unsigned int dt2811_clk_multipliers[] = {
+static const unsigned int dt2811_clk_multipliers[] = {
        1, 10, 100, 1000, 10000, 100000, 1000000, 10000000
 };
 
index 3295bb4ac8c4cf5a45606569bbfd940b9ab0da3c..7ebca862ecaa3204224b678a47ddf613806b4786 100644 (file)
@@ -660,12 +660,12 @@ static int dt9812_find_endpoints(struct comedi_device *dev)
                case 1:
                        dir = USB_DIR_OUT;
                        devpriv->cmd_wr.addr = ep->bEndpointAddress;
-                       devpriv->cmd_wr.size = le16_to_cpu(ep->wMaxPacketSize);
+                       devpriv->cmd_wr.size = usb_endpoint_maxp(ep);
                        break;
                case 2:
                        dir = USB_DIR_IN;
                        devpriv->cmd_rd.addr = ep->bEndpointAddress;
-                       devpriv->cmd_rd.size = le16_to_cpu(ep->wMaxPacketSize);
+                       devpriv->cmd_rd.size = usb_endpoint_maxp(ep);
                        break;
                case 3:
                        /* unused write stream */
index af4b4175af4daecf864bb68f2aeb2243d8f160ab..e5b948405fd9c78ddf47f7f62b087dc802dbef25 100644 (file)
@@ -582,7 +582,7 @@ static void gsc_hpdi_init_plx9080(struct comedi_device *dev)
        bits |= PLX_DMAMODE_DEMAND;
        /* enable local burst mode */
        bits |= PLX_DMAMODE_BURSTEN;
-       bits |= PLX_DMAMODE_WIDTH32;
+       bits |= PLX_DMAMODE_WIDTH_32;
        writel(bits, plx_iobase + PLX_REG_DMAMODE0);
 }
 
index 6c4ff023717f0f80de0d153ceb879d5207124a89..70390de66e0e95ea87e1b90a3a5620b99393d8b4 100644 (file)
@@ -141,7 +141,7 @@ static void set_transforms(struct jr3_channel __iomem *channel,
 {
        int i;
 
-       num &= 0x000f;          /*  Make sure that 0 <= num <= 15 */
+       num &= 0x000f;          /* Make sure that 0 <= num <= 15 */
        for (i = 0; i < 8; i++) {
                set_u16(&channel->transforms[num].link[i].link_type,
                        transf.link[i].link_type);
@@ -323,10 +323,10 @@ static int read_idm_word(const u8 *data, size_t size, int *pos,
        int value;
 
        if (pos && val) {
-               /*  Skip over non hex */
+               /* Skip over non hex */
                for (; *pos < size && !isxdigit(data[*pos]); (*pos)++)
                        ;
-               /*  Collect value */
+               /* Collect value */
                *val = 0;
                for (; *pos < size; (*pos)++) {
                        value = hex_to_bin(data[*pos]);
@@ -448,7 +448,8 @@ static int jr3_download_firmware(struct comedi_device *dev,
        return 0;
 }
 
-static struct jr3_pci_poll_delay jr3_pci_poll_subdevice(struct comedi_subdevice *s)
+static struct jr3_pci_poll_delay
+jr3_pci_poll_subdevice(struct comedi_subdevice *s)
 {
        struct jr3_pci_subdev_private *spriv = s->private;
        struct jr3_pci_poll_delay result = poll_delay_min_max(1000, 2000);
@@ -733,13 +734,13 @@ static int jr3_pci_auto_attach(struct comedi_device *dev,
                }
        }
 
-       /*  Reset DSP card */
+       /* Reset DSP card */
        writel(0, &devpriv->iobase->channel[0].reset);
 
        ret = comedi_load_firmware(dev, &comedi_to_pci_dev(dev)->dev,
                                   "comedi/jr3pci.idm",
                                   jr3_download_firmware, 0);
-       dev_dbg(dev->class_dev, "Firmare load %d\n", ret);
+       dev_dbg(dev->class_dev, "Firmware load %d\n", ret);
        if (ret < 0)
                return ret;
        /*
@@ -763,7 +764,7 @@ static int jr3_pci_auto_attach(struct comedi_device *dev,
                                data.copyright[i]) >> 8);
        }
 
-       /*  Start card timer */
+       /* Start card timer */
        for (i = 0; i < dev->n_subdevices; i++) {
                s = &dev->subdevices[i];
                spriv = s->private;
index 356811defaf464b12833e09392fdc836398a9c04..f10a84fb6c140bb9dd5b307e87d4a0488b174bc9 100644 (file)
@@ -1,4 +1,5 @@
-/* Helper types to take care of the fact that the DSP card memory
+/*
+ * Helper types to take care of the fact that the DSP card memory
  * is 16 bits, but aligned on a 32 bit PCI boundary
  */
 
@@ -22,7 +23,8 @@ static inline void set_s16(s32 __iomem *p, s16 val)
        writel(val, p);
 }
 
-/* The raw data is stored in a format which facilitates rapid
+/*
+ * The raw data is stored in a format which facilitates rapid
  * processing by the JR3 DSP chip. The raw_channel structure shows the
  * format for a single channel of data. Each channel takes four,
  * two-byte words.
@@ -47,7 +49,8 @@ struct raw_channel {
        s32 reserved[2];
 };
 
-/* The force_array structure shows the layout for the decoupled and
+/*
+ * The force_array structure shows the layout for the decoupled and
  * filtered force data.
  */
 struct force_array {
@@ -61,7 +64,8 @@ struct force_array {
        s32 v2;
 };
 
-/* The six_axis_array structure shows the layout for the offsets and
+/*
+ * The six_axis_array structure shows the layout for the offsets and
  * the full scales.
  */
 struct six_axis_array {
@@ -74,7 +78,8 @@ struct six_axis_array {
 };
 
 /* VECT_BITS */
-/* The vect_bits structure shows the layout for indicating
+/*
+ * The vect_bits structure shows the layout for indicating
  * which axes to use in computing the vectors. Each bit signifies
  * selection of a single axis. The V1x axis bit corresponds to a hex
  * value of 0x0001 and the V2z bit corresponds to a hex value of
@@ -100,12 +105,14 @@ enum {
 };
 
 /* WARNING_BITS */
-/* The warning_bits structure shows the bit pattern for the warning
+/*
+ * The warning_bits structure shows the bit pattern for the warning
  * word. The bit fields are shown from bit 0 (lsb) to bit 15 (msb).
  */
 
-/*  XX_NEAR_SET */
-/* The xx_near_sat bits signify that the indicated axis has reached or
+/* XX_NEAR_SET */
+/*
+ * The xx_near_sat bits signify that the indicated axis has reached or
  * exceeded the near saturation value.
  */
 
@@ -118,12 +125,13 @@ enum {
        mz_near_sat = 0x0020
 };
 
-/*  ERROR_BITS */
-/*  XX_SAT */
-/*  MEMORY_ERROR */
-/*  SENSOR_CHANGE */
+/* ERROR_BITS */
+/* XX_SAT */
+/* MEMORY_ERROR */
+/* SENSOR_CHANGE */
 
-/* The error_bits structure shows the bit pattern for the error word.
+/*
+ * The error_bits structure shows the bit pattern for the error word.
  * The bit fields are shown from bit 0 (lsb) to bit 15 (msb). The
  * xx_sat bits signify that the indicated axis has reached or exceeded
  * the saturation value. The memory_error bit indicates that a problem
@@ -134,9 +142,10 @@ enum {
  *
  */
 
-/*  SYSTEM_BUSY */
+/* SYSTEM_BUSY */
 
-/* The system_busy bit indicates that the JR3 DSP is currently busy
+/*
+ * The system_busy bit indicates that the JR3 DSP is currently busy
  * and is not calculating force data. This occurs when a new
  * coordinate transformation, or new sensor full scale is set by the
  * user. A very fast system using the force data for feedback might
@@ -146,9 +155,10 @@ enum {
  * calibration CRC.
  */
 
-/*  CAL_CRC_BAD */
+/* CAL_CRC_BAD */
 
-/* The cal_crc_bad bit indicates that the calibration CRC has not
+/*
+ * The cal_crc_bad bit indicates that the calibration CRC has not
  * calculated to zero. CRC is short for cyclic redundancy code. It is
  * a method for determining the integrity of messages in data
  * communication. The calibration data stored inside the sensor is
@@ -168,7 +178,8 @@ enum {
 /* WATCH_DOG */
 /* WATCH_DOG2 */
 
-/* The watch_dog and watch_dog2 bits are sensor, not processor, watch
+/*
+ * The watch_dog and watch_dog2 bits are sensor, not processor, watch
  * dog bits. Watch_dog indicates that the sensor data line seems to be
  * acting correctly, while watch_dog2 indicates that sensor data and
  * clock are being received. It is possible for watch_dog2 to go off
@@ -192,9 +203,10 @@ enum error_bits_t {
        watch_dog = 0x8000
 };
 
-/*  THRESH_STRUCT */
+/* THRESH_STRUCT */
 
-/* This structure shows the layout for a single threshold packet inside of a
+/*
+ * This structure shows the layout for a single threshold packet inside of a
  * load envelope. Each load envelope can contain several threshold structures.
  * 1. data_address contains the address of the data for that threshold. This
  *    includes filtered, unfiltered, raw, rate, counters, error and warning data
@@ -210,9 +222,10 @@ struct thresh_struct {
        s32 bit_pattern;
 };
 
-/*  LE_STRUCT */
+/* LE_STRUCT */
 
-/* Layout of a load enveloped packet. Four thresholds are showed ... for more
+/*
+ * Layout of a load enveloped packet. Four thresholds are showed ... for more
  * see manual (pag.25)
  * 1. latch_bits is a bit pattern that show which bits the user wants to latch.
  *    The latched bits will not be reset once the threshold which set them is
@@ -228,8 +241,9 @@ struct le_struct {
        s32 reserved;
 };
 
-/*  LINK_TYPES */
-/* Link types is an enumerated value showing the different possible transform
+/* LINK_TYPES */
+/*
+ * Link types is an enumerated value showing the different possible transform
  * link types.
  * 0 - end transform packet
  * 1 - translate along X axis (TX)
@@ -252,8 +266,8 @@ enum link_types {
        neg
 };
 
-/*  TRANSFORM */
-/*  Structure used to describe a transform. */
+/* TRANSFORM */
+/* Structure used to describe a transform. */
 struct intern_transform {
        struct {
                u32 link_type;
@@ -261,23 +275,29 @@ struct intern_transform {
        } link[8];
 };
 
-/*  JR3 force/torque sensor data definition. For more information see sensor
- *  and hardware manuals.
+/*
+ * JR3 force/torque sensor data definition. For more information see sensor
+ * and hardware manuals.
  */
 
 struct jr3_channel {
-       /*  Raw_channels is the area used to store the raw data coming from */
-       /*  the sensor. */
+       /*
+        * Raw_channels is the area used to store the raw data coming from
+        * the sensor.
+        */
 
        struct raw_channel raw_channels[16];    /* offset 0x0000 */
 
-       /*  Copyright is a null terminated ASCII string containing the JR3 */
-       /*  copyright notice. */
+       /*
+        * Copyright is a null terminated ASCII string containing the JR3
+        * copyright notice.
+        */
 
        u32 copyright[0x0018];  /* offset 0x0040 */
        s32 reserved1[0x0008];  /* offset 0x0058 */
 
-       /* Shunts contains the sensor shunt readings. Some JR3 sensors have
+       /*
+        * Shunts contains the sensor shunt readings. Some JR3 sensors have
         * the ability to have their gains adjusted. This allows the
         * hardware full scales to be adjusted to potentially allow
         * better resolution or dynamic range. For sensors that have
@@ -298,25 +318,29 @@ struct jr3_channel {
         * command (10) set new full scales (pg. 38).
         */
 
-       struct six_axis_array shunts;   /* offset 0x0060 */
-       s32 reserved2[2];       /* offset 0x0066 */
+       struct six_axis_array shunts;           /* offset 0x0060 */
+       s32 reserved2[2];                       /* offset 0x0066 */
 
-       /* Default_FS contains the full scale that is used if the user does */
-       /* not set a full scale. */
+       /*
+        * Default_FS contains the full scale that is used if the user does
+        * not set a full scale.
+        */
 
        struct six_axis_array default_FS;       /* offset 0x0068 */
-       s32 reserved3;          /* offset 0x006e */
+       s32 reserved3;                          /* offset 0x006e */
 
-       /* Load_envelope_num is the load envelope number that is currently
+       /*
+        * Load_envelope_num is the load envelope number that is currently
         * in use. This value is set by the user after one of the load
         * envelopes has been initialized.
         */
 
-       s32 load_envelope_num;  /* offset 0x006f */
+       s32 load_envelope_num;                  /* offset 0x006f */
 
        /* Min_full_scale is the recommend minimum full scale. */
 
-       /* These values in conjunction with max_full_scale (pg. 9) helps
+       /*
+        * These values in conjunction with max_full_scale (pg. 9) helps
         * determine the appropriate value for setting the full scales. The
         * software allows the user to set the sensor full scale to an
         * arbitrary value. But setting the full scales has some hazards. If
@@ -342,30 +366,35 @@ struct jr3_channel {
         */
 
        struct six_axis_array min_full_scale;   /* offset 0x0070 */
-       s32 reserved4;          /* offset 0x0076 */
+       s32 reserved4;                          /* offset 0x0076 */
 
-       /* Transform_num is the transform number that is currently in use.
+       /*
+        * Transform_num is the transform number that is currently in use.
         * This value is set by the JR3 DSP after the user has used command
         * (5) use transform # (pg. 33).
         */
 
-       s32 transform_num;      /* offset 0x0077 */
+       s32 transform_num;                      /* offset 0x0077 */
 
-       /*  Max_full_scale is the recommended maximum full scale. See */
-       /*  min_full_scale (pg. 9) for more details. */
+       /*
+        * Max_full_scale is the recommended maximum full scale.
+        * See min_full_scale (pg. 9) for more details.
+        */
 
        struct six_axis_array max_full_scale;   /* offset 0x0078 */
-       s32 reserved5;          /* offset 0x007e */
+       s32 reserved5;                          /* offset 0x007e */
 
-       /* Peak_address is the address of the data which will be monitored
+       /*
+        * Peak_address is the address of the data which will be monitored
         * by the peak routine. This value is set by the user. The peak
         * routine will monitor any 8 contiguous addresses for peak values.
         * (ex. to watch filter3 data for peaks, set this value to 0x00a8).
         */
 
-       s32 peak_address;       /* offset 0x007f */
+       s32 peak_address;                       /* offset 0x007f */
 
-       /* Full_scale is the sensor full scales which are currently in use.
+       /*
+        * Full_scale is the sensor full scales which are currently in use.
         * Decoupled and filtered data is scaled so that +/- 16384 is equal
         * to the full scales. The engineering units used are indicated by
         * the units value discussed on page 16. The full scales for Fx, Fy,
@@ -377,9 +406,10 @@ struct jr3_channel {
         * axes used for each vector respectively.
         */
 
-       struct force_array full_scale;  /* offset 0x0080 */
+       struct force_array full_scale;          /* offset 0x0080 */
 
-       /* Offsets contains the sensor offsets. These values are subtracted from
+       /*
+        * Offsets contains the sensor offsets. These values are subtracted from
         * the sensor data to obtain the decoupled data. The offsets are set a
         * few seconds (< 10) after the calibration data has been received.
         * They are set so that the output data will be zero. These values
@@ -392,23 +422,26 @@ struct jr3_channel {
         * about Z by 90 degrees, FY would be 5 and all others would be zero.
         */
 
-       struct six_axis_array offsets;  /* offset 0x0088 */
+       struct six_axis_array offsets;          /* offset 0x0088 */
 
-       /* Offset_num is the number of the offset currently in use. This
+       /*
+        * Offset_num is the number of the offset currently in use. This
         * value is set by the JR3 DSP after the user has executed the use
         * offset # command (pg. 34). It can vary between 0 and 15.
         */
 
-       s32 offset_num;         /* offset 0x008e */
+       s32 offset_num;                         /* offset 0x008e */
 
-       /* Vect_axes is a bit map showing which of the axes are being used
+       /*
+        * Vect_axes is a bit map showing which of the axes are being used
         * in the vector calculations. This value is set by the JR3 DSP
         * after the user has executed the set vector axes command (pg. 37).
         */
 
-       u32 vect_axes;          /* offset 0x008f */
+       u32 vect_axes;                          /* offset 0x008f */
 
-       /* Filter0 is the decoupled, unfiltered data from the JR3 sensor.
+       /*
+        * Filter0 is the decoupled, unfiltered data from the JR3 sensor.
         * This data has had the offsets removed.
         *
         * These force_arrays hold the filtered data. The decoupled data is
@@ -420,23 +453,27 @@ struct jr3_channel {
         * cutoff at 125 Hz, 31.25 Hz, 7.813 Hz, 1.953 Hz and 0.4883 Hz.
         */
 
-       struct force_array filter[7];   /* offset 0x0090,
-                                          offset 0x0098,
-                                          offset 0x00a0,
-                                          offset 0x00a8,
-                                          offset 0x00b0,
-                                          offset 0x00b8 ,
-                                          offset 0x00c0 */
-
-       /* Rate_data is the calculated rate data. It is a first derivative
+       struct force_array filter[7];           /*
+                                                * offset 0x0090,
+                                                * offset 0x0098,
+                                                * offset 0x00a0,
+                                                * offset 0x00a8,
+                                                * offset 0x00b0,
+                                                * offset 0x00b8,
+                                                * offset 0x00c0
+                                                */
+
+       /*
+        * Rate_data is the calculated rate data. It is a first derivative
         * calculation. It is calculated at a frequency specified by the
         * variable rate_divisor (pg. 12). The data on which the rate is
         * calculated is specified by the variable rate_address (pg. 12).
         */
 
-       struct force_array rate_data;   /* offset 0x00c8 */
+       struct force_array rate_data;           /* offset 0x00c8 */
 
-       /* Minimum_data & maximum_data are the minimum and maximum (peak)
+       /*
+        * Minimum_data & maximum_data are the minimum and maximum (peak)
         * data values. The JR3 DSP can monitor any 8 contiguous data items
         * for minimums and maximums at full sensor bandwidth. This area is
         * only updated at user request. This is done so that the user does
@@ -451,7 +488,8 @@ struct jr3_channel {
        struct force_array minimum_data;        /* offset 0x00d0 */
        struct force_array maximum_data;        /* offset 0x00d8 */
 
-       /* Near_sat_value & sat_value contain the value used to determine if
+       /*
+        * Near_sat_value & sat_value contain the value used to determine if
         * the raw sensor is saturated. Because of decoupling and offset
         * removal, it is difficult to tell from the processed data if the
         * sensor is saturated. These values, in conjunction with the error
@@ -465,10 +503,11 @@ struct jr3_channel {
         *   sat_value = 32768 - 2^(16 - ADC bits)
         */
 
-       s32 near_sat_value;     /* offset 0x00e0 */
-       s32 sat_value;          /* offset 0x00e1 */
+       s32 near_sat_value;                     /* offset 0x00e0 */
+       s32 sat_value;                          /* offset 0x00e1 */
 
-       /* Rate_address, rate_divisor & rate_count contain the data used to
+       /*
+        * Rate_address, rate_divisor & rate_count contain the data used to
         * control the calculations of the rates. Rate_address is the
         * address of the data used for the rate calculation. The JR3 DSP
         * will calculate rates for any 8 contiguous values (ex. to
@@ -485,11 +524,12 @@ struct jr3_channel {
         * will minimize the time necessary to start the rate calculations.
         */
 
-       s32 rate_address;       /* offset 0x00e2 */
-       u32 rate_divisor;       /* offset 0x00e3 */
-       u32 rate_count;         /* offset 0x00e4 */
+       s32 rate_address;                       /* offset 0x00e2 */
+       u32 rate_divisor;                       /* offset 0x00e3 */
+       u32 rate_count;                         /* offset 0x00e4 */
 
-       /* Command_word2 through command_word0 are the locations used to
+       /*
+        * Command_word2 through command_word0 are the locations used to
         * send commands to the JR3 DSP. Their usage varies with the command
         * and is detailed later in the Command Definitions section (pg.
         * 29). In general the user places values into various memory
@@ -502,11 +542,12 @@ struct jr3_channel {
         * command_word1).
         */
 
-       s32 command_word2;      /* offset 0x00e5 */
-       s32 command_word1;      /* offset 0x00e6 */
-       s32 command_word0;      /* offset 0x00e7 */
+       s32 command_word2;                      /* offset 0x00e5 */
+       s32 command_word1;                      /* offset 0x00e6 */
+       s32 command_word0;                      /* offset 0x00e7 */
 
-       /* Count1 through count6 are unsigned counters which are incremented
+       /*
+        * Count1 through count6 are unsigned counters which are incremented
         * every time the matching filters are calculated. Filter1 is
         * calculated at the sensor data bandwidth. So this counter would
         * increment at 8 kHz for a typical sensor. The rest of the counters
@@ -518,14 +559,15 @@ struct jr3_channel {
         * once.
         */
 
-       u32 count1;             /* offset 0x00e8 */
-       u32 count2;             /* offset 0x00e9 */
-       u32 count3;             /* offset 0x00ea */
-       u32 count4;             /* offset 0x00eb */
-       u32 count5;             /* offset 0x00ec */
-       u32 count6;             /* offset 0x00ed */
+       u32 count1;                             /* offset 0x00e8 */
+       u32 count2;                             /* offset 0x00e9 */
+       u32 count3;                             /* offset 0x00ea */
+       u32 count4;                             /* offset 0x00eb */
+       u32 count5;                             /* offset 0x00ec */
+       u32 count6;                             /* offset 0x00ed */
 
-       /* Error_count is a running count of data reception errors. If this
+       /*
+        * Error_count is a running count of data reception errors. If this
         * counter is changing rapidly, it probably indicates a bad sensor
         * cable connection or other hardware problem. In most installations
         * error_count should not change at all. But it is possible in an
@@ -535,75 +577,84 @@ struct jr3_channel {
         * where this counter counts a bad sample, that sample is ignored.
         */
 
-       u32 error_count;        /* offset 0x00ee */
+       u32 error_count;                        /* offset 0x00ee */
 
-       /* Count_x is a counter which is incremented every time the JR3 DSP
+       /*
+        * Count_x is a counter which is incremented every time the JR3 DSP
         * searches its job queues and finds nothing to do. It indicates the
         * amount of idle time the JR3 DSP has available. It can also be
         * used to determine if the JR3 DSP is alive. See the Performance
         * Issues section on pg. 49 for more details.
         */
 
-       u32 count_x;            /* offset 0x00ef */
+       u32 count_x;                            /* offset 0x00ef */
 
-       /* Warnings & errors contain the warning and error bits
+       /*
+        * Warnings & errors contain the warning and error bits
         * respectively. The format of these two words is discussed on page
         * 21 under the headings warnings_bits and error_bits.
         */
 
-       u32 warnings;           /* offset 0x00f0 */
-       u32 errors;             /* offset 0x00f1 */
+       u32 warnings;                           /* offset 0x00f0 */
+       u32 errors;                             /* offset 0x00f1 */
 
-       /* Threshold_bits is a word containing the bits that are set by the
+       /*
+        * Threshold_bits is a word containing the bits that are set by the
         * load envelopes. See load_envelopes (pg. 17) and thresh_struct
         * (pg. 23) for more details.
         */
 
-       s32 threshold_bits;     /* offset 0x00f2 */
+       s32 threshold_bits;                     /* offset 0x00f2 */
 
-       /* Last_crc is the value that shows the actual calculated CRC. CRC
+       /*
+        * Last_crc is the value that shows the actual calculated CRC. CRC
         * is short for cyclic redundancy code. It should be zero. See the
         * description for cal_crc_bad (pg. 21) for more information.
         */
 
-       s32 last_CRC;           /* offset 0x00f3 */
+       s32 last_CRC;                           /* offset 0x00f3 */
 
-       /* EEProm_ver_no contains the version number of the sensor EEProm.
+       /*
+        * EEProm_ver_no contains the version number of the sensor EEProm.
         * EEProm version numbers can vary between 0 and 255.
         * Software_ver_no contains the software version number. Version
         * 3.02 would be stored as 302.
         */
 
-       s32 eeprom_ver_no;      /* offset 0x00f4 */
-       s32 software_ver_no;    /* offset 0x00f5 */
+       s32 eeprom_ver_no;                      /* offset 0x00f4 */
+       s32 software_ver_no;                    /* offset 0x00f5 */
 
-       /* Software_day & software_year are the release date of the software
+       /*
+        * Software_day & software_year are the release date of the software
         * the JR3 DSP is currently running. Day is the day of the year,
         * with January 1 being 1, and December 31, being 365 for non leap
         * years.
         */
 
-       s32 software_day;       /* offset 0x00f6 */
-       s32 software_year;      /* offset 0x00f7 */
+       s32 software_day;                       /* offset 0x00f6 */
+       s32 software_year;                      /* offset 0x00f7 */
 
-       /* Serial_no & model_no are the two values which uniquely identify a
+       /*
+        * Serial_no & model_no are the two values which uniquely identify a
         * sensor. This model number does not directly correspond to the JR3
         * model number, but it will provide a unique identifier for
         * different sensor configurations.
         */
 
-       u32 serial_no;          /* offset 0x00f8 */
-       u32 model_no;           /* offset 0x00f9 */
+       u32 serial_no;                          /* offset 0x00f8 */
+       u32 model_no;                           /* offset 0x00f9 */
 
-       /* Cal_day & cal_year are the sensor calibration date. Day is the
+       /*
+        * Cal_day & cal_year are the sensor calibration date. Day is the
         * day of the year, with January 1 being 1, and December 31, being
         * 366 for leap years.
         */
 
-       s32 cal_day;            /* offset 0x00fa */
-       s32 cal_year;           /* offset 0x00fb */
+       s32 cal_day;                            /* offset 0x00fa */
+       s32 cal_year;                           /* offset 0x00fb */
 
-       /* Units is an enumerated read only value defining the engineering
+       /*
+        * Units is an enumerated read only value defining the engineering
         * units used in the sensor full scale. The meanings of particular
         * values are discussed in the section detailing the force_units
         * structure on page 22. The engineering units are setto customer
@@ -626,20 +677,22 @@ struct jr3_channel {
         * received.
         */
 
-       u32 units;              /* offset 0x00fc */
-       s32 bits;               /* offset 0x00fd */
-       s32 channels;           /* offset 0x00fe */
+       u32 units;                              /* offset 0x00fc */
+       s32 bits;                               /* offset 0x00fd */
+       s32 channels;                           /* offset 0x00fe */
 
-       /* Thickness specifies the overall thickness of the sensor from
+       /*
+        * Thickness specifies the overall thickness of the sensor from
         * flange to flange. The engineering units for this value are
         * contained in units (pg. 16). The sensor calibration is relative
         * to the center of the sensor. This value allows easy coordinate
         * transformation from the center of the sensor to either flange.
         */
 
-       s32 thickness;          /* offset 0x00ff */
+       s32 thickness;                          /* offset 0x00ff */
 
-       /* Load_envelopes is a table containing the load envelope
+       /*
+        * Load_envelopes is a table containing the load envelope
         * descriptions. There are 16 possible load envelope slots in the
         * table. The slots are on 16 word boundaries and are numbered 0-15.
         * Each load envelope needs to start at the beginning of a slot but
@@ -655,7 +708,8 @@ struct jr3_channel {
 
        struct le_struct load_envelopes[0x10];  /* offset 0x0100 */
 
-       /* Transforms is a table containing the transform descriptions.
+       /*
+        * Transforms is a table containing the transform descriptions.
         * There are 16 possible transform slots in the table. The slots are
         * on 16 word boundaries and are numbered 0-15. Each transform needs
         * to start at the beginning of a slot but need not be fully
index 3e72718801a9ea58d1dc6fbe44c97610d858fa01..74911dbb256170cd41f5d94e5e8641ef7ccb4c13 100644 (file)
@@ -1,40 +1,34 @@
 /*
-    comedi/drivers/ni_670x.c
-    Hardware driver for NI 670x devices
-
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 1997-2001 David A. Schleef <ds@schleef.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
-/*
-Driver: ni_670x
-Description: National Instruments 670x
-Author: Bart Joris <bjoris@advalvas.be>
-Updated: Wed, 11 Dec 2002 18:25:35 -0800
-Devices: [National Instruments] PCI-6703 (ni_670x), PCI-6704
-Status: unknown
-
-Commands are not supported.
-*/
+ * Comedi driver for NI 670x devices
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 1997-2001 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
 /*
-       Bart Joris <bjoris@advalvas.be> Last updated on 20/08/2001
-
-       Manuals:
-
-       322110a.pdf     PCI/PXI-6704 User Manual
-       322110b.pdf     PCI/PXI-6703/6704 User Manual
-
-*/
+ * Driver: ni_670x
+ * Description: National Instruments 670x
+ * Author: Bart Joris <bjoris@advalvas.be>
+ * Updated: Wed, 11 Dec 2002 18:25:35 -0800
+ * Devices: [National Instruments] PCI-6703 (ni_670x), PCI-6704
+ * Status: unknown
+ *
+ * Commands are not supported.
+ *
+ * Manuals:
+ *   322110a.pdf       PCI/PXI-6704 User Manual
+ *   322110b.pdf       PCI/PXI-6703/6704 User Manual
+ */
 
 #include <linux/module.h>
 #include <linux/interrupt.h>
index 9b444f8c4e3369721c9e9b896a691e0af4f5436a..5a4dcc6e61d844cae77164ba9db85d8f34ac0005 100644 (file)
@@ -1,62 +1,47 @@
 /*
-    comedi/drivers/ni_at_a2150.c
-    Driver for National Instruments AT-A2150 boards
-    Copyright (C) 2001, 2002 Frank Mori Hess <fmhess@users.sourceforge.net>
-
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 2000 David A. Schleef <ds@schleef.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
-/*
-Driver: ni_at_a2150
-Description: National Instruments AT-A2150
-Author: Frank Mori Hess
-Status: works
-Devices: [National Instruments] AT-A2150C (at_a2150c), AT-2150S (at_a2150s)
-
-If you want to ac couple the board's inputs, use AREF_OTHER.
-
-Configuration options:
-  [0] - I/O port base address
-  [1] - IRQ (optional, required for timed conversions)
-  [2] - DMA (optional, required for timed conversions)
+ * Comedi driver for National Instruments AT-A2150 boards
+ * Copyright (C) 2001, 2002 Frank Mori Hess <fmhess@users.sourceforge.net>
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 2000 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
-*/
 /*
-Yet another driver for obsolete hardware brought to you by Frank Hess.
-Testing and debugging help provided by Dave Andruczyk.
-
-This driver supports the boards:
-
-AT-A2150C
-AT-A2150S
-
-The only difference is their master clock frequencies.
-
-Options:
-       [0] - base io address
-       [1] - irq
-       [2] - dma channel
-
-References (from ftp://ftp.natinst.com/support/manuals):
-
-          320360.pdf  AT-A2150 User Manual
-
-TODO:
-
-analog level triggering
-TRIG_WAKE_EOS
-
-*/
+ * Driver: ni_at_a2150
+ * Description: National Instruments AT-A2150
+ * Author: Frank Mori Hess
+ * Status: works
+ * Devices: [National Instruments] AT-A2150C (at_a2150c), AT-2150S (at_a2150s)
+ *
+ * Configuration options:
+ *   [0] - I/O port base address
+ *   [1] - IRQ (optional, required for timed conversions)
+ *   [2] - DMA (optional, required for timed conversions)
+ *
+ * Yet another driver for obsolete hardware brought to you by Frank Hess.
+ * Testing and debugging help provided by Dave Andruczyk.
+ *
+ * If you want to ac couple the board's inputs, use AREF_OTHER.
+ *
+ * The only difference in the boards is their master clock frequencies.
+ *
+ * References (from ftp://ftp.natinst.com/support/manuals):
+ *   320360.pdf  AT-A2150 User Manual
+ *
+ * TODO:
+ * - analog level triggering
+ * - TRIG_WAKE_EOS
+ */
 
 #include <linux/module.h>
 #include <linux/delay.h>
@@ -73,48 +58,52 @@ TRIG_WAKE_EOS
 
 /* Registers and bits */
 #define CONFIG_REG             0x0
-#define   CHANNEL_BITS(x)              ((x) & 0x7)
+#define   CHANNEL_BITS(x)      ((x) & 0x7)
 #define   CHANNEL_MASK         0x7
-#define   CLOCK_SELECT_BITS(x)         (((x) & 0x3) << 3)
-#define   CLOCK_DIVISOR_BITS(x)                (((x) & 0x3) << 5)
+#define   CLOCK_SELECT_BITS(x) (((x) & 0x3) << 3)
+#define   CLOCK_DIVISOR_BITS(x)        (((x) & 0x3) << 5)
 #define   CLOCK_MASK           (0xf << 3)
-#define   ENABLE0_BIT          0x80    /*  enable (don't internally ground) channels 0 and 1 */
-#define   ENABLE1_BIT          0x100   /*  enable (don't internally ground) channels 2 and 3 */
-#define   AC0_BIT              0x200   /*  ac couple channels 0,1 */
-#define   AC1_BIT              0x400   /*  ac couple channels 2,3 */
-#define   APD_BIT              0x800   /*  analog power down */
-#define   DPD_BIT              0x1000  /*  digital power down */
-#define TRIGGER_REG            0x2     /*  trigger config register */
-#define   POST_TRIGGER_BITS            0x2
-#define   DELAY_TRIGGER_BITS           0x3
-#define   HW_TRIG_EN           0x10    /*  enable hardware trigger */
-#define FIFO_START_REG         0x6     /*  software start aquistion trigger */
-#define FIFO_RESET_REG         0x8     /*  clears fifo + fifo flags */
-#define FIFO_DATA_REG          0xa     /*  read data */
-#define DMA_TC_CLEAR_REG               0xe     /*  clear dma terminal count interrupt */
-#define STATUS_REG             0x12    /*  read only */
-#define   FNE_BIT              0x1     /*  fifo not empty */
-#define   OVFL_BIT             0x8     /*  fifo overflow */
-#define   EDAQ_BIT             0x10    /*  end of acquisition interrupt */
-#define   DCAL_BIT             0x20    /*  offset calibration in progress */
-#define   INTR_BIT             0x40    /*  interrupt has occurred */
-#define   DMA_TC_BIT           0x80    /*  dma terminal count interrupt has occurred */
-#define   ID_BITS(x)   (((x) >> 8) & 0x3)
-#define IRQ_DMA_CNTRL_REG              0x12    /*  write only */
-#define   DMA_CHAN_BITS(x)             ((x) & 0x7)     /*  sets dma channel */
-#define   DMA_EN_BIT           0x8     /*  enables dma */
-#define   IRQ_LVL_BITS(x)              (((x) & 0xf) << 4)      /*  sets irq level */
-#define   FIFO_INTR_EN_BIT             0x100   /*  enable fifo interrupts */
-#define   FIFO_INTR_FHF_BIT            0x200   /*  interrupt fifo half full */
-#define   DMA_INTR_EN_BIT              0x800   /*  enable interrupt on dma terminal count */
-#define   DMA_DEM_EN_BIT       0x1000  /*  enables demand mode dma */
+/* enable (don't internally ground) channels 0 and 1 */
+#define   ENABLE0_BIT          0x80
+/* enable (don't internally ground) channels 2 and 3 */
+#define   ENABLE1_BIT          0x100
+#define   AC0_BIT              0x200   /* ac couple channels 0,1 */
+#define   AC1_BIT              0x400   /* ac couple channels 2,3 */
+#define   APD_BIT              0x800   /* analog power down */
+#define   DPD_BIT              0x1000  /* digital power down */
+#define TRIGGER_REG            0x2     /* trigger config register */
+#define   POST_TRIGGER_BITS    0x2
+#define   DELAY_TRIGGER_BITS   0x3
+#define   HW_TRIG_EN           0x10    /* enable hardware trigger */
+#define FIFO_START_REG         0x6     /* software start aquistion trigger */
+#define FIFO_RESET_REG         0x8     /* clears fifo + fifo flags */
+#define FIFO_DATA_REG          0xa     /* read data */
+#define DMA_TC_CLEAR_REG       0xe     /* clear dma terminal count interrupt */
+#define STATUS_REG             0x12    /* read only */
+#define   FNE_BIT              0x1     /* fifo not empty */
+#define   OVFL_BIT             0x8     /* fifo overflow */
+#define   EDAQ_BIT             0x10    /* end of acquisition interrupt */
+#define   DCAL_BIT             0x20    /* offset calibration in progress */
+#define   INTR_BIT             0x40    /* interrupt has occurred */
+/* dma terminal count interrupt has occurred */
+#define   DMA_TC_BIT           0x80
+#define   ID_BITS(x)           (((x) >> 8) & 0x3)
+#define IRQ_DMA_CNTRL_REG      0x12                    /* write only */
+#define   DMA_CHAN_BITS(x)     ((x) & 0x7)             /* sets dma channel */
+#define   DMA_EN_BIT           0x8                     /* enables dma */
+#define   IRQ_LVL_BITS(x)      (((x) & 0xf) << 4)      /* sets irq level */
+#define   FIFO_INTR_EN_BIT     0x100   /* enable fifo interrupts */
+#define   FIFO_INTR_FHF_BIT    0x200   /* interrupt fifo half full */
+/* enable interrupt on dma terminal count */
+#define   DMA_INTR_EN_BIT      0x800
+#define   DMA_DEM_EN_BIT       0x1000  /* enables demand mode dma */
 #define I8253_BASE_REG         0x14
 
 struct a2150_board {
        const char *name;
-       int clock[4];           /*  master clock periods, in nanoseconds */
-       int num_clocks;         /*  number of available master clock speeds */
-       int ai_speed;           /*  maximum conversion rate in nanoseconds */
+       int clock[4];           /* master clock periods, in nanoseconds */
+       int num_clocks;         /* number of available master clock speeds */
+       int ai_speed;           /* maximum conversion rate in nanoseconds */
 };
 
 /* analog input range */
@@ -144,8 +133,8 @@ static const struct a2150_board a2150_boards[] = {
 struct a2150_private {
        struct comedi_isadma *dma;
        unsigned int count;     /* number of data points left to be taken */
-       int irq_dma_bits;       /*  irq/dma register bits */
-       int config_bits;        /*  config register bits */
+       int irq_dma_bits;       /* irq/dma register bits */
+       int config_bits;        /* config register bits */
 };
 
 /* interrupt service routine */
@@ -189,13 +178,13 @@ static irqreturn_t a2150_interrupt(int irq, void *d)
         */
        residue = comedi_isadma_disable(desc->chan);
 
-       /*  figure out how many points to read */
+       /* figure out how many points to read */
        max_points = comedi_bytes_to_samples(s, desc->size);
        num_points = max_points - comedi_bytes_to_samples(s, residue);
        if (devpriv->count < num_points && cmd->stop_src == TRIG_COUNT)
                num_points = devpriv->count;
 
-       /*  figure out how many points will be stored next time */
+       /* figure out how many points will be stored next time */
        leftover = 0;
        if (cmd->stop_src == TRIG_NONE) {
                leftover = comedi_bytes_to_samples(s, desc->size);
@@ -204,7 +193,8 @@ static irqreturn_t a2150_interrupt(int irq, void *d)
                if (leftover > max_points)
                        leftover = max_points;
        }
-       /* there should only be a residue if collection was stopped by having
+       /*
+        * There should only be a residue if collection was stopped by having
         * the stop_src set to an external trigger, in which case there
         * will be no more data
         */
@@ -214,7 +204,7 @@ static irqreturn_t a2150_interrupt(int irq, void *d)
        for (i = 0; i < num_points; i++) {
                /* write data point to comedi buffer */
                dpnt = buf[i];
-               /*  convert from 2's complement to unsigned coding */
+               /* convert from 2's complement to unsigned coding */
                dpnt ^= 0x8000;
                comedi_buf_write_samples(s, &dpnt, 1);
                if (cmd->stop_src == TRIG_COUNT) {
@@ -244,14 +234,14 @@ static int a2150_cancel(struct comedi_device *dev, struct comedi_subdevice *s)
        struct comedi_isadma *dma = devpriv->dma;
        struct comedi_isadma_desc *desc = &dma->desc[0];
 
-       /*  disable dma on card */
+       /* disable dma on card */
        devpriv->irq_dma_bits &= ~DMA_INTR_EN_BIT & ~DMA_EN_BIT;
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);
 
-       /*  disable computer's dma */
+       /* disable computer's dma */
        comedi_isadma_disable(desc->chan);
 
-       /*  clear fifo and reset triggering circuitry */
+       /* clear fifo and reset triggering circuitry */
        outw(0, dev->iobase + FIFO_RESET_REG);
 
        return 0;
@@ -270,7 +260,7 @@ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period,
        int lub_divisor_shift, lub_index, glb_divisor_shift, glb_index;
        int i, j;
 
-       /*  initialize greatest lower and least upper bounds */
+       /* initialize greatest lower and least upper bounds */
        lub_divisor_shift = 3;
        lub_index = 0;
        lub = board->clock[lub_index] * (1 << lub_divisor_shift);
@@ -278,19 +268,19 @@ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period,
        glb_index = board->num_clocks - 1;
        glb = board->clock[glb_index] * (1 << glb_divisor_shift);
 
-       /*  make sure period is in available range */
+       /* make sure period is in available range */
        if (*period < glb)
                *period = glb;
        if (*period > lub)
                *period = lub;
 
-       /*  we can multiply period by 1, 2, 4, or 8, using (1 << i) */
+       /* we can multiply period by 1, 2, 4, or 8, using (1 << i) */
        for (i = 0; i < 4; i++) {
-               /*  there are a maximum of 4 master clocks */
+               /* there are a maximum of 4 master clocks */
                for (j = 0; j < board->num_clocks; j++) {
-                       /*  temp is the period in nanosec we are evaluating */
+                       /* temp is the period in nanosec we are evaluating */
                        temp = board->clock[j] * (1 << i);
-                       /*  if it is the best match yet */
+                       /* if it is the best match yet */
                        if (temp < lub && temp >= *period) {
                                lub_divisor_shift = i;
                                lub_index = j;
@@ -306,7 +296,7 @@ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period,
        switch (flags & CMDF_ROUND_MASK) {
        case CMDF_ROUND_NEAREST:
        default:
-               /*  if least upper bound is better approximation */
+               /* if least upper bound is better approximation */
                if (lub - *period < *period - glb)
                        *period = lub;
                else
@@ -320,7 +310,7 @@ static int a2150_get_timing(struct comedi_device *dev, unsigned int *period,
                break;
        }
 
-       /*  set clock bits for config register appropriately */
+       /* set clock bits for config register appropriately */
        devpriv->config_bits &= ~CLOCK_MASK;
        if (*period == lub) {
                devpriv->config_bits |=
@@ -495,7 +485,7 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                        "dma incompatible with hard real-time interrupt (CMDF_PRIORITY), aborting\n");
                return -1;
        }
-       /*  clear fifo and reset triggering circuitry */
+       /* clear fifo and reset triggering circuitry */
        outw(0, dev->iobase + FIFO_RESET_REG);
 
        /* setup chanlist */
@@ -503,7 +493,7 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                               cmd->chanlist_len) < 0)
                return -1;
 
-       /*  setup ac/dc coupling */
+       /* setup ac/dc coupling */
        if (CR_AREF(cmd->chanlist[0]) == AREF_OTHER)
                devpriv->config_bits |= AC0_BIT;
        else
@@ -513,18 +503,18 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
        else
                devpriv->config_bits &= ~AC1_BIT;
 
-       /*  setup timing */
+       /* setup timing */
        a2150_get_timing(dev, &cmd->scan_begin_arg, cmd->flags);
 
-       /*  send timing, channel, config bits */
+       /* send timing, channel, config bits */
        outw(devpriv->config_bits, dev->iobase + CONFIG_REG);
 
-       /*  initialize number of samples remaining */
+       /* initialize number of samples remaining */
        devpriv->count = cmd->stop_arg * cmd->chanlist_len;
 
        comedi_isadma_disable(desc->chan);
 
-       /*  set size of transfer to fill in 1/3 second */
+       /* set size of transfer to fill in 1/3 second */
 #define ONE_THIRD_SECOND 333333333
        desc->size = comedi_bytes_per_sample(s) * cmd->chanlist_len *
                    ONE_THIRD_SECOND / cmd->scan_begin_arg;
@@ -536,40 +526,45 @@ static int a2150_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
 
        comedi_isadma_program(desc);
 
-       /* clear dma interrupt before enabling it, to try and get rid of that
-        * one spurious interrupt that has been happening */
+       /*
+        * Clear dma interrupt before enabling it, to try and get rid of
+        * that one spurious interrupt that has been happening.
+        */
        outw(0x00, dev->iobase + DMA_TC_CLEAR_REG);
 
-       /*  enable dma on card */
+       /* enable dma on card */
        devpriv->irq_dma_bits |= DMA_INTR_EN_BIT | DMA_EN_BIT;
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);
 
-       /*  may need to wait 72 sampling periods if timing was changed */
+       /* may need to wait 72 sampling periods if timing was changed */
        comedi_8254_load(dev->pacer, 2, 72, I8254_MODE0 | I8254_BINARY);
 
-       /*  setup start triggering */
+       /* setup start triggering */
        trigger_bits = 0;
-       /*  decide if we need to wait 72 periods for valid data */
+       /* decide if we need to wait 72 periods for valid data */
        if (cmd->start_src == TRIG_NOW &&
            (old_config_bits & CLOCK_MASK) !=
            (devpriv->config_bits & CLOCK_MASK)) {
-               /*  set trigger source to delay trigger */
+               /* set trigger source to delay trigger */
                trigger_bits |= DELAY_TRIGGER_BITS;
        } else {
-               /*  otherwise no delay */
+               /* otherwise no delay */
                trigger_bits |= POST_TRIGGER_BITS;
        }
-       /*  enable external hardware trigger */
+       /* enable external hardware trigger */
        if (cmd->start_src == TRIG_EXT) {
                trigger_bits |= HW_TRIG_EN;
        } else if (cmd->start_src == TRIG_OTHER) {
-               /*  XXX add support for level/slope start trigger using TRIG_OTHER */
+               /*
+                * XXX add support for level/slope start trigger
+                * using TRIG_OTHER
+                */
                dev_err(dev->class_dev, "you shouldn't see this?\n");
        }
-       /*  send trigger config bits */
+       /* send trigger config bits */
        outw(trigger_bits, dev->iobase + TRIGGER_REG);
 
-       /*  start acquisition for soft trigger */
+       /* start acquisition for soft trigger */
        if (cmd->start_src == TRIG_NOW)
                outw(0, dev->iobase + FIFO_START_REG);
 
@@ -596,28 +591,28 @@ static int a2150_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
        unsigned int n;
        int ret;
 
-       /*  clear fifo and reset triggering circuitry */
+       /* clear fifo and reset triggering circuitry */
        outw(0, dev->iobase + FIFO_RESET_REG);
 
        /* setup chanlist */
        if (a2150_set_chanlist(dev, CR_CHAN(insn->chanspec), 1) < 0)
                return -1;
 
-       /*  set dc coupling */
+       /* set dc coupling */
        devpriv->config_bits &= ~AC0_BIT;
        devpriv->config_bits &= ~AC1_BIT;
 
-       /*  send timing, channel, config bits */
+       /* send timing, channel, config bits */
        outw(devpriv->config_bits, dev->iobase + CONFIG_REG);
 
-       /*  disable dma on card */
+       /* disable dma on card */
        devpriv->irq_dma_bits &= ~DMA_INTR_EN_BIT & ~DMA_EN_BIT;
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);
 
-       /*  setup start triggering */
+       /* setup start triggering */
        outw(0, dev->iobase + TRIGGER_REG);
 
-       /*  start acquisition for soft trigger */
+       /* start acquisition for soft trigger */
        outw(0, dev->iobase + FIFO_START_REG);
 
        /*
@@ -632,7 +627,7 @@ static int a2150_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                inw(dev->iobase + FIFO_DATA_REG);
        }
 
-       /*  read data */
+       /* read data */
        for (n = 0; n < insn->n; n++) {
                ret = comedi_timeout(dev, s, insn, a2150_ai_eoc, 0);
                if (ret)
@@ -642,7 +637,7 @@ static int a2150_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s,
                data[n] ^= 0x8000;
        }
 
-       /*  clear fifo and reset triggering circuitry */
+       /* clear fifo and reset triggering circuitry */
        outw(0, dev->iobase + FIFO_RESET_REG);
 
        return n;
@@ -749,16 +744,16 @@ static int a2150_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                s->cancel = a2150_cancel;
        }
 
-       /*  set card's irq and dma levels */
+       /* set card's irq and dma levels */
        outw(devpriv->irq_dma_bits, dev->iobase + IRQ_DMA_CNTRL_REG);
 
-       /*  reset and sync adc clock circuitry */
+       /* reset and sync adc clock circuitry */
        outw_p(DPD_BIT | APD_BIT, dev->iobase + CONFIG_REG);
        outw_p(DPD_BIT, dev->iobase + CONFIG_REG);
-       /*  initialize configuration register */
+       /* initialize configuration register */
        devpriv->config_bits = 0;
        outw(devpriv->config_bits, dev->iobase + CONFIG_REG);
-       /*  wait until offset calibration is done, then enable analog inputs */
+       /* wait until offset calibration is done, then enable analog inputs */
        for (i = 0; i < timeout; i++) {
                if ((DCAL_BIT & inw(dev->iobase + STATUS_REG)) == 0)
                        break;
index 95435b81aa55bcb16ffbc91aadbf683476f02bb4..ffcf7afce684b335fef123cb48d80117b2d0b670 100644 (file)
@@ -1,93 +1,84 @@
 /*
-    comedi/drivers/ni_atmio.c
-    Hardware driver for NI AT-MIO E series cards
-
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 1997-2001 David A. Schleef <ds@schleef.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
-/*
-Driver: ni_atmio
-Description: National Instruments AT-MIO-E series
-Author: ds
-Devices: [National Instruments] AT-MIO-16E-1 (ni_atmio),
-  AT-MIO-16E-2, AT-MIO-16E-10, AT-MIO-16DE-10, AT-MIO-64E-3,
-  AT-MIO-16XE-50, AT-MIO-16XE-10, AT-AI-16XE-10
-Status: works
-Updated: Thu May  1 20:03:02 CDT 2003
-
-The driver has 2.6 kernel isapnp support, and
-will automatically probe for a supported board if the
-I/O base is left unspecified with comedi_config.
-However, many of
-the isapnp id numbers are unknown.  If your board is not
-recognized, please send the output of 'cat /proc/isapnp'
-(you may need to modprobe the isa-pnp module for
-/proc/isapnp to exist) so the
-id numbers for your board can be added to the driver.
-
-Otherwise, you can use the isapnptools package to configure
-your board.  Use isapnp to
-configure the I/O base and IRQ for the board, and then pass
-the same values as
-parameters in comedi_config.  A sample isapnp.conf file is included
-in the etc/ directory of Comedilib.
-
-Comedilib includes a utility to autocalibrate these boards.  The
-boards seem to boot into a state where the all calibration DACs
-are at one extreme of their range, thus the default calibration
-is terrible.  Calibration at boot is strongly encouraged.
-
-To use the extended digital I/O on some of the boards, enable the
-8255 driver when configuring the Comedi source tree.
-
-External triggering is supported for some events.  The channel index
-(scan_begin_arg, etc.) maps to PFI0 - PFI9.
-
-Some of the more esoteric triggering possibilities of these boards
-are not supported.
-*/
-/*
-       The real guts of the driver is in ni_mio_common.c, which is included
-       both here and in ni_pcimio.c
-
-       Interrupt support added by Truxton Fulton <trux@truxton.com>
-
-       References for specifications:
-
-          340747b.pdf  Register Level Programmer Manual (obsolete)
-          340747c.pdf  Register Level Programmer Manual (new)
-          DAQ-STC reference manual
-
-       Other possibly relevant info:
-
-          320517c.pdf  User manual (obsolete)
-          320517f.pdf  User manual (new)
-          320889a.pdf  delete
-          320906c.pdf  maximum signal ratings
-          321066a.pdf  about 16x
-          321791a.pdf  discontinuation of at-mio-16e-10 rev. c
-          321808a.pdf  about at-mio-16e-10 rev P
-          321837a.pdf  discontinuation of at-mio-16de-10 rev d
-          321838a.pdf  about at-mio-16de-10 rev N
-
-       ISSUES:
-
-       need to deal with external reference for DAC, and other DAC
-       properties in board properties
+ * Comedi driver for NI AT-MIO E series cards
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 1997-2001 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
-       deal with at-mio-16de-10 revision D to N changes, etc.
+/*
+ * Driver: ni_atmio
+ * Description: National Instruments AT-MIO-E series
+ * Author: ds
+ * Devices: [National Instruments] AT-MIO-16E-1 (ni_atmio),
+ *   AT-MIO-16E-2, AT-MIO-16E-10, AT-MIO-16DE-10, AT-MIO-64E-3,
+ *   AT-MIO-16XE-50, AT-MIO-16XE-10, AT-AI-16XE-10
+ * Status: works
+ * Updated: Thu May  1 20:03:02 CDT 2003
+ *
+ * The driver has 2.6 kernel isapnp support, and will automatically probe for
+ * a supported board if the I/O base is left unspecified with comedi_config.
+ * However, many of the isapnp id numbers are unknown. If your board is not
+ * recognized, please send the output of 'cat /proc/isapnp' (you may need to
+ * modprobe the isa-pnp module for /proc/isapnp to exist) so the id numbers
+ * for your board can be added to the driver.
+ *
+ * Otherwise, you can use the isapnptools package to configure your board.
+ * Use isapnp to configure the I/O base and IRQ for the board, and then pass
+ * the same values as parameters in comedi_config. A sample isapnp.conf file
+ * is included in the etc/ directory of Comedilib.
+ *
+ * Comedilib includes a utility to autocalibrate these boards. The boards
+ * seem to boot into a state where the all calibration DACs are at one
+ * extreme of their range, thus the default calibration is terrible.
+ * Calibration at boot is strongly encouraged.
+ *
+ * To use the extended digital I/O on some of the boards, enable the
+ * 8255 driver when configuring the Comedi source tree.
+ *
+ * External triggering is supported for some events. The channel index
+ * (scan_begin_arg, etc.) maps to PFI0 - PFI9.
+ *
+ * Some of the more esoteric triggering possibilities of these boards are
+ * not supported.
+ */
 
-*/
+/*
+ * The real guts of the driver is in ni_mio_common.c, which is included
+ * both here and in ni_pcimio.c
+ *
+ * Interrupt support added by Truxton Fulton <trux@truxton.com>
+ *
+ * References for specifications:
+ *     340747b.pdf  Register Level Programmer Manual (obsolete)
+ *     340747c.pdf  Register Level Programmer Manual (new)
+ *                  DAQ-STC reference manual
+ *
+ * Other possibly relevant info:
+ *     320517c.pdf  User manual (obsolete)
+ *     320517f.pdf  User manual (new)
+ *     320889a.pdf  delete
+ *     320906c.pdf  maximum signal ratings
+ *     321066a.pdf  about 16x
+ *     321791a.pdf  discontinuation of at-mio-16e-10 rev. c
+ *     321808a.pdf  about at-mio-16e-10 rev P
+ *     321837a.pdf  discontinuation of at-mio-16de-10 rev d
+ *     321838a.pdf  about at-mio-16de-10 rev N
+ *
+ * ISSUES:
+ * - need to deal with external reference for DAC, and other DAC
+ *   properties in board properties
+ * - deal with at-mio-16de-10 revision D to N changes, etc.
+ */
 
 #include <linux/module.h>
 #include <linux/interrupt.h>
@@ -98,10 +89,7 @@ are not supported.
 #include "ni_stc.h"
 #include "8255.h"
 
-/*
- *  AT specific setup
- */
-
+/* AT specific setup */
 static const struct ni_board_struct ni_boards[] = {
        {
                .name           = "at-mio-16e-1",
@@ -215,7 +203,7 @@ static const struct ni_board_struct ni_boards[] = {
                .n_adchan       = 16,
                .ai_maxdata     = 0xffff,
                .ai_fifo_depth  = 512,
-               .alwaysdither   = 1,    /* unknown */
+               .alwaysdither   = 1,            /* unknown */
                .gainlkup       = ai_gain_14,
                .ai_speed       = 10000,
                .caldac         = { dac8800, dac8043, ad8522 },
@@ -287,10 +275,10 @@ static const struct ni_board_struct *ni_atmio_probe(struct comedi_device *dev)
        }
        if (device_id == 255)
                dev_err(dev->class_dev, "can't find board\n");
-        else if (device_id == 0)
+       else if (device_id == 0)
                dev_err(dev->class_dev,
                        "EEPROM read error (?) or device not found\n");
-        else
+       else
                dev_err(dev->class_dev,
                        "unknown device ID %d -- contact author\n", device_id);
 
index c3eb54622bc37c46a5c37d84e0436757b4a37d30..fb59b0ffbba6660bb7922fb00bbbe4ba80114174 100644 (file)
@@ -1,25 +1,41 @@
 /*
-   comedi/drivers/ni_atmio16d.c
-   Hardware driver for National Instruments AT-MIO16D board
-   Copyright (C) 2000 Chris R. Baugher <baugher@enteract.com>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
+ * Comedi driver for National Instruments AT-MIO16D board
+ * Copyright (C) 2000 Chris R. Baugher <baugher@enteract.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  */
+
 /*
-Driver: ni_atmio16d
-Description: National Instruments AT-MIO-16D
-Author: Chris R. Baugher <baugher@enteract.com>
-Status: unknown
-Devices: [National Instruments] AT-MIO-16 (atmio16), AT-MIO-16D (atmio16d)
-*/
+ * Driver: ni_atmio16d
+ * Description: National Instruments AT-MIO-16D
+ * Author: Chris R. Baugher <baugher@enteract.com>
+ * Status: unknown
+ * Devices: [National Instruments] AT-MIO-16 (atmio16), AT-MIO-16D (atmio16d)
+ *
+ * Configuration options:
+ *   [0] - I/O port
+ *   [1] - MIO irq (0 == no irq; or 3,4,5,6,7,9,10,11,12,14,15)
+ *   [2] - DIO irq (0 == no irq; or 3,4,5,6,7,9)
+ *   [3] - DMA1 channel (0 == no DMA; or 5,6,7)
+ *   [4] - DMA2 channel (0 == no DMA; or 5,6,7)
+ *   [5] - a/d mux (0=differential; 1=single)
+ *   [6] - a/d range (0=bipolar10; 1=bipolar5; 2=unipolar10)
+ *   [7] - dac0 range (0=bipolar; 1=unipolar)
+ *   [8] - dac0 reference (0=internal; 1=external)
+ *   [9] - dac0 coding (0=2's comp; 1=straight binary)
+ *   [10] - dac1 range (same as dac0 options)
+ *   [11] - dac1 reference (same as dac0 options)
+ *   [12] - dac1 coding (same as dac0 options)
+ */
+
 /*
  * I must give credit here to Michal Dobes <dobes@tesnet.cz> who
  * wrote the driver for Advantec's pcl812 boards. I used the interrupt
@@ -295,8 +311,10 @@ static int atmio16d_ai_cmd(struct comedi_device *dev,
        unsigned int sample_count, tmp, chan, gain;
        int i;
 
-       /* This is slowly becoming a working command interface. *
-        * It is still uber-experimental */
+       /*
+        * This is slowly becoming a working command interface.
+        * It is still uber-experimental
+        */
 
        reset_counters(dev);
 
@@ -322,9 +340,10 @@ static int atmio16d_ai_cmd(struct comedi_device *dev,
                outw(tmp, dev->iobase + MUX_GAIN_REG);
        }
 
-       /* Now program the sample interval timer */
-       /* Figure out which clock to use then get an
-        * appropriate timer value */
+       /*
+        * Now program the sample interval timer.
+        * Figure out which clock to use then get an appropriate timer value.
+        */
        if (cmd->convert_arg < 65536000) {
                base_clock = CLOCK_1_MHZ;
                timer = cmd->convert_arg / 1000;
@@ -386,9 +405,10 @@ static int atmio16d_ai_cmd(struct comedi_device *dev,
                outw(devpriv->com_reg_1_state, dev->iobase + COM_REG_1);
        }
 
-       /* Program the scan interval timer ONLY IF SCANNING IS ENABLED */
-       /* Figure out which clock to use then get an
-        * appropriate timer value */
+       /*
+        * Program the scan interval timer ONLY IF SCANNING IS ENABLED.
+        * Figure out which clock to use then get an appropriate timer value.
+        */
        if (cmd->chanlist_len > 1) {
                if (cmd->scan_begin_arg < 65536000) {
                        base_clock = CLOCK_1_MHZ;
@@ -566,38 +586,6 @@ static int atmio16d_dio_insn_config(struct comedi_device *dev,
        return insn->n;
 }
 
-/*
-   options[0] - I/O port
-   options[1] - MIO irq
-               0 == no irq
-               N == irq N {3,4,5,6,7,9,10,11,12,14,15}
-   options[2] - DIO irq
-               0 == no irq
-               N == irq N {3,4,5,6,7,9}
-   options[3] - DMA1 channel
-               0 == no DMA
-               N == DMA N {5,6,7}
-   options[4] - DMA2 channel
-               0 == no DMA
-               N == DMA N {5,6,7}
-
-   options[5] - a/d mux
-       0=differential, 1=single
-   options[6] - a/d range
-       0=bipolar10, 1=bipolar5, 2=unipolar10
-
-   options[7] - dac0 range
-       0=bipolar, 1=unipolar
-   options[8] - dac0 reference
-       0=internal, 1=external
-   options[9] - dac0 coding
-       0=2's comp, 1=straight binary
-
-   options[10] - dac1 range
-   options[11] - dac1 reference
-   options[12] - dac1 coding
- */
-
 static int atmio16d_attach(struct comedi_device *dev,
                           struct comedi_devconfig *it)
 {
index d9de83ab026712792a61a6cb806326316573cddb..733d3fbafa4d83f6dcf70ddd7d8d7c5abd73a3e0 100644 (file)
@@ -1,35 +1,35 @@
 /*
-    comedi/drivers/ni_daq_dio24.c
-    Driver for National Instruments PCMCIA DAQ-Card DIO-24
-    Copyright (C) 2002 Daniel Vecino Castel <dvecino@able.es>
+ * Comedi driver for National Instruments PCMCIA DAQ-Card DIO-24
+ * Copyright (C) 2002 Daniel Vecino Castel <dvecino@able.es>
+ *
+ * PCMCIA crap at end of file is adapted from dummy_cs.c 1.31
+ * 2001/08/24 12:13:13 from the pcmcia package.
+ * The initial developer of the pcmcia dummy_cs.c code is David A. Hinds
+ * <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
+ * are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
-    PCMCIA crap at end of file is adapted from dummy_cs.c 1.31
-    2001/08/24 12:13:13 from the pcmcia package.
-    The initial developer of the pcmcia dummy_cs.c code is David A. Hinds
-    <dahinds@users.sourceforge.net>.  Portions created by David A. Hinds
-    are Copyright (C) 1999 David A. Hinds.  All Rights Reserved.
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
 /*
-Driver: ni_daq_dio24
-Description: National Instruments PCMCIA DAQ-Card DIO-24
-Author: Daniel Vecino Castel <dvecino@able.es>
-Devices: [National Instruments] PCMCIA DAQ-Card DIO-24 (ni_daq_dio24)
-Status: ?
-Updated: Thu, 07 Nov 2002 21:53:06 -0800
-
-This is just a wrapper around the 8255.o driver to properly handle
-the PCMCIA interface.
-*/
+ * Driver: ni_daq_dio24
+ * Description: National Instruments PCMCIA DAQ-Card DIO-24
+ * Author: Daniel Vecino Castel <dvecino@able.es>
+ * Devices: [National Instruments] PCMCIA DAQ-Card DIO-24 (ni_daq_dio24)
+ * Status: ?
+ * Updated: Thu, 07 Nov 2002 21:53:06 -0800
+ *
+ * This is just a wrapper around the 8255.o driver to properly handle
+ * the PCMCIA interface.
+ */
 
 #include <linux/module.h>
 #include "../comedi_pcmcia.h"
index e3d821bf2d6a01b909931f29928d22b134d6b8ef..21f82317935627dadcb7c7e658ab878be5a9b1bb 100644 (file)
@@ -1,40 +1,39 @@
 /*
-    comedi/drivers/ni_mio_cs.c
-    Hardware driver for NI PCMCIA MIO E series cards
-
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
-/*
-Driver: ni_mio_cs
-Description: National Instruments DAQCard E series
-Author: ds
-Status: works
-Devices: [National Instruments] DAQCard-AI-16XE-50 (ni_mio_cs),
-  DAQCard-AI-16E-4, DAQCard-6062E, DAQCard-6024E, DAQCard-6036E
-Updated: Thu Oct 23 19:43:17 CDT 2003
-
-See the notes in the ni_atmio.o driver.
-*/
-/*
-       The real guts of the driver is in ni_mio_common.c, which is
-       included by all the E series drivers.
-
-       References for specifications:
+ * Comedi driver for NI PCMCIA MIO E series cards
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 1997-2000 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
-          341080a.pdf  DAQCard E Series Register Level Programmer Manual
+/*
+ * Driver: ni_mio_cs
+ * Description: National Instruments DAQCard E series
+ * Author: ds
+ * Status: works
+ * Devices: [National Instruments] DAQCard-AI-16XE-50 (ni_mio_cs),
+ *   DAQCard-AI-16E-4, DAQCard-6062E, DAQCard-6024E, DAQCard-6036E
+ * Updated: Thu Oct 23 19:43:17 CDT 2003
+ *
+ * See the notes in the ni_atmio.o driver.
+ */
 
-*/
+/*
+ * The real guts of the driver is in ni_mio_common.c, which is
+ * included by all the E series drivers.
+ *
+ * References for specifications:
+ *     341080a.pdf  DAQCard E Series Register Level Programmer Manual
+ */
 
 #include <linux/module.h>
 #include <linux/delay.h>
index 35ef1925703f75abdd42e7078f16773f3634f3a9..deaa7f2d0b7c9455c5c04297de9dbaf058d90f49 100644 (file)
@@ -1,50 +1,49 @@
 /*
-    comedi/drivers/ni_pcidio.c
-    driver for National Instruments PCI-DIO-32HS
-
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 1999,2002 David A. Schleef <ds@schleef.org>
-
   This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
+ * Comedi driver for National Instruments PCI-DIO-32HS
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 1999,2002 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
 /*
-Driver: ni_pcidio
-Description: National Instruments PCI-DIO32HS, PCI-6533
-Author: ds
-Status: works
-Devices: [National Instruments] PCI-DIO-32HS (ni_pcidio)
-        [National Instruments] PXI-6533, PCI-6533 (pxi-6533)
-        [National Instruments] PCI-6534 (pci-6534)
-Updated: Mon, 09 Jan 2012 14:27:23 +0000
-
-The DIO32HS board appears as one subdevice, with 32 channels.
-Each channel is individually I/O configurable.  The channel order
-is 0=A0, 1=A1, 2=A2, ... 8=B0, 16=C0, 24=D0.  The driver only
-supports simple digital I/O; no handshaking is supported.
-
-DMA mostly works for the PCI-DIO32HS, but only in timed input mode.
-
-The PCI-DIO-32HS/PCI-6533 has a configurable external trigger. Setting
-scan_begin_arg to 0 or CR_EDGE triggers on the leading edge. Setting
-scan_begin_arg to CR_INVERT or (CR_EDGE | CR_INVERT) triggers on the
-trailing edge.
-
-This driver could be easily modified to support AT-MIO32HS and
-AT-MIO96.
-
-The PCI-6534 requires a firmware upload after power-up to work, the
-firmware data and instructions for loading it with comedi_config
-it are contained in the
-comedi_nonfree_firmware tarball available from http://www.comedi.org
-*/
+ * Driver: ni_pcidio
+ * Description: National Instruments PCI-DIO32HS, PCI-6533
+ * Author: ds
+ * Status: works
+ * Devices: [National Instruments] PCI-DIO-32HS (ni_pcidio)
+ *   [National Instruments] PXI-6533, PCI-6533 (pxi-6533)
+ *   [National Instruments] PCI-6534 (pci-6534)
+ * Updated: Mon, 09 Jan 2012 14:27:23 +0000
+ *
+ * The DIO32HS board appears as one subdevice, with 32 channels. Each
+ * channel is individually I/O configurable. The channel order is 0=A0,
+ * 1=A1, 2=A2, ... 8=B0, 16=C0, 24=D0. The driver only supports simple
+ * digital I/O; no handshaking is supported.
+ *
+ * DMA mostly works for the PCI-DIO32HS, but only in timed input mode.
+ *
+ * The PCI-DIO-32HS/PCI-6533 has a configurable external trigger. Setting
+ * scan_begin_arg to 0 or CR_EDGE triggers on the leading edge. Setting
+ * scan_begin_arg to CR_INVERT or (CR_EDGE | CR_INVERT) triggers on the
+ * trailing edge.
+ *
+ * This driver could be easily modified to support AT-MIO32HS and AT-MIO96.
+ *
+ * The PCI-6534 requires a firmware upload after power-up to work, the
+ * firmware data and instructions for loading it with comedi_config
+ * it are contained in the comedi_nonfree_firmware tarball available from
+ * http://www.comedi.org
+ */
 
 #define USE_DMA
 
@@ -649,8 +648,10 @@ static int ni_pcidio_cmd(struct comedi_device *dev, struct comedi_subdevice *s)
                writeb(1, dev->mmio + AckDelay);
                writeb(0x0b, dev->mmio + AckNotDelay);
                writeb(0x01, dev->mmio + Data1Delay);
-               /* manual, page 4-5: ClockSpeed comment is incorrectly listed
-                * on DAQOptions */
+               /*
+                * manual, page 4-5:
+                * ClockSpeed comment is incorrectly listed on DAQOptions
+                */
                writew(0, dev->mmio + ClockSpeed);
                writeb(0, dev->mmio + DAQOptions);
        } else {
index d8917392b9f9165aae78707acd04fc600711dcbe..f13a2f7360b3267c24bed0a38ea3f1e149edbad8 100644 (file)
 /*
-    comedi/drivers/ni_pcimio.c
-    Hardware driver for NI PCI-MIO E series cards
+ * Comedi driver for NI PCI-MIO E series cards
+ *
+ * COMEDI - Linux Control and Measurement Device Interface
+ * Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
 
-    COMEDI - Linux Control and Measurement Device Interface
-    Copyright (C) 1997-8 David A. Schleef <ds@schleef.org>
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-*/
 /*
-Driver: ni_pcimio
-Description: National Instruments PCI-MIO-E series and M series (all boards)
-Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans,
-  Herman Bruyninckx, Terry Barnaby
-Status: works
-Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio),
-  PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014, PCI-6040E,
-  PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E, PCI-6071E, PCI-6023E,
-  PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E, PCI-6035E, PCI-6052E,
-  PCI-6110, PCI-6111, PCI-6220, PCI-6221, PCI-6224, PXI-6224,
-  PCI-6225, PXI-6225, PCI-6229, PCI-6250,
-  PCI-6251, PXI-6251, PCIe-6251, PXIe-6251,
-  PCI-6254, PCI-6259, PCIe-6259,
-  PCI-6280, PCI-6281, PXI-6281, PCI-6284, PCI-6289,
-  PCI-6711, PXI-6711, PCI-6713, PXI-6713,
-  PXI-6071E, PCI-6070E, PXI-6070E,
-  PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733,
-  PCI-6143, PXI-6143
-Updated: Mon, 09 Jan 2012 14:52:48 +0000
-
-These boards are almost identical to the AT-MIO E series, except that
-they use the PCI bus instead of ISA (i.e., AT).  See the notes for
-the ni_atmio.o driver for additional information about these boards.
-
-Autocalibration is supported on many of the devices, using the
-comedi_calibrate (or comedi_soft_calibrate for m-series) utility.
-M-Series boards do analog input and analog output calibration entirely
-in software. The software calibration corrects
-the analog input for offset, gain and
-nonlinearity.  The analog outputs are corrected for offset and gain.
-See the comedilib documentation on comedi_get_softcal_converter() for
-more information.
-
-By default, the driver uses DMA to transfer analog input data to
-memory.  When DMA is enabled, not all triggering features are
-supported.
-
-Digital I/O may not work on 673x.
-
-Note that the PCI-6143 is a simultaineous sampling device with 8 convertors.
-With this board all of the convertors perform one simultaineous sample during
-a scan interval. The period for a scan is used for the convert time in a
-Comedi cmd. The convert trigger source is normally set to TRIG_NOW by default.
-
-The RTSI trigger bus is supported on these cards on
-subdevice 10. See the comedilib documentation for details.
-
-Information (number of channels, bits, etc.) for some devices may be
-incorrect.  Please check this and submit a bug if there are problems
-for your device.
-
-SCXI is probably broken for m-series boards.
-
-Bugs:
- - When DMA is enabled, COMEDI_EV_CONVERT does
-   not work correctly.
+ * Driver: ni_pcimio
+ * Description: National Instruments PCI-MIO-E series and M series (all boards)
+ * Author: ds, John Hallen, Frank Mori Hess, Rolf Mueller, Herbert Peremans,
+ *   Herman Bruyninckx, Terry Barnaby
+ * Status: works
+ * Devices: [National Instruments] PCI-MIO-16XE-50 (ni_pcimio),
+ *   PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, PCI-MIO-16E-4, PCI-6014,
+ *   PCI-6040E, PXI-6040E, PCI-6030E, PCI-6031E, PCI-6032E, PCI-6033E,
+ *   PCI-6071E, PCI-6023E, PCI-6024E, PCI-6025E, PXI-6025E, PCI-6034E,
+ *   PCI-6035E, PCI-6052E,
+ *   PCI-6110, PCI-6111, PCI-6220, PCI-6221, PCI-6224, PXI-6224,
+ *   PCI-6225, PXI-6225, PCI-6229, PCI-6250,
+ *   PCI-6251, PXI-6251, PCIe-6251, PXIe-6251,
+ *   PCI-6254, PCI-6259, PCIe-6259,
+ *   PCI-6280, PCI-6281, PXI-6281, PCI-6284, PCI-6289,
+ *   PCI-6711, PXI-6711, PCI-6713, PXI-6713,
+ *   PXI-6071E, PCI-6070E, PXI-6070E,
+ *   PXI-6052E, PCI-6036E, PCI-6731, PCI-6733, PXI-6733,
+ *   PCI-6143, PXI-6143
+ * Updated: Mon, 09 Jan 2012 14:52:48 +0000
+ *
+ * These boards are almost identical to the AT-MIO E series, except that
+ * they use the PCI bus instead of ISA (i.e., AT). See the notes for the
+ * ni_atmio.o driver for additional information about these boards.
+ *
+ * Autocalibration is supported on many of the devices, using the
+ * comedi_calibrate (or comedi_soft_calibrate for m-series) utility.
+ * M-Series boards do analog input and analog output calibration entirely
+ * in software. The software calibration corrects the analog input for
+ * offset, gain and nonlinearity. The analog outputs are corrected for
+ * offset and gain. See the comedilib documentation on
+ * comedi_get_softcal_converter() for more information.
+ *
+ * By default, the driver uses DMA to transfer analog input data to
+ * memory.  When DMA is enabled, not all triggering features are
+ * supported.
+ *
+ * Digital I/O may not work on 673x.
+ *
+ * Note that the PCI-6143 is a simultaineous sampling device with 8
+ * convertors. With this board all of the convertors perform one
+ * simultaineous sample during a scan interval. The period for a scan
+ * is used for the convert time in a Comedi cmd. The convert trigger
+ * source is normally set to TRIG_NOW by default.
+ *
+ * The RTSI trigger bus is supported on these cards on subdevice 10.
+ * See the comedilib documentation for details.
+ *
+ * Information (number of channels, bits, etc.) for some devices may be
+ * incorrect. Please check this and submit a bug if there are problems
+ * for your device.
+ *
+ * SCXI is probably broken for m-series boards.
+ *
+ * Bugs:
+ * - When DMA is enabled, COMEDI_EV_CONVERT does not work correctly.
+ */
 
-*/
 /*
-       The PCI-MIO E series driver was originally written by
-       Tomasz Motylewski <...>, and ported to comedi by ds.
-
-       References:
-
-          341079b.pdf  PCI E Series Register-Level Programmer Manual
-          340934b.pdf  DAQ-STC reference manual
-
-          322080b.pdf  6711/6713/6715 User Manual
-
-          320945c.pdf  PCI E Series User Manual
-          322138a.pdf  PCI-6052E and DAQPad-6052E User Manual
-
-       ISSUES:
-
-       need to deal with external reference for DAC, and other DAC
-       properties in board properties
-
-       deal with at-mio-16de-10 revision D to N changes, etc.
-
-       need to add other CALDAC type
-
-       need to slow down DAC loading.  I don't trust NI's claim that
-       two writes to the PCI bus slows IO enough.  I would prefer to
-       use udelay().  Timing specs: (clock)
-               AD8522          30ns
-               DAC8043         120ns
-               DAC8800         60ns
-               MB88341         ?
-
-*/
+ * The PCI-MIO E series driver was originally written by
+ * Tomasz Motylewski <...>, and ported to comedi by ds.
+ *
+ * References:
+ *     341079b.pdf  PCI E Series Register-Level Programmer Manual
+ *     340934b.pdf  DAQ-STC reference manual
+ *
+ *     322080b.pdf  6711/6713/6715 User Manual
+ *
+ *     320945c.pdf  PCI E Series User Manual
+ *     322138a.pdf  PCI-6052E and DAQPad-6052E User Manual
+ *
+ * ISSUES:
+ * - need to deal with external reference for DAC, and other DAC
+ *   properties in board properties
+ * - deal with at-mio-16de-10 revision D to N changes, etc.
+ * - need to add other CALDAC type
+ * - need to slow down DAC loading. I don't trust NI's claim that
+ *   two writes to the PCI bus slows IO enough. I would prefer to
+ *   use udelay().
+ *   Timing specs: (clock)
+ *     AD8522          30ns
+ *     DAC8043         120ns
+ *     DAC8800         60ns
+ *     MB88341         ?
+ */
 
 #include <linux/module.h>
 #include <linux/delay.h>
@@ -119,13 +114,14 @@ Bugs:
 
 #define PCIDMA
 
-/* These are not all the possible ao ranges for 628x boards.
- They can do OFFSET +- REFERENCE where OFFSET can be
- 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can
- be 10V, 5V, 2V, 1V, APFI<0,1>, AO<0...3>.  That's
- 63 different possibilities.  An AO channel
- can not act as it's own OFFSET or REFERENCE.
-*/
+/*
+ * These are not all the possible ao ranges for 628x boards.
+ * They can do OFFSET +- REFERENCE where OFFSET can be
+ * 0V, 5V, APFI<0,1>, or AO<0...3> and RANGE can
+ * be 10V, 5V, 2V, 1V, APFI<0,1>, AO<0...3>.  That's
+ * 63 different possibilities.  An AO channel
+ * can not act as it's own OFFSET or REFERENCE.
+ */
 static const struct comedi_lrange range_ni_M_628x_ao = {
        8, {
                BIP_RANGE(10),
index 95b537a8ecdb13b17e9d753f22a6c0dd04c60f99..5036eebb9162ef90bd4faaf4eb7508a6926f762a 100644 (file)
@@ -465,12 +465,12 @@ static int ni6501_alloc_usb_buffers(struct comedi_device *dev)
        struct ni6501_private *devpriv = dev->private;
        size_t size;
 
-       size = le16_to_cpu(devpriv->ep_rx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_rx);
        devpriv->usb_rx_buf = kzalloc(size, GFP_KERNEL);
        if (!devpriv->usb_rx_buf)
                return -ENOMEM;
 
-       size = le16_to_cpu(devpriv->ep_tx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_tx);
        devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
        if (!devpriv->usb_tx_buf) {
                kfree(devpriv->usb_rx_buf);
index 0e20cc5c9a693b4c793546ba6530826ba86e8227..e23e63a097b512582d8f5225f0911de221c91ff3 100644 (file)
@@ -60,9 +60,9 @@ struct plx_dma_desc {
 #define PLX_REG_LAS1RR         0x00f0
 
 #define PLX_LASRR_IO           BIT(0)          /* Map to: 1=I/O, 0=Mem */
-#define PLX_LASRR_ANY32                (BIT(1) * 0)    /* Locate anywhere in 32 bit */
-#define PLX_LASRR_LT1MB                (BIT(1) * 1)    /* Locate in 1st meg */
-#define PLX_LASRR_ANY64                (BIT(1) * 2)    /* Locate anywhere in 64 bit */
+#define PLX_LASRR_MLOC_ANY32   (BIT(1) * 0)    /* Locate anywhere in 32 bit */
+#define PLX_LASRR_MLOC_LT1MB   (BIT(1) * 1)    /* Locate in 1st meg */
+#define PLX_LASRR_MLOC_ANY64   (BIT(1) * 2)    /* Locate anywhere in 64 bit */
 #define PLX_LASRR_MLOC_MASK    GENMASK(2, 1)   /* Memory location bits */
 #define PLX_LASRR_PREFETCH     BIT(3)          /* Memory is prefetchable */
 /* bits that specify range for memory space decode bits */
@@ -89,11 +89,11 @@ struct plx_dma_desc {
 /* Local Bus Latency Timer */
 #define PLX_MARBR_LT(x)                (BIT(0) * ((x) & 0xff))
 #define PLX_MARBR_LT_MASK      GENMASK(7, 0)
-#define PLX_MARBR_LT_SHIFT     0
+#define PLX_MARBR_TO_LT(r)     ((r) & PLX_MARBR_LT_MASK)
 /* Local Bus Pause Timer */
 #define PLX_MARBR_PT(x)                (BIT(8) * ((x) & 0xff))
 #define PLX_MARBR_PT_MASK      GENMASK(15, 8)
-#define PLX_MARBR_PT_SHIFT     8
+#define PLX_MARBR_TO_PT(r)     (((r) & PLX_MARBR_PT_MASK) >> 8)
 /* Local Bus Latency Timer Enable */
 #define PLX_MARBR_LTEN         BIT(16)
 /* Local Bus Pause Timer Enable */
@@ -166,16 +166,15 @@ struct plx_dma_desc {
 #define PLX_REG_LBRD1          0x00f8
 
 /* Memory Space Local Bus Width */
-#define PLX_LBRD_MSWIDTH     (BIT(0) * 0)    /* 8 bits wide */
-#define PLX_LBRD_MSWIDTH16     (BIT(0) * 1)    /* 16 bits wide */
-#define PLX_LBRD_MSWIDTH32     (BIT(0) * 2)    /* 32 bits wide */
-#define PLX_LBRD_MSWIDTH32A    (BIT(0) * 3)    /* 32 bits wide */
+#define PLX_LBRD_MSWIDTH_8     (BIT(0) * 0)    /* 8 bits wide */
+#define PLX_LBRD_MSWIDTH_16    (BIT(0) * 1)    /* 16 bits wide */
+#define PLX_LBRD_MSWIDTH_32    (BIT(0) * 2)    /* 32 bits wide */
+#define PLX_LBRD_MSWIDTH_32A   (BIT(0) * 3)    /* 32 bits wide */
 #define PLX_LBRD_MSWIDTH_MASK  GENMASK(1, 0)
-#define PLX_LBRD_MSWIDTH_SHIFT 0
 /* Memory Space Internal Wait States */
 #define PLX_LBRD_MSIWS(x)      (BIT(2) * ((x) & 0xf))
 #define PLX_LBRD_MSIWS_MASK    GENMASK(5, 2)
-#define PLX_LBRD_MSIWS_SHIFT   2
+#define PLX_LBRD_TO_MSIWS(r)   (((r) & PLS_LBRD_MSIWS_MASK) >> 2)
 /* Memory Space Ready Input Enable */
 #define PLX_LBRD_MSREADYIEN    BIT(6)
 /* Memory Space BTERM# Input Enable */
@@ -193,18 +192,17 @@ struct plx_dma_desc {
 /* Prefetch Counter */
 #define PLX_LBRD_PFCOUNT(x)    (BIT(11) * ((x) & 0xf))
 #define PLX_LBRD_PFCOUNT_MASK  GENMASK(14, 11)
-#define PLX_LBRD_PFCOUNT_SHIFT 11
+#define PLX_LBRD_TO_PFCOUNT(r) (((r) & PLX_LBRD_PFCOUNT_MASK) >> 11)
 /* Expansion ROM Space Local Bus Width (LBRD0 only) */
-#define PLX_LBRD0_EROMWIDTH  (BIT(16) * 0)   /* 8 bits wide */
-#define PLX_LBRD0_EROMWIDTH16  (BIT(16) * 1)   /* 16 bits wide */
-#define PLX_LBRD0_EROMWIDTH32  (BIT(16) * 2)   /* 32 bits wide */
-#define PLX_LBRD0_EROMWIDTH32A (BIT(16) * 3)   /* 32 bits wide */
+#define PLX_LBRD0_EROMWIDTH_8  (BIT(16) * 0)   /* 8 bits wide */
+#define PLX_LBRD0_EROMWIDTH_16 (BIT(16) * 1)   /* 16 bits wide */
+#define PLX_LBRD0_EROMWIDTH_32 (BIT(16) * 2)   /* 32 bits wide */
+#define PLX_LBRD0_EROMWIDTH_32A        (BIT(16) * 3)   /* 32 bits wide */
 #define PLX_LBRD0_EROMWIDTH_MASK       GENMASK(17, 16)
-#define PLX_LBRD0_EROMWIDTH_SHIFT      16
 /* Expansion ROM Space Internal Wait States (LBRD0 only) */
 #define PLX_LBRD0_EROMIWS(x)   (BIT(18) * ((x) & 0xf))
 #define PLX_LBRD0_EROMIWS_MASK GENMASK(21, 18)
-#define PLX_LBRD0_EROMIWS_SHIFT        18
+#define PLX_LBRD0_TO_EROMIWS(r)        (((r) & PLX_LBRD0_EROMIWS_MASK) >> 18)
 /* Expansion ROM Space Ready Input Enable (LBDR0 only) */
 #define PLX_LBRD0_EROMREADYIEN BIT(22)
 /* Expansion ROM Space BTERM# Input Enable (LBRD0 only) */
@@ -220,7 +218,7 @@ struct plx_dma_desc {
 /* PCI Target Retry Delay Clocks / 8 (LBRD0 only) */
 #define PLX_LBRD0_TRDELAY(x)   (BIT(28) * ((x) & 0xF))
 #define PLX_LBRD0_TRDELAY_MASK GENMASK(31, 28)
-#define PLX_LBRD0_TRDELAY_SHIFT        28
+#define PLX_LBRD0_TO_TRDELAY(r)        (((r) & PLX_LBRD0_TRDELAY_MASK) >> 28)
 
 /* Local Range Register for Direct Master to PCI */
 #define PLX_REG_DMRR           0x001c
@@ -241,10 +239,10 @@ struct plx_dma_desc {
 /* LLOCK# Input Enable */
 #define PLX_DMPBAM_LLOCKIEN    BIT(2)
 /* Direct Master Read Prefetch Size Control (bits 12, 3) */
-#define PLX_DMPBAM_RPSIZECONT  ((BIT(12) * 0) | (BIT(3) * 0))
-#define PLX_DMPBAM_RPSIZE    ((BIT(12) * 0) | (BIT(3) * 1))
-#define PLX_DMPBAM_RPSIZE    ((BIT(12) * 1) | (BIT(3) * 0))
-#define PLX_DMPBAM_RPSIZE16    ((BIT(12) * 1) | (BIT(3) * 1))
+#define PLX_DMPBAM_RPSIZE_CONT ((BIT(12) * 0) | (BIT(3) * 0))
+#define PLX_DMPBAM_RPSIZE_4    ((BIT(12) * 0) | (BIT(3) * 1))
+#define PLX_DMPBAM_RPSIZE_8    ((BIT(12) * 1) | (BIT(3) * 0))
+#define PLX_DMPBAM_RPSIZE_16   ((BIT(12) * 1) | (BIT(3) * 1))
 #define PLX_DMPBAM_RPSIZE_MASK (BIT(12) | BIT(3))
 /* Direct Master PCI Read Mode - deassert IRDY when FIFO full */
 #define PLX_DMPBAM_RMIRDY      BIT(4)
@@ -261,10 +259,10 @@ struct plx_dma_desc {
 /* I/O Remap Select */
 #define PLX_DMPBAM_IOREMAPSEL  BIT(13)
 /* Direct Master Write Delay */
-#define PLX_DMPBAM_WDELAYNONE  (BIT(14) * 0)
-#define PLX_DMPBAM_WDELAY    (BIT(14) * 1)
-#define PLX_DMPBAM_WDELAY    (BIT(14) * 2)
-#define PLX_DMPBAM_WDELAY16    (BIT(14) * 3)
+#define PLX_DMPBAM_WDELAY_NONE (BIT(14) * 0)
+#define PLX_DMPBAM_WDELAY_4    (BIT(14) * 1)
+#define PLX_DMPBAM_WDELAY_8    (BIT(14) * 2)
+#define PLX_DMPBAM_WDELAY_16   (BIT(14) * 3)
 #define PLX_DMPBAM_WDELAY_MASK GENMASK(15, 14)
 /* Remap of Local-to-PCI Space Into PCI Address Space */
 #define PLX_DMPBAM_REMAP_MASK  GENMASK(31, 16)
@@ -279,19 +277,19 @@ struct plx_dma_desc {
 /* Register Number */
 #define PLX_DMCFGA_REGNUM(x)   (BIT(2) * ((x) & 0x3f))
 #define PLX_DMCFGA_REGNUM_MASK GENMASK(7, 2)
-#define PLX_DMCFGA_REGNUM_SHIFT        2
+#define PLX_DMCFGA_TO_REGNUM(r)        (((r) & PLX_DMCFGA_REGNUM_MASK) >> 2)
 /* Function Number */
 #define PLX_DMCFGA_FUNCNUM(x)  (BIT(8) * ((x) & 0x7))
 #define PLX_DMCFGA_FUNCNUM_MASK        GENMASK(10, 8)
-#define PLX_DMCFGA_FUNCNUM_SHIFT 8
+#define PLX_DMCFGA_TO_FUNCNUM(r) (((r) & PLX_DMCFGA_FUNCNUM_MASK) >> 8)
 /* Device Number */
 #define PLX_DMCFGA_DEVNUM(x)   (BIT(11) * ((x) & 0x1f))
 #define PLX_DMCFGA_DEVNUM_MASK GENMASK(15, 11)
-#define PLX_DMCFGA_DEVNUM_SHIFT        11
+#define PLX_DMCFGA_TO_DEVNUM(r)        (((r) & PLX_DMCFGA_DEVNUM_MASK) >> 11)
 /* Bus Number */
 #define PLX_DMCFGA_BUSNUM(x)   (BIT(16) * ((x) & 0xff))
 #define PLX_DMCFGA_BUSNUM_MASK GENMASK(23, 16)
-#define PLX_DMCFGA_BUSNUM_SHIFT        16
+#define PLX_DMCFGA_TO_BUSNUM(r)        (((r) & PLX_DMCFGA_BUSNUM_MASK) >> 16)
 /* Configuration Enable */
 #define PLX_DMCFGA_CONFIGEN    BIT(31)
 
@@ -402,22 +400,22 @@ struct plx_dma_desc {
 /* PCI Read Command Code For DMA */
 #define PLX_CNTRL_CCRDMA(x)    (BIT(0) * ((x) & 0xf))
 #define PLX_CNTRL_CCRDMA_MASK  GENMASK(3, 0)
-#define PLX_CNTRL_CCRDMA_SHIFT 0
+#define PLX_CNTRL_TO_CCRDMA(r) ((r) & PLX_CNTRL_CCRDMA_MASK)
 #define PLX_CNTRL_CCRDMA_NORMAL        PLX_CNTRL_CCRDMA(14)    /* value after reset */
 /* PCI Write Command Code For DMA 0 */
 #define PLX_CNTRL_CCWDMA(x)    (BIT(4) * ((x) & 0xf))
 #define PLX_CNTRL_CCWDMA_MASK  GENMASK(7, 4)
-#define PLX_CNTRL_CCWDMA_SHIFT 4
+#define PLX_CNTRL_TO_CCWDMA(r) (((r) & PLX_CNTRL_CCWDMA_MASK) >> 4)
 #define PLX_CNTRL_CCWDMA_NORMAL        PLX_CNTRL_CCWDMA(7)     /* value after reset */
 /* PCI Memory Read Command Code For Direct Master */
 #define PLX_CNTRL_CCRDM(x)     (BIT(8) * ((x) & 0xf))
 #define PLX_CNTRL_CCRDM_MASK   GENMASK(11, 8)
-#define PLX_CNTRL_CCRDM_SHIFT  8
+#define PLX_CNTRL_TO_CCRDM(r)  (((r) & PLX_CNTRL_CCRDM_MASK) >> 8)
 #define PLX_CNTRL_CCRDM_NORMAL PLX_CNTRL_CCRDM(6)      /* value after reset */
 /* PCI Memory Write Command Code For Direct Master */
 #define PLX_CNTRL_CCWDM(x)     (BIT(12) * ((x) & 0xf))
 #define PLX_CNTRL_CCWDM_MASK   GENMASK(15, 12)
-#define PLX_CNTRL_CCWDM_SHIFT  12
+#define PLX_CNTRL_TO_CCWDM(r)  (((r) & PLX_CNTRL_CCWDM_MASK) >> 12)
 #define PLX_CNTRL_CCWDM_NORMAL PLX_CNTRL_CCWDM(7)      /* value after reset */
 /* General Purpose Output (USERO) */
 #define PLX_CNTRL_USERO                BIT(16)
@@ -464,16 +462,15 @@ struct plx_dma_desc {
 #define PLX_REG_DMAMODE1       0x0094
 
 /* Local Bus Width */
-#define PLX_DMAMODE_WIDTH    (BIT(0) * 0)    /* 8 bits wide */
-#define PLX_DMAMODE_WIDTH16    (BIT(0) * 1)    /* 16 bits wide */
-#define PLX_DMAMODE_WIDTH32    (BIT(0) * 2)    /* 32 bits wide */
-#define PLX_DMAMODE_WIDTH32A   (BIT(0) * 3)    /* 32 bits wide */
+#define PLX_DMAMODE_WIDTH_8    (BIT(0) * 0)    /* 8 bits wide */
+#define PLX_DMAMODE_WIDTH_16   (BIT(0) * 1)    /* 16 bits wide */
+#define PLX_DMAMODE_WIDTH_32   (BIT(0) * 2)    /* 32 bits wide */
+#define PLX_DMAMODE_WIDTH_32A  (BIT(0) * 3)    /* 32 bits wide */
 #define PLX_DMAMODE_WIDTH_MASK GENMASK(1, 0)
-#define PLX_DMAMODE_WIDTH_SHIFT        0
 /* Internal Wait States */
 #define PLX_DMAMODE_IWS(x)     (BIT(2) * ((x) & 0xf))
 #define PLX_DMAMODE_IWS_MASK   GENMASK(5, 2)
-#define PLX_DMAMODE_SHIFT      2
+#define PLX_DMAMODE_TO_IWS(r)  (((r) & PLX_DMAMODE_IWS_MASK) >> 2)
 /* Ready Input Enable */
 #define PLX_DMAMODE_READYIEN   BIT(6)
 /* BTERM# Input Enable */
@@ -560,35 +557,35 @@ struct plx_dma_desc {
 /* DMA Channel 0 PCI-to-Local Almost Full (divided by 2, minus 1) */
 #define PLX_DMATHR_C0PLAF(x)   (BIT(0) * ((x) & 0xf))
 #define PLX_DMATHR_C0PLAF_MASK GENMASK(3, 0)
-#define PLX_DMATHR_C0PLAF_SHIFT        0
+#define PLX_DMATHR_TO_C0PLAF(r)        ((r) & PLX_DMATHR_C0PLAF_MASK)
 /* DMA Channel 0 Local-to-PCI Almost Empty (divided by 2, minus 1) */
 #define PLX_DMATHR_C0LPAE(x)   (BIT(4) * ((x) & 0xf))
 #define PLX_DMATHR_C0LPAE_MASK GENMASK(7, 4)
-#define PLX_DMATHR_C0LPAE_SHIFT        4
+#define PLX_DMATHR_TO_C0LPAE(r)        (((r) & PLX_DMATHR_C0LPAE_MASK) >> 4)
 /* DMA Channel 0 Local-to-PCI Almost Full (divided by 2, minus 1) */
 #define PLX_DMATHR_C0LPAF(x)   (BIT(8) * ((x) & 0xf))
 #define PLX_DMATHR_C0LPAF_MASK GENMASK(11, 8)
-#define PLX_DMATHR_C0LPAF_SHIFT        8
+#define PLX_DMATHR_TO_C0LPAF(r)        (((r) & PLX_DMATHR_C0LPAF_MASK) >> 8)
 /* DMA Channel 0 PCI-to-Local Almost Empty (divided by 2, minus 1) */
 #define PLX_DMATHR_C0PLAE(x)   (BIT(12) * ((x) & 0xf))
 #define PLX_DMATHR_C0PLAE_MASK GENMASK(15, 12)
-#define PLX_DMATHR_C0PLAE_SHIFT        12
+#define PLX_DMATHR_TO_C0PLAE(r)        (((r) & PLX_DMATHR_C0PLAE_MASK) >> 12)
 /* DMA Channel 1 PCI-to-Local Almost Full (divided by 2, minus 1) */
 #define PLX_DMATHR_C1PLAF(x)   (BIT(16) * ((x) & 0xf))
 #define PLX_DMATHR_C1PLAF_MASK GENMASK(19, 16)
-#define PLX_DMATHR_C1PLAF_SHIFT        16
+#define PLX_DMATHR_TO_C1PLAF(r)        (((r) & PLX_DMATHR_C1PLAF_MASK) >> 16)
 /* DMA Channel 1 Local-to-PCI Almost Empty (divided by 2, minus 1) */
 #define PLX_DMATHR_C1LPAE(x)   (BIT(20) * ((x) & 0xf))
 #define PLX_DMATHR_C1LPAE_MASK GENMASK(23, 20)
-#define PLX_DMATHR_C1LPAE_SHIFT        20
+#define PLX_DMATHR_TO_C1LPAE(r)        (((r) & PLX_DMATHR_C1LPAE_MASK) >> 20)
 /* DMA Channel 1 Local-to-PCI Almost Full (divided by 2, minus 1) */
 #define PLX_DMATHR_C1LPAF(x)   (BIT(24) * ((x) & 0xf))
 #define PLX_DMATHR_C1LPAF_MASK GENMASK(27, 24)
-#define PLX_DMATHR_C1LPAF_SHIFT        24
+#define PLX_DMATHR_TO_C1LPAF(r)        (((r) & PLX_DMATHR_C1LPAF_MASK) >> 24)
 /* DMA Channel 1 PCI-to-Local Almost Empty (divided by 2, minus 1) */
 #define PLX_DMATHR_C1PLAE(x)   (BIT(28) * ((x) & 0xf))
 #define PLX_DMATHR_C1PLAE_MASK GENMASK(31, 28)
-#define PLX_DMATHR_C1PLAE_SHIFT        28
+#define PLX_DMATHR_TO_C1PLAE(r)        (((r) & PLX_DMATHR_C1PLAE_MASK) >> 28)
 
 /*
  * Messaging Queue Registers OPLFIS, OPLFIM, IQP, OQP, MQCR, QBAR, IFHPR,
index 4a87b4b52400a23e9788b39977fd21f2629d13c4..6d89ca0b9cfc9a3c887114b7e58360eeddcc7602 100644 (file)
@@ -2500,7 +2500,8 @@ static int s626_initialize(struct comedi_device *dev)
        for (i = 0; i < 2; i++) {
                writel(S626_I2C_CLKSEL, dev->mmio + S626_P_I2CSTAT);
                s626_mc_enable(dev, S626_MC2_UPLD_IIC, S626_P_MC2);
-               ret = comedi_timeout(dev, NULL, NULL, s626_i2c_handshake_eoc, 0);
+               ret = comedi_timeout(dev, NULL,
+                                    NULL, s626_i2c_handshake_eoc, 0);
                if (ret)
                        return ret;
        }
index 6a00a64c6f3ac8045a24f9d1b52fb5f7acc847d6..4cef4526326712c22694809ac8b8326ce70f1b87 100644 (file)
@@ -79,7 +79,7 @@
 /* Address offsets, in DWORDS, from base of DMA buffer. */
 #define S626_DAC_WDMABUF_OS    S626_ADC_DMABUF_DWORDS
 
-/*  Interrupt enable bit in ISR and IER. */
+/* Interrupt enable bit in ISR and IER. */
 #define S626_IRQ_GPIO3         0x00000040      /* IRQ enable for GPIO3. */
 #define S626_IRQ_RPS1          0x10000000
 #define S626_ISR_AFOU          0x00000800
                                                 * WS1-WS4 = CS* outputs.
                                                 */
 
-#if S626_PLATFORM == S626_INTEL                /*
+#if (S626_PLATFORM == S626_INTEL)      /*
                                         * Base ACON1 config: always run
                                         * A1 based on TSL1.
                                         */
index 10f94ec345360681ec11316d5fda6c48581afde8..608403c7586b767e4bb264300dc216d1fa0d785a 100644 (file)
@@ -946,10 +946,8 @@ static int usbduxfast_auto_attach(struct comedi_device *dev,
        }
 
        devpriv->urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!devpriv->urb) {
-               dev_err(dev->class_dev, "Could not alloc. urb\n");
+       if (!devpriv->urb)
                return -ENOMEM;
-       }
 
        devpriv->inbuf = kmalloc(SIZEINBUF, GFP_KERNEL);
        if (!devpriv->inbuf)
index 8c7393ef762d911435d709cb2d74bdf70c156aee..a004aed0147a526fa3732d1d8718be3e2957ef10 100644 (file)
@@ -177,7 +177,7 @@ static void vmk80xx_do_bulk_msg(struct comedi_device *dev)
         * The max packet size attributes of the K8061
         * input/output endpoints are identical
         */
-       size = le16_to_cpu(devpriv->ep_tx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_tx);
 
        usb_bulk_msg(usb, tx_pipe, devpriv->usb_tx_buf,
                     size, NULL, devpriv->ep_tx->bInterval);
@@ -199,7 +199,7 @@ static int vmk80xx_read_packet(struct comedi_device *dev)
        ep = devpriv->ep_rx;
        pipe = usb_rcvintpipe(usb, ep->bEndpointAddress);
        return usb_interrupt_msg(usb, pipe, devpriv->usb_rx_buf,
-                                le16_to_cpu(ep->wMaxPacketSize), NULL,
+                                usb_endpoint_maxp(ep), NULL,
                                 HZ * 10);
 }
 
@@ -220,7 +220,7 @@ static int vmk80xx_write_packet(struct comedi_device *dev, int cmd)
        ep = devpriv->ep_tx;
        pipe = usb_sndintpipe(usb, ep->bEndpointAddress);
        return usb_interrupt_msg(usb, pipe, devpriv->usb_tx_buf,
-                                le16_to_cpu(ep->wMaxPacketSize), NULL,
+                                usb_endpoint_maxp(ep), NULL,
                                 HZ * 10);
 }
 
@@ -230,7 +230,7 @@ static int vmk80xx_reset_device(struct comedi_device *dev)
        size_t size;
        int retval;
 
-       size = le16_to_cpu(devpriv->ep_tx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_tx);
        memset(devpriv->usb_tx_buf, 0, size);
        retval = vmk80xx_write_packet(dev, VMK8055_CMD_RST);
        if (retval)
@@ -684,12 +684,12 @@ static int vmk80xx_alloc_usb_buffers(struct comedi_device *dev)
        struct vmk80xx_private *devpriv = dev->private;
        size_t size;
 
-       size = le16_to_cpu(devpriv->ep_rx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_rx);
        devpriv->usb_rx_buf = kzalloc(size, GFP_KERNEL);
        if (!devpriv->usb_rx_buf)
                return -ENOMEM;
 
-       size = le16_to_cpu(devpriv->ep_tx->wMaxPacketSize);
+       size = usb_endpoint_maxp(devpriv->ep_tx);
        devpriv->usb_tx_buf = kzalloc(size, GFP_KERNEL);
        if (!devpriv->usb_tx_buf) {
                kfree(devpriv->usb_rx_buf);
index 46c050cc7dbe79d3793f550c7c1ce4fbd589f3d6..4e1e0dc67f410011736df65192cf453f3f541dd9 100644 (file)
 #include "dgnc_cls.h"
 #include "dgnc_tty.h"
 
-static inline void cls_parse_isr(struct dgnc_board *brd, uint port);
-static inline void cls_clear_break(struct channel_t *ch, int force);
-static inline void cls_set_cts_flow_control(struct channel_t *ch);
-static inline void cls_set_rts_flow_control(struct channel_t *ch);
-static inline void cls_set_ixon_flow_control(struct channel_t *ch);
-static inline void cls_set_ixoff_flow_control(struct channel_t *ch);
-static inline void cls_set_no_output_flow_control(struct channel_t *ch);
-static inline void cls_set_no_input_flow_control(struct channel_t *ch);
-static void cls_parse_modem(struct channel_t *ch, unsigned char signals);
-static void cls_tasklet(unsigned long data);
-static void cls_vpd(struct dgnc_board *brd);
-static void cls_uart_init(struct channel_t *ch);
-static void cls_uart_off(struct channel_t *ch);
-static int cls_drain(struct tty_struct *tty, uint seconds);
-static void cls_param(struct tty_struct *tty);
-static void cls_assert_modem_signals(struct channel_t *ch);
-static void cls_flush_uart_write(struct channel_t *ch);
-static void cls_flush_uart_read(struct channel_t *ch);
-static void cls_disable_receiver(struct channel_t *ch);
-static void cls_enable_receiver(struct channel_t *ch);
-static void cls_send_break(struct channel_t *ch, int msecs);
-static void cls_send_start_character(struct channel_t *ch);
-static void cls_send_stop_character(struct channel_t *ch);
-static void cls_copy_data_from_uart_to_queue(struct channel_t *ch);
-static void cls_copy_data_from_queue_to_uart(struct channel_t *ch);
-static uint cls_get_uart_bytes_left(struct channel_t *ch);
-static void cls_send_immediate_char(struct channel_t *ch, unsigned char);
-static irqreturn_t cls_intr(int irq, void *voidbrd);
-
-struct board_ops dgnc_cls_ops = {
-       .tasklet =                      cls_tasklet,
-       .intr =                         cls_intr,
-       .uart_init =                    cls_uart_init,
-       .uart_off =                     cls_uart_off,
-       .drain =                        cls_drain,
-       .param =                        cls_param,
-       .vpd =                          cls_vpd,
-       .assert_modem_signals =         cls_assert_modem_signals,
-       .flush_uart_write =             cls_flush_uart_write,
-       .flush_uart_read =              cls_flush_uart_read,
-       .disable_receiver =             cls_disable_receiver,
-       .enable_receiver =              cls_enable_receiver,
-       .send_break =                   cls_send_break,
-       .send_start_character =         cls_send_start_character,
-       .send_stop_character =          cls_send_stop_character,
-       .copy_data_from_queue_to_uart = cls_copy_data_from_queue_to_uart,
-       .get_uart_bytes_left =          cls_get_uart_bytes_left,
-       .send_immediate_char =          cls_send_immediate_char
-};
-
 static inline void cls_set_cts_flow_control(struct channel_t *ch)
 {
        unsigned char lcrb = readb(&ch->ch_cls_uart->lcr);
@@ -357,179 +307,445 @@ static inline void cls_clear_break(struct channel_t *ch, int force)
        spin_unlock_irqrestore(&ch->ch_lock, flags);
 }
 
-/* Parse the ISR register for the specific port */
-static inline void cls_parse_isr(struct dgnc_board *brd, uint port)
+static void cls_copy_data_from_uart_to_queue(struct channel_t *ch)
 {
-       struct channel_t *ch;
-       unsigned char isr = 0;
+       int qleft = 0;
+       unsigned char linestatus = 0;
+       unsigned char error_mask = 0;
+       ushort head;
+       ushort tail;
        unsigned long flags;
 
-       /*
-        * No need to verify board pointer, it was already
-        * verified in the interrupt routine.
-        */
-
-       if (port >= brd->nasync)
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
                return;
 
-       ch = brd->channels[port];
-       if (ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
+       spin_lock_irqsave(&ch->ch_lock, flags);
+
+       /* cache head and tail of queue */
+       head = ch->ch_r_head;
+       tail = ch->ch_r_tail;
+
+       /* Store how much space we have left in the queue */
+       qleft = tail - head - 1;
+       if (qleft < 0)
+               qleft += RQUEUEMASK + 1;
+
+       /*
+        * Create a mask to determine whether we should
+        * insert the character (if any) into our queue.
+        */
+       if (ch->ch_c_iflag & IGNBRK)
+               error_mask |= UART_LSR_BI;
 
-       /* Here we try to figure out what caused the interrupt to happen */
        while (1) {
-               isr = readb(&ch->ch_cls_uart->isr_fcr);
+               linestatus = readb(&ch->ch_cls_uart->lsr);
 
-               /* Bail if no pending interrupt on port */
-               if (isr & UART_IIR_NO_INT)
+               if (!(linestatus & (UART_LSR_DR)))
                        break;
 
-               /* Receive Interrupt pending */
-               if (isr & (UART_IIR_RDI | UART_IIR_RDI_TIMEOUT)) {
-                       /* Read data from uart -> queue */
-                       brd->intr_rx++;
-                       ch->ch_intr_rx++;
-                       cls_copy_data_from_uart_to_queue(ch);
-                       dgnc_check_queue_flow_control(ch);
+               /*
+                * Discard character if we are ignoring the error mask.
+               */
+               if (linestatus & error_mask)  {
+                       linestatus = 0;
+                       readb(&ch->ch_cls_uart->txrx);
+                       continue;
                }
 
-               /* Transmit Hold register empty pending */
-               if (isr & UART_IIR_THRI) {
-                       /* Transfer data (if any) from Write Queue -> UART. */
-                       spin_lock_irqsave(&ch->ch_lock, flags);
-                       ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
-                       brd->intr_tx++;
-                       ch->ch_intr_tx++;
-                       spin_unlock_irqrestore(&ch->ch_lock, flags);
-                       cls_copy_data_from_queue_to_uart(ch);
+               /*
+                * If our queue is full, we have no choice but to drop some
+                * data. The assumption is that HWFLOW or SWFLOW should have
+                * stopped things way way before we got to this point.
+                *
+                * I decided that I wanted to ditch the oldest data first,
+                * I hope thats okay with everyone? Yes? Good.
+                */
+               while (qleft < 1) {
+                       tail = (tail + 1) & RQUEUEMASK;
+                       ch->ch_r_tail = tail;
+                       ch->ch_err_overrun++;
+                       qleft++;
                }
 
-               /* CTS/RTS change of state */
-               if (isr & UART_IIR_CTSRTS) {
-                       brd->intr_modem++;
-                       ch->ch_intr_modem++;
-                       /*
-                        * Don't need to do anything, the cls_parse_modem
-                        * below will grab the updated modem signals.
-                        */
-               }
+               ch->ch_equeue[head] = linestatus & (UART_LSR_BI | UART_LSR_PE
+                                                                | UART_LSR_FE);
+               ch->ch_rqueue[head] = readb(&ch->ch_cls_uart->txrx);
 
-               /* Parse any modem signal changes */
-               cls_parse_modem(ch, readb(&ch->ch_cls_uart->msr));
+               qleft--;
+
+               if (ch->ch_equeue[head] & UART_LSR_PE)
+                       ch->ch_err_parity++;
+               if (ch->ch_equeue[head] & UART_LSR_BI)
+                       ch->ch_err_break++;
+               if (ch->ch_equeue[head] & UART_LSR_FE)
+                       ch->ch_err_frame++;
+
+               /* Add to, and flip head if needed */
+               head = (head + 1) & RQUEUEMASK;
+               ch->ch_rxcount++;
        }
+
+       /*
+        * Write new final heads to channel structure.
+        */
+       ch->ch_r_head = head & RQUEUEMASK;
+       ch->ch_e_head = head & EQUEUEMASK;
+
+       spin_unlock_irqrestore(&ch->ch_lock, flags);
 }
 
-/*
- * cls_param()
- * Send any/all changes to the line to the UART.
- */
-static void cls_param(struct tty_struct *tty)
+/* Make the UART raise any of the output signals we want up */
+static void cls_assert_modem_signals(struct channel_t *ch)
 {
-       unsigned char lcr = 0;
-       unsigned char uart_lcr = 0;
-       unsigned char ier = 0;
-       unsigned char uart_ier = 0;
-       uint baud = 9600;
-       int quot = 0;
-       struct dgnc_board *bd;
-       struct channel_t *ch;
-       struct un_t   *un;
+       unsigned char out;
 
-       if (!tty || tty->magic != TTY_MAGIC)
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
                return;
 
-       un = (struct un_t *)tty->driver_data;
-       if (!un || un->magic != DGNC_UNIT_MAGIC)
-               return;
+       out = ch->ch_mostat;
 
-       ch = un->un_ch;
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
+       if (ch->ch_flags & CH_LOOPBACK)
+               out |= UART_MCR_LOOP;
 
-       bd = ch->ch_bd;
-       if (!bd || bd->magic != DGNC_BOARD_MAGIC)
-               return;
+       writeb(out, &ch->ch_cls_uart->mcr);
 
-       /*
-        * If baud rate is zero, flush queues, and set mval to drop DTR.
-        */
-       if ((ch->ch_c_cflag & (CBAUD)) == 0) {
-               ch->ch_r_head = 0;
-               ch->ch_r_tail = 0;
-               ch->ch_e_head = 0;
-               ch->ch_e_tail = 0;
-               ch->ch_w_head = 0;
-               ch->ch_w_tail = 0;
+       /* Give time for the UART to actually drop the signals */
+       udelay(10);
+}
 
-               cls_flush_uart_write(ch);
-               cls_flush_uart_read(ch);
+static void cls_copy_data_from_queue_to_uart(struct channel_t *ch)
+{
+       ushort head;
+       ushort tail;
+       int n;
+       int qlen;
+       uint len_written = 0;
+       unsigned long flags;
 
-               /* The baudrate is B0 so all modem lines are to be dropped. */
-               ch->ch_flags |= (CH_BAUD0);
-               ch->ch_mostat &= ~(UART_MCR_RTS | UART_MCR_DTR);
-               cls_assert_modem_signals(ch);
-               ch->ch_old_baud = 0;
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
                return;
-       } else if (ch->ch_custom_speed) {
-               baud = ch->ch_custom_speed;
-               /* Handle transition from B0 */
-               if (ch->ch_flags & CH_BAUD0) {
-                       ch->ch_flags &= ~(CH_BAUD0);
 
-                       /*
-                        * Bring back up RTS and DTR...
-                        * Also handle RTS or DTR toggle if set.
-                        */
-                       if (!(ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE))
-                               ch->ch_mostat |= (UART_MCR_RTS);
-                       if (!(ch->ch_digi.digi_flags & DIGI_DTR_TOGGLE))
-                               ch->ch_mostat |= (UART_MCR_DTR);
-               }
+       spin_lock_irqsave(&ch->ch_lock, flags);
 
-       } else {
-               int iindex = 0;
-               int jindex = 0;
+       /* No data to write to the UART */
+       if (ch->ch_w_tail == ch->ch_w_head)
+               goto exit_unlock;
 
-               ulong bauds[4][16] = {
-                       { /* slowbaud */
-                               0,      50,     75,     110,
-                               134,    150,    200,    300,
-                               600,    1200,   1800,   2400,
-                               4800,   9600,   19200,  38400 },
-                       { /* slowbaud & CBAUDEX */
-                               0,      57600,  115200, 230400,
-                               460800, 150,    200,    921600,
-                               600,    1200,   1800,   2400,
-                               4800,   9600,   19200,  38400 },
-                       { /* fastbaud */
-                               0,      57600,   76800, 115200,
-                               131657, 153600, 230400, 460800,
-                               921600, 1200,   1800,   2400,
-                               4800,   9600,   19200,  38400 },
-                       { /* fastbaud & CBAUDEX */
-                               0,      57600,  115200, 230400,
-                               460800, 150,    200,    921600,
-                               600,    1200,   1800,   2400,
-                               4800,   9600,   19200,  38400 }
-               };
+       /* If port is "stopped", don't send any data to the UART */
+       if ((ch->ch_flags & CH_FORCED_STOP) ||
+           (ch->ch_flags & CH_BREAK_SENDING))
+               goto exit_unlock;
 
-               /*
-                * Only use the TXPrint baud rate if the terminal
-                * unit is NOT open
-                */
-               if (!(ch->ch_tun.un_flags & UN_ISOPEN) &&
-                   (un->un_type == DGNC_PRINT))
-                       baud = C_BAUD(ch->ch_pun.un_tty) & 0xff;
-               else
-                       baud = C_BAUD(ch->ch_tun.un_tty) & 0xff;
+       if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM)))
+               goto exit_unlock;
 
-               if (ch->ch_c_cflag & CBAUDEX)
-                       iindex = 1;
+       n = 32;
 
-               if (ch->ch_digi.digi_flags & DIGI_FAST)
-                       iindex += 2;
+       /* cache head and tail of queue */
+       head = ch->ch_w_head & WQUEUEMASK;
+       tail = ch->ch_w_tail & WQUEUEMASK;
+       qlen = (head - tail) & WQUEUEMASK;
 
-               jindex = baud;
+       /* Find minimum of the FIFO space, versus queue length */
+       n = min(n, qlen);
+
+       while (n > 0) {
+               /*
+                * If RTS Toggle mode is on, turn on RTS now if not already set,
+                * and make sure we get an event when the data transfer has
+                * completed.
+                */
+               if (ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE) {
+                       if (!(ch->ch_mostat & UART_MCR_RTS)) {
+                               ch->ch_mostat |= (UART_MCR_RTS);
+                               cls_assert_modem_signals(ch);
+                       }
+                       ch->ch_tun.un_flags |= (UN_EMPTY);
+               }
+
+               /*
+                * If DTR Toggle mode is on, turn on DTR now if not already set,
+                * and make sure we get an event when the data transfer has
+                * completed.
+                */
+               if (ch->ch_digi.digi_flags & DIGI_DTR_TOGGLE) {
+                       if (!(ch->ch_mostat & UART_MCR_DTR)) {
+                               ch->ch_mostat |= (UART_MCR_DTR);
+                               cls_assert_modem_signals(ch);
+                       }
+                       ch->ch_tun.un_flags |= (UN_EMPTY);
+               }
+               writeb(ch->ch_wqueue[ch->ch_w_tail], &ch->ch_cls_uart->txrx);
+               ch->ch_w_tail++;
+               ch->ch_w_tail &= WQUEUEMASK;
+               ch->ch_txcount++;
+               len_written++;
+               n--;
+       }
+
+       if (len_written > 0)
+               ch->ch_flags &= ~(CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
+
+exit_unlock:
+       spin_unlock_irqrestore(&ch->ch_lock, flags);
+}
+
+static void cls_parse_modem(struct channel_t *ch, unsigned char signals)
+{
+       unsigned char msignals = signals;
+       unsigned long flags;
+
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
+               return;
+
+       /*
+        * Do altpin switching. Altpin switches DCD and DSR.
+        * This prolly breaks DSRPACE, so we should be more clever here.
+        */
+       spin_lock_irqsave(&ch->ch_lock, flags);
+       if (ch->ch_digi.digi_flags & DIGI_ALTPIN) {
+               unsigned char mswap = signals;
+
+               if (mswap & UART_MSR_DDCD) {
+                       msignals &= ~UART_MSR_DDCD;
+                       msignals |= UART_MSR_DDSR;
+               }
+               if (mswap & UART_MSR_DDSR) {
+                       msignals &= ~UART_MSR_DDSR;
+                       msignals |= UART_MSR_DDCD;
+               }
+               if (mswap & UART_MSR_DCD) {
+                       msignals &= ~UART_MSR_DCD;
+                       msignals |= UART_MSR_DSR;
+               }
+               if (mswap & UART_MSR_DSR) {
+                       msignals &= ~UART_MSR_DSR;
+                       msignals |= UART_MSR_DCD;
+               }
+       }
+       spin_unlock_irqrestore(&ch->ch_lock, flags);
+
+       /*
+        * Scrub off lower bits. They signify delta's, which I don't
+        * care about
+        */
+       signals &= 0xf0;
+
+       spin_lock_irqsave(&ch->ch_lock, flags);
+       if (msignals & UART_MSR_DCD)
+               ch->ch_mistat |= UART_MSR_DCD;
+       else
+               ch->ch_mistat &= ~UART_MSR_DCD;
+
+       if (msignals & UART_MSR_DSR)
+               ch->ch_mistat |= UART_MSR_DSR;
+       else
+               ch->ch_mistat &= ~UART_MSR_DSR;
+
+       if (msignals & UART_MSR_RI)
+               ch->ch_mistat |= UART_MSR_RI;
+       else
+               ch->ch_mistat &= ~UART_MSR_RI;
+
+       if (msignals & UART_MSR_CTS)
+               ch->ch_mistat |= UART_MSR_CTS;
+       else
+               ch->ch_mistat &= ~UART_MSR_CTS;
+       spin_unlock_irqrestore(&ch->ch_lock, flags);
+}
+
+/* Parse the ISR register for the specific port */
+static inline void cls_parse_isr(struct dgnc_board *brd, uint port)
+{
+       struct channel_t *ch;
+       unsigned char isr = 0;
+       unsigned long flags;
+
+       /*
+        * No need to verify board pointer, it was already
+        * verified in the interrupt routine.
+        */
+
+       if (port >= brd->nasync)
+               return;
+
+       ch = brd->channels[port];
+       if (ch->magic != DGNC_CHANNEL_MAGIC)
+               return;
+
+       /* Here we try to figure out what caused the interrupt to happen */
+       while (1) {
+               isr = readb(&ch->ch_cls_uart->isr_fcr);
+
+               /* Bail if no pending interrupt on port */
+               if (isr & UART_IIR_NO_INT)
+                       break;
+
+               /* Receive Interrupt pending */
+               if (isr & (UART_IIR_RDI | UART_IIR_RDI_TIMEOUT)) {
+                       /* Read data from uart -> queue */
+                       cls_copy_data_from_uart_to_queue(ch);
+                       dgnc_check_queue_flow_control(ch);
+               }
+
+               /* Transmit Hold register empty pending */
+               if (isr & UART_IIR_THRI) {
+                       /* Transfer data (if any) from Write Queue -> UART. */
+                       spin_lock_irqsave(&ch->ch_lock, flags);
+                       ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
+                       spin_unlock_irqrestore(&ch->ch_lock, flags);
+                       cls_copy_data_from_queue_to_uart(ch);
+               }
+
+               /* Parse any modem signal changes */
+               cls_parse_modem(ch, readb(&ch->ch_cls_uart->msr));
+       }
+}
+
+/* Channel lock MUST be held before calling this function! */
+static void cls_flush_uart_write(struct channel_t *ch)
+{
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
+               return;
+
+       writeb((UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_XMIT),
+              &ch->ch_cls_uart->isr_fcr);
+       usleep_range(10, 20);
+
+       ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
+}
+
+/* Channel lock MUST be held before calling this function! */
+static void cls_flush_uart_read(struct channel_t *ch)
+{
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
+               return;
+
+       /*
+        * For complete POSIX compatibility, we should be purging the
+        * read FIFO in the UART here.
+        *
+        * However, clearing the read FIFO (UART_FCR_CLEAR_RCVR) also
+        * incorrectly flushes write data as well as just basically trashing the
+        * FIFO.
+        *
+        * Presumably, this is a bug in this UART.
+        */
+
+       udelay(10);
+}
+
+/*
+ * cls_param()
+ * Send any/all changes to the line to the UART.
+ */
+static void cls_param(struct tty_struct *tty)
+{
+       unsigned char lcr = 0;
+       unsigned char uart_lcr = 0;
+       unsigned char ier = 0;
+       unsigned char uart_ier = 0;
+       uint baud = 9600;
+       int quot = 0;
+       struct dgnc_board *bd;
+       struct channel_t *ch;
+       struct un_t   *un;
+
+       if (!tty || tty->magic != TTY_MAGIC)
+               return;
+
+       un = (struct un_t *)tty->driver_data;
+       if (!un || un->magic != DGNC_UNIT_MAGIC)
+               return;
+
+       ch = un->un_ch;
+       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
+               return;
+
+       bd = ch->ch_bd;
+       if (!bd || bd->magic != DGNC_BOARD_MAGIC)
+               return;
+
+       /*
+        * If baud rate is zero, flush queues, and set mval to drop DTR.
+        */
+       if ((ch->ch_c_cflag & (CBAUD)) == 0) {
+               ch->ch_r_head = 0;
+               ch->ch_r_tail = 0;
+               ch->ch_e_head = 0;
+               ch->ch_e_tail = 0;
+               ch->ch_w_head = 0;
+               ch->ch_w_tail = 0;
+
+               cls_flush_uart_write(ch);
+               cls_flush_uart_read(ch);
+
+               /* The baudrate is B0 so all modem lines are to be dropped. */
+               ch->ch_flags |= (CH_BAUD0);
+               ch->ch_mostat &= ~(UART_MCR_RTS | UART_MCR_DTR);
+               cls_assert_modem_signals(ch);
+               ch->ch_old_baud = 0;
+               return;
+       } else if (ch->ch_custom_speed) {
+               baud = ch->ch_custom_speed;
+               /* Handle transition from B0 */
+               if (ch->ch_flags & CH_BAUD0) {
+                       ch->ch_flags &= ~(CH_BAUD0);
+
+                       /*
+                        * Bring back up RTS and DTR...
+                        * Also handle RTS or DTR toggle if set.
+                        */
+                       if (!(ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE))
+                               ch->ch_mostat |= (UART_MCR_RTS);
+                       if (!(ch->ch_digi.digi_flags & DIGI_DTR_TOGGLE))
+                               ch->ch_mostat |= (UART_MCR_DTR);
+               }
+
+       } else {
+               int iindex = 0;
+               int jindex = 0;
+
+               ulong bauds[4][16] = {
+                       { /* slowbaud */
+                               0,      50,     75,     110,
+                               134,    150,    200,    300,
+                               600,    1200,   1800,   2400,
+                               4800,   9600,   19200,  38400 },
+                       { /* slowbaud & CBAUDEX */
+                               0,      57600,  115200, 230400,
+                               460800, 150,    200,    921600,
+                               600,    1200,   1800,   2400,
+                               4800,   9600,   19200,  38400 },
+                       { /* fastbaud */
+                               0,      57600,   76800, 115200,
+                               131657, 153600, 230400, 460800,
+                               921600, 1200,   1800,   2400,
+                               4800,   9600,   19200,  38400 },
+                       { /* fastbaud & CBAUDEX */
+                               0,      57600,  115200, 230400,
+                               460800, 150,    200,    921600,
+                               600,    1200,   1800,   2400,
+                               4800,   9600,   19200,  38400 }
+               };
+
+               /*
+                * Only use the TXPrint baud rate if the terminal
+                * unit is NOT open
+                */
+               if (!(ch->ch_tun.un_flags & UN_ISOPEN) &&
+                   (un->un_type == DGNC_PRINT))
+                       baud = C_BAUD(ch->ch_pun.un_tty) & 0xff;
+               else
+                       baud = C_BAUD(ch->ch_tun.un_tty) & 0xff;
+
+               if (ch->ch_c_cflag & CBAUDEX)
+                       iindex = 1;
+
+               if (ch->ch_digi.digi_flags & DIGI_FAST)
+                       iindex += 2;
+
+               jindex = baud;
 
                if ((iindex >= 0) && (iindex < 4) && (jindex >= 0) &&
                    (jindex < 16)) {
@@ -760,135 +976,46 @@ static irqreturn_t cls_intr(int irq, void *voidbrd)
 
        spin_lock_irqsave(&brd->bd_intr_lock, flags);
 
-       brd->intr_count++;
-
-       /*
-        * Check the board's global interrupt offset to see if we
-        * we actually do have an interrupt pending for us.
-        */
-       poll_reg = readb(brd->re_map_membase + UART_CLASSIC_POLL_ADDR_OFFSET);
-
-       /* If 0, no interrupts pending */
-       if (!poll_reg) {
-               spin_unlock_irqrestore(&brd->bd_intr_lock, flags);
-               return IRQ_NONE;
-       }
-
-       /* Parse each port to find out what caused the interrupt */
-       for (i = 0; i < brd->nasync; i++)
-               cls_parse_isr(brd, i);
-
-       /*
-        * Schedule tasklet to more in-depth servicing at a better time.
-        */
-       tasklet_schedule(&brd->helper_tasklet);
-
-       spin_unlock_irqrestore(&brd->bd_intr_lock, flags);
-
-       return IRQ_HANDLED;
-}
-
-static void cls_disable_receiver(struct channel_t *ch)
-{
-       unsigned char tmp = readb(&ch->ch_cls_uart->ier);
-
-       tmp &= ~(UART_IER_RDI);
-       writeb(tmp, &ch->ch_cls_uart->ier);
-}
-
-static void cls_enable_receiver(struct channel_t *ch)
-{
-       unsigned char tmp = readb(&ch->ch_cls_uart->ier);
-
-       tmp |= (UART_IER_RDI);
-       writeb(tmp, &ch->ch_cls_uart->ier);
-}
-
-static void cls_copy_data_from_uart_to_queue(struct channel_t *ch)
-{
-       int qleft = 0;
-       unsigned char linestatus = 0;
-       unsigned char error_mask = 0;
-       ushort head;
-       ushort tail;
-       unsigned long flags;
-
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       spin_lock_irqsave(&ch->ch_lock, flags);
-
-       /* cache head and tail of queue */
-       head = ch->ch_r_head;
-       tail = ch->ch_r_tail;
-
-       /* Store how much space we have left in the queue */
-       qleft = tail - head - 1;
-       if (qleft < 0)
-               qleft += RQUEUEMASK + 1;
-
-       /*
-        * Create a mask to determine whether we should
-        * insert the character (if any) into our queue.
-        */
-       if (ch->ch_c_iflag & IGNBRK)
-               error_mask |= UART_LSR_BI;
-
-       while (1) {
-               linestatus = readb(&ch->ch_cls_uart->lsr);
-
-               if (!(linestatus & (UART_LSR_DR)))
-                       break;
-
-               /*
-                * Discard character if we are ignoring the error mask.
-               */
-               if (linestatus & error_mask)  {
-                       linestatus = 0;
-                       readb(&ch->ch_cls_uart->txrx);
-                       continue;
-               }
-
-               /*
-                * If our queue is full, we have no choice but to drop some
-                * data. The assumption is that HWFLOW or SWFLOW should have
-                * stopped things way way before we got to this point.
-                *
-                * I decided that I wanted to ditch the oldest data first,
-                * I hope thats okay with everyone? Yes? Good.
-                */
-               while (qleft < 1) {
-                       tail = (tail + 1) & RQUEUEMASK;
-                       ch->ch_r_tail = tail;
-                       ch->ch_err_overrun++;
-                       qleft++;
-               }
-
-               ch->ch_equeue[head] = linestatus & (UART_LSR_BI | UART_LSR_PE
-                                                                | UART_LSR_FE);
-               ch->ch_rqueue[head] = readb(&ch->ch_cls_uart->txrx);
-
-               qleft--;
-
-               if (ch->ch_equeue[head] & UART_LSR_PE)
-                       ch->ch_err_parity++;
-               if (ch->ch_equeue[head] & UART_LSR_BI)
-                       ch->ch_err_break++;
-               if (ch->ch_equeue[head] & UART_LSR_FE)
-                       ch->ch_err_frame++;
-
-               /* Add to, and flip head if needed */
-               head = (head + 1) & RQUEUEMASK;
-               ch->ch_rxcount++;
+       /*
+        * Check the board's global interrupt offset to see if we
+        * we actually do have an interrupt pending for us.
+        */
+       poll_reg = readb(brd->re_map_membase + UART_CLASSIC_POLL_ADDR_OFFSET);
+
+       /* If 0, no interrupts pending */
+       if (!poll_reg) {
+               spin_unlock_irqrestore(&brd->bd_intr_lock, flags);
+               return IRQ_NONE;
        }
 
+       /* Parse each port to find out what caused the interrupt */
+       for (i = 0; i < brd->nasync; i++)
+               cls_parse_isr(brd, i);
+
        /*
-        * Write new final heads to channel structure.
+        * Schedule tasklet to more in-depth servicing at a better time.
         */
-       ch->ch_r_head = head & RQUEUEMASK;
-       ch->ch_e_head = head & EQUEUEMASK;
+       tasklet_schedule(&brd->helper_tasklet);
 
-       spin_unlock_irqrestore(&ch->ch_lock, flags);
+       spin_unlock_irqrestore(&brd->bd_intr_lock, flags);
+
+       return IRQ_HANDLED;
+}
+
+static void cls_disable_receiver(struct channel_t *ch)
+{
+       unsigned char tmp = readb(&ch->ch_cls_uart->ier);
+
+       tmp &= ~(UART_IER_RDI);
+       writeb(tmp, &ch->ch_cls_uart->ier);
+}
+
+static void cls_enable_receiver(struct channel_t *ch)
+{
+       unsigned char tmp = readb(&ch->ch_cls_uart->ier);
+
+       tmp |= (UART_IER_RDI);
+       writeb(tmp, &ch->ch_cls_uart->ier);
 }
 
 /*
@@ -926,199 +1053,6 @@ static int cls_drain(struct tty_struct *tty, uint seconds)
                                         ((un->un_flags & UN_EMPTY) == 0));
 }
 
-/* Channel lock MUST be held before calling this function! */
-static void cls_flush_uart_write(struct channel_t *ch)
-{
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       writeb((UART_FCR_ENABLE_FIFO | UART_FCR_CLEAR_XMIT),
-              &ch->ch_cls_uart->isr_fcr);
-       usleep_range(10, 20);
-
-       ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
-}
-
-/* Channel lock MUST be held before calling this function! */
-static void cls_flush_uart_read(struct channel_t *ch)
-{
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       /*
-        * For complete POSIX compatibility, we should be purging the
-        * read FIFO in the UART here.
-        *
-        * However, clearing the read FIFO (UART_FCR_CLEAR_RCVR) also
-        * incorrectly flushes write data as well as just basically trashing the
-        * FIFO.
-        *
-        * Presumably, this is a bug in this UART.
-        */
-
-       udelay(10);
-}
-
-static void cls_copy_data_from_queue_to_uart(struct channel_t *ch)
-{
-       ushort head;
-       ushort tail;
-       int n;
-       int qlen;
-       uint len_written = 0;
-       unsigned long flags;
-
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       spin_lock_irqsave(&ch->ch_lock, flags);
-
-       /* No data to write to the UART */
-       if (ch->ch_w_tail == ch->ch_w_head)
-               goto exit_unlock;
-
-       /* If port is "stopped", don't send any data to the UART */
-       if ((ch->ch_flags & CH_FORCED_STOP) ||
-           (ch->ch_flags & CH_BREAK_SENDING))
-               goto exit_unlock;
-
-       if (!(ch->ch_flags & (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM)))
-               goto exit_unlock;
-
-       n = 32;
-
-       /* cache head and tail of queue */
-       head = ch->ch_w_head & WQUEUEMASK;
-       tail = ch->ch_w_tail & WQUEUEMASK;
-       qlen = (head - tail) & WQUEUEMASK;
-
-       /* Find minimum of the FIFO space, versus queue length */
-       n = min(n, qlen);
-
-       while (n > 0) {
-               /*
-                * If RTS Toggle mode is on, turn on RTS now if not already set,
-                * and make sure we get an event when the data transfer has
-                * completed.
-                */
-               if (ch->ch_digi.digi_flags & DIGI_RTS_TOGGLE) {
-                       if (!(ch->ch_mostat & UART_MCR_RTS)) {
-                               ch->ch_mostat |= (UART_MCR_RTS);
-                               cls_assert_modem_signals(ch);
-                       }
-                       ch->ch_tun.un_flags |= (UN_EMPTY);
-               }
-
-               /*
-                * If DTR Toggle mode is on, turn on DTR now if not already set,
-                * and make sure we get an event when the data transfer has
-                * completed.
-                */
-               if (ch->ch_digi.digi_flags & DIGI_DTR_TOGGLE) {
-                       if (!(ch->ch_mostat & UART_MCR_DTR)) {
-                               ch->ch_mostat |= (UART_MCR_DTR);
-                               cls_assert_modem_signals(ch);
-                       }
-                       ch->ch_tun.un_flags |= (UN_EMPTY);
-               }
-               writeb(ch->ch_wqueue[ch->ch_w_tail], &ch->ch_cls_uart->txrx);
-               ch->ch_w_tail++;
-               ch->ch_w_tail &= WQUEUEMASK;
-               ch->ch_txcount++;
-               len_written++;
-               n--;
-       }
-
-       if (len_written > 0)
-               ch->ch_flags &= ~(CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
-
-exit_unlock:
-       spin_unlock_irqrestore(&ch->ch_lock, flags);
-}
-
-static void cls_parse_modem(struct channel_t *ch, unsigned char signals)
-{
-       unsigned char msignals = signals;
-       unsigned long flags;
-
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       /*
-        * Do altpin switching. Altpin switches DCD and DSR.
-        * This prolly breaks DSRPACE, so we should be more clever here.
-        */
-       spin_lock_irqsave(&ch->ch_lock, flags);
-       if (ch->ch_digi.digi_flags & DIGI_ALTPIN) {
-               unsigned char mswap = signals;
-
-               if (mswap & UART_MSR_DDCD) {
-                       msignals &= ~UART_MSR_DDCD;
-                       msignals |= UART_MSR_DDSR;
-               }
-               if (mswap & UART_MSR_DDSR) {
-                       msignals &= ~UART_MSR_DDSR;
-                       msignals |= UART_MSR_DDCD;
-               }
-               if (mswap & UART_MSR_DCD) {
-                       msignals &= ~UART_MSR_DCD;
-                       msignals |= UART_MSR_DSR;
-               }
-               if (mswap & UART_MSR_DSR) {
-                       msignals &= ~UART_MSR_DSR;
-                       msignals |= UART_MSR_DCD;
-               }
-       }
-       spin_unlock_irqrestore(&ch->ch_lock, flags);
-
-       /*
-        * Scrub off lower bits. They signify delta's, which I don't
-        * care about
-        */
-       signals &= 0xf0;
-
-       spin_lock_irqsave(&ch->ch_lock, flags);
-       if (msignals & UART_MSR_DCD)
-               ch->ch_mistat |= UART_MSR_DCD;
-       else
-               ch->ch_mistat &= ~UART_MSR_DCD;
-
-       if (msignals & UART_MSR_DSR)
-               ch->ch_mistat |= UART_MSR_DSR;
-       else
-               ch->ch_mistat &= ~UART_MSR_DSR;
-
-       if (msignals & UART_MSR_RI)
-               ch->ch_mistat |= UART_MSR_RI;
-       else
-               ch->ch_mistat &= ~UART_MSR_RI;
-
-       if (msignals & UART_MSR_CTS)
-               ch->ch_mistat |= UART_MSR_CTS;
-       else
-               ch->ch_mistat &= ~UART_MSR_CTS;
-       spin_unlock_irqrestore(&ch->ch_lock, flags);
-}
-
-/* Make the UART raise any of the output signals we want up */
-static void cls_assert_modem_signals(struct channel_t *ch)
-{
-       unsigned char out;
-
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return;
-
-       out = ch->ch_mostat;
-
-       if (ch->ch_flags & CH_LOOPBACK)
-               out |= UART_MCR_LOOP;
-
-       writeb(out, &ch->ch_cls_uart->mcr);
-
-       /* Give time for the UART to actually drop the signals */
-       udelay(10);
-}
-
 static void cls_send_start_character(struct channel_t *ch)
 {
        if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
@@ -1298,3 +1232,24 @@ static void cls_vpd(struct dgnc_board *brd)
 
        iounmap(re_map_vpdbase);
 }
+
+struct board_ops dgnc_cls_ops = {
+       .tasklet =                      cls_tasklet,
+       .intr =                         cls_intr,
+       .uart_init =                    cls_uart_init,
+       .uart_off =                     cls_uart_off,
+       .drain =                        cls_drain,
+       .param =                        cls_param,
+       .vpd =                          cls_vpd,
+       .assert_modem_signals =         cls_assert_modem_signals,
+       .flush_uart_write =             cls_flush_uart_write,
+       .flush_uart_read =              cls_flush_uart_read,
+       .disable_receiver =             cls_disable_receiver,
+       .enable_receiver =              cls_enable_receiver,
+       .send_break =                   cls_send_break,
+       .send_start_character =         cls_send_start_character,
+       .send_stop_character =          cls_send_stop_character,
+       .copy_data_from_queue_to_uart = cls_copy_data_from_queue_to_uart,
+       .get_uart_bytes_left =          cls_get_uart_bytes_left,
+       .send_immediate_char =          cls_send_immediate_char
+};
index af2e835efa1b10e5e69852ee68f51cae02a20833..01e948cabcb29a6bd76da86c879080d134defd56 100644 (file)
@@ -158,7 +158,7 @@ static void cleanup(bool sysfiles)
  *
  * Module unload.  This is where it all ends.
  */
-static void dgnc_cleanup_module(void)
+static void __exit dgnc_cleanup_module(void)
 {
        cleanup(true);
        pci_unregister_driver(&dgnc_driver);
@@ -579,9 +579,6 @@ static int dgnc_finalize_board_init(struct dgnc_board *brd)
 {
        int rc = 0;
 
-       if (!brd || brd->magic != DGNC_BOARD_MAGIC)
-               return -ENODEV;
-
        if (brd->irq) {
                rc = request_irq(brd->irq, brd->bd_ops->intr,
                                 IRQF_SHARED, "DGNC", brd);
@@ -602,37 +599,34 @@ static int dgnc_finalize_board_init(struct dgnc_board *brd)
  */
 static void dgnc_do_remap(struct dgnc_board *brd)
 {
-       if (!brd || brd->magic != DGNC_BOARD_MAGIC)
-               return;
-
        brd->re_map_membase = ioremap(brd->membase, 0x1000);
 }
 
-/*****************************************************************************
-*
-* Function:
-*
-*    dgnc_poll_handler
-*
-* Author:
-*
-*    Scott H Kilau
-*
-* Parameters:
-*
-*    dummy -- ignored
-*
-* Return Values:
-*
-*    none
-*
-* Description:
-*
-*    As each timer expires, it determines (a) whether the "transmit"
-*    waiter needs to be woken up, and (b) whether the poller needs to
-*    be rescheduled.
-*
-******************************************************************************/
+/*
+ *
+ * Function:
+ *
+ *    dgnc_poll_handler
+ *
+ * Author:
+ *
+ *    Scott H Kilau
+ *
+ * Parameters:
+ *
+ *    dummy -- ignored
+ *
+ * Return Values:
+ *
+ *    none
+ *
+ * Description:
+ *
+ *    As each timer expires, it determines (a) whether the "transmit"
+ *    waiter needs to be woken up, and (b) whether the poller needs to
+ *    be rescheduled.
+ *
+ */
 
 static void dgnc_poll_handler(ulong dummy)
 {
index 95ec729fae38f0be821943c774f5cadae1747da5..88d2696b8616120864ddea72acc4a875b4d494c6 100644 (file)
@@ -183,10 +183,6 @@ struct dgnc_board {
        uint            nasync;         /* Number of ports on card */
 
        uint            irq;            /* Interrupt request number */
-       ulong           intr_count;     /* Count of interrupts */
-       ulong           intr_modem;     /* Count of interrupts */
-       ulong           intr_tx;        /* Count of interrupts */
-       ulong           intr_rx;        /* Count of interrupts */
 
        ulong           membase;        /* Start of base memory of the card */
        ulong           membase_end;    /* End of base memory of the card */
@@ -381,10 +377,6 @@ struct channel_t {
        ulong           ch_xon_sends;   /* Count of xons transmitted */
        ulong           ch_xoff_sends;  /* Count of xoffs transmitted */
 
-       ulong           ch_intr_modem;  /* Count of interrupts */
-       ulong           ch_intr_tx;     /* Count of interrupts */
-       ulong           ch_intr_rx;     /* Count of interrupts */
-
        /* /proc/<board>/<channel> entries */
        struct proc_dir_entry *proc_entry_pointer;
        struct dgnc_proc_entry *dgnc_channel_table;
@@ -398,7 +390,7 @@ extern uint         dgnc_major;             /* Our driver/mgmt major */
 extern int             dgnc_poll_tick;         /* Poll interval - 20 ms */
 extern spinlock_t      dgnc_global_lock;       /* Driver global spinlock */
 extern spinlock_t      dgnc_poll_lock;         /* Poll scheduling lock */
-extern uint            dgnc_num_boards;                /* Total number of boards */
+extern uint            dgnc_num_boards;        /* Total number of boards */
 extern struct dgnc_board       *dgnc_board[MAXBOARDS]; /* Array of board
                                                         * structs
                                                         */
index ba57e9546f72f0bf634bb4392c349e4f58a37aef..5ef5b3e45387d09ed48ea7827aeb5a72a069b203 100644 (file)
@@ -399,8 +399,6 @@ static inline void neo_parse_isr(struct dgnc_board *brd, uint port)
 
                if (isr & (UART_17158_IIR_RDI_TIMEOUT | UART_IIR_RDI)) {
                        /* Read data from uart -> queue */
-                       brd->intr_rx++;
-                       ch->ch_intr_rx++;
                        neo_copy_data_from_uart_to_queue(ch);
 
                        /* Call our tty layer to enforce queue flow control if needed. */
@@ -410,8 +408,6 @@ static inline void neo_parse_isr(struct dgnc_board *brd, uint port)
                }
 
                if (isr & UART_IIR_THRI) {
-                       brd->intr_tx++;
-                       ch->ch_intr_tx++;
                        /* Transfer data (if any) from Write Queue -> UART. */
                        spin_lock_irqsave(&ch->ch_lock, flags);
                        ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
@@ -452,8 +448,6 @@ static inline void neo_parse_isr(struct dgnc_board *brd, uint port)
                         * If we get here, this means the hardware is doing auto flow control.
                         * Check to see whether RTS/DTR or CTS/DSR caused this interrupt.
                         */
-                       brd->intr_modem++;
-                       ch->ch_intr_modem++;
                        cause = readb(&ch->ch_neo_uart->mcr);
                        /* Which pin is doing auto flow? RTS or DTR? */
                        if ((cause & 0x4) == 0) {
@@ -517,8 +511,6 @@ static inline void neo_parse_lsr(struct dgnc_board *brd, uint port)
        ch->ch_cached_lsr |= linestatus;
 
        if (ch->ch_cached_lsr & UART_LSR_DR) {
-               brd->intr_rx++;
-               ch->ch_intr_rx++;
                /* Read data from uart -> queue */
                neo_copy_data_from_uart_to_queue(ch);
                spin_lock_irqsave(&ch->ch_lock, flags);
@@ -551,8 +543,6 @@ static inline void neo_parse_lsr(struct dgnc_board *brd, uint port)
        }
 
        if (linestatus & UART_LSR_THRE) {
-               brd->intr_tx++;
-               ch->ch_intr_tx++;
                spin_lock_irqsave(&ch->ch_lock, flags);
                ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
                spin_unlock_irqrestore(&ch->ch_lock, flags);
@@ -560,8 +550,6 @@ static inline void neo_parse_lsr(struct dgnc_board *brd, uint port)
                /* Transfer data (if any) from Write Queue -> UART. */
                neo_copy_data_from_queue_to_uart(ch);
        } else if (linestatus & UART_17158_TX_AND_FIFO_CLR) {
-               brd->intr_tx++;
-               ch->ch_intr_tx++;
                spin_lock_irqsave(&ch->ch_lock, flags);
                ch->ch_flags |= (CH_TX_FIFO_EMPTY | CH_TX_FIFO_LWM);
                spin_unlock_irqrestore(&ch->ch_lock, flags);
@@ -926,8 +914,6 @@ static irqreturn_t neo_intr(int irq, void *voidbrd)
        if (!brd || brd->magic != DGNC_BOARD_MAGIC)
                return IRQ_NONE;
 
-       brd->intr_count++;
-
        /* Lock out the slow poller from running on this board. */
        spin_lock_irqsave(&brd->bd_intr_lock, flags);
 
index b8d41c5617e264da33da9668264244edeca6f943..a83e0e4ea75f34cf7fa3a097340b7d03396577e9 100644 (file)
 #include "dgnc_driver.h"
 #include "dgnc_mgmt.h"
 
-static ssize_t dgnc_driver_version_show(struct device_driver *ddp, char *buf)
+static ssize_t version_show(struct device_driver *ddp, char *buf)
 {
        return snprintf(buf, PAGE_SIZE, "%s\n", DG_PART);
 }
-static DRIVER_ATTR(version, S_IRUSR, dgnc_driver_version_show, NULL);
+static DRIVER_ATTR_RO(version);
 
-static ssize_t dgnc_driver_boards_show(struct device_driver *ddp, char *buf)
+static ssize_t boards_show(struct device_driver *ddp, char *buf)
 {
        return snprintf(buf, PAGE_SIZE, "%d\n", dgnc_num_boards);
 }
-static DRIVER_ATTR(boards, S_IRUSR, dgnc_driver_boards_show, NULL);
+static DRIVER_ATTR_RO(boards);
 
-static ssize_t dgnc_driver_maxboards_show(struct device_driver *ddp, char *buf)
+static ssize_t maxboards_show(struct device_driver *ddp, char *buf)
 {
        return snprintf(buf, PAGE_SIZE, "%d\n", MAXBOARDS);
 }
-static DRIVER_ATTR(maxboards, S_IRUSR, dgnc_driver_maxboards_show, NULL);
+static DRIVER_ATTR_RO(maxboards);
 
-static ssize_t dgnc_driver_pollrate_show(struct device_driver *ddp, char *buf)
+static ssize_t pollrate_show(struct device_driver *ddp, char *buf)
 {
        return snprintf(buf, PAGE_SIZE, "%dms\n", dgnc_poll_tick);
 }
 
-static ssize_t dgnc_driver_pollrate_store(struct device_driver *ddp,
-                                         const char *buf, size_t count)
+static ssize_t pollrate_store(struct device_driver *ddp,
+                             const char *buf, size_t count)
 {
        unsigned long flags;
        int tick;
@@ -65,8 +65,7 @@ static ssize_t dgnc_driver_pollrate_store(struct device_driver *ddp,
 
        return count;
 }
-static DRIVER_ATTR(pollrate, (S_IRUSR | S_IWUSR), dgnc_driver_pollrate_show,
-                  dgnc_driver_pollrate_store);
+static DRIVER_ATTR_RW(pollrate);
 
 void dgnc_create_driver_sysfiles(struct pci_driver *dgnc_driver)
 {
@@ -103,8 +102,8 @@ void dgnc_remove_driver_sysfiles(struct pci_driver *dgnc_driver)
                        return 0;                               \
        } while (0)
 
-static ssize_t dgnc_vpd_show(struct device *p, struct device_attribute *attr,
-                            char *buf)
+static ssize_t vpd_show(struct device *p, struct device_attribute *attr,
+                       char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -123,10 +122,10 @@ static ssize_t dgnc_vpd_show(struct device *p, struct device_attribute *attr,
 
        return count;
 }
-static DEVICE_ATTR(vpd, S_IRUSR, dgnc_vpd_show, NULL);
+static DEVICE_ATTR_RO(vpd);
 
-static ssize_t dgnc_serial_number_show(struct device *p,
-                                      struct device_attribute *attr, char *buf)
+static ssize_t serial_number_show(struct device *p,
+                                 struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -140,10 +139,10 @@ static ssize_t dgnc_serial_number_show(struct device *p,
 
        return count;
 }
-static DEVICE_ATTR(serial_number, S_IRUSR, dgnc_serial_number_show, NULL);
+static DEVICE_ATTR_RO(serial_number);
 
-static ssize_t dgnc_ports_state_show(struct device *p,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t ports_state_show(struct device *p,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -158,10 +157,10 @@ static ssize_t dgnc_ports_state_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_state, S_IRUSR, dgnc_ports_state_show, NULL);
+static DEVICE_ATTR_RO(ports_state);
 
-static ssize_t dgnc_ports_baud_show(struct device *p,
-                                   struct device_attribute *attr, char *buf)
+static ssize_t ports_baud_show(struct device *p,
+                              struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -176,11 +175,10 @@ static ssize_t dgnc_ports_baud_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_baud, S_IRUSR, dgnc_ports_baud_show, NULL);
+static DEVICE_ATTR_RO(ports_baud);
 
-static ssize_t dgnc_ports_msignals_show(struct device *p,
-                                       struct device_attribute *attr,
-                                       char *buf)
+static ssize_t ports_msignals_show(struct device *p,
+                                  struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -208,10 +206,10 @@ static ssize_t dgnc_ports_msignals_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_msignals, S_IRUSR, dgnc_ports_msignals_show, NULL);
+static DEVICE_ATTR_RO(ports_msignals);
 
-static ssize_t dgnc_ports_iflag_show(struct device *p,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t ports_iflag_show(struct device *p,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -226,10 +224,10 @@ static ssize_t dgnc_ports_iflag_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_iflag, S_IRUSR, dgnc_ports_iflag_show, NULL);
+static DEVICE_ATTR_RO(ports_iflag);
 
-static ssize_t dgnc_ports_cflag_show(struct device *p,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t ports_cflag_show(struct device *p,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -244,10 +242,10 @@ static ssize_t dgnc_ports_cflag_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_cflag, S_IRUSR, dgnc_ports_cflag_show, NULL);
+static DEVICE_ATTR_RO(ports_cflag);
 
-static ssize_t dgnc_ports_oflag_show(struct device *p,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t ports_oflag_show(struct device *p,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -262,10 +260,10 @@ static ssize_t dgnc_ports_oflag_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_oflag, S_IRUSR, dgnc_ports_oflag_show, NULL);
+static DEVICE_ATTR_RO(ports_oflag);
 
-static ssize_t dgnc_ports_lflag_show(struct device *p,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t ports_lflag_show(struct device *p,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -280,11 +278,10 @@ static ssize_t dgnc_ports_lflag_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_lflag, S_IRUSR, dgnc_ports_lflag_show, NULL);
+static DEVICE_ATTR_RO(ports_lflag);
 
-static ssize_t dgnc_ports_digi_flag_show(struct device *p,
-                                        struct device_attribute *attr,
-                                        char *buf)
+static ssize_t ports_digi_flag_show(struct device *p,
+                                   struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -299,10 +296,10 @@ static ssize_t dgnc_ports_digi_flag_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_digi_flag, S_IRUSR, dgnc_ports_digi_flag_show, NULL);
+static DEVICE_ATTR_RO(ports_digi_flag);
 
-static ssize_t dgnc_ports_rxcount_show(struct device *p,
-                                      struct device_attribute *attr, char *buf)
+static ssize_t ports_rxcount_show(struct device *p,
+                                 struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -317,10 +314,10 @@ static ssize_t dgnc_ports_rxcount_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_rxcount, S_IRUSR, dgnc_ports_rxcount_show, NULL);
+static DEVICE_ATTR_RO(ports_rxcount);
 
-static ssize_t dgnc_ports_txcount_show(struct device *p,
-                                      struct device_attribute *attr, char *buf)
+static ssize_t ports_txcount_show(struct device *p,
+                                 struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        int count = 0;
@@ -335,7 +332,7 @@ static ssize_t dgnc_ports_txcount_show(struct device *p,
        }
        return count;
 }
-static DEVICE_ATTR(ports_txcount, S_IRUSR, dgnc_ports_txcount_show, NULL);
+static DEVICE_ATTR_RO(ports_txcount);
 
 /* this function creates the sys files that will export each signal status
  * to sysfs each value will be put in a separate filename
@@ -378,8 +375,8 @@ void dgnc_remove_ports_sysfiles(struct dgnc_board *bd)
        device_remove_file(&bd->pdev->dev, &dev_attr_serial_number);
 }
 
-static ssize_t dgnc_tty_state_show(struct device *d,
-                                  struct device_attribute *attr, char *buf)
+static ssize_t tty_state_show(struct device *d,
+                             struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -402,10 +399,10 @@ static ssize_t dgnc_tty_state_show(struct device *d,
        return snprintf(buf, PAGE_SIZE, "%s",
                        un->un_open_count ? "Open" : "Closed");
 }
-static DEVICE_ATTR(state, S_IRUSR, dgnc_tty_state_show, NULL);
+static DEVICE_ATTR_RO(tty_state);
 
-static ssize_t dgnc_tty_baud_show(struct device *d,
-                                 struct device_attribute *attr, char *buf)
+static ssize_t tty_baud_show(struct device *d,
+                            struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -427,10 +424,10 @@ static ssize_t dgnc_tty_baud_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%d\n", ch->ch_old_baud);
 }
-static DEVICE_ATTR(baud, S_IRUSR, dgnc_tty_baud_show, NULL);
+static DEVICE_ATTR_RO(tty_baud);
 
-static ssize_t dgnc_tty_msignals_show(struct device *d,
-                                     struct device_attribute *attr, char *buf)
+static ssize_t tty_msignals_show(struct device *d,
+                                struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -461,10 +458,10 @@ static ssize_t dgnc_tty_msignals_show(struct device *d,
        }
        return 0;
 }
-static DEVICE_ATTR(msignals, S_IRUSR, dgnc_tty_msignals_show, NULL);
+static DEVICE_ATTR_RO(tty_msignals);
 
-static ssize_t dgnc_tty_iflag_show(struct device *d,
-                                  struct device_attribute *attr, char *buf)
+static ssize_t tty_iflag_show(struct device *d,
+                             struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -486,10 +483,10 @@ static ssize_t dgnc_tty_iflag_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_c_iflag);
 }
-static DEVICE_ATTR(iflag, S_IRUSR, dgnc_tty_iflag_show, NULL);
+static DEVICE_ATTR_RO(tty_iflag);
 
-static ssize_t dgnc_tty_cflag_show(struct device *d,
-                                  struct device_attribute *attr, char *buf)
+static ssize_t tty_cflag_show(struct device *d,
+                             struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -511,10 +508,10 @@ static ssize_t dgnc_tty_cflag_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_c_cflag);
 }
-static DEVICE_ATTR(cflag, S_IRUSR, dgnc_tty_cflag_show, NULL);
+static DEVICE_ATTR_RO(tty_cflag);
 
-static ssize_t dgnc_tty_oflag_show(struct device *d,
-                                  struct device_attribute *attr, char *buf)
+static ssize_t tty_oflag_show(struct device *d,
+                             struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -536,10 +533,10 @@ static ssize_t dgnc_tty_oflag_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_c_oflag);
 }
-static DEVICE_ATTR(oflag, S_IRUSR, dgnc_tty_oflag_show, NULL);
+static DEVICE_ATTR_RO(tty_oflag);
 
-static ssize_t dgnc_tty_lflag_show(struct device *d,
-                                  struct device_attribute *attr, char *buf)
+static ssize_t tty_lflag_show(struct device *d,
+                             struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -561,10 +558,10 @@ static ssize_t dgnc_tty_lflag_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_c_lflag);
 }
-static DEVICE_ATTR(lflag, S_IRUSR, dgnc_tty_lflag_show, NULL);
+static DEVICE_ATTR_RO(tty_lflag);
 
-static ssize_t dgnc_tty_digi_flag_show(struct device *d,
-                                      struct device_attribute *attr, char *buf)
+static ssize_t tty_digi_flag_show(struct device *d,
+                                 struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -586,10 +583,10 @@ static ssize_t dgnc_tty_digi_flag_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%x\n", ch->ch_digi.digi_flags);
 }
-static DEVICE_ATTR(digi_flag, S_IRUSR, dgnc_tty_digi_flag_show, NULL);
+static DEVICE_ATTR_RO(tty_digi_flag);
 
-static ssize_t dgnc_tty_rxcount_show(struct device *d,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t tty_rxcount_show(struct device *d,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -611,10 +608,10 @@ static ssize_t dgnc_tty_rxcount_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%ld\n", ch->ch_rxcount);
 }
-static DEVICE_ATTR(rxcount, S_IRUSR, dgnc_tty_rxcount_show, NULL);
+static DEVICE_ATTR_RO(tty_rxcount);
 
-static ssize_t dgnc_tty_txcount_show(struct device *d,
-                                    struct device_attribute *attr, char *buf)
+static ssize_t tty_txcount_show(struct device *d,
+                               struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -636,10 +633,10 @@ static ssize_t dgnc_tty_txcount_show(struct device *d,
 
        return snprintf(buf, PAGE_SIZE, "%ld\n", ch->ch_txcount);
 }
-static DEVICE_ATTR(txcount, S_IRUSR, dgnc_tty_txcount_show, NULL);
+static DEVICE_ATTR_RO(tty_txcount);
 
-static ssize_t dgnc_tty_name_show(struct device *d,
-                                 struct device_attribute *attr, char *buf)
+static ssize_t tty_custom_name_show(struct device *d,
+                                   struct device_attribute *attr, char *buf)
 {
        struct dgnc_board *bd;
        struct channel_t *ch;
@@ -663,20 +660,20 @@ static ssize_t dgnc_tty_name_show(struct device *d,
                (un->un_type == DGNC_PRINT) ? "pr" : "tty",
                bd->boardnum + 1, 'a' + ch->ch_portnum);
 }
-static DEVICE_ATTR(custom_name, S_IRUSR, dgnc_tty_name_show, NULL);
+static DEVICE_ATTR_RO(tty_custom_name);
 
 static struct attribute *dgnc_sysfs_tty_entries[] = {
-       &dev_attr_state.attr,
-       &dev_attr_baud.attr,
-       &dev_attr_msignals.attr,
-       &dev_attr_iflag.attr,
-       &dev_attr_cflag.attr,
-       &dev_attr_oflag.attr,
-       &dev_attr_lflag.attr,
-       &dev_attr_digi_flag.attr,
-       &dev_attr_rxcount.attr,
-       &dev_attr_txcount.attr,
-       &dev_attr_custom_name.attr,
+       &dev_attr_tty_state.attr,
+       &dev_attr_tty_baud.attr,
+       &dev_attr_tty_msignals.attr,
+       &dev_attr_tty_iflag.attr,
+       &dev_attr_tty_cflag.attr,
+       &dev_attr_tty_oflag.attr,
+       &dev_attr_tty_lflag.attr,
+       &dev_attr_tty_digi_flag.attr,
+       &dev_attr_tty_rxcount.attr,
+       &dev_attr_tty_txcount.attr,
+       &dev_attr_tty_custom_name.attr,
        NULL
 };
 
index 4eeecc992a02e3e60492d807f082e6e304fe5877..31b18e6a328e6ad803fbf7684c117d5237746e38 100644 (file)
@@ -100,7 +100,7 @@ static void dgnc_tty_unthrottle(struct tty_struct *tty);
 static void dgnc_tty_flush_chars(struct tty_struct *tty);
 static void dgnc_tty_flush_buffer(struct tty_struct *tty);
 static void dgnc_tty_hangup(struct tty_struct *tty);
-static int dgnc_set_modem_info(struct tty_struct *tty, unsigned int command,
+static int dgnc_set_modem_info(struct channel_t *ch, unsigned int command,
                               unsigned int __user *value);
 static int dgnc_get_modem_info(struct channel_t *ch,
                               unsigned int __user *value);
@@ -640,19 +640,12 @@ exit_unlock:
  ************************************************************************/
 void dgnc_carrier(struct channel_t *ch)
 {
-       struct dgnc_board *bd;
-
        int virt_carrier = 0;
        int phys_carrier = 0;
 
        if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
                return;
 
-       bd = ch->ch_bd;
-
-       if (!bd || bd->magic != DGNC_BOARD_MAGIC)
-               return;
-
        if (ch->ch_mistat & UART_MSR_DCD)
                phys_carrier = 1;
 
@@ -1172,17 +1165,12 @@ static int dgnc_block_til_ready(struct tty_struct *tty,
                                struct channel_t *ch)
 {
        int retval = 0;
-       struct un_t *un = NULL;
+       struct un_t *un = tty->driver_data;
        unsigned long flags;
        uint    old_flags = 0;
        int     sleep_on_un_flags = 0;
 
-       if (!tty || tty->magic != TTY_MAGIC || !file || !ch ||
-           ch->magic != DGNC_CHANNEL_MAGIC)
-               return -ENXIO;
-
-       un = tty->driver_data;
-       if (!un || un->magic != DGNC_UNIT_MAGIC)
+       if (!file)
                return -ENXIO;
 
        spin_lock_irqsave(&ch->ch_lock, flags);
@@ -1301,15 +1289,9 @@ static int dgnc_block_til_ready(struct tty_struct *tty,
  */
 static void dgnc_tty_hangup(struct tty_struct *tty)
 {
-       struct un_t     *un;
-
        if (!tty || tty->magic != TTY_MAGIC)
                return;
 
-       un = tty->driver_data;
-       if (!un || un->magic != DGNC_UNIT_MAGIC)
-               return;
-
        /* flush the transmit queues */
        dgnc_tty_flush_buffer(tty);
 }
@@ -1510,18 +1492,8 @@ static int dgnc_tty_chars_in_buffer(struct tty_struct *tty)
  * returns the new bytes_available.  This only affects printer
  * output.
  */
-static int dgnc_maxcps_room(struct tty_struct *tty, int bytes_available)
+static int dgnc_maxcps_room(struct channel_t *ch, int bytes_available)
 {
-       struct un_t *un = tty->driver_data;
-       struct channel_t *ch = un->un_ch;
-
-       /*
-        * If its not the Transparent print device, return
-        * the full data amount.
-        */
-       if (un->un_type != DGNC_PRINT)
-               return bytes_available;
-
        if (ch->ch_digi.digi_maxcps > 0 && ch->ch_digi.digi_bufsize > 0) {
                int cps_limit = 0;
                unsigned long current_time = jiffies;
@@ -1585,7 +1557,8 @@ static int dgnc_tty_write_room(struct tty_struct *tty)
                ret += WQUEUESIZE;
 
        /* Limit printer to maxcps */
-       ret = dgnc_maxcps_room(tty, ret);
+       if (un->un_type != DGNC_PRINT)
+               ret = dgnc_maxcps_room(ch, ret);
 
        /*
         * If we are printer device, leave space for
@@ -1677,7 +1650,8 @@ static int dgnc_tty_write(struct tty_struct *tty,
         * Limit printer output to maxcps overall, with bursts allowed
         * up to bufsize characters.
         */
-       bufcount = dgnc_maxcps_room(tty, bufcount);
+       if (un->un_type != DGNC_PRINT)
+               bufcount = dgnc_maxcps_room(ch, bufcount);
 
        /*
         * Take minimum of what the user wants to send, and the
@@ -1984,7 +1958,7 @@ static void dgnc_tty_send_xchar(struct tty_struct *tty, char c)
 static inline int dgnc_get_mstat(struct channel_t *ch)
 {
        unsigned char mstat;
-       int result = -EIO;
+       int result = 0;
        unsigned long flags;
 
        if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
@@ -1996,8 +1970,6 @@ static inline int dgnc_get_mstat(struct channel_t *ch)
 
        spin_unlock_irqrestore(&ch->ch_lock, flags);
 
-       result = 0;
-
        if (mstat & UART_MCR_DTR)
                result |= TIOCM_DTR;
        if (mstat & UART_MCR_RTS)
@@ -2028,32 +2000,14 @@ static int dgnc_get_modem_info(struct channel_t *ch,
  *
  * Set modem signals, called by ld.
  */
-static int dgnc_set_modem_info(struct tty_struct *tty,
+static int dgnc_set_modem_info(struct channel_t *ch,
                               unsigned int command,
                               unsigned int __user *value)
 {
-       struct dgnc_board *bd;
-       struct channel_t *ch;
-       struct un_t *un;
        int ret = -ENXIO;
        unsigned int arg = 0;
        unsigned long flags;
 
-       if (!tty || tty->magic != TTY_MAGIC)
-               return ret;
-
-       un = tty->driver_data;
-       if (!un || un->magic != DGNC_UNIT_MAGIC)
-               return ret;
-
-       ch = un->un_ch;
-       if (!ch || ch->magic != DGNC_CHANNEL_MAGIC)
-               return ret;
-
-       bd = ch->ch_bd;
-       if (!bd || bd->magic != DGNC_BOARD_MAGIC)
-               return ret;
-
        ret = get_user(arg, value);
        if (ret)
                return ret;
@@ -2620,7 +2574,7 @@ static int dgnc_tty_ioctl(struct tty_struct *tty, unsigned int cmd,
        case TIOCMBIC:
        case TIOCMSET:
                spin_unlock_irqrestore(&ch->ch_lock, flags);
-               return dgnc_set_modem_info(tty, cmd, uarg);
+               return dgnc_set_modem_info(ch, cmd, uarg);
 
                /*
                 * Here are any additional ioctl's that we want to implement
index 3b56b2826263951fb8fbc19fafaf082426dbc9a0..f6233ec5a3a243f3beb20c5965de1393b1d3b2eb 100644 (file)
@@ -131,7 +131,6 @@ static void _nbu2ss_dump_register(struct nbu2ss_udc *udc)
                reg_data =  _nbu2ss_readl(
                        (u32 *)IO_ADDRESS(USB_BASE_ADDRESS + i + 12));
                dev_dbg(&udc->dev, " %08x\n", (int)reg_data);
-
        }
 
        spin_lock(&udc->lock);
@@ -2264,9 +2263,7 @@ static int _nbu2ss_enable_controller(struct nbu2ss_udc *udc)
        if (udc->udc_enabled)
                return 0;
 
-       /*
-               Reset
-       */
+       /* Reset */
        _nbu2ss_bitset(&udc->p_regs->EPCTR, (DIRPD | EPC_RST));
        udelay(EPC_RST_DISABLE_TIME);   /* 1us wait */
 
index 82b46cd27ca7689a772ee89da111eae8522d9509..7561385761e9f5635465da8066772d431d6838dd 100644 (file)
@@ -350,8 +350,8 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                                }
                }
 
-        /* 1 string = 2 pages */
-        for (y = addr_win.ys_page; y <= addr_win.ye_page; ++y) {
+       /* 1 string = 2 pages */
+       for (y = addr_win.ys_page; y <= addr_win.ye_page; ++y) {
                /* left half of display */
                if (addr_win.xs < par->info->var.xres / 2) {
                        construct_line_bitmap(par, buf, convert_buf,
index 6ff222d6d6d6bba246d9bda281d161288a7a4096..278e4c7e95e54ff73c5ca0b950fcb05681891e6e 100644 (file)
@@ -29,7 +29,7 @@
 #define DEFAULT_GAMMA  "07 07 6 0 0 0 5 5 4 0\n" \
                        "07 08 4 7 5 1 2 0 7 7"
 
-static unsigned read_devicecode(struct fbtft_par *par)
+static unsigned int read_devicecode(struct fbtft_par *par)
 {
        int ret;
        u8 rxbuf[8] = {0, };
@@ -41,7 +41,7 @@ static unsigned read_devicecode(struct fbtft_par *par)
 
 static int init_display(struct fbtft_par *par)
 {
-       unsigned devcode;
+       unsigned int devcode;
 
        par->fbtftops.reset(par);
 
index fdf98d37550ee3048ce9116f0186c601a80b3205..c31e2e051d4a063be3b14dcc118c0585b325ed70 100644 (file)
 #define DEFAULT_GAMMA  "0F 00 7 2 0 0 6 5 4 1\n" \
                        "04 16 2 7 6 3 2 1 7 7"
 
-static unsigned bt = 6; /* VGL=Vci*4 , VGH=Vci*4 */
+static unsigned int bt = 6; /* VGL=Vci*4 , VGH=Vci*4 */
 module_param(bt, uint, 0);
 MODULE_PARM_DESC(bt, "Sets the factor used in the step-up circuits");
 
-static unsigned vc = 0x03; /* Vci1=Vci*0.80 */
+static unsigned int vc = 0x03; /* Vci1=Vci*0.80 */
 module_param(vc, uint, 0);
 MODULE_PARM_DESC(vc,
 "Sets the ratio factor of Vci to generate the reference voltages Vci1");
 
-static unsigned vrh = 0x0d; /* VREG1OUT=Vci*1.85 */
+static unsigned int vrh = 0x0d; /* VREG1OUT=Vci*1.85 */
 module_param(vrh, uint, 0);
 MODULE_PARM_DESC(vrh,
 "Set the amplifying rate (1.6 ~ 1.9) of Vci applied to output the VREG1OUT");
 
-static unsigned vdv = 0x12; /* VCOMH amplitude=VREG1OUT*0.98 */
+static unsigned int vdv = 0x12; /* VCOMH amplitude=VREG1OUT*0.98 */
 module_param(vdv, uint, 0);
 MODULE_PARM_DESC(vdv,
 "Select the factor of VREG1OUT to set the amplitude of Vcom");
 
-static unsigned vcm = 0x0a; /* VCOMH=VREG1OUT*0.735 */
+static unsigned int vcm = 0x0a; /* VCOMH=VREG1OUT*0.735 */
 module_param(vcm, uint, 0);
 MODULE_PARM_DESC(vcm, "Set the internal VcomH voltage");
 
index a6b43323f29ac952d98c5812fd1e7cbb9b002ce7..a4710dc067ef12c097c506d1b021be86df89c513 100644 (file)
 #define TXBUFLEN       (84 * 6)
 #define DEFAULT_GAMMA  "40" /* gamma controls the contrast in this driver */
 
-static unsigned tc;
+static unsigned int tc;
 module_param(tc, uint, 0);
 MODULE_PARM_DESC(tc, "TC[1:0] Temperature coefficient: 0-3 (default: 0)");
 
-static unsigned bs = 4;
+static unsigned int bs = 4;
 module_param(bs, uint, 0);
 MODULE_PARM_DESC(bs, "BS[2:0] Bias voltage level: 0-7 (default: 4)");
 
index 3113355062fc6902a464cbc32a9415f2eba2310b..774b0ff69e6dd83952355a4f04e596b720108e9e 100644 (file)
@@ -113,12 +113,14 @@ static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
 #define MV BIT(5)
 static int set_var(struct fbtft_par *par)
 {
-       /* Memory data access control (0x36h)
-            RGB/BGR:
-               1. Mode selection pin SRGB
-                       RGB H/W pin for color filter setting: 0=RGB, 1=BGR
-               2. MADCTL RGB bit
-                       RGB-BGR ORDER color filter panel: 0=RGB, 1=BGR */
+       /*
+        * Memory data access control (0x36h)
+        * RGB/BGR:
+        *      1. Mode selection pin SRGB
+        *              RGB H/W pin for color filter setting: 0=RGB, 1=BGR
+        *      2. MADCTL RGB bit
+        *              RGB-BGR ORDER color filter panel: 0=RGB, 1=BGR
+        */
        switch (par->info->var.rotate) {
        case 0:
                write_reg(par, MIPI_DCS_SET_ADDRESS_MODE,
index d6ae76b318adf14053da11e3347da79b02ca0b1e..9b1d70b218df14f177907010d12948bbc8471316 100644 (file)
@@ -125,10 +125,10 @@ static int set_var(struct fbtft_par *par)
 }
 
 /*
-  Gamma string format:
   PKP0 PKP1 PKP2 PKP3 PKP4 PKP5 PKP6 PKP7 PKP8 PKP9 PKP10 PKP11 VRP0 VRP1
   PKN0 PKN1 PKN2 PKN3 PKN4 PKN5 PKN6 PKN7 PRN8 PRN9 PRN10 PRN11 VRN0 VRN1
-*/
* Gamma string format:
* PKP0 PKP1 PKP2 PKP3 PKP4 PKP5 PKP6 PKP7 PKP8 PKP9 PKP10 PKP11 VRP0 VRP1
* PKN0 PKN1 PKN2 PKN3 PKN4 PKN5 PKN6 PKN7 PRN8 PRN9 PRN10 PRN11 VRN0 VRN1
+ */
 #define CURVE(num, idx)  curves[num * par->gamma.num_values + idx]
 static int set_gamma(struct fbtft_par *par, unsigned long *curves)
 {
index 1162c08613fadef8a4732117d2f91d38ababce8f..25f9fbe1e76f07ade92306904c84fc02a5642895 100644 (file)
@@ -29,7 +29,7 @@
 #define DEFAULT_GAMMA  "02 03 2 5 7 7 4 2 4 2\n" \
                        "02 03 2 5 7 5 4 2 4 2"
 
-static unsigned reg11 = 0x6040;
+static unsigned int reg11 = 0x6040;
 module_param(reg11, uint, 0);
 MODULE_PARM_DESC(reg11, "Register 11h value");
 
@@ -131,10 +131,10 @@ static int set_var(struct fbtft_par *par)
 }
 
 /*
-  Gamma string format:
   VRP0 VRP1 PRP0 PRP1 PKP0 PKP1 PKP2 PKP3 PKP4 PKP5
   VRN0 VRN1 PRN0 PRN1 PKN0 PKN1 PKN2 PKN3 PKN4 PKN5
-*/
* Gamma string format:
* VRP0 VRP1 PRP0 PRP1 PKP0 PKP1 PKP2 PKP3 PKP4 PKP5
* VRN0 VRN1 PRN0 PRN1 PKN0 PKN1 PKN2 PKN3 PKN4 PKN5
+ */
 #define CURVE(num, idx)  curves[num * par->gamma.num_values + idx]
 static int set_gamma(struct fbtft_par *par, unsigned long *curves)
 {
index e0b34a42c9c635bd243737291dc8bf02ef831861..80fc57029fee7f256851e2c53b024ae551835f9d 100644 (file)
 #define HEIGHT         64
 
 /*
-  write_reg() caveat:
-
    This doesn't work because D/C has to be LOW for both values:
      write_reg(par, val1, val2);
-
    Do it like this:
      write_reg(par, val1);
      write_reg(par, val2);
-*/
* write_reg() caveat:
+ *
* This doesn't work because D/C has to be LOW for both values:
* write_reg(par, val1, val2);
+ *
* Do it like this:
* write_reg(par, val1);
* write_reg(par, val2);
+ */
 
 /* Init sequence taken from the Adafruit SSD1306 Arduino library */
 static int init_display(struct fbtft_par *par)
@@ -113,8 +113,9 @@ static int init_display(struct fbtft_par *par)
        write_reg(par, 0xA4);
 
        /* Set Normal Display
-          0 in RAM: OFF in display panel
-          1 in RAM: ON in display panel */
+        * 0 in RAM: OFF in display panel
+        * 1 in RAM: ON in display panel
+        */
        write_reg(par, 0xA6);
 
        /* Set Display ON */
index bd294f886c5f4f3b42ec4311b3bddbb3ca4a2586..1d74ac1343a808e6a52f55f6532d3cb12eb26feb 100644 (file)
@@ -102,26 +102,26 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...)
 }
 
 /*
      Grayscale Lookup Table
      GS1 - GS63
      The driver Gamma curve contains the relative values between the entries
      in the Lookup table.
-
      From datasheet:
      8.8 Gray Scale Decoder
-
              there are total 180 Gamma Settings (Setting 0 to Setting 180)
              available for the Gray Scale table.
-
              The gray scale is defined in incremental way, with reference
              to the length of previous table entry:
                      Setting of GS1 has to be >= 0
                      Setting of GS2 has to be > Setting of GS1 +1
                      Setting of GS3 has to be > Setting of GS2 +1
                      :
                      Setting of GS63 has to be > Setting of GS62 +1
-
-*/
* Grayscale Lookup Table
* GS1 - GS63
* The driver Gamma curve contains the relative values between the entries
* in the Lookup table.
+ *
* From datasheet:
* 8.8 Gray Scale Decoder
+ *
* there are total 180 Gamma Settings (Setting 0 to Setting 180)
* available for the Gray Scale table.
+ *
* The gray scale is defined in incremental way, with reference
* to the length of previous table entry:
* Setting of GS1 has to be >= 0
* Setting of GS2 has to be > Setting of GS1 +1
* Setting of GS3 has to be > Setting of GS2 +1
* :
* Setting of GS63 has to be > Setting of GS62 +1
+ *
+ */
 static int set_gamma(struct fbtft_par *par, unsigned long *curves)
 {
        unsigned long tmp[GAMMA_NUM * GAMMA_LEN];
index cef33e439f469c538f8ec2f9acd39ca3f7918637..8267bbbc8fcd213a214641506f18e2bcf6e6a96f 100644 (file)
@@ -66,7 +66,7 @@ static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
 
 static int set_var(struct fbtft_par *par)
 {
-       unsigned remap;
+       unsigned int remap;
 
        if (par->fbtftops.init_display != init_display) {
                /* don't risk messing up register A0h */
index c5e51fe1aad5a600bb7cb144fdfe81c767e8965b..6670f2bb62ec4e05130e8764cf9228d3c04cc4ae 100644 (file)
@@ -33,35 +33,43 @@ static int default_init_sequence[] = {
        -2, 500,                               /* delay */
 
        /* FRMCTR1 - frame rate control: normal mode
-            frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D) */
+        * frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D)
+        */
        -1, 0xB1, 0x01, 0x2C, 0x2D,
 
        /* FRMCTR2 - frame rate control: idle mode
-            frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D) */
+        * frame rate = fosc / (1 x 2 + 40) * (LINE + 2C + 2D)
+        */
        -1, 0xB2, 0x01, 0x2C, 0x2D,
 
        /* FRMCTR3 - frame rate control - partial mode
-            dot inversion mode, line inversion mode */
+        * dot inversion mode, line inversion mode
+        */
        -1, 0xB3, 0x01, 0x2C, 0x2D, 0x01, 0x2C, 0x2D,
 
        /* INVCTR - display inversion control
-            no inversion */
+        * no inversion
+        */
        -1, 0xB4, 0x07,
 
        /* PWCTR1 - Power Control
-            -4.6V, AUTO mode */
+        * -4.6V, AUTO mode
+        */
        -1, 0xC0, 0xA2, 0x02, 0x84,
 
        /* PWCTR2 - Power Control
-            VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD */
+        * VGH25 = 2.4C VGSEL = -10 VGH = 3 * AVDD
+        */
        -1, 0xC1, 0xC5,
 
        /* PWCTR3 - Power Control
-            Opamp current small, Boost frequency */
+        * Opamp current small, Boost frequency
+        */
        -1, 0xC2, 0x0A, 0x00,
 
        /* PWCTR4 - Power Control
-            BCLK/2, Opamp current small & Medium low */
+        * BCLK/2, Opamp current small & Medium low
+        */
        -1, 0xC3, 0x8A, 0x2A,
 
        /* PWCTR5 - Power Control */
@@ -101,11 +109,12 @@ static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
 static int set_var(struct fbtft_par *par)
 {
        /* MADCTL - Memory data access control
-            RGB/BGR:
-            1. Mode selection pin SRGB
-               RGB H/W pin for color filter setting: 0=RGB, 1=BGR
-            2. MADCTL RGB bit
-               RGB-BGR ORDER color filter panel: 0=RGB, 1=BGR */
+        * RGB/BGR:
+        * 1. Mode selection pin SRGB
+        *    RGB H/W pin for color filter setting: 0=RGB, 1=BGR
+        * 2. MADCTL RGB bit
+        *    RGB-BGR ORDER color filter panel: 0=RGB, 1=BGR
+        */
        switch (par->info->var.rotate) {
        case 0:
                write_reg(par, MIPI_DCS_SET_ADDRESS_MODE,
@@ -129,10 +138,10 @@ static int set_var(struct fbtft_par *par)
 }
 
 /*
-  Gamma string format:
   VRF0P VOS0P PK0P PK1P PK2P PK3P PK4P PK5P PK6P PK7P PK8P PK9P SELV0P SELV1P SELV62P SELV63P
   VRF0N VOS0N PK0N PK1N PK2N PK3N PK4N PK5N PK6N PK7N PK8N PK9N SELV0N SELV1N SELV62N SELV63N
-*/
* Gamma string format:
* VRF0P VOS0P PK0P PK1P PK2P PK3P PK4P PK5P PK6P PK7P PK8P PK9P SELV0P SELV1P SELV62P SELV63P
* VRF0N VOS0N PK0N PK1N PK2N PK3N PK4N PK5N PK6N PK7N PK8N PK9N SELV0N SELV1N SELV62N SELV63N
+ */
 #define CURVE(num, idx)  curves[num * par->gamma.num_values + idx]
 static int set_gamma(struct fbtft_par *par, unsigned long *curves)
 {
index 2183f98c831514c9eef828c3ef8bbceabb47fd7a..ea2ddacb9468ee2f12d17a03b51690e9dd248628 100644 (file)
@@ -35,7 +35,7 @@
 /* gamma is used to control contrast in this driver */
 #define DEFAULT_GAMMA  "40"
 
-static unsigned bs = 4;
+static unsigned int bs = 4;
 module_param(bs, uint, 0);
 MODULE_PARM_DESC(bs, "BS[2:0] Bias voltage level: 0-7 (default: 4)");
 
@@ -44,21 +44,21 @@ static int init_display(struct fbtft_par *par)
        par->fbtftops.reset(par);
 
        /* Enter extended command mode */
-       write_reg(par, 0x21); /* 5:1  1
-                                2:0  PD - Powerdown control: chip is active
-                                1:0  V  - Entry mode: horizontal addressing
-                                0:1  H  - Extended instruction set control:
-                                               extended
-                             */
+       write_reg(par, 0x21);   /* 5:1  1
+                                2:0  PD - Powerdown control: chip is active
+                                1:0  V  - Entry mode: horizontal addressing
+                                0:1  H  - Extended instruction set control:
+                                *           extended
+                                */
 
        /* H=1 Bias system */
-       write_reg(par, 0x10 | (bs & 0x7)); /*
-                                4:1  1
-                                3:0  0
-                                2:x  BS2 - Bias System
-                                1:x  BS1
-                                0:x  BS0
-                             */
+       write_reg(par, 0x10 | (bs & 0x7));
+                               /* 4:1  1
+                                3:0  0
+                                2:x  BS2 - Bias System
+                                1:x  BS1
+                                0:x  BS0
+                                */
 
        /* Set the address of the first display line. */
        write_reg(par, 0x04 | (64 >> 6));
@@ -68,12 +68,12 @@ static int init_display(struct fbtft_par *par)
        write_reg(par, 0x20);
 
        /* H=0 Display control */
-       write_reg(par, 0x08 | 4); /*
-                                3:1  1
-                                2:1  D  - DE: 10=normal mode
-                                1:0  0
-                                0:0  E
-                             */
+       write_reg(par, 0x08 | 4);
+                               /* 3:1  1
+                                * 2:1  D - DE: 10=normal mode
+                                1:0  0
+                                0:0  E
+                                */
 
        return 0;
 }
@@ -81,15 +81,15 @@ static int init_display(struct fbtft_par *par)
 static void set_addr_win(struct fbtft_par *par, int xs, int ys, int xe, int ye)
 {
        /* H=0 Set X address of RAM */
-       write_reg(par, 0x80); /* 7:1  1
-                                6-0: X[6:0] - 0x00
-                             */
+       write_reg(par, 0x80);   /* 7:1  1
+                                6-0: X[6:0] - 0x00
+                                */
 
        /* H=0 Set Y address of RAM */
-       write_reg(par, 0x40); /* 7:0  0
-                                6:1  1
-                                2-0: Y[2:0] - 0x0
-                             */
+       write_reg(par, 0x40);   /* 7:0  0
+                                6:1  1
+                                2-0: Y[2:0] - 0x0
+                                */
 }
 
 static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
@@ -100,8 +100,9 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
 
        for (y = 0; y < HEIGHT / 8; y++) {
                u8 *buf = par->txbuf.buf;
-               /* The display is 102x68 but the LCD is 84x48.  Set
-                  the write pointer at the start of each row. */
+               /* The display is 102x68 but the LCD is 84x48.
+                * Set the write pointer at the start of each row.
+                */
                gpio_set_value(par->gpio.dc, 0);
                write_reg(par, 0x80 | 0);
                write_reg(par, 0x40 | y);
index e87401aacfb37ebec74bb18d6fad96e981c3ab03..b33b73f17da4ac408465055e26ab976572c427b4 100644 (file)
  */
 
 /* BR -> actual ratio: 0-3 -> 5, 10, 11, 13 */
-static unsigned ratio = 2;
+static unsigned int ratio = 2;
 module_param(ratio, uint, 0);
 MODULE_PARM_DESC(ratio, "BR[1:0] Bias voltage ratio: 0-3 (default: 2)");
 
-static unsigned gain = 3;
+static unsigned int gain = 3;
 module_param(gain, uint, 0);
 MODULE_PARM_DESC(gain, "GN[1:0] Bias voltage gain: 0-3 (default: 3)");
 
-static unsigned pot = 16;
+static unsigned int pot = 16;
 module_param(pot, uint, 0);
 MODULE_PARM_DESC(pot, "PM[6:0] Bias voltage pot.: 0-63 (default: 16)");
 
 /* TC -> % compensation per deg C: 0-3 -> -.05, -.10, -.015, -.20 */
-static unsigned temp;
+static unsigned int temp;
 module_param(temp, uint, 0);
 MODULE_PARM_DESC(temp, "TC[1:0] Temperature compensation: 0-3 (default: 0)");
 
 /* PC[1:0] -> LCD capacitance: 0-3 -> <20nF, 20-28 nF, 29-40 nF, 40-56 nF */
-static unsigned load = 1;
+static unsigned int load = 1;
 module_param(load, uint, 0);
 MODULE_PARM_DESC(load, "PC[1:0] Panel Loading: 0-3 (default: 1)");
 
 /* PC[3:2] -> V_LCD: 0, 1, 3 -> ext., int. with ratio = 5, int. standard */
-static unsigned pump = 3;
+static unsigned int pump = 3;
 module_param(pump, uint, 0);
 MODULE_PARM_DESC(pump, "PC[3:2] Pump control: 0,1,3 (default: 3)");
 
index f8cb610a7b6984cb3bc977cf52f63966f6748620..a52e28a48825c12581982f9826721ae65f6de157 100644 (file)
@@ -67,7 +67,7 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...)
 
 static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
 {
-       unsigned start_line, end_line;
+       unsigned int start_line, end_line;
        u16 *vmem16 = (u16 *)(par->info->screen_buffer + offset);
        u16 *pos = par->txbuf.buf + 1;
        u16 *buf16 = par->txbuf.buf + 10;
@@ -104,7 +104,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
 
 static int write_vmem_8bit(struct fbtft_par *par, size_t offset, size_t len)
 {
-       unsigned start_line, end_line;
+       unsigned int start_line, end_line;
        u16 *vmem16 = (u16 *)(par->info->screen_buffer + offset);
        u16 *pos = par->txbuf.buf + 1;
        u8 *buf8 = par->txbuf.buf + 10;
@@ -137,7 +137,7 @@ static int write_vmem_8bit(struct fbtft_par *par, size_t offset, size_t len)
        return 0;
 }
 
-static unsigned firmware_version(struct fbtft_par *par)
+static unsigned int firmware_version(struct fbtft_par *par)
 {
        u8 rxbuf[4] = {0, };
 
@@ -152,7 +152,7 @@ static unsigned firmware_version(struct fbtft_par *par)
 static int init_display(struct fbtft_par *par)
 {
        int ret;
-       unsigned version;
+       unsigned int version;
        u8 save_mode;
 
        /* enable SPI interface by having CS and MOSI low during reset */
index 83505bce628a959430eab0075f20a07eaab749d5..ec45043c08302286f83bd413075af5478e9a28f2 100644 (file)
@@ -92,7 +92,8 @@ void fbtft_write_reg8_bus9(struct fbtft_par *par, int len, ...)
 
        if (par->spi && (par->spi->bits_per_word == 8)) {
                /* we're emulating 9-bit, pad start of buffer with no-ops
-                  (assuming here that zero is a no-op) */
+                * (assuming here that zero is a no-op)
+                */
                pad = (len % 4) ? 4 - (len % 4) : 0;
                for (i = 0; i < pad; i++)
                        *buf++ = 0x000;
index 0c1a77cafe14191a397f6a4be43201da2f92dd75..d90461627552758c96216cdbf9c98b2e72580007 100644 (file)
@@ -341,8 +341,8 @@ static void fbtft_reset(struct fbtft_par *par)
        mdelay(120);
 }
 
-static void fbtft_update_display(struct fbtft_par *par, unsigned start_line,
-                                unsigned end_line)
+static void fbtft_update_display(struct fbtft_par *par, unsigned int start_line,
+                                unsigned int end_line)
 {
        size_t offset, len;
        ktime_t ts_start, ts_end;
@@ -435,10 +435,10 @@ static void fbtft_mkdirty(struct fb_info *info, int y, int height)
 static void fbtft_deferred_io(struct fb_info *info, struct list_head *pagelist)
 {
        struct fbtft_par *par = info->par;
-       unsigned dirty_lines_start, dirty_lines_end;
+       unsigned int dirty_lines_start, dirty_lines_end;
        struct page *page;
        unsigned long index;
-       unsigned y_low = 0, y_high = 0;
+       unsigned int y_low = 0, y_high = 0;
        int count = 0;
 
        spin_lock(&par->dirty_lock);
@@ -526,18 +526,18 @@ static ssize_t fbtft_fb_write(struct fb_info *info, const char __user *buf,
 }
 
 /* from pxafb.c */
-static unsigned int chan_to_field(unsigned chan, struct fb_bitfield *bf)
+static unsigned int chan_to_field(unsigned int chan, struct fb_bitfield *bf)
 {
        chan &= 0xffff;
        chan >>= 16 - bf->length;
        return chan << bf->offset;
 }
 
-static int fbtft_fb_setcolreg(unsigned regno, unsigned red, unsigned green,
-                             unsigned blue, unsigned transp,
+static int fbtft_fb_setcolreg(unsigned int regno, unsigned int red, unsigned int green,
+                             unsigned int blue, unsigned int transp,
                              struct fb_info *info)
 {
-       unsigned val;
+       unsigned int val;
        int ret = 1;
 
        dev_dbg(info->dev,
@@ -654,11 +654,11 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
        u8 *vmem = NULL;
        void *txbuf = NULL;
        void *buf = NULL;
-       unsigned width;
-       unsigned height;
+       unsigned int width;
+       unsigned int height;
        int txbuflen = display->txbuflen;
-       unsigned bpp = display->bpp;
-       unsigned fps = display->fps;
+       unsigned int bpp = display->bpp;
+       unsigned int fps = display->fps;
        int vmem_size, i;
        int *init_sequence = display->init_sequence;
        char *gamma = display->gamma;
@@ -820,6 +820,8 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
        /* Transmit buffer */
        if (txbuflen == -1)
                txbuflen = vmem_size + 2; /* add in case startbyte is used */
+       if (txbuflen >= vmem_size + 2)
+               txbuflen = 0;
 
 #ifdef __LITTLE_ENDIAN
        if ((!txbuflen) && (bpp > 8))
index d3bc3943a98349d531ae84010f189142e0844cce..89c4b5b76ce69d78c11051868958eaf6c0b0e084 100644 (file)
@@ -38,7 +38,7 @@
  */
 struct fbtft_gpio {
        char name[FBTFT_GPIO_NAME_SIZE];
-       unsigned gpio;
+       unsigned int gpio;
 };
 
 struct fbtft_par;
@@ -79,7 +79,7 @@ struct fbtft_ops {
        void (*reset)(struct fbtft_par *par);
        void (*mkdirty)(struct fb_info *info, int from, int to);
        void (*update_display)(struct fbtft_par *par,
-                               unsigned start_line, unsigned end_line);
+                               unsigned int start_line, unsigned int end_line);
        int (*init_display)(struct fbtft_par *par);
        int (*blank)(struct fbtft_par *par, bool on);
 
@@ -115,14 +115,14 @@ struct fbtft_ops {
  * This structure is not stored by FBTFT except for init_sequence.
  */
 struct fbtft_display {
-       unsigned width;
-       unsigned height;
-       unsigned regwidth;
-       unsigned buswidth;
-       unsigned backlight;
+       unsigned int width;
+       unsigned int height;
+       unsigned int regwidth;
+       unsigned int buswidth;
+       unsigned int backlight;
        struct fbtft_ops fbtftops;
-       unsigned bpp;
-       unsigned fps;
+       unsigned int bpp;
+       unsigned int fps;
        int txbuflen;
        int *init_sequence;
        char *gamma;
@@ -146,9 +146,9 @@ struct fbtft_display {
 struct fbtft_platform_data {
        struct fbtft_display display;
        const struct fbtft_gpio *gpios;
-       unsigned rotate;
+       unsigned int rotate;
        bool bgr;
-       unsigned fps;
+       unsigned int fps;
        int txbuflen;
        u8 startbyte;
        char *gamma;
@@ -216,8 +216,8 @@ struct fbtft_par {
        u8 startbyte;
        struct fbtft_ops fbtftops;
        spinlock_t dirty_lock;
-       unsigned dirty_lines_start;
-       unsigned dirty_lines_end;
+       unsigned int dirty_lines_start;
+       unsigned int dirty_lines_end;
        struct {
                int reset;
                int dc;
index e4a355aefb25bbb45a87406e737ff6576a5e01da..924abd3ac0d65a894562335e4adbdfe889c76248 100644 (file)
@@ -32,20 +32,20 @@ static char *name;
 module_param(name, charp, 0);
 MODULE_PARM_DESC(name, "Devicename (required). name=list => list all supported devices.");
 
-static unsigned rotate;
+static unsigned int rotate;
 module_param(rotate, uint, 0);
 MODULE_PARM_DESC(rotate,
 "Angle to rotate display counter clockwise: 0, 90, 180, 270");
 
-static unsigned busnum;
+static unsigned int busnum;
 module_param(busnum, uint, 0);
 MODULE_PARM_DESC(busnum, "SPI bus number (default=0)");
 
-static unsigned cs;
+static unsigned int cs;
 module_param(cs, uint, 0);
 MODULE_PARM_DESC(cs, "SPI chip select (default=0)");
 
-static unsigned speed;
+static unsigned int speed;
 module_param(speed, uint, 0);
 MODULE_PARM_DESC(speed, "SPI speed (override device default)");
 
@@ -58,7 +58,7 @@ module_param(gpios, charp, 0);
 MODULE_PARM_DESC(gpios,
 "List of gpios. Comma separated with the form: reset:23,dc:24 (when overriding the default, all gpios must be specified)");
 
-static unsigned fps;
+static unsigned int fps;
 module_param(fps, uint, 0);
 MODULE_PARM_DESC(fps, "Frames per second (override driver default)");
 
@@ -76,7 +76,7 @@ module_param(bgr, int, 0);
 MODULE_PARM_DESC(bgr,
 "BGR bit (supported by some drivers).");
 
-static unsigned startbyte;
+static unsigned int startbyte;
 module_param(startbyte, uint, 0);
 MODULE_PARM_DESC(startbyte, "Sets the Start byte used by some SPI displays.");
 
@@ -84,15 +84,15 @@ static bool custom;
 module_param(custom, bool, 0);
 MODULE_PARM_DESC(custom, "Add a custom display device. Use speed= argument to make it a SPI device, else platform_device");
 
-static unsigned width;
+static unsigned int width;
 module_param(width, uint, 0);
 MODULE_PARM_DESC(width, "Display width, used with the custom argument");
 
-static unsigned height;
+static unsigned int height;
 module_param(height, uint, 0);
 MODULE_PARM_DESC(height, "Display height, used with the custom argument");
 
-static unsigned buswidth = 8;
+static unsigned int buswidth = 8;
 module_param(buswidth, uint, 0);
 MODULE_PARM_DESC(buswidth, "Display bus width, used with the custom argument");
 
@@ -106,7 +106,7 @@ module_param(debug, ulong, 0);
 MODULE_PARM_DESC(debug,
 "level: 0-7 (the remaining 29 bits is for advanced usage)");
 
-static unsigned verbose = 3;
+static unsigned int verbose = 3;
 module_param(verbose, uint, 0);
 MODULE_PARM_DESC(verbose,
 "0 silent, >0 show gpios, >1 show devices, >2 show devices before (default=3)");
@@ -1215,7 +1215,8 @@ static struct fbtft_device_display displays[] = {
                }
        }, {
                /* This should be the last item.
-                  Used with the custom argument */
+                * Used with the custom argument
+                */
                .name = "",
                .spi = &(struct spi_board_info) {
                        .modalias = "",
@@ -1306,8 +1307,9 @@ static struct fbtft_gpio fbtft_device_param_gpios[MAX_GPIOS + 1] = { };
 static void fbtft_device_pdev_release(struct device *dev)
 {
 /* Needed to silence this message:
-Device 'xxx' does not have a release() function, it is broken and must be fixed
-*/
+ * Device 'xxx' does not have a release() function,
+ * it is broken and must be fixed
+ */
 }
 
 static int spi_device_found(struct device *dev, void *data)
@@ -1346,7 +1348,7 @@ static void pr_p_devices(void)
 }
 
 #ifdef MODULE
-static void fbtft_device_spi_delete(struct spi_master *master, unsigned cs)
+static void fbtft_device_spi_delete(struct spi_master *master, unsigned int cs)
 {
        struct device *dev;
        char str[32];
index e7315170b7a378fb49724ac57bd8395683c88b5a..38716fd5cb58459708c06fcf3452630c0a867b23 100644 (file)
@@ -7,13 +7,14 @@
 #
 obj-$(CONFIG_FSL_MC_BUS) += mc-bus-driver.o
 
-mc-bus-driver-objs := mc-bus.o \
+mc-bus-driver-objs := fsl-mc-bus.o \
                      mc-sys.o \
+                     mc-io.o \
                      dprc.o \
                      dpmng.o \
                      dprc-driver.o \
-                     mc-allocator.o \
-                     mc-msi.o \
+                     fsl-mc-allocator.o \
+                     fsl-mc-msi.o \
                      irq-gic-v3-its-fsl-mc-msi.o \
                      dpmcp.o \
                      dpbp.o
index 06440176243ac45165cf0635db9622cc98d7e759..bd63baa00693d8314271dbdc4509d619c1d5b753 100644 (file)
@@ -31,6 +31,7 @@
  */
 #include "../include/mc-sys.h"
 #include "../include/mc-cmd.h"
+
 #include "dpmcp.h"
 #include "dpmcp-cmd.h"
 
index 779bf9c25bc01ebddefe43c73767267a5188a5a5..a7b77d58c8cdae39367ed8a442676b0c0615f078 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright 2013-2016 Freescale Semiconductor Inc.
+/*
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*************************************************************************//*
- dpmng-cmd.h
-
- defines portal commands
-
- *//**************************************************************************/
+/*
dpmng-cmd.h
+ *
defines portal commands
+ *
+ */
 
 #ifndef __FSL_DPMNG_CMD_H
 #define __FSL_DPMNG_CMD_H
index 660bbe7ea899b0c52572afc5e3bf342b25085d7d..669f604ada7c678aa4842c4aa16e9aa2d75df34f 100644 (file)
@@ -32,6 +32,7 @@
 #include "../include/mc-sys.h"
 #include "../include/mc-cmd.h"
 #include "../include/dpmng.h"
+
 #include "dpmng-cmd.h"
 
 /**
index bb127f4a3ae7d0fdd3715aec2c08531d1048c3ec..009d65673155e1f0b8ca833259e3d7f894235feb 100644 (file)
@@ -1,4 +1,5 @@
-/* Copyright 2013-2016 Freescale Semiconductor Inc.
+/*
+ * Copyright 2013-2016 Freescale Semiconductor Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-/*************************************************************************//*
- dprc-cmd.h
-
- defines dprc portal commands
-
- *//**************************************************************************/
+/*
dprc-cmd.h
+ *
defines dprc portal commands
+ *
+ */
 
 #ifndef _FSL_DPRC_CMD_H
 #define _FSL_DPRC_CMD_H
index d2a71f14bf72036a5e3d2d55518091b3b66420ee..c5ee4639682b58de9f5273fd68f8c9f242604ac0 100644 (file)
@@ -9,13 +9,21 @@
  * warranty of any kind, whether express or implied.
  */
 
-#include "../include/mc-private.h"
-#include "../include/mc-sys.h"
 #include <linux/module.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
 #include <linux/msi.h>
+#include "../include/mc-bus.h"
+#include "../include/mc-sys.h"
+
 #include "dprc-cmd.h"
+#include "fsl-mc-private.h"
+
+#define FSL_MC_DPRC_DRIVER_NAME    "fsl_mc_dprc"
+
+#define FSL_MC_DEVICE_MATCH(_mc_dev, _obj_desc) \
+       (strcmp((_mc_dev)->obj_desc.type, (_obj_desc)->type) == 0 && \
+        (_mc_dev)->obj_desc.id == (_obj_desc)->id)
 
 struct dprc_child_objs {
        int child_count;
@@ -190,55 +198,6 @@ static void dprc_add_new_devices(struct fsl_mc_device *mc_bus_dev,
        }
 }
 
-static void dprc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
-{
-       int pool_type;
-       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
-
-       for (pool_type = 0; pool_type < FSL_MC_NUM_POOL_TYPES; pool_type++) {
-               struct fsl_mc_resource_pool *res_pool =
-                   &mc_bus->resource_pools[pool_type];
-
-               res_pool->type = pool_type;
-               res_pool->max_count = 0;
-               res_pool->free_count = 0;
-               res_pool->mc_bus = mc_bus;
-               INIT_LIST_HEAD(&res_pool->free_list);
-               mutex_init(&res_pool->mutex);
-       }
-}
-
-static void dprc_cleanup_resource_pool(struct fsl_mc_device *mc_bus_dev,
-                                      enum fsl_mc_pool_type pool_type)
-{
-       struct fsl_mc_resource *resource;
-       struct fsl_mc_resource *next;
-       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       struct fsl_mc_resource_pool *res_pool =
-                                       &mc_bus->resource_pools[pool_type];
-       int free_count = 0;
-
-       WARN_ON(res_pool->type != pool_type);
-       WARN_ON(res_pool->free_count != res_pool->max_count);
-
-       list_for_each_entry_safe(resource, next, &res_pool->free_list, node) {
-               free_count++;
-               WARN_ON(resource->type != res_pool->type);
-               WARN_ON(resource->parent_pool != res_pool);
-               devm_kfree(&mc_bus_dev->dev, resource);
-       }
-
-       WARN_ON(free_count != res_pool->free_count);
-}
-
-static void dprc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
-{
-       int pool_type;
-
-       for (pool_type = 0; pool_type < FSL_MC_NUM_POOL_TYPES; pool_type++)
-               dprc_cleanup_resource_pool(mc_bus_dev, pool_type);
-}
-
 /**
  * dprc_scan_objects - Discover objects in a DPRC
  *
@@ -363,7 +322,7 @@ int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
        unsigned int irq_count;
        struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
 
-       dprc_init_all_resource_pools(mc_bus_dev);
+       fsl_mc_init_all_resource_pools(mc_bus_dev);
 
        /*
         * Discover objects in the DPRC:
@@ -390,7 +349,7 @@ int dprc_scan_container(struct fsl_mc_device *mc_bus_dev)
 
        return 0;
 error:
-       dprc_cleanup_all_resource_pools(mc_bus_dev);
+       fsl_mc_cleanup_all_resource_pools(mc_bus_dev);
        return error;
 }
 EXPORT_SYMBOL_GPL(dprc_scan_container);
@@ -649,7 +608,7 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)
                /*
                 * This is a child DPRC:
                 */
-               if (WARN_ON(parent_dev->bus != &fsl_mc_bus_type))
+               if (WARN_ON(!dev_is_fsl_mc(parent_dev)))
                        return -EINVAL;
 
                if (WARN_ON(mc_dev->obj_desc.region_count == 0))
@@ -681,7 +640,7 @@ static int dprc_probe(struct fsl_mc_device *mc_dev)
                 */
                struct irq_domain *mc_msi_domain;
 
-               if (WARN_ON(parent_dev->bus == &fsl_mc_bus_type))
+               if (WARN_ON(dev_is_fsl_mc(parent_dev)))
                        return -EINVAL;
 
                error = fsl_mc_find_msi_domain(parent_dev,
@@ -802,7 +761,7 @@ static int dprc_remove(struct fsl_mc_device *mc_dev)
                dev_set_msi_domain(&mc_dev->dev, NULL);
        }
 
-       dprc_cleanup_all_resource_pools(mc_dev);
+       fsl_mc_cleanup_all_resource_pools(mc_dev);
 
        error = dprc_close(mc_dev->mc_io, 0, mc_dev->mc_handle);
        if (error < 0)
index c260549813335888c5f8005c5c3d5d3a6cc0ca0c..ac4ed35170841f6c8596e3cff91fecf68244ddbe 100644 (file)
@@ -32,6 +32,7 @@
 #include "../include/mc-sys.h"
 #include "../include/mc-cmd.h"
 #include "../include/dprc.h"
+
 #include "dprc-cmd.h"
 
 /**
diff --git a/drivers/staging/fsl-mc/bus/fsl-mc-allocator.c b/drivers/staging/fsl-mc/bus/fsl-mc-allocator.c
new file mode 100644 (file)
index 0000000..2004fa7
--- /dev/null
@@ -0,0 +1,671 @@
+/*
+ * Freescale MC object device allocator driver
+ *
+ * Copyright (C) 2013 Freescale Semiconductor, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/module.h>
+#include <linux/msi.h>
+#include "../include/mc-bus.h"
+#include "../include/mc-sys.h"
+#include "../include/dpbp-cmd.h"
+#include "../include/dpcon-cmd.h"
+
+#include "fsl-mc-private.h"
+
+#define FSL_MC_IS_ALLOCATABLE(_obj_type) \
+       (strcmp(_obj_type, "dpbp") == 0 || \
+        strcmp(_obj_type, "dpmcp") == 0 || \
+        strcmp(_obj_type, "dpcon") == 0)
+
+/**
+ * fsl_mc_resource_pool_add_device - add allocatable device to a resource
+ * pool of a given MC bus
+ *
+ * @mc_bus: pointer to the MC bus
+ * @pool_type: MC bus pool type
+ * @mc_dev: Pointer to allocatable MC object device
+ *
+ * It adds an allocatable MC object device to a container's resource pool of
+ * the given resource type
+ */
+static int __must_check fsl_mc_resource_pool_add_device(struct fsl_mc_bus
+                                                               *mc_bus,
+                                                       enum fsl_mc_pool_type
+                                                               pool_type,
+                                                       struct fsl_mc_device
+                                                               *mc_dev)
+{
+       struct fsl_mc_resource_pool *res_pool;
+       struct fsl_mc_resource *resource;
+       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+       int error = -EINVAL;
+
+       if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
+               goto out;
+       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
+               goto out;
+       if (WARN_ON(mc_dev->resource))
+               goto out;
+
+       res_pool = &mc_bus->resource_pools[pool_type];
+       if (WARN_ON(res_pool->type != pool_type))
+               goto out;
+       if (WARN_ON(res_pool->mc_bus != mc_bus))
+               goto out;
+
+       mutex_lock(&res_pool->mutex);
+
+       if (WARN_ON(res_pool->max_count < 0))
+               goto out_unlock;
+       if (WARN_ON(res_pool->free_count < 0 ||
+                   res_pool->free_count > res_pool->max_count))
+               goto out_unlock;
+
+       resource = devm_kzalloc(&mc_bus_dev->dev, sizeof(*resource),
+                               GFP_KERNEL);
+       if (!resource) {
+               error = -ENOMEM;
+               dev_err(&mc_bus_dev->dev,
+                       "Failed to allocate memory for fsl_mc_resource\n");
+               goto out_unlock;
+       }
+
+       resource->type = pool_type;
+       resource->id = mc_dev->obj_desc.id;
+       resource->data = mc_dev;
+       resource->parent_pool = res_pool;
+       INIT_LIST_HEAD(&resource->node);
+       list_add_tail(&resource->node, &res_pool->free_list);
+       mc_dev->resource = resource;
+       res_pool->free_count++;
+       res_pool->max_count++;
+       error = 0;
+out_unlock:
+       mutex_unlock(&res_pool->mutex);
+out:
+       return error;
+}
+
+/**
+ * fsl_mc_resource_pool_remove_device - remove an allocatable device from a
+ * resource pool
+ *
+ * @mc_dev: Pointer to allocatable MC object device
+ *
+ * It permanently removes an allocatable MC object device from the resource
+ * pool, the device is currently in, as long as it is in the pool's free list.
+ */
+static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
+                                                                  *mc_dev)
+{
+       struct fsl_mc_device *mc_bus_dev;
+       struct fsl_mc_bus *mc_bus;
+       struct fsl_mc_resource_pool *res_pool;
+       struct fsl_mc_resource *resource;
+       int error = -EINVAL;
+
+       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
+               goto out;
+
+       resource = mc_dev->resource;
+       if (WARN_ON(!resource || resource->data != mc_dev))
+               goto out;
+
+       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
+       mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       res_pool = resource->parent_pool;
+       if (WARN_ON(res_pool != &mc_bus->resource_pools[resource->type]))
+               goto out;
+
+       mutex_lock(&res_pool->mutex);
+
+       if (WARN_ON(res_pool->max_count <= 0))
+               goto out_unlock;
+       if (WARN_ON(res_pool->free_count <= 0 ||
+                   res_pool->free_count > res_pool->max_count))
+               goto out_unlock;
+
+       /*
+        * If the device is currently allocated, its resource is not
+        * in the free list and thus, the device cannot be removed.
+        */
+       if (list_empty(&resource->node)) {
+               error = -EBUSY;
+               dev_err(&mc_bus_dev->dev,
+                       "Device %s cannot be removed from resource pool\n",
+                       dev_name(&mc_dev->dev));
+               goto out_unlock;
+       }
+
+       list_del(&resource->node);
+       INIT_LIST_HEAD(&resource->node);
+       res_pool->free_count--;
+       res_pool->max_count--;
+
+       devm_kfree(&mc_bus_dev->dev, resource);
+       mc_dev->resource = NULL;
+       error = 0;
+out_unlock:
+       mutex_unlock(&res_pool->mutex);
+out:
+       return error;
+}
+
+static const char *const fsl_mc_pool_type_strings[] = {
+       [FSL_MC_POOL_DPMCP] = "dpmcp",
+       [FSL_MC_POOL_DPBP] = "dpbp",
+       [FSL_MC_POOL_DPCON] = "dpcon",
+       [FSL_MC_POOL_IRQ] = "irq",
+};
+
+static int __must_check object_type_to_pool_type(const char *object_type,
+                                                enum fsl_mc_pool_type
+                                                               *pool_type)
+{
+       unsigned int i;
+
+       for (i = 0; i < ARRAY_SIZE(fsl_mc_pool_type_strings); i++) {
+               if (strcmp(object_type, fsl_mc_pool_type_strings[i]) == 0) {
+                       *pool_type = i;
+                       return 0;
+               }
+       }
+
+       return -EINVAL;
+}
+
+int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
+                                         enum fsl_mc_pool_type pool_type,
+                                         struct fsl_mc_resource **new_resource)
+{
+       struct fsl_mc_resource_pool *res_pool;
+       struct fsl_mc_resource *resource;
+       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+       int error = -EINVAL;
+
+       BUILD_BUG_ON(ARRAY_SIZE(fsl_mc_pool_type_strings) !=
+                    FSL_MC_NUM_POOL_TYPES);
+
+       *new_resource = NULL;
+       if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
+               goto out;
+
+       res_pool = &mc_bus->resource_pools[pool_type];
+       if (WARN_ON(res_pool->mc_bus != mc_bus))
+               goto out;
+
+       mutex_lock(&res_pool->mutex);
+       resource = list_first_entry_or_null(&res_pool->free_list,
+                                           struct fsl_mc_resource, node);
+
+       if (!resource) {
+               WARN_ON(res_pool->free_count != 0);
+               error = -ENXIO;
+               dev_err(&mc_bus_dev->dev,
+                       "No more resources of type %s left\n",
+                       fsl_mc_pool_type_strings[pool_type]);
+               goto out_unlock;
+       }
+
+       if (WARN_ON(resource->type != pool_type))
+               goto out_unlock;
+       if (WARN_ON(resource->parent_pool != res_pool))
+               goto out_unlock;
+       if (WARN_ON(res_pool->free_count <= 0 ||
+                   res_pool->free_count > res_pool->max_count))
+               goto out_unlock;
+
+       list_del(&resource->node);
+       INIT_LIST_HEAD(&resource->node);
+
+       res_pool->free_count--;
+       error = 0;
+out_unlock:
+       mutex_unlock(&res_pool->mutex);
+       *new_resource = resource;
+out:
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_resource_allocate);
+
+void fsl_mc_resource_free(struct fsl_mc_resource *resource)
+{
+       struct fsl_mc_resource_pool *res_pool;
+
+       res_pool = resource->parent_pool;
+       if (WARN_ON(resource->type != res_pool->type))
+               return;
+
+       mutex_lock(&res_pool->mutex);
+       if (WARN_ON(res_pool->free_count < 0 ||
+                   res_pool->free_count >= res_pool->max_count))
+               goto out_unlock;
+
+       if (WARN_ON(!list_empty(&resource->node)))
+               goto out_unlock;
+
+       list_add_tail(&resource->node, &res_pool->free_list);
+       res_pool->free_count++;
+out_unlock:
+       mutex_unlock(&res_pool->mutex);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_resource_free);
+
+/**
+ * fsl_mc_object_allocate - Allocates a MC object device of the given
+ * pool type from a given MC bus
+ *
+ * @mc_dev: MC device for which the MC object device is to be allocated
+ * @pool_type: MC bus resource pool type
+ * @new_mc_dev: Pointer to area where the pointer to the allocated
+ * MC object device is to be returned
+ *
+ * This function allocates a MC object device from the device's parent DPRC,
+ * from the corresponding MC bus' pool of allocatable MC object devices of
+ * the given resource type. mc_dev cannot be a DPRC itself.
+ *
+ * NOTE: pool_type must be different from FSL_MC_POOL_MCP, since MC
+ * portals are allocated using fsl_mc_portal_allocate(), instead of
+ * this function.
+ */
+int __must_check fsl_mc_object_allocate(struct fsl_mc_device *mc_dev,
+                                       enum fsl_mc_pool_type pool_type,
+                                       struct fsl_mc_device **new_mc_adev)
+{
+       struct fsl_mc_device *mc_bus_dev;
+       struct fsl_mc_bus *mc_bus;
+       struct fsl_mc_device *mc_adev;
+       int error = -EINVAL;
+       struct fsl_mc_resource *resource = NULL;
+
+       *new_mc_adev = NULL;
+       if (WARN_ON(mc_dev->flags & FSL_MC_IS_DPRC))
+               goto error;
+
+       if (WARN_ON(!dev_is_fsl_mc(mc_dev->dev.parent)))
+               goto error;
+
+       if (WARN_ON(pool_type == FSL_MC_POOL_DPMCP))
+               goto error;
+
+       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
+       mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       error = fsl_mc_resource_allocate(mc_bus, pool_type, &resource);
+       if (error < 0)
+               goto error;
+
+       mc_adev = resource->data;
+       if (WARN_ON(!mc_adev))
+               goto error;
+
+       *new_mc_adev = mc_adev;
+       return 0;
+error:
+       if (resource)
+               fsl_mc_resource_free(resource);
+
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_object_allocate);
+
+/**
+ * fsl_mc_object_free - Returns an allocatable MC object device to the
+ * corresponding resource pool of a given MC bus.
+ *
+ * @mc_adev: Pointer to the MC object device
+ */
+void fsl_mc_object_free(struct fsl_mc_device *mc_adev)
+{
+       struct fsl_mc_resource *resource;
+
+       resource = mc_adev->resource;
+       if (WARN_ON(resource->type == FSL_MC_POOL_DPMCP))
+               return;
+       if (WARN_ON(resource->data != mc_adev))
+               return;
+
+       fsl_mc_resource_free(resource);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_object_free);
+
+/*
+ * Initialize the interrupt pool associated with a MC bus.
+ * It allocates a block of IRQs from the GIC-ITS
+ */
+int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
+                            unsigned int irq_count)
+{
+       unsigned int i;
+       struct msi_desc *msi_desc;
+       struct fsl_mc_device_irq *irq_resources;
+       struct fsl_mc_device_irq *mc_dev_irq;
+       int error;
+       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+       struct fsl_mc_resource_pool *res_pool =
+                       &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
+
+       if (WARN_ON(irq_count == 0 ||
+                   irq_count > FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS))
+               return -EINVAL;
+
+       error = fsl_mc_msi_domain_alloc_irqs(&mc_bus_dev->dev, irq_count);
+       if (error < 0)
+               return error;
+
+       irq_resources = devm_kzalloc(&mc_bus_dev->dev,
+                                    sizeof(*irq_resources) * irq_count,
+                                    GFP_KERNEL);
+       if (!irq_resources) {
+               error = -ENOMEM;
+               goto cleanup_msi_irqs;
+       }
+
+       for (i = 0; i < irq_count; i++) {
+               mc_dev_irq = &irq_resources[i];
+
+               /*
+                * NOTE: This mc_dev_irq's MSI addr/value pair will be set
+                * by the fsl_mc_msi_write_msg() callback
+                */
+               mc_dev_irq->resource.type = res_pool->type;
+               mc_dev_irq->resource.data = mc_dev_irq;
+               mc_dev_irq->resource.parent_pool = res_pool;
+               INIT_LIST_HEAD(&mc_dev_irq->resource.node);
+               list_add_tail(&mc_dev_irq->resource.node, &res_pool->free_list);
+       }
+
+       for_each_msi_entry(msi_desc, &mc_bus_dev->dev) {
+               mc_dev_irq = &irq_resources[msi_desc->fsl_mc.msi_index];
+               mc_dev_irq->msi_desc = msi_desc;
+               mc_dev_irq->resource.id = msi_desc->irq;
+       }
+
+       res_pool->max_count = irq_count;
+       res_pool->free_count = irq_count;
+       mc_bus->irq_resources = irq_resources;
+       return 0;
+
+cleanup_msi_irqs:
+       fsl_mc_msi_domain_free_irqs(&mc_bus_dev->dev);
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_populate_irq_pool);
+
+/**
+ * Teardown the interrupt pool associated with an MC bus.
+ * It frees the IRQs that were allocated to the pool, back to the GIC-ITS.
+ */
+void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus)
+{
+       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
+       struct fsl_mc_resource_pool *res_pool =
+                       &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
+
+       if (WARN_ON(!mc_bus->irq_resources))
+               return;
+
+       if (WARN_ON(res_pool->max_count == 0))
+               return;
+
+       if (WARN_ON(res_pool->free_count != res_pool->max_count))
+               return;
+
+       INIT_LIST_HEAD(&res_pool->free_list);
+       res_pool->max_count = 0;
+       res_pool->free_count = 0;
+       mc_bus->irq_resources = NULL;
+       fsl_mc_msi_domain_free_irqs(&mc_bus_dev->dev);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_cleanup_irq_pool);
+
+/**
+ * It allocates the IRQs required by a given MC object device. The
+ * IRQs are allocated from the interrupt pool associated with the
+ * MC bus that contains the device, if the device is not a DPRC device.
+ * Otherwise, the IRQs are allocated from the interrupt pool associated
+ * with the MC bus that represents the DPRC device itself.
+ */
+int __must_check fsl_mc_allocate_irqs(struct fsl_mc_device *mc_dev)
+{
+       int i;
+       int irq_count;
+       int res_allocated_count = 0;
+       int error = -EINVAL;
+       struct fsl_mc_device_irq **irqs = NULL;
+       struct fsl_mc_bus *mc_bus;
+       struct fsl_mc_resource_pool *res_pool;
+
+       if (WARN_ON(mc_dev->irqs))
+               return -EINVAL;
+
+       irq_count = mc_dev->obj_desc.irq_count;
+       if (WARN_ON(irq_count == 0))
+               return -EINVAL;
+
+       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0)
+               mc_bus = to_fsl_mc_bus(mc_dev);
+       else
+               mc_bus = to_fsl_mc_bus(to_fsl_mc_device(mc_dev->dev.parent));
+
+       if (WARN_ON(!mc_bus->irq_resources))
+               return -EINVAL;
+
+       res_pool = &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
+       if (res_pool->free_count < irq_count) {
+               dev_err(&mc_dev->dev,
+                       "Not able to allocate %u irqs for device\n", irq_count);
+               return -ENOSPC;
+       }
+
+       irqs = devm_kzalloc(&mc_dev->dev, irq_count * sizeof(irqs[0]),
+                           GFP_KERNEL);
+       if (!irqs)
+               return -ENOMEM;
+
+       for (i = 0; i < irq_count; i++) {
+               struct fsl_mc_resource *resource;
+
+               error = fsl_mc_resource_allocate(mc_bus, FSL_MC_POOL_IRQ,
+                                                &resource);
+               if (error < 0)
+                       goto error_resource_alloc;
+
+               irqs[i] = to_fsl_mc_irq(resource);
+               res_allocated_count++;
+
+               WARN_ON(irqs[i]->mc_dev);
+               irqs[i]->mc_dev = mc_dev;
+               irqs[i]->dev_irq_index = i;
+       }
+
+       mc_dev->irqs = irqs;
+       return 0;
+
+error_resource_alloc:
+       for (i = 0; i < res_allocated_count; i++) {
+               irqs[i]->mc_dev = NULL;
+               fsl_mc_resource_free(&irqs[i]->resource);
+       }
+
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_allocate_irqs);
+
+/*
+ * It frees the IRQs that were allocated for a MC object device, by
+ * returning them to the corresponding interrupt pool.
+ */
+void fsl_mc_free_irqs(struct fsl_mc_device *mc_dev)
+{
+       int i;
+       int irq_count;
+       struct fsl_mc_bus *mc_bus;
+       struct fsl_mc_device_irq **irqs = mc_dev->irqs;
+
+       if (WARN_ON(!irqs))
+               return;
+
+       irq_count = mc_dev->obj_desc.irq_count;
+
+       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0)
+               mc_bus = to_fsl_mc_bus(mc_dev);
+       else
+               mc_bus = to_fsl_mc_bus(to_fsl_mc_device(mc_dev->dev.parent));
+
+       if (WARN_ON(!mc_bus->irq_resources))
+               return;
+
+       for (i = 0; i < irq_count; i++) {
+               WARN_ON(!irqs[i]->mc_dev);
+               irqs[i]->mc_dev = NULL;
+               fsl_mc_resource_free(&irqs[i]->resource);
+       }
+
+       mc_dev->irqs = NULL;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_free_irqs);
+
+void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
+{
+       int pool_type;
+       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
+
+       for (pool_type = 0; pool_type < FSL_MC_NUM_POOL_TYPES; pool_type++) {
+               struct fsl_mc_resource_pool *res_pool =
+                   &mc_bus->resource_pools[pool_type];
+
+               res_pool->type = pool_type;
+               res_pool->max_count = 0;
+               res_pool->free_count = 0;
+               res_pool->mc_bus = mc_bus;
+               INIT_LIST_HEAD(&res_pool->free_list);
+               mutex_init(&res_pool->mutex);
+       }
+}
+
+static void fsl_mc_cleanup_resource_pool(struct fsl_mc_device *mc_bus_dev,
+                                        enum fsl_mc_pool_type pool_type)
+{
+       struct fsl_mc_resource *resource;
+       struct fsl_mc_resource *next;
+       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       struct fsl_mc_resource_pool *res_pool =
+                                       &mc_bus->resource_pools[pool_type];
+       int free_count = 0;
+
+       WARN_ON(res_pool->type != pool_type);
+       WARN_ON(res_pool->free_count != res_pool->max_count);
+
+       list_for_each_entry_safe(resource, next, &res_pool->free_list, node) {
+               free_count++;
+               WARN_ON(resource->type != res_pool->type);
+               WARN_ON(resource->parent_pool != res_pool);
+               devm_kfree(&mc_bus_dev->dev, resource);
+       }
+
+       WARN_ON(free_count != res_pool->free_count);
+}
+
+void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev)
+{
+       int pool_type;
+
+       for (pool_type = 0; pool_type < FSL_MC_NUM_POOL_TYPES; pool_type++)
+               fsl_mc_cleanup_resource_pool(mc_bus_dev, pool_type);
+}
+
+/**
+ * fsl_mc_allocator_probe - callback invoked when an allocatable device is
+ * being added to the system
+ */
+static int fsl_mc_allocator_probe(struct fsl_mc_device *mc_dev)
+{
+       enum fsl_mc_pool_type pool_type;
+       struct fsl_mc_device *mc_bus_dev;
+       struct fsl_mc_bus *mc_bus;
+       int error;
+
+       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
+               return -EINVAL;
+
+       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
+       if (WARN_ON(!dev_is_fsl_mc(&mc_bus_dev->dev)))
+               return -EINVAL;
+
+       mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       error = object_type_to_pool_type(mc_dev->obj_desc.type, &pool_type);
+       if (error < 0)
+               return error;
+
+       error = fsl_mc_resource_pool_add_device(mc_bus, pool_type, mc_dev);
+       if (error < 0)
+               return error;
+
+       dev_dbg(&mc_dev->dev,
+               "Allocatable MC object device bound to fsl_mc_allocator driver");
+       return 0;
+}
+
+/**
+ * fsl_mc_allocator_remove - callback invoked when an allocatable device is
+ * being removed from the system
+ */
+static int fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
+{
+       int error;
+
+       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
+               return -EINVAL;
+
+       if (mc_dev->resource) {
+               error = fsl_mc_resource_pool_remove_device(mc_dev);
+               if (error < 0)
+                       return error;
+       }
+
+       dev_dbg(&mc_dev->dev,
+               "Allocatable MC object device unbound from fsl_mc_allocator driver");
+       return 0;
+}
+
+static const struct fsl_mc_device_id match_id_table[] = {
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpbp",
+       },
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpmcp",
+       },
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpcon",
+       },
+       {.vendor = 0x0},
+};
+
+static struct fsl_mc_driver fsl_mc_allocator_driver = {
+       .driver = {
+                  .name = "fsl_mc_allocator",
+                  .owner = THIS_MODULE,
+                  .pm = NULL,
+                  },
+       .match_id_table = match_id_table,
+       .probe = fsl_mc_allocator_probe,
+       .remove = fsl_mc_allocator_remove,
+};
+
+int __init fsl_mc_allocator_driver_init(void)
+{
+       return fsl_mc_driver_register(&fsl_mc_allocator_driver);
+}
+
+void fsl_mc_allocator_driver_exit(void)
+{
+       fsl_mc_driver_unregister(&fsl_mc_allocator_driver);
+}
diff --git a/drivers/staging/fsl-mc/bus/fsl-mc-bus.c b/drivers/staging/fsl-mc/bus/fsl-mc-bus.c
new file mode 100644 (file)
index 0000000..3d687b5
--- /dev/null
@@ -0,0 +1,921 @@
+/*
+ * Freescale Management Complex (MC) bus driver
+ *
+ * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ * Author: German Rivera <German.Rivera@freescale.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/of_address.h>
+#include <linux/ioport.h>
+#include <linux/slab.h>
+#include <linux/limits.h>
+#include <linux/bitops.h>
+#include <linux/msi.h>
+#include <linux/dma-mapping.h>
+#include "../include/mc-bus.h"
+#include "../include/dpmng.h"
+#include "../include/mc-sys.h"
+
+#include "fsl-mc-private.h"
+#include "dprc-cmd.h"
+
+static struct kmem_cache *mc_dev_cache;
+
+/**
+ * Default DMA mask for devices on a fsl-mc bus
+ */
+#define FSL_MC_DEFAULT_DMA_MASK        (~0ULL)
+
+/**
+ * struct fsl_mc - Private data of a "fsl,qoriq-mc" platform device
+ * @root_mc_bus_dev: MC object device representing the root DPRC
+ * @num_translation_ranges: number of entries in addr_translation_ranges
+ * @translation_ranges: array of bus to system address translation ranges
+ */
+struct fsl_mc {
+       struct fsl_mc_device *root_mc_bus_dev;
+       u8 num_translation_ranges;
+       struct fsl_mc_addr_translation_range *translation_ranges;
+};
+
+/**
+ * struct fsl_mc_addr_translation_range - bus to system address translation
+ * range
+ * @mc_region_type: Type of MC region for the range being translated
+ * @start_mc_offset: Start MC offset of the range being translated
+ * @end_mc_offset: MC offset of the first byte after the range (last MC
+ * offset of the range is end_mc_offset - 1)
+ * @start_phys_addr: system physical address corresponding to start_mc_addr
+ */
+struct fsl_mc_addr_translation_range {
+       enum dprc_region_type mc_region_type;
+       u64 start_mc_offset;
+       u64 end_mc_offset;
+       phys_addr_t start_phys_addr;
+};
+
+/**
+ * fsl_mc_bus_match - device to driver matching callback
+ * @dev: the MC object device structure to match against
+ * @drv: the device driver to search for matching MC object device id
+ * structures
+ *
+ * Returns 1 on success, 0 otherwise.
+ */
+static int fsl_mc_bus_match(struct device *dev, struct device_driver *drv)
+{
+       const struct fsl_mc_device_id *id;
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(drv);
+       bool found = false;
+
+       if (WARN_ON(!fsl_mc_bus_exists()))
+               goto out;
+
+       if (!mc_drv->match_id_table)
+               goto out;
+
+       /*
+        * If the object is not 'plugged' don't match.
+        * Only exception is the root DPRC, which is a special case.
+        */
+       if ((mc_dev->obj_desc.state & DPRC_OBJ_STATE_PLUGGED) == 0 &&
+           !fsl_mc_is_root_dprc(&mc_dev->dev))
+               goto out;
+
+       /*
+        * Traverse the match_id table of the given driver, trying to find
+        * a matching for the given MC object device.
+        */
+       for (id = mc_drv->match_id_table; id->vendor != 0x0; id++) {
+               if (id->vendor == mc_dev->obj_desc.vendor &&
+                   strcmp(id->obj_type, mc_dev->obj_desc.type) == 0) {
+                       found = true;
+
+                       break;
+               }
+       }
+
+out:
+       dev_dbg(dev, "%smatched\n", found ? "" : "not ");
+       return found;
+}
+
+/**
+ * fsl_mc_bus_uevent - callback invoked when a device is added
+ */
+static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
+{
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+
+       if (add_uevent_var(env, "MODALIAS=fsl-mc:v%08Xd%s",
+                          mc_dev->obj_desc.vendor,
+                          mc_dev->obj_desc.type))
+               return -ENOMEM;
+
+       return 0;
+}
+
+static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
+                            char *buf)
+{
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+
+       return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor,
+                      mc_dev->obj_desc.type);
+}
+static DEVICE_ATTR_RO(modalias);
+
+static struct attribute *fsl_mc_dev_attrs[] = {
+       &dev_attr_modalias.attr,
+       NULL,
+};
+
+ATTRIBUTE_GROUPS(fsl_mc_dev);
+
+
+struct bus_type fsl_mc_bus_type = {
+       .name = "fsl-mc",
+       .match = fsl_mc_bus_match,
+       .uevent = fsl_mc_bus_uevent,
+       .dev_groups = fsl_mc_dev_groups,
+};
+EXPORT_SYMBOL_GPL(fsl_mc_bus_type);
+
+static atomic_t root_dprc_count = ATOMIC_INIT(0);
+
+static int fsl_mc_driver_probe(struct device *dev)
+{
+       struct fsl_mc_driver *mc_drv;
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+       int error;
+
+       if (WARN_ON(!dev->driver))
+               return -EINVAL;
+
+       mc_drv = to_fsl_mc_driver(dev->driver);
+       if (WARN_ON(!mc_drv->probe))
+               return -EINVAL;
+
+       error = mc_drv->probe(mc_dev);
+       if (error < 0) {
+               dev_err(dev, "MC object device probe callback failed: %d\n",
+                       error);
+               return error;
+       }
+
+       return 0;
+}
+
+static int fsl_mc_driver_remove(struct device *dev)
+{
+       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+       int error;
+
+       if (WARN_ON(!dev->driver))
+               return -EINVAL;
+
+       error = mc_drv->remove(mc_dev);
+       if (error < 0) {
+               dev_err(dev,
+                       "MC object device remove callback failed: %d\n",
+                       error);
+               return error;
+       }
+
+       return 0;
+}
+
+static void fsl_mc_driver_shutdown(struct device *dev)
+{
+       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+
+       mc_drv->shutdown(mc_dev);
+}
+
+/**
+ * __fsl_mc_driver_register - registers a child device driver with the
+ * MC bus
+ *
+ * This function is implicitly invoked from the registration function of
+ * fsl_mc device drivers, which is generated by the
+ * module_fsl_mc_driver() macro.
+ */
+int __fsl_mc_driver_register(struct fsl_mc_driver *mc_driver,
+                            struct module *owner)
+{
+       int error;
+
+       mc_driver->driver.owner = owner;
+       mc_driver->driver.bus = &fsl_mc_bus_type;
+
+       if (mc_driver->probe)
+               mc_driver->driver.probe = fsl_mc_driver_probe;
+
+       if (mc_driver->remove)
+               mc_driver->driver.remove = fsl_mc_driver_remove;
+
+       if (mc_driver->shutdown)
+               mc_driver->driver.shutdown = fsl_mc_driver_shutdown;
+
+       error = driver_register(&mc_driver->driver);
+       if (error < 0) {
+               pr_err("driver_register() failed for %s: %d\n",
+                      mc_driver->driver.name, error);
+               return error;
+       }
+
+       pr_info("MC object device driver %s registered\n",
+               mc_driver->driver.name);
+       return 0;
+}
+EXPORT_SYMBOL_GPL(__fsl_mc_driver_register);
+
+/**
+ * fsl_mc_driver_unregister - unregisters a device driver from the
+ * MC bus
+ */
+void fsl_mc_driver_unregister(struct fsl_mc_driver *mc_driver)
+{
+       driver_unregister(&mc_driver->driver);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_driver_unregister);
+
+/**
+ * fsl_mc_bus_exists - check if a root dprc exists
+ */
+bool fsl_mc_bus_exists(void)
+{
+       return atomic_read(&root_dprc_count) > 0;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_bus_exists);
+
+/**
+* fsl_mc_get_root_dprc - function to traverse to the root dprc
+*/
+void fsl_mc_get_root_dprc(struct device *dev,
+                         struct device **root_dprc_dev)
+{
+       if (WARN_ON(!dev)) {
+               *root_dprc_dev = NULL;
+       } else if (WARN_ON(!dev_is_fsl_mc(dev))) {
+               *root_dprc_dev = NULL;
+       } else {
+               *root_dprc_dev = dev;
+               while (dev_is_fsl_mc((*root_dprc_dev)->parent))
+                       *root_dprc_dev = (*root_dprc_dev)->parent;
+       }
+}
+EXPORT_SYMBOL_GPL(fsl_mc_get_root_dprc);
+
+static int get_dprc_attr(struct fsl_mc_io *mc_io,
+                        int container_id, struct dprc_attributes *attr)
+{
+       u16 dprc_handle;
+       int error;
+
+       error = dprc_open(mc_io, 0, container_id, &dprc_handle);
+       if (error < 0) {
+               dev_err(mc_io->dev, "dprc_open() failed: %d\n", error);
+               return error;
+       }
+
+       memset(attr, 0, sizeof(struct dprc_attributes));
+       error = dprc_get_attributes(mc_io, 0, dprc_handle, attr);
+       if (error < 0) {
+               dev_err(mc_io->dev, "dprc_get_attributes() failed: %d\n",
+                       error);
+               goto common_cleanup;
+       }
+
+       error = 0;
+
+common_cleanup:
+       (void)dprc_close(mc_io, 0, dprc_handle);
+       return error;
+}
+
+static int get_dprc_icid(struct fsl_mc_io *mc_io,
+                        int container_id, u16 *icid)
+{
+       struct dprc_attributes attr;
+       int error;
+
+       error = get_dprc_attr(mc_io, container_id, &attr);
+       if (error == 0)
+               *icid = attr.icid;
+
+       return error;
+}
+
+static int get_dprc_version(struct fsl_mc_io *mc_io,
+                           int container_id, u16 *major, u16 *minor)
+{
+       struct dprc_attributes attr;
+       int error;
+
+       error = get_dprc_attr(mc_io, container_id, &attr);
+       if (error == 0) {
+               *major = attr.version.major;
+               *minor = attr.version.minor;
+       }
+
+       return error;
+}
+
+static int translate_mc_addr(struct fsl_mc_device *mc_dev,
+                            enum dprc_region_type mc_region_type,
+                            u64 mc_offset, phys_addr_t *phys_addr)
+{
+       int i;
+       struct device *root_dprc_dev;
+       struct fsl_mc *mc;
+
+       fsl_mc_get_root_dprc(&mc_dev->dev, &root_dprc_dev);
+       if (WARN_ON(!root_dprc_dev))
+               return -EINVAL;
+       mc = dev_get_drvdata(root_dprc_dev->parent);
+
+       if (mc->num_translation_ranges == 0) {
+               /*
+                * Do identity mapping:
+                */
+               *phys_addr = mc_offset;
+               return 0;
+       }
+
+       for (i = 0; i < mc->num_translation_ranges; i++) {
+               struct fsl_mc_addr_translation_range *range =
+                       &mc->translation_ranges[i];
+
+               if (mc_region_type == range->mc_region_type &&
+                   mc_offset >= range->start_mc_offset &&
+                   mc_offset < range->end_mc_offset) {
+                       *phys_addr = range->start_phys_addr +
+                                    (mc_offset - range->start_mc_offset);
+                       return 0;
+               }
+       }
+
+       return -EFAULT;
+}
+
+static int fsl_mc_device_get_mmio_regions(struct fsl_mc_device *mc_dev,
+                                         struct fsl_mc_device *mc_bus_dev)
+{
+       int i;
+       int error;
+       struct resource *regions;
+       struct dprc_obj_desc *obj_desc = &mc_dev->obj_desc;
+       struct device *parent_dev = mc_dev->dev.parent;
+       enum dprc_region_type mc_region_type;
+
+       if (strcmp(obj_desc->type, "dprc") == 0 ||
+           strcmp(obj_desc->type, "dpmcp") == 0) {
+               mc_region_type = DPRC_REGION_TYPE_MC_PORTAL;
+       } else if (strcmp(obj_desc->type, "dpio") == 0) {
+               mc_region_type = DPRC_REGION_TYPE_QBMAN_PORTAL;
+       } else {
+               /*
+                * This function should not have been called for this MC object
+                * type, as this object type is not supposed to have MMIO
+                * regions
+                */
+               WARN_ON(true);
+               return -EINVAL;
+       }
+
+       regions = kmalloc_array(obj_desc->region_count,
+                               sizeof(regions[0]), GFP_KERNEL);
+       if (!regions)
+               return -ENOMEM;
+
+       for (i = 0; i < obj_desc->region_count; i++) {
+               struct dprc_region_desc region_desc;
+
+               error = dprc_get_obj_region(mc_bus_dev->mc_io,
+                                           0,
+                                           mc_bus_dev->mc_handle,
+                                           obj_desc->type,
+                                           obj_desc->id, i, &region_desc);
+               if (error < 0) {
+                       dev_err(parent_dev,
+                               "dprc_get_obj_region() failed: %d\n", error);
+                       goto error_cleanup_regions;
+               }
+
+               WARN_ON(region_desc.size == 0);
+               error = translate_mc_addr(mc_dev, mc_region_type,
+                                         region_desc.base_offset,
+                                         &regions[i].start);
+               if (error < 0) {
+                       dev_err(parent_dev,
+                               "Invalid MC offset: %#x (for %s.%d\'s region %d)\n",
+                               region_desc.base_offset,
+                               obj_desc->type, obj_desc->id, i);
+                       goto error_cleanup_regions;
+               }
+
+               regions[i].end = regions[i].start + region_desc.size - 1;
+               regions[i].name = "fsl-mc object MMIO region";
+               regions[i].flags = IORESOURCE_IO;
+               if (region_desc.flags & DPRC_REGION_CACHEABLE)
+                       regions[i].flags |= IORESOURCE_CACHEABLE;
+       }
+
+       mc_dev->regions = regions;
+       return 0;
+
+error_cleanup_regions:
+       kfree(regions);
+       return error;
+}
+
+/**
+ * fsl_mc_is_root_dprc - function to check if a given device is a root dprc
+ */
+bool fsl_mc_is_root_dprc(struct device *dev)
+{
+       struct device *root_dprc_dev;
+
+       fsl_mc_get_root_dprc(dev, &root_dprc_dev);
+       if (!root_dprc_dev)
+               return false;
+       return dev == root_dprc_dev;
+}
+
+/**
+ * Add a newly discovered MC object device to be visible in Linux
+ */
+int fsl_mc_device_add(struct dprc_obj_desc *obj_desc,
+                     struct fsl_mc_io *mc_io,
+                     struct device *parent_dev,
+                     struct fsl_mc_device **new_mc_dev)
+{
+       int error;
+       struct fsl_mc_device *mc_dev = NULL;
+       struct fsl_mc_bus *mc_bus = NULL;
+       struct fsl_mc_device *parent_mc_dev;
+
+       if (dev_is_fsl_mc(parent_dev))
+               parent_mc_dev = to_fsl_mc_device(parent_dev);
+       else
+               parent_mc_dev = NULL;
+
+       if (strcmp(obj_desc->type, "dprc") == 0) {
+               /*
+                * Allocate an MC bus device object:
+                */
+               mc_bus = devm_kzalloc(parent_dev, sizeof(*mc_bus), GFP_KERNEL);
+               if (!mc_bus)
+                       return -ENOMEM;
+
+               mc_dev = &mc_bus->mc_dev;
+       } else {
+               /*
+                * Allocate a regular fsl_mc_device object:
+                */
+               mc_dev = kmem_cache_zalloc(mc_dev_cache, GFP_KERNEL);
+               if (!mc_dev)
+                       return -ENOMEM;
+       }
+
+       mc_dev->obj_desc = *obj_desc;
+       mc_dev->mc_io = mc_io;
+       device_initialize(&mc_dev->dev);
+       mc_dev->dev.parent = parent_dev;
+       mc_dev->dev.bus = &fsl_mc_bus_type;
+       dev_set_name(&mc_dev->dev, "%s.%d", obj_desc->type, obj_desc->id);
+
+       if (strcmp(obj_desc->type, "dprc") == 0) {
+               struct fsl_mc_io *mc_io2;
+
+               mc_dev->flags |= FSL_MC_IS_DPRC;
+
+               /*
+                * To get the DPRC's ICID, we need to open the DPRC
+                * in get_dprc_icid(). For child DPRCs, we do so using the
+                * parent DPRC's MC portal instead of the child DPRC's MC
+                * portal, in case the child DPRC is already opened with
+                * its own portal (e.g., the DPRC used by AIOP).
+                *
+                * NOTE: There cannot be more than one active open for a
+                * given MC object, using the same MC portal.
+                */
+               if (parent_mc_dev) {
+                       /*
+                        * device being added is a child DPRC device
+                        */
+                       mc_io2 = parent_mc_dev->mc_io;
+               } else {
+                       /*
+                        * device being added is the root DPRC device
+                        */
+                       if (WARN_ON(!mc_io)) {
+                               error = -EINVAL;
+                               goto error_cleanup_dev;
+                       }
+
+                       mc_io2 = mc_io;
+
+                       atomic_inc(&root_dprc_count);
+               }
+
+               error = get_dprc_icid(mc_io2, obj_desc->id, &mc_dev->icid);
+               if (error < 0)
+                       goto error_cleanup_dev;
+       } else {
+               /*
+                * A non-DPRC MC object device has to be a child of another
+                * MC object (specifically a DPRC object)
+                */
+               mc_dev->icid = parent_mc_dev->icid;
+               mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK;
+               mc_dev->dev.dma_mask = &mc_dev->dma_mask;
+               dev_set_msi_domain(&mc_dev->dev,
+                                  dev_get_msi_domain(&parent_mc_dev->dev));
+       }
+
+       /*
+        * Get MMIO regions for the device from the MC:
+        *
+        * NOTE: the root DPRC is a special case as its MMIO region is
+        * obtained from the device tree
+        */
+       if (parent_mc_dev && obj_desc->region_count != 0) {
+               error = fsl_mc_device_get_mmio_regions(mc_dev,
+                                                      parent_mc_dev);
+               if (error < 0)
+                       goto error_cleanup_dev;
+       }
+
+       /* Objects are coherent, unless 'no shareability' flag set. */
+       if (!(obj_desc->flags & DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY))
+               arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true);
+
+       /*
+        * The device-specific probe callback will get invoked by device_add()
+        */
+       error = device_add(&mc_dev->dev);
+       if (error < 0) {
+               dev_err(parent_dev,
+                       "device_add() failed for device %s: %d\n",
+                       dev_name(&mc_dev->dev), error);
+               goto error_cleanup_dev;
+       }
+
+       (void)get_device(&mc_dev->dev);
+       dev_dbg(parent_dev, "Added MC object device %s\n",
+               dev_name(&mc_dev->dev));
+
+       *new_mc_dev = mc_dev;
+       return 0;
+
+error_cleanup_dev:
+       kfree(mc_dev->regions);
+       if (mc_bus)
+               devm_kfree(parent_dev, mc_bus);
+       else
+               kmem_cache_free(mc_dev_cache, mc_dev);
+
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_device_add);
+
+/**
+ * fsl_mc_device_remove - Remove a MC object device from being visible to
+ * Linux
+ *
+ * @mc_dev: Pointer to a MC object device object
+ */
+void fsl_mc_device_remove(struct fsl_mc_device *mc_dev)
+{
+       struct fsl_mc_bus *mc_bus = NULL;
+
+       kfree(mc_dev->regions);
+
+       /*
+        * The device-specific remove callback will get invoked by device_del()
+        */
+       device_del(&mc_dev->dev);
+       put_device(&mc_dev->dev);
+
+       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0) {
+               mc_bus = to_fsl_mc_bus(mc_dev);
+
+               if (fsl_mc_is_root_dprc(&mc_dev->dev)) {
+                       if (atomic_read(&root_dprc_count) > 0)
+                               atomic_dec(&root_dprc_count);
+                       else
+                               WARN_ON(1);
+               }
+       }
+
+       if (mc_bus)
+               devm_kfree(mc_dev->dev.parent, mc_bus);
+       else
+               kmem_cache_free(mc_dev_cache, mc_dev);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_device_remove);
+
+static int parse_mc_ranges(struct device *dev,
+                          int *paddr_cells,
+                          int *mc_addr_cells,
+                          int *mc_size_cells,
+                          const __be32 **ranges_start,
+                          u8 *num_ranges)
+{
+       const __be32 *prop;
+       int range_tuple_cell_count;
+       int ranges_len;
+       int tuple_len;
+       struct device_node *mc_node = dev->of_node;
+
+       *ranges_start = of_get_property(mc_node, "ranges", &ranges_len);
+       if (!(*ranges_start) || !ranges_len) {
+               dev_warn(dev,
+                        "missing or empty ranges property for device tree node '%s'\n",
+                        mc_node->name);
+
+               *num_ranges = 0;
+               return 0;
+       }
+
+       *paddr_cells = of_n_addr_cells(mc_node);
+
+       prop = of_get_property(mc_node, "#address-cells", NULL);
+       if (prop)
+               *mc_addr_cells = be32_to_cpup(prop);
+       else
+               *mc_addr_cells = *paddr_cells;
+
+       prop = of_get_property(mc_node, "#size-cells", NULL);
+       if (prop)
+               *mc_size_cells = be32_to_cpup(prop);
+       else
+               *mc_size_cells = of_n_size_cells(mc_node);
+
+       range_tuple_cell_count = *paddr_cells + *mc_addr_cells +
+                                *mc_size_cells;
+
+       tuple_len = range_tuple_cell_count * sizeof(__be32);
+       if (ranges_len % tuple_len != 0) {
+               dev_err(dev, "malformed ranges property '%s'\n", mc_node->name);
+               return -EINVAL;
+       }
+
+       *num_ranges = ranges_len / tuple_len;
+       return 0;
+}
+
+static int get_mc_addr_translation_ranges(struct device *dev,
+                                         struct fsl_mc_addr_translation_range
+                                               **ranges,
+                                         u8 *num_ranges)
+{
+       int error;
+       int paddr_cells;
+       int mc_addr_cells;
+       int mc_size_cells;
+       int i;
+       const __be32 *ranges_start;
+       const __be32 *cell;
+
+       error = parse_mc_ranges(dev,
+                               &paddr_cells,
+                               &mc_addr_cells,
+                               &mc_size_cells,
+                               &ranges_start,
+                               num_ranges);
+       if (error < 0)
+               return error;
+
+       if (!(*num_ranges)) {
+               /*
+                * Missing or empty ranges property ("ranges;") for the
+                * 'fsl,qoriq-mc' node. In this case, identity mapping
+                * will be used.
+                */
+               *ranges = NULL;
+               return 0;
+       }
+
+       *ranges = devm_kcalloc(dev, *num_ranges,
+                              sizeof(struct fsl_mc_addr_translation_range),
+                              GFP_KERNEL);
+       if (!(*ranges))
+               return -ENOMEM;
+
+       cell = ranges_start;
+       for (i = 0; i < *num_ranges; ++i) {
+               struct fsl_mc_addr_translation_range *range = &(*ranges)[i];
+
+               range->mc_region_type = of_read_number(cell, 1);
+               range->start_mc_offset = of_read_number(cell + 1,
+                                                       mc_addr_cells - 1);
+               cell += mc_addr_cells;
+               range->start_phys_addr = of_read_number(cell, paddr_cells);
+               cell += paddr_cells;
+               range->end_mc_offset = range->start_mc_offset +
+                                    of_read_number(cell, mc_size_cells);
+
+               cell += mc_size_cells;
+       }
+
+       return 0;
+}
+
+/**
+ * fsl_mc_bus_probe - callback invoked when the root MC bus is being
+ * added
+ */
+static int fsl_mc_bus_probe(struct platform_device *pdev)
+{
+       struct dprc_obj_desc obj_desc;
+       int error;
+       struct fsl_mc *mc;
+       struct fsl_mc_device *mc_bus_dev = NULL;
+       struct fsl_mc_io *mc_io = NULL;
+       int container_id;
+       phys_addr_t mc_portal_phys_addr;
+       u32 mc_portal_size;
+       struct mc_version mc_version;
+       struct resource res;
+
+       dev_info(&pdev->dev, "Root MC bus device probed");
+
+       mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL);
+       if (!mc)
+               return -ENOMEM;
+
+       platform_set_drvdata(pdev, mc);
+
+       /*
+        * Get physical address of MC portal for the root DPRC:
+        */
+       error = of_address_to_resource(pdev->dev.of_node, 0, &res);
+       if (error < 0) {
+               dev_err(&pdev->dev,
+                       "of_address_to_resource() failed for %s\n",
+                       pdev->dev.of_node->full_name);
+               return error;
+       }
+
+       mc_portal_phys_addr = res.start;
+       mc_portal_size = resource_size(&res);
+       error = fsl_create_mc_io(&pdev->dev, mc_portal_phys_addr,
+                                mc_portal_size, NULL,
+                                FSL_MC_IO_ATOMIC_CONTEXT_PORTAL, &mc_io);
+       if (error < 0)
+               return error;
+
+       error = mc_get_version(mc_io, 0, &mc_version);
+       if (error != 0) {
+               dev_err(&pdev->dev,
+                       "mc_get_version() failed with error %d\n", error);
+               goto error_cleanup_mc_io;
+       }
+
+       dev_info(&pdev->dev,
+                "Freescale Management Complex Firmware version: %u.%u.%u\n",
+                mc_version.major, mc_version.minor, mc_version.revision);
+
+       error = get_mc_addr_translation_ranges(&pdev->dev,
+                                              &mc->translation_ranges,
+                                              &mc->num_translation_ranges);
+       if (error < 0)
+               goto error_cleanup_mc_io;
+
+       error = dpmng_get_container_id(mc_io, 0, &container_id);
+       if (error < 0) {
+               dev_err(&pdev->dev,
+                       "dpmng_get_container_id() failed: %d\n", error);
+               goto error_cleanup_mc_io;
+       }
+
+       memset(&obj_desc, 0, sizeof(struct dprc_obj_desc));
+       error = get_dprc_version(mc_io, container_id,
+                                &obj_desc.ver_major, &obj_desc.ver_minor);
+       if (error < 0)
+               goto error_cleanup_mc_io;
+
+       obj_desc.vendor = FSL_MC_VENDOR_FREESCALE;
+       strcpy(obj_desc.type, "dprc");
+       obj_desc.id = container_id;
+       obj_desc.irq_count = 1;
+       obj_desc.region_count = 0;
+
+       error = fsl_mc_device_add(&obj_desc, mc_io, &pdev->dev, &mc_bus_dev);
+       if (error < 0)
+               goto error_cleanup_mc_io;
+
+       mc->root_mc_bus_dev = mc_bus_dev;
+       return 0;
+
+error_cleanup_mc_io:
+       fsl_destroy_mc_io(mc_io);
+       return error;
+}
+
+/**
+ * fsl_mc_bus_remove - callback invoked when the root MC bus is being
+ * removed
+ */
+static int fsl_mc_bus_remove(struct platform_device *pdev)
+{
+       struct fsl_mc *mc = platform_get_drvdata(pdev);
+
+       if (WARN_ON(!fsl_mc_is_root_dprc(&mc->root_mc_bus_dev->dev)))
+               return -EINVAL;
+
+       fsl_mc_device_remove(mc->root_mc_bus_dev);
+
+       fsl_destroy_mc_io(mc->root_mc_bus_dev->mc_io);
+       mc->root_mc_bus_dev->mc_io = NULL;
+
+       dev_info(&pdev->dev, "Root MC bus device removed");
+       return 0;
+}
+
+static const struct of_device_id fsl_mc_bus_match_table[] = {
+       {.compatible = "fsl,qoriq-mc",},
+       {},
+};
+
+MODULE_DEVICE_TABLE(of, fsl_mc_bus_match_table);
+
+static struct platform_driver fsl_mc_bus_driver = {
+       .driver = {
+                  .name = "fsl_mc_bus",
+                  .pm = NULL,
+                  .of_match_table = fsl_mc_bus_match_table,
+                  },
+       .probe = fsl_mc_bus_probe,
+       .remove = fsl_mc_bus_remove,
+};
+
+static int __init fsl_mc_bus_driver_init(void)
+{
+       int error;
+
+       mc_dev_cache = kmem_cache_create("fsl_mc_device",
+                                        sizeof(struct fsl_mc_device), 0, 0,
+                                        NULL);
+       if (!mc_dev_cache) {
+               pr_err("Could not create fsl_mc_device cache\n");
+               return -ENOMEM;
+       }
+
+       error = bus_register(&fsl_mc_bus_type);
+       if (error < 0) {
+               pr_err("fsl-mc bus type registration failed: %d\n", error);
+               goto error_cleanup_cache;
+       }
+
+       pr_info("fsl-mc bus type registered\n");
+
+       error = platform_driver_register(&fsl_mc_bus_driver);
+       if (error < 0) {
+               pr_err("platform_driver_register() failed: %d\n", error);
+               goto error_cleanup_bus;
+       }
+
+       error = dprc_driver_init();
+       if (error < 0)
+               goto error_cleanup_driver;
+
+       error = fsl_mc_allocator_driver_init();
+       if (error < 0)
+               goto error_cleanup_dprc_driver;
+
+       error = its_fsl_mc_msi_init();
+       if (error < 0)
+               goto error_cleanup_mc_allocator;
+
+       return 0;
+
+error_cleanup_mc_allocator:
+       fsl_mc_allocator_driver_exit();
+
+error_cleanup_dprc_driver:
+       dprc_driver_exit();
+
+error_cleanup_driver:
+       platform_driver_unregister(&fsl_mc_bus_driver);
+
+error_cleanup_bus:
+       bus_unregister(&fsl_mc_bus_type);
+
+error_cleanup_cache:
+       kmem_cache_destroy(mc_dev_cache);
+       return error;
+}
+postcore_initcall(fsl_mc_bus_driver_init);
diff --git a/drivers/staging/fsl-mc/bus/fsl-mc-msi.c b/drivers/staging/fsl-mc/bus/fsl-mc-msi.c
new file mode 100644 (file)
index 0000000..cc19092
--- /dev/null
@@ -0,0 +1,285 @@
+/*
+ * Freescale Management Complex (MC) bus driver MSI support
+ *
+ * Copyright (C) 2015 Freescale Semiconductor, Inc.
+ * Author: German Rivera <German.Rivera@freescale.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/of_device.h>
+#include <linux/of_address.h>
+#include <linux/irqchip/arm-gic-v3.h>
+#include <linux/of_irq.h>
+#include <linux/irq.h>
+#include <linux/irqdomain.h>
+#include <linux/msi.h>
+#include "../include/mc-bus.h"
+
+/*
+ * Generate a unique ID identifying the interrupt (only used within the MSI
+ * irqdomain.  Combine the icid with the interrupt index.
+ */
+static irq_hw_number_t fsl_mc_domain_calc_hwirq(struct fsl_mc_device *dev,
+                                               struct msi_desc *desc)
+{
+       /*
+        * Make the base hwirq value for ICID*10000 so it is readable
+        * as a decimal value in /proc/interrupts.
+        */
+       return (irq_hw_number_t)(desc->fsl_mc.msi_index + (dev->icid * 10000));
+}
+
+static void fsl_mc_msi_set_desc(msi_alloc_info_t *arg,
+                               struct msi_desc *desc)
+{
+       arg->desc = desc;
+       arg->hwirq = fsl_mc_domain_calc_hwirq(to_fsl_mc_device(desc->dev),
+                                             desc);
+}
+
+static void fsl_mc_msi_update_dom_ops(struct msi_domain_info *info)
+{
+       struct msi_domain_ops *ops = info->ops;
+
+       if (WARN_ON(!ops))
+               return;
+
+       /*
+        * set_desc should not be set by the caller
+        */
+       if (ops->set_desc == NULL)
+               ops->set_desc = fsl_mc_msi_set_desc;
+}
+
+static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev,
+                                  struct fsl_mc_device_irq *mc_dev_irq)
+{
+       int error;
+       struct fsl_mc_device *owner_mc_dev = mc_dev_irq->mc_dev;
+       struct msi_desc *msi_desc = mc_dev_irq->msi_desc;
+       struct dprc_irq_cfg irq_cfg;
+
+       /*
+        * msi_desc->msg.address is 0x0 when this function is invoked in
+        * the free_irq() code path. In this case, for the MC, we don't
+        * really need to "unprogram" the MSI, so we just return.
+        */
+       if (msi_desc->msg.address_lo == 0x0 && msi_desc->msg.address_hi == 0x0)
+               return;
+
+       if (WARN_ON(!owner_mc_dev))
+               return;
+
+       irq_cfg.paddr = ((u64)msi_desc->msg.address_hi << 32) |
+                       msi_desc->msg.address_lo;
+       irq_cfg.val = msi_desc->msg.data;
+       irq_cfg.irq_num = msi_desc->irq;
+
+       if (owner_mc_dev == mc_bus_dev) {
+               /*
+                * IRQ is for the mc_bus_dev's DPRC itself
+                */
+               error = dprc_set_irq(mc_bus_dev->mc_io,
+                                    MC_CMD_FLAG_INTR_DIS | MC_CMD_FLAG_PRI,
+                                    mc_bus_dev->mc_handle,
+                                    mc_dev_irq->dev_irq_index,
+                                    &irq_cfg);
+               if (error < 0) {
+                       dev_err(&owner_mc_dev->dev,
+                               "dprc_set_irq() failed: %d\n", error);
+               }
+       } else {
+               /*
+                * IRQ is for for a child device of mc_bus_dev
+                */
+               error = dprc_set_obj_irq(mc_bus_dev->mc_io,
+                                        MC_CMD_FLAG_INTR_DIS | MC_CMD_FLAG_PRI,
+                                        mc_bus_dev->mc_handle,
+                                        owner_mc_dev->obj_desc.type,
+                                        owner_mc_dev->obj_desc.id,
+                                        mc_dev_irq->dev_irq_index,
+                                        &irq_cfg);
+               if (error < 0) {
+                       dev_err(&owner_mc_dev->dev,
+                               "dprc_obj_set_irq() failed: %d\n", error);
+               }
+       }
+}
+
+/*
+ * NOTE: This function is invoked with interrupts disabled
+ */
+static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
+                                struct msi_msg *msg)
+{
+       struct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);
+       struct fsl_mc_device *mc_bus_dev = to_fsl_mc_device(msi_desc->dev);
+       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       struct fsl_mc_device_irq *mc_dev_irq =
+               &mc_bus->irq_resources[msi_desc->fsl_mc.msi_index];
+
+       WARN_ON(mc_dev_irq->msi_desc != msi_desc);
+       msi_desc->msg = *msg;
+
+       /*
+        * Program the MSI (paddr, value) pair in the device:
+        */
+       __fsl_mc_msi_write_msg(mc_bus_dev, mc_dev_irq);
+}
+
+static void fsl_mc_msi_update_chip_ops(struct msi_domain_info *info)
+{
+       struct irq_chip *chip = info->chip;
+
+       if (WARN_ON((!chip)))
+               return;
+
+       /*
+        * irq_write_msi_msg should not be set by the caller
+        */
+       if (chip->irq_write_msi_msg == NULL)
+               chip->irq_write_msi_msg = fsl_mc_msi_write_msg;
+}
+
+/**
+ * fsl_mc_msi_create_irq_domain - Create a fsl-mc MSI interrupt domain
+ * @np:                Optional device-tree node of the interrupt controller
+ * @info:      MSI domain info
+ * @parent:    Parent irq domain
+ *
+ * Updates the domain and chip ops and creates a fsl-mc MSI
+ * interrupt domain.
+ *
+ * Returns:
+ * A domain pointer or NULL in case of failure.
+ */
+struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
+                                               struct msi_domain_info *info,
+                                               struct irq_domain *parent)
+{
+       struct irq_domain *domain;
+
+       if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
+               fsl_mc_msi_update_dom_ops(info);
+       if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
+               fsl_mc_msi_update_chip_ops(info);
+
+       domain = msi_create_irq_domain(fwnode, info, parent);
+       if (domain)
+               domain->bus_token = DOMAIN_BUS_FSL_MC_MSI;
+
+       return domain;
+}
+
+int fsl_mc_find_msi_domain(struct device *mc_platform_dev,
+                          struct irq_domain **mc_msi_domain)
+{
+       struct irq_domain *msi_domain;
+       struct device_node *mc_of_node = mc_platform_dev->of_node;
+
+       msi_domain = of_msi_get_domain(mc_platform_dev, mc_of_node,
+                                      DOMAIN_BUS_FSL_MC_MSI);
+       if (!msi_domain) {
+               pr_err("Unable to find fsl-mc MSI domain for %s\n",
+                      mc_of_node->full_name);
+
+               return -ENOENT;
+       }
+
+       *mc_msi_domain = msi_domain;
+       return 0;
+}
+
+static void fsl_mc_msi_free_descs(struct device *dev)
+{
+       struct msi_desc *desc, *tmp;
+
+       list_for_each_entry_safe(desc, tmp, dev_to_msi_list(dev), list) {
+               list_del(&desc->list);
+               free_msi_entry(desc);
+       }
+}
+
+static int fsl_mc_msi_alloc_descs(struct device *dev, unsigned int irq_count)
+
+{
+       unsigned int i;
+       int error;
+       struct msi_desc *msi_desc;
+
+       for (i = 0; i < irq_count; i++) {
+               msi_desc = alloc_msi_entry(dev);
+               if (!msi_desc) {
+                       dev_err(dev, "Failed to allocate msi entry\n");
+                       error = -ENOMEM;
+                       goto cleanup_msi_descs;
+               }
+
+               msi_desc->fsl_mc.msi_index = i;
+               msi_desc->nvec_used = 1;
+               INIT_LIST_HEAD(&msi_desc->list);
+               list_add_tail(&msi_desc->list, dev_to_msi_list(dev));
+       }
+
+       return 0;
+
+cleanup_msi_descs:
+       fsl_mc_msi_free_descs(dev);
+       return error;
+}
+
+int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
+                                unsigned int irq_count)
+{
+       struct irq_domain *msi_domain;
+       int error;
+
+       if (WARN_ON(!list_empty(dev_to_msi_list(dev))))
+               return -EINVAL;
+
+       error = fsl_mc_msi_alloc_descs(dev, irq_count);
+       if (error < 0)
+               return error;
+
+       msi_domain = dev_get_msi_domain(dev);
+       if (WARN_ON(!msi_domain)) {
+               error = -EINVAL;
+               goto cleanup_msi_descs;
+       }
+
+       /*
+        * NOTE: Calling this function will trigger the invocation of the
+        * its_fsl_mc_msi_prepare() callback
+        */
+       error = msi_domain_alloc_irqs(msi_domain, dev, irq_count);
+
+       if (error) {
+               dev_err(dev, "Failed to allocate IRQs\n");
+               goto cleanup_msi_descs;
+       }
+
+       return 0;
+
+cleanup_msi_descs:
+       fsl_mc_msi_free_descs(dev);
+       return error;
+}
+
+void fsl_mc_msi_domain_free_irqs(struct device *dev)
+{
+       struct irq_domain *msi_domain;
+
+       msi_domain = dev_get_msi_domain(dev);
+       if (WARN_ON(!msi_domain))
+               return;
+
+       msi_domain_free_irqs(msi_domain, dev);
+
+       if (WARN_ON(list_empty(dev_to_msi_list(dev))))
+               return;
+
+       fsl_mc_msi_free_descs(dev);
+}
diff --git a/drivers/staging/fsl-mc/bus/fsl-mc-private.h b/drivers/staging/fsl-mc/bus/fsl-mc-private.h
new file mode 100644 (file)
index 0000000..d459c26
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Freescale Management Complex (MC) bus private declarations
+ *
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+#ifndef _FSL_MC_PRIVATE_H_
+#define _FSL_MC_PRIVATE_H_
+
+int __must_check fsl_mc_device_add(struct dprc_obj_desc *obj_desc,
+                                  struct fsl_mc_io *mc_io,
+                                  struct device *parent_dev,
+                                  struct fsl_mc_device **new_mc_dev);
+
+void fsl_mc_device_remove(struct fsl_mc_device *mc_dev);
+
+int __init dprc_driver_init(void);
+
+void dprc_driver_exit(void);
+
+int __init fsl_mc_allocator_driver_init(void);
+
+void fsl_mc_allocator_driver_exit(void);
+
+int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
+                                         enum fsl_mc_pool_type pool_type,
+                                         struct fsl_mc_resource
+                                                         **new_resource);
+
+void fsl_mc_resource_free(struct fsl_mc_resource *resource);
+
+int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
+                                unsigned int irq_count);
+
+void fsl_mc_msi_domain_free_irqs(struct device *dev);
+
+int __init its_fsl_mc_msi_init(void);
+
+void its_fsl_mc_msi_cleanup(void);
+
+int __must_check fsl_create_mc_io(struct device *dev,
+                                 phys_addr_t mc_portal_phys_addr,
+                                 u32 mc_portal_size,
+                                 struct fsl_mc_device *dpmcp_dev,
+                                 u32 flags, struct fsl_mc_io **new_mc_io);
+
+void fsl_destroy_mc_io(struct fsl_mc_io *mc_io);
+
+#endif /* _FSL_MC_PRIVATE_H_ */
index 720e2b018d00fcc77fb3e913f7a14fb63ab3c5cd..7a6ac640752fdb8f1bb46dc623047cd292ad88a0 100644 (file)
@@ -9,7 +9,6 @@
  * warranty of any kind, whether express or implied.
  */
 
-#include "../include/mc-private.h"
 #include <linux/of_device.h>
 #include <linux/of_address.h>
 #include <linux/irqchip/arm-gic-v3.h>
@@ -17,8 +16,7 @@
 #include <linux/msi.h>
 #include <linux/of.h>
 #include <linux/of_irq.h>
-#include "../include/mc-sys.h"
-#include "dprc-cmd.h"
+#include "../include/mc-bus.h"
 
 static struct irq_chip its_msi_irq_chip = {
        .name = "fsl-mc-bus-msi",
@@ -35,7 +33,7 @@ static int its_fsl_mc_msi_prepare(struct irq_domain *msi_domain,
        struct fsl_mc_device *mc_bus_dev;
        struct msi_domain_info *msi_info;
 
-       if (WARN_ON(dev->bus != &fsl_mc_bus_type))
+       if (WARN_ON(!dev_is_fsl_mc(dev)))
                return -EINVAL;
 
        mc_bus_dev = to_fsl_mc_device(dev);
diff --git a/drivers/staging/fsl-mc/bus/mc-allocator.c b/drivers/staging/fsl-mc/bus/mc-allocator.c
deleted file mode 100644 (file)
index e59d850..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-/*
- * Freescale MC object device allocator driver
- *
- * Copyright (C) 2013 Freescale Semiconductor, Inc.
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include "../include/mc-private.h"
-#include "../include/mc-sys.h"
-#include <linux/module.h>
-#include "../include/dpbp-cmd.h"
-#include "../include/dpcon-cmd.h"
-#include "dpmcp-cmd.h"
-#include "dpmcp.h"
-#include <linux/msi.h>
-
-/**
- * fsl_mc_resource_pool_add_device - add allocatable device to a resource
- * pool of a given MC bus
- *
- * @mc_bus: pointer to the MC bus
- * @pool_type: MC bus pool type
- * @mc_dev: Pointer to allocatable MC object device
- *
- * It adds an allocatable MC object device to a container's resource pool of
- * the given resource type
- */
-static int __must_check fsl_mc_resource_pool_add_device(struct fsl_mc_bus
-                                                               *mc_bus,
-                                                       enum fsl_mc_pool_type
-                                                               pool_type,
-                                                       struct fsl_mc_device
-                                                               *mc_dev)
-{
-       struct fsl_mc_resource_pool *res_pool;
-       struct fsl_mc_resource *resource;
-       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
-       int error = -EINVAL;
-
-       if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
-               goto out;
-       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               goto out;
-       if (WARN_ON(mc_dev->resource))
-               goto out;
-
-       res_pool = &mc_bus->resource_pools[pool_type];
-       if (WARN_ON(res_pool->type != pool_type))
-               goto out;
-       if (WARN_ON(res_pool->mc_bus != mc_bus))
-               goto out;
-
-       mutex_lock(&res_pool->mutex);
-
-       if (WARN_ON(res_pool->max_count < 0))
-               goto out_unlock;
-       if (WARN_ON(res_pool->free_count < 0 ||
-                   res_pool->free_count > res_pool->max_count))
-               goto out_unlock;
-
-       resource = devm_kzalloc(&mc_bus_dev->dev, sizeof(*resource),
-                               GFP_KERNEL);
-       if (!resource) {
-               error = -ENOMEM;
-               dev_err(&mc_bus_dev->dev,
-                       "Failed to allocate memory for fsl_mc_resource\n");
-               goto out_unlock;
-       }
-
-       resource->type = pool_type;
-       resource->id = mc_dev->obj_desc.id;
-       resource->data = mc_dev;
-       resource->parent_pool = res_pool;
-       INIT_LIST_HEAD(&resource->node);
-       list_add_tail(&resource->node, &res_pool->free_list);
-       mc_dev->resource = resource;
-       res_pool->free_count++;
-       res_pool->max_count++;
-       error = 0;
-out_unlock:
-       mutex_unlock(&res_pool->mutex);
-out:
-       return error;
-}
-
-/**
- * fsl_mc_resource_pool_remove_device - remove an allocatable device from a
- * resource pool
- *
- * @mc_dev: Pointer to allocatable MC object device
- *
- * It permanently removes an allocatable MC object device from the resource
- * pool, the device is currently in, as long as it is in the pool's free list.
- */
-static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
-                                                                  *mc_dev)
-{
-       struct fsl_mc_device *mc_bus_dev;
-       struct fsl_mc_bus *mc_bus;
-       struct fsl_mc_resource_pool *res_pool;
-       struct fsl_mc_resource *resource;
-       int error = -EINVAL;
-
-       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               goto out;
-
-       resource = mc_dev->resource;
-       if (WARN_ON(!resource || resource->data != mc_dev))
-               goto out;
-
-       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
-       mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       res_pool = resource->parent_pool;
-       if (WARN_ON(res_pool != &mc_bus->resource_pools[resource->type]))
-               goto out;
-
-       mutex_lock(&res_pool->mutex);
-
-       if (WARN_ON(res_pool->max_count <= 0))
-               goto out_unlock;
-       if (WARN_ON(res_pool->free_count <= 0 ||
-                   res_pool->free_count > res_pool->max_count))
-               goto out_unlock;
-
-       /*
-        * If the device is currently allocated, its resource is not
-        * in the free list and thus, the device cannot be removed.
-        */
-       if (list_empty(&resource->node)) {
-               error = -EBUSY;
-               dev_err(&mc_bus_dev->dev,
-                       "Device %s cannot be removed from resource pool\n",
-                       dev_name(&mc_dev->dev));
-               goto out_unlock;
-       }
-
-       list_del(&resource->node);
-       INIT_LIST_HEAD(&resource->node);
-       res_pool->free_count--;
-       res_pool->max_count--;
-
-       devm_kfree(&mc_bus_dev->dev, resource);
-       mc_dev->resource = NULL;
-       error = 0;
-out_unlock:
-       mutex_unlock(&res_pool->mutex);
-out:
-       return error;
-}
-
-static const char *const fsl_mc_pool_type_strings[] = {
-       [FSL_MC_POOL_DPMCP] = "dpmcp",
-       [FSL_MC_POOL_DPBP] = "dpbp",
-       [FSL_MC_POOL_DPCON] = "dpcon",
-       [FSL_MC_POOL_IRQ] = "irq",
-};
-
-static int __must_check object_type_to_pool_type(const char *object_type,
-                                                enum fsl_mc_pool_type
-                                                               *pool_type)
-{
-       unsigned int i;
-
-       for (i = 0; i < ARRAY_SIZE(fsl_mc_pool_type_strings); i++) {
-               if (strcmp(object_type, fsl_mc_pool_type_strings[i]) == 0) {
-                       *pool_type = i;
-                       return 0;
-               }
-       }
-
-       return -EINVAL;
-}
-
-int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
-                                         enum fsl_mc_pool_type pool_type,
-                                         struct fsl_mc_resource **new_resource)
-{
-       struct fsl_mc_resource_pool *res_pool;
-       struct fsl_mc_resource *resource;
-       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
-       int error = -EINVAL;
-
-       BUILD_BUG_ON(ARRAY_SIZE(fsl_mc_pool_type_strings) !=
-                    FSL_MC_NUM_POOL_TYPES);
-
-       *new_resource = NULL;
-       if (WARN_ON(pool_type < 0 || pool_type >= FSL_MC_NUM_POOL_TYPES))
-               goto out;
-
-       res_pool = &mc_bus->resource_pools[pool_type];
-       if (WARN_ON(res_pool->mc_bus != mc_bus))
-               goto out;
-
-       mutex_lock(&res_pool->mutex);
-       resource = list_first_entry_or_null(&res_pool->free_list,
-                                           struct fsl_mc_resource, node);
-
-       if (!resource) {
-               WARN_ON(res_pool->free_count != 0);
-               error = -ENXIO;
-               dev_err(&mc_bus_dev->dev,
-                       "No more resources of type %s left\n",
-                       fsl_mc_pool_type_strings[pool_type]);
-               goto out_unlock;
-       }
-
-       if (WARN_ON(resource->type != pool_type))
-               goto out_unlock;
-       if (WARN_ON(resource->parent_pool != res_pool))
-               goto out_unlock;
-       if (WARN_ON(res_pool->free_count <= 0 ||
-                   res_pool->free_count > res_pool->max_count))
-               goto out_unlock;
-
-       list_del(&resource->node);
-       INIT_LIST_HEAD(&resource->node);
-
-       res_pool->free_count--;
-       error = 0;
-out_unlock:
-       mutex_unlock(&res_pool->mutex);
-       *new_resource = resource;
-out:
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_resource_allocate);
-
-void fsl_mc_resource_free(struct fsl_mc_resource *resource)
-{
-       struct fsl_mc_resource_pool *res_pool;
-
-       res_pool = resource->parent_pool;
-       if (WARN_ON(resource->type != res_pool->type))
-               return;
-
-       mutex_lock(&res_pool->mutex);
-       if (WARN_ON(res_pool->free_count < 0 ||
-                   res_pool->free_count >= res_pool->max_count))
-               goto out_unlock;
-
-       if (WARN_ON(!list_empty(&resource->node)))
-               goto out_unlock;
-
-       list_add_tail(&resource->node, &res_pool->free_list);
-       res_pool->free_count++;
-out_unlock:
-       mutex_unlock(&res_pool->mutex);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_resource_free);
-
-/**
- * fsl_mc_portal_allocate - Allocates an MC portal
- *
- * @mc_dev: MC device for which the MC portal is to be allocated
- * @mc_io_flags: Flags for the fsl_mc_io object that wraps the allocated
- * MC portal.
- * @new_mc_io: Pointer to area where the pointer to the fsl_mc_io object
- * that wraps the allocated MC portal is to be returned
- *
- * This function allocates an MC portal from the device's parent DPRC,
- * from the corresponding MC bus' pool of MC portals and wraps
- * it in a new fsl_mc_io object. If 'mc_dev' is a DPRC itself, the
- * portal is allocated from its own MC bus.
- */
-int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
-                                       u16 mc_io_flags,
-                                       struct fsl_mc_io **new_mc_io)
-{
-       struct fsl_mc_device *mc_bus_dev;
-       struct fsl_mc_bus *mc_bus;
-       phys_addr_t mc_portal_phys_addr;
-       size_t mc_portal_size;
-       struct fsl_mc_device *dpmcp_dev;
-       int error = -EINVAL;
-       struct fsl_mc_resource *resource = NULL;
-       struct fsl_mc_io *mc_io = NULL;
-
-       if (mc_dev->flags & FSL_MC_IS_DPRC) {
-               mc_bus_dev = mc_dev;
-       } else {
-               if (WARN_ON(mc_dev->dev.parent->bus != &fsl_mc_bus_type))
-                       return error;
-
-               mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
-       }
-
-       mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       *new_mc_io = NULL;
-       error = fsl_mc_resource_allocate(mc_bus, FSL_MC_POOL_DPMCP, &resource);
-       if (error < 0)
-               return error;
-
-       error = -EINVAL;
-       dpmcp_dev = resource->data;
-       if (WARN_ON(!dpmcp_dev))
-               goto error_cleanup_resource;
-
-       if (dpmcp_dev->obj_desc.ver_major < DPMCP_MIN_VER_MAJOR ||
-           (dpmcp_dev->obj_desc.ver_major == DPMCP_MIN_VER_MAJOR &&
-            dpmcp_dev->obj_desc.ver_minor < DPMCP_MIN_VER_MINOR)) {
-               dev_err(&dpmcp_dev->dev,
-                       "ERROR: Version %d.%d of DPMCP not supported.\n",
-                       dpmcp_dev->obj_desc.ver_major,
-                       dpmcp_dev->obj_desc.ver_minor);
-               error = -ENOTSUPP;
-               goto error_cleanup_resource;
-       }
-
-       if (WARN_ON(dpmcp_dev->obj_desc.region_count == 0))
-               goto error_cleanup_resource;
-
-       mc_portal_phys_addr = dpmcp_dev->regions[0].start;
-       mc_portal_size = dpmcp_dev->regions[0].end -
-                        dpmcp_dev->regions[0].start + 1;
-
-       if (WARN_ON(mc_portal_size != mc_bus_dev->mc_io->portal_size))
-               goto error_cleanup_resource;
-
-       error = fsl_create_mc_io(&mc_bus_dev->dev,
-                                mc_portal_phys_addr,
-                                mc_portal_size, dpmcp_dev,
-                                mc_io_flags, &mc_io);
-       if (error < 0)
-               goto error_cleanup_resource;
-
-       *new_mc_io = mc_io;
-       return 0;
-
-error_cleanup_resource:
-       fsl_mc_resource_free(resource);
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_portal_allocate);
-
-/**
- * fsl_mc_portal_free - Returns an MC portal to the pool of free MC portals
- * of a given MC bus
- *
- * @mc_io: Pointer to the fsl_mc_io object that wraps the MC portal to free
- */
-void fsl_mc_portal_free(struct fsl_mc_io *mc_io)
-{
-       struct fsl_mc_device *dpmcp_dev;
-       struct fsl_mc_resource *resource;
-
-       /*
-        * Every mc_io obtained by calling fsl_mc_portal_allocate() is supposed
-        * to have a DPMCP object associated with.
-        */
-       dpmcp_dev = mc_io->dpmcp_dev;
-       if (WARN_ON(!dpmcp_dev))
-               return;
-
-       resource = dpmcp_dev->resource;
-       if (WARN_ON(!resource || resource->type != FSL_MC_POOL_DPMCP))
-               return;
-
-       if (WARN_ON(resource->data != dpmcp_dev))
-               return;
-
-       fsl_destroy_mc_io(mc_io);
-       fsl_mc_resource_free(resource);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_portal_free);
-
-/**
- * fsl_mc_portal_reset - Resets the dpmcp object for a given fsl_mc_io object
- *
- * @mc_io: Pointer to the fsl_mc_io object that wraps the MC portal to free
- */
-int fsl_mc_portal_reset(struct fsl_mc_io *mc_io)
-{
-       int error;
-       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
-
-       if (WARN_ON(!dpmcp_dev))
-               return -EINVAL;
-
-       error = dpmcp_reset(mc_io, 0, dpmcp_dev->mc_handle);
-       if (error < 0) {
-               dev_err(&dpmcp_dev->dev, "dpmcp_reset() failed: %d\n", error);
-               return error;
-       }
-
-       return 0;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_portal_reset);
-
-/**
- * fsl_mc_object_allocate - Allocates a MC object device of the given
- * pool type from a given MC bus
- *
- * @mc_dev: MC device for which the MC object device is to be allocated
- * @pool_type: MC bus resource pool type
- * @new_mc_dev: Pointer to area where the pointer to the allocated
- * MC object device is to be returned
- *
- * This function allocates a MC object device from the device's parent DPRC,
- * from the corresponding MC bus' pool of allocatable MC object devices of
- * the given resource type. mc_dev cannot be a DPRC itself.
- *
- * NOTE: pool_type must be different from FSL_MC_POOL_MCP, since MC
- * portals are allocated using fsl_mc_portal_allocate(), instead of
- * this function.
- */
-int __must_check fsl_mc_object_allocate(struct fsl_mc_device *mc_dev,
-                                       enum fsl_mc_pool_type pool_type,
-                                       struct fsl_mc_device **new_mc_adev)
-{
-       struct fsl_mc_device *mc_bus_dev;
-       struct fsl_mc_bus *mc_bus;
-       struct fsl_mc_device *mc_adev;
-       int error = -EINVAL;
-       struct fsl_mc_resource *resource = NULL;
-
-       *new_mc_adev = NULL;
-       if (WARN_ON(mc_dev->flags & FSL_MC_IS_DPRC))
-               goto error;
-
-       if (WARN_ON(mc_dev->dev.parent->bus != &fsl_mc_bus_type))
-               goto error;
-
-       if (WARN_ON(pool_type == FSL_MC_POOL_DPMCP))
-               goto error;
-
-       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
-       mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       error = fsl_mc_resource_allocate(mc_bus, pool_type, &resource);
-       if (error < 0)
-               goto error;
-
-       mc_adev = resource->data;
-       if (WARN_ON(!mc_adev))
-               goto error;
-
-       *new_mc_adev = mc_adev;
-       return 0;
-error:
-       if (resource)
-               fsl_mc_resource_free(resource);
-
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_object_allocate);
-
-/**
- * fsl_mc_object_free - Returns an allocatable MC object device to the
- * corresponding resource pool of a given MC bus.
- *
- * @mc_adev: Pointer to the MC object device
- */
-void fsl_mc_object_free(struct fsl_mc_device *mc_adev)
-{
-       struct fsl_mc_resource *resource;
-
-       resource = mc_adev->resource;
-       if (WARN_ON(resource->type == FSL_MC_POOL_DPMCP))
-               return;
-       if (WARN_ON(resource->data != mc_adev))
-               return;
-
-       fsl_mc_resource_free(resource);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_object_free);
-
-/*
- * Initialize the interrupt pool associated with a MC bus.
- * It allocates a block of IRQs from the GIC-ITS
- */
-int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
-                            unsigned int irq_count)
-{
-       unsigned int i;
-       struct msi_desc *msi_desc;
-       struct fsl_mc_device_irq *irq_resources;
-       struct fsl_mc_device_irq *mc_dev_irq;
-       int error;
-       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
-       struct fsl_mc_resource_pool *res_pool =
-                       &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
-
-       if (WARN_ON(irq_count == 0 ||
-                   irq_count > FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS))
-               return -EINVAL;
-
-       error = fsl_mc_msi_domain_alloc_irqs(&mc_bus_dev->dev, irq_count);
-       if (error < 0)
-               return error;
-
-       irq_resources = devm_kzalloc(&mc_bus_dev->dev,
-                                    sizeof(*irq_resources) * irq_count,
-                                    GFP_KERNEL);
-       if (!irq_resources) {
-               error = -ENOMEM;
-               goto cleanup_msi_irqs;
-       }
-
-       for (i = 0; i < irq_count; i++) {
-               mc_dev_irq = &irq_resources[i];
-
-               /*
-                * NOTE: This mc_dev_irq's MSI addr/value pair will be set
-                * by the fsl_mc_msi_write_msg() callback
-                */
-               mc_dev_irq->resource.type = res_pool->type;
-               mc_dev_irq->resource.data = mc_dev_irq;
-               mc_dev_irq->resource.parent_pool = res_pool;
-               INIT_LIST_HEAD(&mc_dev_irq->resource.node);
-               list_add_tail(&mc_dev_irq->resource.node, &res_pool->free_list);
-       }
-
-       for_each_msi_entry(msi_desc, &mc_bus_dev->dev) {
-               mc_dev_irq = &irq_resources[msi_desc->fsl_mc.msi_index];
-               mc_dev_irq->msi_desc = msi_desc;
-               mc_dev_irq->resource.id = msi_desc->irq;
-       }
-
-       res_pool->max_count = irq_count;
-       res_pool->free_count = irq_count;
-       mc_bus->irq_resources = irq_resources;
-       return 0;
-
-cleanup_msi_irqs:
-       fsl_mc_msi_domain_free_irqs(&mc_bus_dev->dev);
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_populate_irq_pool);
-
-/**
- * Teardown the interrupt pool associated with an MC bus.
- * It frees the IRQs that were allocated to the pool, back to the GIC-ITS.
- */
-void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus)
-{
-       struct fsl_mc_device *mc_bus_dev = &mc_bus->mc_dev;
-       struct fsl_mc_resource_pool *res_pool =
-                       &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
-
-       if (WARN_ON(!mc_bus->irq_resources))
-               return;
-
-       if (WARN_ON(res_pool->max_count == 0))
-               return;
-
-       if (WARN_ON(res_pool->free_count != res_pool->max_count))
-               return;
-
-       INIT_LIST_HEAD(&res_pool->free_list);
-       res_pool->max_count = 0;
-       res_pool->free_count = 0;
-       mc_bus->irq_resources = NULL;
-       fsl_mc_msi_domain_free_irqs(&mc_bus_dev->dev);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_cleanup_irq_pool);
-
-/**
- * It allocates the IRQs required by a given MC object device. The
- * IRQs are allocated from the interrupt pool associated with the
- * MC bus that contains the device, if the device is not a DPRC device.
- * Otherwise, the IRQs are allocated from the interrupt pool associated
- * with the MC bus that represents the DPRC device itself.
- */
-int __must_check fsl_mc_allocate_irqs(struct fsl_mc_device *mc_dev)
-{
-       int i;
-       int irq_count;
-       int res_allocated_count = 0;
-       int error = -EINVAL;
-       struct fsl_mc_device_irq **irqs = NULL;
-       struct fsl_mc_bus *mc_bus;
-       struct fsl_mc_resource_pool *res_pool;
-
-       if (WARN_ON(mc_dev->irqs))
-               return -EINVAL;
-
-       irq_count = mc_dev->obj_desc.irq_count;
-       if (WARN_ON(irq_count == 0))
-               return -EINVAL;
-
-       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0)
-               mc_bus = to_fsl_mc_bus(mc_dev);
-       else
-               mc_bus = to_fsl_mc_bus(to_fsl_mc_device(mc_dev->dev.parent));
-
-       if (WARN_ON(!mc_bus->irq_resources))
-               return -EINVAL;
-
-       res_pool = &mc_bus->resource_pools[FSL_MC_POOL_IRQ];
-       if (res_pool->free_count < irq_count) {
-               dev_err(&mc_dev->dev,
-                       "Not able to allocate %u irqs for device\n", irq_count);
-               return -ENOSPC;
-       }
-
-       irqs = devm_kzalloc(&mc_dev->dev, irq_count * sizeof(irqs[0]),
-                           GFP_KERNEL);
-       if (!irqs)
-               return -ENOMEM;
-
-       for (i = 0; i < irq_count; i++) {
-               struct fsl_mc_resource *resource;
-
-               error = fsl_mc_resource_allocate(mc_bus, FSL_MC_POOL_IRQ,
-                                                &resource);
-               if (error < 0)
-                       goto error_resource_alloc;
-
-               irqs[i] = to_fsl_mc_irq(resource);
-               res_allocated_count++;
-
-               WARN_ON(irqs[i]->mc_dev);
-               irqs[i]->mc_dev = mc_dev;
-               irqs[i]->dev_irq_index = i;
-       }
-
-       mc_dev->irqs = irqs;
-       return 0;
-
-error_resource_alloc:
-       for (i = 0; i < res_allocated_count; i++) {
-               irqs[i]->mc_dev = NULL;
-               fsl_mc_resource_free(&irqs[i]->resource);
-       }
-
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_allocate_irqs);
-
-/*
- * It frees the IRQs that were allocated for a MC object device, by
- * returning them to the corresponding interrupt pool.
- */
-void fsl_mc_free_irqs(struct fsl_mc_device *mc_dev)
-{
-       int i;
-       int irq_count;
-       struct fsl_mc_bus *mc_bus;
-       struct fsl_mc_device_irq **irqs = mc_dev->irqs;
-
-       if (WARN_ON(!irqs))
-               return;
-
-       irq_count = mc_dev->obj_desc.irq_count;
-
-       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0)
-               mc_bus = to_fsl_mc_bus(mc_dev);
-       else
-               mc_bus = to_fsl_mc_bus(to_fsl_mc_device(mc_dev->dev.parent));
-
-       if (WARN_ON(!mc_bus->irq_resources))
-               return;
-
-       for (i = 0; i < irq_count; i++) {
-               WARN_ON(!irqs[i]->mc_dev);
-               irqs[i]->mc_dev = NULL;
-               fsl_mc_resource_free(&irqs[i]->resource);
-       }
-
-       mc_dev->irqs = NULL;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_free_irqs);
-
-/**
- * fsl_mc_allocator_probe - callback invoked when an allocatable device is
- * being added to the system
- */
-static int fsl_mc_allocator_probe(struct fsl_mc_device *mc_dev)
-{
-       enum fsl_mc_pool_type pool_type;
-       struct fsl_mc_device *mc_bus_dev;
-       struct fsl_mc_bus *mc_bus;
-       int error;
-
-       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               return -EINVAL;
-
-       mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
-       if (WARN_ON(mc_bus_dev->dev.bus != &fsl_mc_bus_type))
-               return -EINVAL;
-
-       mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       error = object_type_to_pool_type(mc_dev->obj_desc.type, &pool_type);
-       if (error < 0)
-               return error;
-
-       error = fsl_mc_resource_pool_add_device(mc_bus, pool_type, mc_dev);
-       if (error < 0)
-               return error;
-
-       dev_dbg(&mc_dev->dev,
-               "Allocatable MC object device bound to fsl_mc_allocator driver");
-       return 0;
-}
-
-/**
- * fsl_mc_allocator_remove - callback invoked when an allocatable device is
- * being removed from the system
- */
-static int fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
-{
-       int error;
-
-       if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               return -EINVAL;
-
-       if (mc_dev->resource) {
-               error = fsl_mc_resource_pool_remove_device(mc_dev);
-               if (error < 0)
-                       return error;
-       }
-
-       dev_dbg(&mc_dev->dev,
-               "Allocatable MC object device unbound from fsl_mc_allocator driver");
-       return 0;
-}
-
-static const struct fsl_mc_device_id match_id_table[] = {
-       {
-        .vendor = FSL_MC_VENDOR_FREESCALE,
-        .obj_type = "dpbp",
-       },
-       {
-        .vendor = FSL_MC_VENDOR_FREESCALE,
-        .obj_type = "dpmcp",
-       },
-       {
-        .vendor = FSL_MC_VENDOR_FREESCALE,
-        .obj_type = "dpcon",
-       },
-       {.vendor = 0x0},
-};
-
-static struct fsl_mc_driver fsl_mc_allocator_driver = {
-       .driver = {
-                  .name = "fsl_mc_allocator",
-                  .owner = THIS_MODULE,
-                  .pm = NULL,
-                  },
-       .match_id_table = match_id_table,
-       .probe = fsl_mc_allocator_probe,
-       .remove = fsl_mc_allocator_remove,
-};
-
-int __init fsl_mc_allocator_driver_init(void)
-{
-       return fsl_mc_driver_register(&fsl_mc_allocator_driver);
-}
-
-void fsl_mc_allocator_driver_exit(void)
-{
-       fsl_mc_driver_unregister(&fsl_mc_allocator_driver);
-}
diff --git a/drivers/staging/fsl-mc/bus/mc-bus.c b/drivers/staging/fsl-mc/bus/mc-bus.c
deleted file mode 100644 (file)
index db3afdb..0000000
+++ /dev/null
@@ -1,911 +0,0 @@
-/*
- * Freescale Management Complex (MC) bus driver
- *
- * Copyright (C) 2014 Freescale Semiconductor, Inc.
- * Author: German Rivera <German.Rivera@freescale.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include "../include/mc-private.h"
-#include <linux/module.h>
-#include <linux/of_device.h>
-#include <linux/of_address.h>
-#include <linux/ioport.h>
-#include <linux/slab.h>
-#include <linux/limits.h>
-#include <linux/bitops.h>
-#include <linux/msi.h>
-#include "../include/dpmng.h"
-#include "../include/mc-sys.h"
-#include "dprc-cmd.h"
-
-static struct kmem_cache *mc_dev_cache;
-
-/**
- * fsl_mc_bus_match - device to driver matching callback
- * @dev: the MC object device structure to match against
- * @drv: the device driver to search for matching MC object device id
- * structures
- *
- * Returns 1 on success, 0 otherwise.
- */
-static int fsl_mc_bus_match(struct device *dev, struct device_driver *drv)
-{
-       const struct fsl_mc_device_id *id;
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(drv);
-       bool found = false;
-
-       if (WARN_ON(!fsl_mc_bus_exists()))
-               goto out;
-
-       if (!mc_drv->match_id_table)
-               goto out;
-
-       /*
-        * If the object is not 'plugged' don't match.
-        * Only exception is the root DPRC, which is a special case.
-        */
-       if ((mc_dev->obj_desc.state & DPRC_OBJ_STATE_PLUGGED) == 0 &&
-           !fsl_mc_is_root_dprc(&mc_dev->dev))
-               goto out;
-
-       /*
-        * Traverse the match_id table of the given driver, trying to find
-        * a matching for the given MC object device.
-        */
-       for (id = mc_drv->match_id_table; id->vendor != 0x0; id++) {
-               if (id->vendor == mc_dev->obj_desc.vendor &&
-                   strcmp(id->obj_type, mc_dev->obj_desc.type) == 0) {
-                       found = true;
-
-                       break;
-               }
-       }
-
-out:
-       dev_dbg(dev, "%smatched\n", found ? "" : "not ");
-       return found;
-}
-
-/**
- * fsl_mc_bus_uevent - callback invoked when a device is added
- */
-static int fsl_mc_bus_uevent(struct device *dev, struct kobj_uevent_env *env)
-{
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-
-       if (add_uevent_var(env, "MODALIAS=fsl-mc:v%08Xd%s",
-                          mc_dev->obj_desc.vendor,
-                          mc_dev->obj_desc.type))
-               return -ENOMEM;
-
-       return 0;
-}
-
-static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
-                            char *buf)
-{
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-
-       return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor,
-                      mc_dev->obj_desc.type);
-}
-static DEVICE_ATTR_RO(modalias);
-
-static struct attribute *fsl_mc_dev_attrs[] = {
-       &dev_attr_modalias.attr,
-       NULL,
-};
-
-static const struct attribute_group fsl_mc_dev_group = {
-       .attrs = fsl_mc_dev_attrs,
-};
-
-static const struct attribute_group *fsl_mc_dev_groups[] = {
-       &fsl_mc_dev_group,
-       NULL,
-};
-
-struct bus_type fsl_mc_bus_type = {
-       .name = "fsl-mc",
-       .match = fsl_mc_bus_match,
-       .uevent = fsl_mc_bus_uevent,
-       .dev_groups = fsl_mc_dev_groups,
-};
-EXPORT_SYMBOL_GPL(fsl_mc_bus_type);
-
-static atomic_t root_dprc_count = ATOMIC_INIT(0);
-
-static int fsl_mc_driver_probe(struct device *dev)
-{
-       struct fsl_mc_driver *mc_drv;
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-       int error;
-
-       if (WARN_ON(!dev->driver))
-               return -EINVAL;
-
-       mc_drv = to_fsl_mc_driver(dev->driver);
-       if (WARN_ON(!mc_drv->probe))
-               return -EINVAL;
-
-       error = mc_drv->probe(mc_dev);
-       if (error < 0) {
-               dev_err(dev, "MC object device probe callback failed: %d\n",
-                       error);
-               return error;
-       }
-
-       return 0;
-}
-
-static int fsl_mc_driver_remove(struct device *dev)
-{
-       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-       int error;
-
-       if (WARN_ON(!dev->driver))
-               return -EINVAL;
-
-       error = mc_drv->remove(mc_dev);
-       if (error < 0) {
-               dev_err(dev,
-                       "MC object device remove callback failed: %d\n",
-                       error);
-               return error;
-       }
-
-       return 0;
-}
-
-static void fsl_mc_driver_shutdown(struct device *dev)
-{
-       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(dev->driver);
-       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
-
-       mc_drv->shutdown(mc_dev);
-}
-
-/**
- * __fsl_mc_driver_register - registers a child device driver with the
- * MC bus
- *
- * This function is implicitly invoked from the registration function of
- * fsl_mc device drivers, which is generated by the
- * module_fsl_mc_driver() macro.
- */
-int __fsl_mc_driver_register(struct fsl_mc_driver *mc_driver,
-                            struct module *owner)
-{
-       int error;
-
-       mc_driver->driver.owner = owner;
-       mc_driver->driver.bus = &fsl_mc_bus_type;
-
-       if (mc_driver->probe)
-               mc_driver->driver.probe = fsl_mc_driver_probe;
-
-       if (mc_driver->remove)
-               mc_driver->driver.remove = fsl_mc_driver_remove;
-
-       if (mc_driver->shutdown)
-               mc_driver->driver.shutdown = fsl_mc_driver_shutdown;
-
-       error = driver_register(&mc_driver->driver);
-       if (error < 0) {
-               pr_err("driver_register() failed for %s: %d\n",
-                      mc_driver->driver.name, error);
-               return error;
-       }
-
-       pr_info("MC object device driver %s registered\n",
-               mc_driver->driver.name);
-       return 0;
-}
-EXPORT_SYMBOL_GPL(__fsl_mc_driver_register);
-
-/**
- * fsl_mc_driver_unregister - unregisters a device driver from the
- * MC bus
- */
-void fsl_mc_driver_unregister(struct fsl_mc_driver *mc_driver)
-{
-       driver_unregister(&mc_driver->driver);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_driver_unregister);
-
-/**
- * fsl_mc_bus_exists - check if a root dprc exists
- */
-bool fsl_mc_bus_exists(void)
-{
-       return atomic_read(&root_dprc_count) > 0;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_bus_exists);
-
-/**
-* fsl_mc_get_root_dprc - function to traverse to the root dprc
-*/
-static void fsl_mc_get_root_dprc(struct device *dev,
-                                struct device **root_dprc_dev)
-{
-       if (WARN_ON(!dev)) {
-               *root_dprc_dev = NULL;
-       } else if (WARN_ON(dev->bus != &fsl_mc_bus_type)) {
-               *root_dprc_dev = NULL;
-       } else {
-               *root_dprc_dev = dev;
-               while ((*root_dprc_dev)->parent->bus == &fsl_mc_bus_type)
-                       *root_dprc_dev = (*root_dprc_dev)->parent;
-       }
-}
-
-static int get_dprc_attr(struct fsl_mc_io *mc_io,
-                        int container_id, struct dprc_attributes *attr)
-{
-       u16 dprc_handle;
-       int error;
-
-       error = dprc_open(mc_io, 0, container_id, &dprc_handle);
-       if (error < 0) {
-               dev_err(mc_io->dev, "dprc_open() failed: %d\n", error);
-               return error;
-       }
-
-       memset(attr, 0, sizeof(struct dprc_attributes));
-       error = dprc_get_attributes(mc_io, 0, dprc_handle, attr);
-       if (error < 0) {
-               dev_err(mc_io->dev, "dprc_get_attributes() failed: %d\n",
-                       error);
-               goto common_cleanup;
-       }
-
-       error = 0;
-
-common_cleanup:
-       (void)dprc_close(mc_io, 0, dprc_handle);
-       return error;
-}
-
-static int get_dprc_icid(struct fsl_mc_io *mc_io,
-                        int container_id, u16 *icid)
-{
-       struct dprc_attributes attr;
-       int error;
-
-       error = get_dprc_attr(mc_io, container_id, &attr);
-       if (error == 0)
-               *icid = attr.icid;
-
-       return error;
-}
-
-static int get_dprc_version(struct fsl_mc_io *mc_io,
-                           int container_id, u16 *major, u16 *minor)
-{
-       struct dprc_attributes attr;
-       int error;
-
-       error = get_dprc_attr(mc_io, container_id, &attr);
-       if (error == 0) {
-               *major = attr.version.major;
-               *minor = attr.version.minor;
-       }
-
-       return error;
-}
-
-static int translate_mc_addr(struct fsl_mc_device *mc_dev,
-                            enum dprc_region_type mc_region_type,
-                            u64 mc_offset, phys_addr_t *phys_addr)
-{
-       int i;
-       struct device *root_dprc_dev;
-       struct fsl_mc *mc;
-
-       fsl_mc_get_root_dprc(&mc_dev->dev, &root_dprc_dev);
-       if (WARN_ON(!root_dprc_dev))
-               return -EINVAL;
-       mc = dev_get_drvdata(root_dprc_dev->parent);
-
-       if (mc->num_translation_ranges == 0) {
-               /*
-                * Do identity mapping:
-                */
-               *phys_addr = mc_offset;
-               return 0;
-       }
-
-       for (i = 0; i < mc->num_translation_ranges; i++) {
-               struct fsl_mc_addr_translation_range *range =
-                       &mc->translation_ranges[i];
-
-               if (mc_region_type == range->mc_region_type &&
-                   mc_offset >= range->start_mc_offset &&
-                   mc_offset < range->end_mc_offset) {
-                       *phys_addr = range->start_phys_addr +
-                                    (mc_offset - range->start_mc_offset);
-                       return 0;
-               }
-       }
-
-       return -EFAULT;
-}
-
-static int fsl_mc_device_get_mmio_regions(struct fsl_mc_device *mc_dev,
-                                         struct fsl_mc_device *mc_bus_dev)
-{
-       int i;
-       int error;
-       struct resource *regions;
-       struct dprc_obj_desc *obj_desc = &mc_dev->obj_desc;
-       struct device *parent_dev = mc_dev->dev.parent;
-       enum dprc_region_type mc_region_type;
-
-       if (strcmp(obj_desc->type, "dprc") == 0 ||
-           strcmp(obj_desc->type, "dpmcp") == 0) {
-               mc_region_type = DPRC_REGION_TYPE_MC_PORTAL;
-       } else if (strcmp(obj_desc->type, "dpio") == 0) {
-               mc_region_type = DPRC_REGION_TYPE_QBMAN_PORTAL;
-       } else {
-               /*
-                * This function should not have been called for this MC object
-                * type, as this object type is not supposed to have MMIO
-                * regions
-                */
-               WARN_ON(true);
-               return -EINVAL;
-       }
-
-       regions = kmalloc_array(obj_desc->region_count,
-                               sizeof(regions[0]), GFP_KERNEL);
-       if (!regions)
-               return -ENOMEM;
-
-       for (i = 0; i < obj_desc->region_count; i++) {
-               struct dprc_region_desc region_desc;
-
-               error = dprc_get_obj_region(mc_bus_dev->mc_io,
-                                           0,
-                                           mc_bus_dev->mc_handle,
-                                           obj_desc->type,
-                                           obj_desc->id, i, &region_desc);
-               if (error < 0) {
-                       dev_err(parent_dev,
-                               "dprc_get_obj_region() failed: %d\n", error);
-                       goto error_cleanup_regions;
-               }
-
-               WARN_ON(region_desc.size == 0);
-               error = translate_mc_addr(mc_dev, mc_region_type,
-                                         region_desc.base_offset,
-                                         &regions[i].start);
-               if (error < 0) {
-                       dev_err(parent_dev,
-                               "Invalid MC offset: %#x (for %s.%d\'s region %d)\n",
-                               region_desc.base_offset,
-                               obj_desc->type, obj_desc->id, i);
-                       goto error_cleanup_regions;
-               }
-
-               regions[i].end = regions[i].start + region_desc.size - 1;
-               regions[i].name = "fsl-mc object MMIO region";
-               regions[i].flags = IORESOURCE_IO;
-               if (region_desc.flags & DPRC_REGION_CACHEABLE)
-                       regions[i].flags |= IORESOURCE_CACHEABLE;
-       }
-
-       mc_dev->regions = regions;
-       return 0;
-
-error_cleanup_regions:
-       kfree(regions);
-       return error;
-}
-
-/**
- * fsl_mc_is_root_dprc - function to check if a given device is a root dprc
- */
-bool fsl_mc_is_root_dprc(struct device *dev)
-{
-       struct device *root_dprc_dev;
-
-       fsl_mc_get_root_dprc(dev, &root_dprc_dev);
-       if (!root_dprc_dev)
-               return false;
-       return dev == root_dprc_dev;
-}
-
-/**
- * Add a newly discovered MC object device to be visible in Linux
- */
-int fsl_mc_device_add(struct dprc_obj_desc *obj_desc,
-                     struct fsl_mc_io *mc_io,
-                     struct device *parent_dev,
-                     struct fsl_mc_device **new_mc_dev)
-{
-       int error;
-       struct fsl_mc_device *mc_dev = NULL;
-       struct fsl_mc_bus *mc_bus = NULL;
-       struct fsl_mc_device *parent_mc_dev;
-
-       if (parent_dev->bus == &fsl_mc_bus_type)
-               parent_mc_dev = to_fsl_mc_device(parent_dev);
-       else
-               parent_mc_dev = NULL;
-
-       if (strcmp(obj_desc->type, "dprc") == 0) {
-               /*
-                * Allocate an MC bus device object:
-                */
-               mc_bus = devm_kzalloc(parent_dev, sizeof(*mc_bus), GFP_KERNEL);
-               if (!mc_bus)
-                       return -ENOMEM;
-
-               mc_dev = &mc_bus->mc_dev;
-       } else {
-               /*
-                * Allocate a regular fsl_mc_device object:
-                */
-               mc_dev = kmem_cache_zalloc(mc_dev_cache, GFP_KERNEL);
-               if (!mc_dev)
-                       return -ENOMEM;
-       }
-
-       mc_dev->obj_desc = *obj_desc;
-       mc_dev->mc_io = mc_io;
-       device_initialize(&mc_dev->dev);
-       mc_dev->dev.parent = parent_dev;
-       mc_dev->dev.bus = &fsl_mc_bus_type;
-       dev_set_name(&mc_dev->dev, "%s.%d", obj_desc->type, obj_desc->id);
-
-       if (strcmp(obj_desc->type, "dprc") == 0) {
-               struct fsl_mc_io *mc_io2;
-
-               mc_dev->flags |= FSL_MC_IS_DPRC;
-
-               /*
-                * To get the DPRC's ICID, we need to open the DPRC
-                * in get_dprc_icid(). For child DPRCs, we do so using the
-                * parent DPRC's MC portal instead of the child DPRC's MC
-                * portal, in case the child DPRC is already opened with
-                * its own portal (e.g., the DPRC used by AIOP).
-                *
-                * NOTE: There cannot be more than one active open for a
-                * given MC object, using the same MC portal.
-                */
-               if (parent_mc_dev) {
-                       /*
-                        * device being added is a child DPRC device
-                        */
-                       mc_io2 = parent_mc_dev->mc_io;
-               } else {
-                       /*
-                        * device being added is the root DPRC device
-                        */
-                       if (WARN_ON(!mc_io)) {
-                               error = -EINVAL;
-                               goto error_cleanup_dev;
-                       }
-
-                       mc_io2 = mc_io;
-
-                       atomic_inc(&root_dprc_count);
-               }
-
-               error = get_dprc_icid(mc_io2, obj_desc->id, &mc_dev->icid);
-               if (error < 0)
-                       goto error_cleanup_dev;
-       } else {
-               /*
-                * A non-DPRC MC object device has to be a child of another
-                * MC object (specifically a DPRC object)
-                */
-               mc_dev->icid = parent_mc_dev->icid;
-               mc_dev->dma_mask = FSL_MC_DEFAULT_DMA_MASK;
-               mc_dev->dev.dma_mask = &mc_dev->dma_mask;
-               dev_set_msi_domain(&mc_dev->dev,
-                                  dev_get_msi_domain(&parent_mc_dev->dev));
-       }
-
-       /*
-        * Get MMIO regions for the device from the MC:
-        *
-        * NOTE: the root DPRC is a special case as its MMIO region is
-        * obtained from the device tree
-        */
-       if (parent_mc_dev && obj_desc->region_count != 0) {
-               error = fsl_mc_device_get_mmio_regions(mc_dev,
-                                                      parent_mc_dev);
-               if (error < 0)
-                       goto error_cleanup_dev;
-       }
-
-       /* Objects are coherent, unless 'no shareability' flag set. */
-       if (!(obj_desc->flags & DPRC_OBJ_FLAG_NO_MEM_SHAREABILITY))
-               arch_setup_dma_ops(&mc_dev->dev, 0, 0, NULL, true);
-
-       /*
-        * The device-specific probe callback will get invoked by device_add()
-        */
-       error = device_add(&mc_dev->dev);
-       if (error < 0) {
-               dev_err(parent_dev,
-                       "device_add() failed for device %s: %d\n",
-                       dev_name(&mc_dev->dev), error);
-               goto error_cleanup_dev;
-       }
-
-       (void)get_device(&mc_dev->dev);
-       dev_dbg(parent_dev, "Added MC object device %s\n",
-               dev_name(&mc_dev->dev));
-
-       *new_mc_dev = mc_dev;
-       return 0;
-
-error_cleanup_dev:
-       kfree(mc_dev->regions);
-       if (mc_bus)
-               devm_kfree(parent_dev, mc_bus);
-       else
-               kmem_cache_free(mc_dev_cache, mc_dev);
-
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_device_add);
-
-/**
- * fsl_mc_device_remove - Remove a MC object device from being visible to
- * Linux
- *
- * @mc_dev: Pointer to a MC object device object
- */
-void fsl_mc_device_remove(struct fsl_mc_device *mc_dev)
-{
-       struct fsl_mc_bus *mc_bus = NULL;
-
-       kfree(mc_dev->regions);
-
-       /*
-        * The device-specific remove callback will get invoked by device_del()
-        */
-       device_del(&mc_dev->dev);
-       put_device(&mc_dev->dev);
-
-       if (strcmp(mc_dev->obj_desc.type, "dprc") == 0) {
-               mc_bus = to_fsl_mc_bus(mc_dev);
-
-               if (fsl_mc_is_root_dprc(&mc_dev->dev)) {
-                       if (atomic_read(&root_dprc_count) > 0)
-                               atomic_dec(&root_dprc_count);
-                       else
-                               WARN_ON(1);
-               }
-       }
-
-       if (mc_bus)
-               devm_kfree(mc_dev->dev.parent, mc_bus);
-       else
-               kmem_cache_free(mc_dev_cache, mc_dev);
-}
-EXPORT_SYMBOL_GPL(fsl_mc_device_remove);
-
-static int parse_mc_ranges(struct device *dev,
-                          int *paddr_cells,
-                          int *mc_addr_cells,
-                          int *mc_size_cells,
-                          const __be32 **ranges_start,
-                          u8 *num_ranges)
-{
-       const __be32 *prop;
-       int range_tuple_cell_count;
-       int ranges_len;
-       int tuple_len;
-       struct device_node *mc_node = dev->of_node;
-
-       *ranges_start = of_get_property(mc_node, "ranges", &ranges_len);
-       if (!(*ranges_start) || !ranges_len) {
-               dev_warn(dev,
-                        "missing or empty ranges property for device tree node '%s'\n",
-                        mc_node->name);
-
-               *num_ranges = 0;
-               return 0;
-       }
-
-       *paddr_cells = of_n_addr_cells(mc_node);
-
-       prop = of_get_property(mc_node, "#address-cells", NULL);
-       if (prop)
-               *mc_addr_cells = be32_to_cpup(prop);
-       else
-               *mc_addr_cells = *paddr_cells;
-
-       prop = of_get_property(mc_node, "#size-cells", NULL);
-       if (prop)
-               *mc_size_cells = be32_to_cpup(prop);
-       else
-               *mc_size_cells = of_n_size_cells(mc_node);
-
-       range_tuple_cell_count = *paddr_cells + *mc_addr_cells +
-                                *mc_size_cells;
-
-       tuple_len = range_tuple_cell_count * sizeof(__be32);
-       if (ranges_len % tuple_len != 0) {
-               dev_err(dev, "malformed ranges property '%s'\n", mc_node->name);
-               return -EINVAL;
-       }
-
-       *num_ranges = ranges_len / tuple_len;
-       return 0;
-}
-
-static int get_mc_addr_translation_ranges(struct device *dev,
-                                         struct fsl_mc_addr_translation_range
-                                               **ranges,
-                                         u8 *num_ranges)
-{
-       int error;
-       int paddr_cells;
-       int mc_addr_cells;
-       int mc_size_cells;
-       int i;
-       const __be32 *ranges_start;
-       const __be32 *cell;
-
-       error = parse_mc_ranges(dev,
-                               &paddr_cells,
-                               &mc_addr_cells,
-                               &mc_size_cells,
-                               &ranges_start,
-                               num_ranges);
-       if (error < 0)
-               return error;
-
-       if (!(*num_ranges)) {
-               /*
-                * Missing or empty ranges property ("ranges;") for the
-                * 'fsl,qoriq-mc' node. In this case, identity mapping
-                * will be used.
-                */
-               *ranges = NULL;
-               return 0;
-       }
-
-       *ranges = devm_kcalloc(dev, *num_ranges,
-                              sizeof(struct fsl_mc_addr_translation_range),
-                              GFP_KERNEL);
-       if (!(*ranges))
-               return -ENOMEM;
-
-       cell = ranges_start;
-       for (i = 0; i < *num_ranges; ++i) {
-               struct fsl_mc_addr_translation_range *range = &(*ranges)[i];
-
-               range->mc_region_type = of_read_number(cell, 1);
-               range->start_mc_offset = of_read_number(cell + 1,
-                                                       mc_addr_cells - 1);
-               cell += mc_addr_cells;
-               range->start_phys_addr = of_read_number(cell, paddr_cells);
-               cell += paddr_cells;
-               range->end_mc_offset = range->start_mc_offset +
-                                    of_read_number(cell, mc_size_cells);
-
-               cell += mc_size_cells;
-       }
-
-       return 0;
-}
-
-/**
- * fsl_mc_bus_probe - callback invoked when the root MC bus is being
- * added
- */
-static int fsl_mc_bus_probe(struct platform_device *pdev)
-{
-       struct dprc_obj_desc obj_desc;
-       int error;
-       struct fsl_mc *mc;
-       struct fsl_mc_device *mc_bus_dev = NULL;
-       struct fsl_mc_io *mc_io = NULL;
-       int container_id;
-       phys_addr_t mc_portal_phys_addr;
-       u32 mc_portal_size;
-       struct mc_version mc_version;
-       struct resource res;
-
-       dev_info(&pdev->dev, "Root MC bus device probed");
-
-       mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL);
-       if (!mc)
-               return -ENOMEM;
-
-       platform_set_drvdata(pdev, mc);
-
-       /*
-        * Get physical address of MC portal for the root DPRC:
-        */
-       error = of_address_to_resource(pdev->dev.of_node, 0, &res);
-       if (error < 0) {
-               dev_err(&pdev->dev,
-                       "of_address_to_resource() failed for %s\n",
-                       pdev->dev.of_node->full_name);
-               return error;
-       }
-
-       mc_portal_phys_addr = res.start;
-       mc_portal_size = resource_size(&res);
-       error = fsl_create_mc_io(&pdev->dev, mc_portal_phys_addr,
-                                mc_portal_size, NULL,
-                                FSL_MC_IO_ATOMIC_CONTEXT_PORTAL, &mc_io);
-       if (error < 0)
-               return error;
-
-       error = mc_get_version(mc_io, 0, &mc_version);
-       if (error != 0) {
-               dev_err(&pdev->dev,
-                       "mc_get_version() failed with error %d\n", error);
-               goto error_cleanup_mc_io;
-       }
-
-       dev_info(&pdev->dev,
-                "Freescale Management Complex Firmware version: %u.%u.%u\n",
-                mc_version.major, mc_version.minor, mc_version.revision);
-
-       error = get_mc_addr_translation_ranges(&pdev->dev,
-                                              &mc->translation_ranges,
-                                              &mc->num_translation_ranges);
-       if (error < 0)
-               goto error_cleanup_mc_io;
-
-       error = dpmng_get_container_id(mc_io, 0, &container_id);
-       if (error < 0) {
-               dev_err(&pdev->dev,
-                       "dpmng_get_container_id() failed: %d\n", error);
-               goto error_cleanup_mc_io;
-       }
-
-       memset(&obj_desc, 0, sizeof(struct dprc_obj_desc));
-       error = get_dprc_version(mc_io, container_id,
-                                &obj_desc.ver_major, &obj_desc.ver_minor);
-       if (error < 0)
-               goto error_cleanup_mc_io;
-
-       obj_desc.vendor = FSL_MC_VENDOR_FREESCALE;
-       strcpy(obj_desc.type, "dprc");
-       obj_desc.id = container_id;
-       obj_desc.irq_count = 1;
-       obj_desc.region_count = 0;
-
-       error = fsl_mc_device_add(&obj_desc, mc_io, &pdev->dev, &mc_bus_dev);
-       if (error < 0)
-               goto error_cleanup_mc_io;
-
-       mc->root_mc_bus_dev = mc_bus_dev;
-       return 0;
-
-error_cleanup_mc_io:
-       fsl_destroy_mc_io(mc_io);
-       return error;
-}
-
-/**
- * fsl_mc_bus_remove - callback invoked when the root MC bus is being
- * removed
- */
-static int fsl_mc_bus_remove(struct platform_device *pdev)
-{
-       struct fsl_mc *mc = platform_get_drvdata(pdev);
-
-       if (WARN_ON(!fsl_mc_is_root_dprc(&mc->root_mc_bus_dev->dev)))
-               return -EINVAL;
-
-       fsl_mc_device_remove(mc->root_mc_bus_dev);
-
-       fsl_destroy_mc_io(mc->root_mc_bus_dev->mc_io);
-       mc->root_mc_bus_dev->mc_io = NULL;
-
-       dev_info(&pdev->dev, "Root MC bus device removed");
-       return 0;
-}
-
-static const struct of_device_id fsl_mc_bus_match_table[] = {
-       {.compatible = "fsl,qoriq-mc",},
-       {},
-};
-
-MODULE_DEVICE_TABLE(of, fsl_mc_bus_match_table);
-
-static struct platform_driver fsl_mc_bus_driver = {
-       .driver = {
-                  .name = "fsl_mc_bus",
-                  .pm = NULL,
-                  .of_match_table = fsl_mc_bus_match_table,
-                  },
-       .probe = fsl_mc_bus_probe,
-       .remove = fsl_mc_bus_remove,
-};
-
-static int __init fsl_mc_bus_driver_init(void)
-{
-       int error;
-
-       mc_dev_cache = kmem_cache_create("fsl_mc_device",
-                                        sizeof(struct fsl_mc_device), 0, 0,
-                                        NULL);
-       if (!mc_dev_cache) {
-               pr_err("Could not create fsl_mc_device cache\n");
-               return -ENOMEM;
-       }
-
-       error = bus_register(&fsl_mc_bus_type);
-       if (error < 0) {
-               pr_err("fsl-mc bus type registration failed: %d\n", error);
-               goto error_cleanup_cache;
-       }
-
-       pr_info("fsl-mc bus type registered\n");
-
-       error = platform_driver_register(&fsl_mc_bus_driver);
-       if (error < 0) {
-               pr_err("platform_driver_register() failed: %d\n", error);
-               goto error_cleanup_bus;
-       }
-
-       error = dprc_driver_init();
-       if (error < 0)
-               goto error_cleanup_driver;
-
-       error = fsl_mc_allocator_driver_init();
-       if (error < 0)
-               goto error_cleanup_dprc_driver;
-
-       error = its_fsl_mc_msi_init();
-       if (error < 0)
-               goto error_cleanup_mc_allocator;
-
-       return 0;
-
-error_cleanup_mc_allocator:
-       fsl_mc_allocator_driver_exit();
-
-error_cleanup_dprc_driver:
-       dprc_driver_exit();
-
-error_cleanup_driver:
-       platform_driver_unregister(&fsl_mc_bus_driver);
-
-error_cleanup_bus:
-       bus_unregister(&fsl_mc_bus_type);
-
-error_cleanup_cache:
-       kmem_cache_destroy(mc_dev_cache);
-       return error;
-}
-
-postcore_initcall(fsl_mc_bus_driver_init);
-
-static void __exit fsl_mc_bus_driver_exit(void)
-{
-       if (WARN_ON(!mc_dev_cache))
-               return;
-
-       its_fsl_mc_msi_cleanup();
-       fsl_mc_allocator_driver_exit();
-       dprc_driver_exit();
-       platform_driver_unregister(&fsl_mc_bus_driver);
-       bus_unregister(&fsl_mc_bus_type);
-       kmem_cache_destroy(mc_dev_cache);
-       pr_info("MC bus unregistered\n");
-}
-
-module_exit(fsl_mc_bus_driver_exit);
-
-MODULE_AUTHOR("Freescale Semiconductor Inc.");
-MODULE_DESCRIPTION("Freescale Management Complex (MC) bus driver");
-MODULE_LICENSE("GPL");
diff --git a/drivers/staging/fsl-mc/bus/mc-io.c b/drivers/staging/fsl-mc/bus/mc-io.c
new file mode 100644 (file)
index 0000000..798c965
--- /dev/null
@@ -0,0 +1,320 @@
+/* Copyright 2013-2016 Freescale Semiconductor Inc.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of the above-listed copyright holders nor the
+ *       names of any contributors may be used to endorse or promote products
+ *       derived from this software without specific prior written permission.
+ *
+ *
+ * ALTERNATIVELY, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL") as published by the Free Software
+ * Foundation, either version 2 of that License or (at your option) any
+ * later version.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <linux/io.h>
+#include "../include/mc-bus.h"
+#include "../include/mc-sys.h"
+
+#include "fsl-mc-private.h"
+#include "dpmcp.h"
+#include "dpmcp-cmd.h"
+
+static int fsl_mc_io_set_dpmcp(struct fsl_mc_io *mc_io,
+                              struct fsl_mc_device *dpmcp_dev)
+{
+       int error;
+
+       if (WARN_ON(!dpmcp_dev))
+               return -EINVAL;
+
+       if (WARN_ON(mc_io->dpmcp_dev))
+               return -EINVAL;
+
+       if (WARN_ON(dpmcp_dev->mc_io))
+               return -EINVAL;
+
+       error = dpmcp_open(mc_io,
+                          0,
+                          dpmcp_dev->obj_desc.id,
+                          &dpmcp_dev->mc_handle);
+       if (error < 0)
+               return error;
+
+       mc_io->dpmcp_dev = dpmcp_dev;
+       dpmcp_dev->mc_io = mc_io;
+       return 0;
+}
+
+static void fsl_mc_io_unset_dpmcp(struct fsl_mc_io *mc_io)
+{
+       int error;
+       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
+
+       if (WARN_ON(!dpmcp_dev))
+               return;
+
+       if (WARN_ON(dpmcp_dev->mc_io != mc_io))
+               return;
+
+       error = dpmcp_close(mc_io,
+                           0,
+                           dpmcp_dev->mc_handle);
+       if (error < 0) {
+               dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n",
+                       error);
+       }
+
+       mc_io->dpmcp_dev = NULL;
+       dpmcp_dev->mc_io = NULL;
+}
+
+/**
+ * Creates an MC I/O object
+ *
+ * @dev: device to be associated with the MC I/O object
+ * @mc_portal_phys_addr: physical address of the MC portal to use
+ * @mc_portal_size: size in bytes of the MC portal
+ * @dpmcp-dev: Pointer to the DPMCP object associated with this MC I/O
+ * object or NULL if none.
+ * @flags: flags for the new MC I/O object
+ * @new_mc_io: Area to return pointer to newly created MC I/O object
+ *
+ * Returns '0' on Success; Error code otherwise.
+ */
+int __must_check fsl_create_mc_io(struct device *dev,
+                                 phys_addr_t mc_portal_phys_addr,
+                                 u32 mc_portal_size,
+                                 struct fsl_mc_device *dpmcp_dev,
+                                 u32 flags, struct fsl_mc_io **new_mc_io)
+{
+       int error;
+       struct fsl_mc_io *mc_io;
+       void __iomem *mc_portal_virt_addr;
+       struct resource *res;
+
+       mc_io = devm_kzalloc(dev, sizeof(*mc_io), GFP_KERNEL);
+       if (!mc_io)
+               return -ENOMEM;
+
+       mc_io->dev = dev;
+       mc_io->flags = flags;
+       mc_io->portal_phys_addr = mc_portal_phys_addr;
+       mc_io->portal_size = mc_portal_size;
+       if (flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
+               spin_lock_init(&mc_io->spinlock);
+       else
+               mutex_init(&mc_io->mutex);
+
+       res = devm_request_mem_region(dev,
+                                     mc_portal_phys_addr,
+                                     mc_portal_size,
+                                     "mc_portal");
+       if (!res) {
+               dev_err(dev,
+                       "devm_request_mem_region failed for MC portal %#llx\n",
+                       mc_portal_phys_addr);
+               return -EBUSY;
+       }
+
+       mc_portal_virt_addr = devm_ioremap_nocache(dev,
+                                                  mc_portal_phys_addr,
+                                                  mc_portal_size);
+       if (!mc_portal_virt_addr) {
+               dev_err(dev,
+                       "devm_ioremap_nocache failed for MC portal %#llx\n",
+                       mc_portal_phys_addr);
+               return -ENXIO;
+       }
+
+       mc_io->portal_virt_addr = mc_portal_virt_addr;
+       if (dpmcp_dev) {
+               error = fsl_mc_io_set_dpmcp(mc_io, dpmcp_dev);
+               if (error < 0)
+                       goto error_destroy_mc_io;
+       }
+
+       *new_mc_io = mc_io;
+       return 0;
+
+error_destroy_mc_io:
+       fsl_destroy_mc_io(mc_io);
+       return error;
+}
+
+/**
+ * Destroys an MC I/O object
+ *
+ * @mc_io: MC I/O object to destroy
+ */
+void fsl_destroy_mc_io(struct fsl_mc_io *mc_io)
+{
+       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
+
+       if (dpmcp_dev)
+               fsl_mc_io_unset_dpmcp(mc_io);
+
+       devm_iounmap(mc_io->dev, mc_io->portal_virt_addr);
+       devm_release_mem_region(mc_io->dev,
+                               mc_io->portal_phys_addr,
+                               mc_io->portal_size);
+
+       mc_io->portal_virt_addr = NULL;
+       devm_kfree(mc_io->dev, mc_io);
+}
+
+/**
+ * fsl_mc_portal_allocate - Allocates an MC portal
+ *
+ * @mc_dev: MC device for which the MC portal is to be allocated
+ * @mc_io_flags: Flags for the fsl_mc_io object that wraps the allocated
+ * MC portal.
+ * @new_mc_io: Pointer to area where the pointer to the fsl_mc_io object
+ * that wraps the allocated MC portal is to be returned
+ *
+ * This function allocates an MC portal from the device's parent DPRC,
+ * from the corresponding MC bus' pool of MC portals and wraps
+ * it in a new fsl_mc_io object. If 'mc_dev' is a DPRC itself, the
+ * portal is allocated from its own MC bus.
+ */
+int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
+                                       u16 mc_io_flags,
+                                       struct fsl_mc_io **new_mc_io)
+{
+       struct fsl_mc_device *mc_bus_dev;
+       struct fsl_mc_bus *mc_bus;
+       phys_addr_t mc_portal_phys_addr;
+       size_t mc_portal_size;
+       struct fsl_mc_device *dpmcp_dev;
+       int error = -EINVAL;
+       struct fsl_mc_resource *resource = NULL;
+       struct fsl_mc_io *mc_io = NULL;
+
+       if (mc_dev->flags & FSL_MC_IS_DPRC) {
+               mc_bus_dev = mc_dev;
+       } else {
+               if (WARN_ON(!dev_is_fsl_mc(mc_dev->dev.parent)))
+                       return error;
+
+               mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
+       }
+
+       mc_bus = to_fsl_mc_bus(mc_bus_dev);
+       *new_mc_io = NULL;
+       error = fsl_mc_resource_allocate(mc_bus, FSL_MC_POOL_DPMCP, &resource);
+       if (error < 0)
+               return error;
+
+       error = -EINVAL;
+       dpmcp_dev = resource->data;
+       if (WARN_ON(!dpmcp_dev))
+               goto error_cleanup_resource;
+
+       if (dpmcp_dev->obj_desc.ver_major < DPMCP_MIN_VER_MAJOR ||
+           (dpmcp_dev->obj_desc.ver_major == DPMCP_MIN_VER_MAJOR &&
+            dpmcp_dev->obj_desc.ver_minor < DPMCP_MIN_VER_MINOR)) {
+               dev_err(&dpmcp_dev->dev,
+                       "ERROR: Version %d.%d of DPMCP not supported.\n",
+                       dpmcp_dev->obj_desc.ver_major,
+                       dpmcp_dev->obj_desc.ver_minor);
+               error = -ENOTSUPP;
+               goto error_cleanup_resource;
+       }
+
+       if (WARN_ON(dpmcp_dev->obj_desc.region_count == 0))
+               goto error_cleanup_resource;
+
+       mc_portal_phys_addr = dpmcp_dev->regions[0].start;
+       mc_portal_size = dpmcp_dev->regions[0].end -
+                        dpmcp_dev->regions[0].start + 1;
+
+       if (WARN_ON(mc_portal_size != mc_bus_dev->mc_io->portal_size))
+               goto error_cleanup_resource;
+
+       error = fsl_create_mc_io(&mc_bus_dev->dev,
+                                mc_portal_phys_addr,
+                                mc_portal_size, dpmcp_dev,
+                                mc_io_flags, &mc_io);
+       if (error < 0)
+               goto error_cleanup_resource;
+
+       *new_mc_io = mc_io;
+       return 0;
+
+error_cleanup_resource:
+       fsl_mc_resource_free(resource);
+       return error;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_portal_allocate);
+
+/**
+ * fsl_mc_portal_free - Returns an MC portal to the pool of free MC portals
+ * of a given MC bus
+ *
+ * @mc_io: Pointer to the fsl_mc_io object that wraps the MC portal to free
+ */
+void fsl_mc_portal_free(struct fsl_mc_io *mc_io)
+{
+       struct fsl_mc_device *dpmcp_dev;
+       struct fsl_mc_resource *resource;
+
+       /*
+        * Every mc_io obtained by calling fsl_mc_portal_allocate() is supposed
+        * to have a DPMCP object associated with.
+        */
+       dpmcp_dev = mc_io->dpmcp_dev;
+       if (WARN_ON(!dpmcp_dev))
+               return;
+
+       resource = dpmcp_dev->resource;
+       if (WARN_ON(!resource || resource->type != FSL_MC_POOL_DPMCP))
+               return;
+
+       if (WARN_ON(resource->data != dpmcp_dev))
+               return;
+
+       fsl_destroy_mc_io(mc_io);
+       fsl_mc_resource_free(resource);
+}
+EXPORT_SYMBOL_GPL(fsl_mc_portal_free);
+
+/**
+ * fsl_mc_portal_reset - Resets the dpmcp object for a given fsl_mc_io object
+ *
+ * @mc_io: Pointer to the fsl_mc_io object that wraps the MC portal to free
+ */
+int fsl_mc_portal_reset(struct fsl_mc_io *mc_io)
+{
+       int error;
+       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
+
+       if (WARN_ON(!dpmcp_dev))
+               return -EINVAL;
+
+       error = dpmcp_reset(mc_io, 0, dpmcp_dev->mc_handle);
+       if (error < 0) {
+               dev_err(&dpmcp_dev->dev, "dpmcp_reset() failed: %d\n", error);
+               return error;
+       }
+
+       return 0;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_portal_reset);
diff --git a/drivers/staging/fsl-mc/bus/mc-msi.c b/drivers/staging/fsl-mc/bus/mc-msi.c
deleted file mode 100644 (file)
index c7be156..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Freescale Management Complex (MC) bus driver MSI support
- *
- * Copyright (C) 2015 Freescale Semiconductor, Inc.
- * Author: German Rivera <German.Rivera@freescale.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-
-#include "../include/mc-private.h"
-#include <linux/of_device.h>
-#include <linux/of_address.h>
-#include <linux/irqchip/arm-gic-v3.h>
-#include <linux/of_irq.h>
-#include <linux/irq.h>
-#include <linux/irqdomain.h>
-#include <linux/msi.h>
-#include "../include/mc-sys.h"
-#include "dprc-cmd.h"
-
-/*
- * Generate a unique ID identifying the interrupt (only used within the MSI
- * irqdomain.  Combine the icid with the interrupt index.
- */
-static irq_hw_number_t fsl_mc_domain_calc_hwirq(struct fsl_mc_device *dev,
-                                               struct msi_desc *desc)
-{
-       /*
-        * Make the base hwirq value for ICID*10000 so it is readable
-        * as a decimal value in /proc/interrupts.
-        */
-       return (irq_hw_number_t)(desc->fsl_mc.msi_index + (dev->icid * 10000));
-}
-
-static void fsl_mc_msi_set_desc(msi_alloc_info_t *arg,
-                               struct msi_desc *desc)
-{
-       arg->desc = desc;
-       arg->hwirq = fsl_mc_domain_calc_hwirq(to_fsl_mc_device(desc->dev),
-                                             desc);
-}
-
-static void fsl_mc_msi_update_dom_ops(struct msi_domain_info *info)
-{
-       struct msi_domain_ops *ops = info->ops;
-
-       if (WARN_ON(!ops))
-               return;
-
-       /*
-        * set_desc should not be set by the caller
-        */
-       if (ops->set_desc == NULL)
-               ops->set_desc = fsl_mc_msi_set_desc;
-}
-
-static void __fsl_mc_msi_write_msg(struct fsl_mc_device *mc_bus_dev,
-                                  struct fsl_mc_device_irq *mc_dev_irq)
-{
-       int error;
-       struct fsl_mc_device *owner_mc_dev = mc_dev_irq->mc_dev;
-       struct msi_desc *msi_desc = mc_dev_irq->msi_desc;
-       struct dprc_irq_cfg irq_cfg;
-
-       /*
-        * msi_desc->msg.address is 0x0 when this function is invoked in
-        * the free_irq() code path. In this case, for the MC, we don't
-        * really need to "unprogram" the MSI, so we just return.
-        */
-       if (msi_desc->msg.address_lo == 0x0 && msi_desc->msg.address_hi == 0x0)
-               return;
-
-       if (WARN_ON(!owner_mc_dev))
-               return;
-
-       irq_cfg.paddr = ((u64)msi_desc->msg.address_hi << 32) |
-                       msi_desc->msg.address_lo;
-       irq_cfg.val = msi_desc->msg.data;
-       irq_cfg.irq_num = msi_desc->irq;
-
-       if (owner_mc_dev == mc_bus_dev) {
-               /*
-                * IRQ is for the mc_bus_dev's DPRC itself
-                */
-               error = dprc_set_irq(mc_bus_dev->mc_io,
-                                    MC_CMD_FLAG_INTR_DIS | MC_CMD_FLAG_PRI,
-                                    mc_bus_dev->mc_handle,
-                                    mc_dev_irq->dev_irq_index,
-                                    &irq_cfg);
-               if (error < 0) {
-                       dev_err(&owner_mc_dev->dev,
-                               "dprc_set_irq() failed: %d\n", error);
-               }
-       } else {
-               /*
-                * IRQ is for for a child device of mc_bus_dev
-                */
-               error = dprc_set_obj_irq(mc_bus_dev->mc_io,
-                                        MC_CMD_FLAG_INTR_DIS | MC_CMD_FLAG_PRI,
-                                        mc_bus_dev->mc_handle,
-                                        owner_mc_dev->obj_desc.type,
-                                        owner_mc_dev->obj_desc.id,
-                                        mc_dev_irq->dev_irq_index,
-                                        &irq_cfg);
-               if (error < 0) {
-                       dev_err(&owner_mc_dev->dev,
-                               "dprc_obj_set_irq() failed: %d\n", error);
-               }
-       }
-}
-
-/*
- * NOTE: This function is invoked with interrupts disabled
- */
-static void fsl_mc_msi_write_msg(struct irq_data *irq_data,
-                                struct msi_msg *msg)
-{
-       struct msi_desc *msi_desc = irq_data_get_msi_desc(irq_data);
-       struct fsl_mc_device *mc_bus_dev = to_fsl_mc_device(msi_desc->dev);
-       struct fsl_mc_bus *mc_bus = to_fsl_mc_bus(mc_bus_dev);
-       struct fsl_mc_device_irq *mc_dev_irq =
-               &mc_bus->irq_resources[msi_desc->fsl_mc.msi_index];
-
-       WARN_ON(mc_dev_irq->msi_desc != msi_desc);
-       msi_desc->msg = *msg;
-
-       /*
-        * Program the MSI (paddr, value) pair in the device:
-        */
-       __fsl_mc_msi_write_msg(mc_bus_dev, mc_dev_irq);
-}
-
-static void fsl_mc_msi_update_chip_ops(struct msi_domain_info *info)
-{
-       struct irq_chip *chip = info->chip;
-
-       if (WARN_ON((!chip)))
-               return;
-
-       /*
-        * irq_write_msi_msg should not be set by the caller
-        */
-       if (chip->irq_write_msi_msg == NULL)
-               chip->irq_write_msi_msg = fsl_mc_msi_write_msg;
-}
-
-/**
- * fsl_mc_msi_create_irq_domain - Create a fsl-mc MSI interrupt domain
- * @np:                Optional device-tree node of the interrupt controller
- * @info:      MSI domain info
- * @parent:    Parent irq domain
- *
- * Updates the domain and chip ops and creates a fsl-mc MSI
- * interrupt domain.
- *
- * Returns:
- * A domain pointer or NULL in case of failure.
- */
-struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
-                                               struct msi_domain_info *info,
-                                               struct irq_domain *parent)
-{
-       struct irq_domain *domain;
-
-       if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS)
-               fsl_mc_msi_update_dom_ops(info);
-       if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS)
-               fsl_mc_msi_update_chip_ops(info);
-
-       domain = msi_create_irq_domain(fwnode, info, parent);
-       if (domain)
-               domain->bus_token = DOMAIN_BUS_FSL_MC_MSI;
-
-       return domain;
-}
-
-int fsl_mc_find_msi_domain(struct device *mc_platform_dev,
-                          struct irq_domain **mc_msi_domain)
-{
-       struct irq_domain *msi_domain;
-       struct device_node *mc_of_node = mc_platform_dev->of_node;
-
-       msi_domain = of_msi_get_domain(mc_platform_dev, mc_of_node,
-                                      DOMAIN_BUS_FSL_MC_MSI);
-       if (!msi_domain) {
-               pr_err("Unable to find fsl-mc MSI domain for %s\n",
-                      mc_of_node->full_name);
-
-               return -ENOENT;
-       }
-
-       *mc_msi_domain = msi_domain;
-       return 0;
-}
-
-static void fsl_mc_msi_free_descs(struct device *dev)
-{
-       struct msi_desc *desc, *tmp;
-
-       list_for_each_entry_safe(desc, tmp, dev_to_msi_list(dev), list) {
-               list_del(&desc->list);
-               free_msi_entry(desc);
-       }
-}
-
-static int fsl_mc_msi_alloc_descs(struct device *dev, unsigned int irq_count)
-
-{
-       unsigned int i;
-       int error;
-       struct msi_desc *msi_desc;
-
-       for (i = 0; i < irq_count; i++) {
-               msi_desc = alloc_msi_entry(dev);
-               if (!msi_desc) {
-                       dev_err(dev, "Failed to allocate msi entry\n");
-                       error = -ENOMEM;
-                       goto cleanup_msi_descs;
-               }
-
-               msi_desc->fsl_mc.msi_index = i;
-               msi_desc->nvec_used = 1;
-               INIT_LIST_HEAD(&msi_desc->list);
-               list_add_tail(&msi_desc->list, dev_to_msi_list(dev));
-       }
-
-       return 0;
-
-cleanup_msi_descs:
-       fsl_mc_msi_free_descs(dev);
-       return error;
-}
-
-int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
-                                unsigned int irq_count)
-{
-       struct irq_domain *msi_domain;
-       int error;
-
-       if (WARN_ON(!list_empty(dev_to_msi_list(dev))))
-               return -EINVAL;
-
-       error = fsl_mc_msi_alloc_descs(dev, irq_count);
-       if (error < 0)
-               return error;
-
-       msi_domain = dev_get_msi_domain(dev);
-       if (WARN_ON(!msi_domain)) {
-               error = -EINVAL;
-               goto cleanup_msi_descs;
-       }
-
-       /*
-        * NOTE: Calling this function will trigger the invocation of the
-        * its_fsl_mc_msi_prepare() callback
-        */
-       error = msi_domain_alloc_irqs(msi_domain, dev, irq_count);
-
-       if (error) {
-               dev_err(dev, "Failed to allocate IRQs\n");
-               goto cleanup_msi_descs;
-       }
-
-       return 0;
-
-cleanup_msi_descs:
-       fsl_mc_msi_free_descs(dev);
-       return error;
-}
-
-void fsl_mc_msi_domain_free_irqs(struct device *dev)
-{
-       struct irq_domain *msi_domain;
-
-       msi_domain = dev_get_msi_domain(dev);
-       if (WARN_ON(!msi_domain))
-               return;
-
-       msi_domain_free_irqs(msi_domain, dev);
-
-       if (WARN_ON(list_empty(dev_to_msi_list(dev))))
-               return;
-
-       fsl_mc_msi_free_descs(dev);
-}
index 0c185abe665e5f4bf0e0280229dd21bb812c919e..285917c7c8e43088045c21fc04765463f7985b42 100644 (file)
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include "../include/mc-sys.h"
-#include "../include/mc-cmd.h"
-#include "../include/mc.h"
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/ioport.h>
 #include <linux/device.h>
+#include <linux/io.h>
+#include "../include/mc-sys.h"
+#include "../include/mc-cmd.h"
+#include "../include/mc.h"
+
 #include "dpmcp.h"
 
 /**
@@ -68,153 +70,6 @@ static u16 mc_cmd_hdr_read_cmdid(struct mc_command *cmd)
        return (cmd_id & MC_CMD_HDR_CMDID_MASK) >> MC_CMD_HDR_CMDID_SHIFT;
 }
 
-/**
- * Creates an MC I/O object
- *
- * @dev: device to be associated with the MC I/O object
- * @mc_portal_phys_addr: physical address of the MC portal to use
- * @mc_portal_size: size in bytes of the MC portal
- * @dpmcp-dev: Pointer to the DPMCP object associated with this MC I/O
- * object or NULL if none.
- * @flags: flags for the new MC I/O object
- * @new_mc_io: Area to return pointer to newly created MC I/O object
- *
- * Returns '0' on Success; Error code otherwise.
- */
-int __must_check fsl_create_mc_io(struct device *dev,
-                                 phys_addr_t mc_portal_phys_addr,
-                                 u32 mc_portal_size,
-                                 struct fsl_mc_device *dpmcp_dev,
-                                 u32 flags, struct fsl_mc_io **new_mc_io)
-{
-       int error;
-       struct fsl_mc_io *mc_io;
-       void __iomem *mc_portal_virt_addr;
-       struct resource *res;
-
-       mc_io = devm_kzalloc(dev, sizeof(*mc_io), GFP_KERNEL);
-       if (!mc_io)
-               return -ENOMEM;
-
-       mc_io->dev = dev;
-       mc_io->flags = flags;
-       mc_io->portal_phys_addr = mc_portal_phys_addr;
-       mc_io->portal_size = mc_portal_size;
-       if (flags & FSL_MC_IO_ATOMIC_CONTEXT_PORTAL)
-               spin_lock_init(&mc_io->spinlock);
-       else
-               mutex_init(&mc_io->mutex);
-
-       res = devm_request_mem_region(dev,
-                                     mc_portal_phys_addr,
-                                     mc_portal_size,
-                                     "mc_portal");
-       if (!res) {
-               dev_err(dev,
-                       "devm_request_mem_region failed for MC portal %#llx\n",
-                       mc_portal_phys_addr);
-               return -EBUSY;
-       }
-
-       mc_portal_virt_addr = devm_ioremap_nocache(dev,
-                                                  mc_portal_phys_addr,
-                                                  mc_portal_size);
-       if (!mc_portal_virt_addr) {
-               dev_err(dev,
-                       "devm_ioremap_nocache failed for MC portal %#llx\n",
-                       mc_portal_phys_addr);
-               return -ENXIO;
-       }
-
-       mc_io->portal_virt_addr = mc_portal_virt_addr;
-       if (dpmcp_dev) {
-               error = fsl_mc_io_set_dpmcp(mc_io, dpmcp_dev);
-               if (error < 0)
-                       goto error_destroy_mc_io;
-       }
-
-       *new_mc_io = mc_io;
-       return 0;
-
-error_destroy_mc_io:
-       fsl_destroy_mc_io(mc_io);
-       return error;
-}
-EXPORT_SYMBOL_GPL(fsl_create_mc_io);
-
-/**
- * Destroys an MC I/O object
- *
- * @mc_io: MC I/O object to destroy
- */
-void fsl_destroy_mc_io(struct fsl_mc_io *mc_io)
-{
-       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
-
-       if (dpmcp_dev)
-               fsl_mc_io_unset_dpmcp(mc_io);
-
-       devm_iounmap(mc_io->dev, mc_io->portal_virt_addr);
-       devm_release_mem_region(mc_io->dev,
-                               mc_io->portal_phys_addr,
-                               mc_io->portal_size);
-
-       mc_io->portal_virt_addr = NULL;
-       devm_kfree(mc_io->dev, mc_io);
-}
-EXPORT_SYMBOL_GPL(fsl_destroy_mc_io);
-
-int fsl_mc_io_set_dpmcp(struct fsl_mc_io *mc_io,
-                       struct fsl_mc_device *dpmcp_dev)
-{
-       int error;
-
-       if (WARN_ON(!dpmcp_dev))
-               return -EINVAL;
-
-       if (WARN_ON(mc_io->dpmcp_dev))
-               return -EINVAL;
-
-       if (WARN_ON(dpmcp_dev->mc_io))
-               return -EINVAL;
-
-       error = dpmcp_open(mc_io,
-                          0,
-                          dpmcp_dev->obj_desc.id,
-                          &dpmcp_dev->mc_handle);
-       if (error < 0)
-               return error;
-
-       mc_io->dpmcp_dev = dpmcp_dev;
-       dpmcp_dev->mc_io = mc_io;
-       return 0;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_io_set_dpmcp);
-
-void fsl_mc_io_unset_dpmcp(struct fsl_mc_io *mc_io)
-{
-       int error;
-       struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
-
-       if (WARN_ON(!dpmcp_dev))
-               return;
-
-       if (WARN_ON(dpmcp_dev->mc_io != mc_io))
-               return;
-
-       error = dpmcp_close(mc_io,
-                           0,
-                           dpmcp_dev->mc_handle);
-       if (error < 0) {
-               dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n",
-                       error);
-       }
-
-       mc_io->dpmcp_dev = NULL;
-       dpmcp_dev->mc_io = NULL;
-}
-EXPORT_SYMBOL_GPL(fsl_mc_io_unset_dpmcp);
-
 static int mc_status_to_error(enum mc_cmd_status status)
 {
        static const int mc_status_to_error_map[] = {
diff --git a/drivers/staging/fsl-mc/include/mc-bus.h b/drivers/staging/fsl-mc/include/mc-bus.h
new file mode 100644 (file)
index 0000000..170684a
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Freescale Management Complex (MC) bus declarations
+ *
+ * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ * Author: German Rivera <German.Rivera@freescale.com>
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+#ifndef _FSL_MC_MCBUS_H_
+#define _FSL_MC_MCBUS_H_
+
+#include "../include/mc.h"
+#include <linux/mutex.h>
+
+struct irq_domain;
+struct msi_domain_info;
+
+/**
+ * Maximum number of total IRQs that can be pre-allocated for an MC bus'
+ * IRQ pool
+ */
+#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS 256
+
+#ifdef CONFIG_FSL_MC_BUS
+#define dev_is_fsl_mc(_dev) ((_dev)->bus == &fsl_mc_bus_type)
+#else
+/* If fsl-mc bus is not present device cannot belong to fsl-mc bus */
+#define dev_is_fsl_mc(_dev) (0)
+#endif
+
+/**
+ * struct fsl_mc_resource_pool - Pool of MC resources of a given
+ * type
+ * @type: type of resources in the pool
+ * @max_count: maximum number of resources in the pool
+ * @free_count: number of free resources in the pool
+ * @mutex: mutex to serialize access to the pool's free list
+ * @free_list: anchor node of list of free resources in the pool
+ * @mc_bus: pointer to the MC bus that owns this resource pool
+ */
+struct fsl_mc_resource_pool {
+       enum fsl_mc_pool_type type;
+       int16_t max_count;
+       int16_t free_count;
+       struct mutex mutex;     /* serializes access to free_list */
+       struct list_head free_list;
+       struct fsl_mc_bus *mc_bus;
+};
+
+/**
+ * struct fsl_mc_bus - logical bus that corresponds to a physical DPRC
+ * @mc_dev: fsl-mc device for the bus device itself.
+ * @resource_pools: array of resource pools (one pool per resource type)
+ * for this MC bus. These resources represent allocatable entities
+ * from the physical DPRC.
+ * @irq_resources: Pointer to array of IRQ objects for the IRQ pool
+ * @scan_mutex: Serializes bus scanning
+ * @dprc_attr: DPRC attributes
+ */
+struct fsl_mc_bus {
+       struct fsl_mc_device mc_dev;
+       struct fsl_mc_resource_pool resource_pools[FSL_MC_NUM_POOL_TYPES];
+       struct fsl_mc_device_irq *irq_resources;
+       struct mutex scan_mutex;    /* serializes bus scanning */
+       struct dprc_attributes dprc_attr;
+};
+
+#define to_fsl_mc_bus(_mc_dev) \
+       container_of(_mc_dev, struct fsl_mc_bus, mc_dev)
+
+int dprc_scan_container(struct fsl_mc_device *mc_bus_dev);
+
+int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
+                     unsigned int *total_irq_count);
+
+int __init dprc_driver_init(void);
+
+void dprc_driver_exit(void);
+
+int __init fsl_mc_allocator_driver_init(void);
+
+void fsl_mc_allocator_driver_exit(void);
+
+struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
+                                               struct msi_domain_info *info,
+                                               struct irq_domain *parent);
+
+int fsl_mc_find_msi_domain(struct device *mc_platform_dev,
+                          struct irq_domain **mc_msi_domain);
+
+int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
+                            unsigned int irq_count);
+
+void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus);
+
+void fsl_mc_init_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
+
+void fsl_mc_cleanup_all_resource_pools(struct fsl_mc_device *mc_bus_dev);
+
+bool fsl_mc_bus_exists(void);
+
+void fsl_mc_get_root_dprc(struct device *dev,
+                         struct device **root_dprc_dev);
+
+bool fsl_mc_is_root_dprc(struct device *dev);
+
+extern struct bus_type fsl_mc_bus_type;
+
+#endif /* _FSL_MC_MCBUS_H_ */
diff --git a/drivers/staging/fsl-mc/include/mc-private.h b/drivers/staging/fsl-mc/include/mc-private.h
deleted file mode 100644 (file)
index cab1ae9..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Freescale Management Complex (MC) bus private declarations
- *
- * Copyright (C) 2014 Freescale Semiconductor, Inc.
- * Author: German Rivera <German.Rivera@freescale.com>
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-#ifndef _FSL_MC_PRIVATE_H_
-#define _FSL_MC_PRIVATE_H_
-
-#include "../include/mc.h"
-#include <linux/mutex.h>
-#include <linux/stringify.h>
-
-#define FSL_MC_DPRC_DRIVER_NAME    "fsl_mc_dprc"
-
-#define FSL_MC_DEVICE_MATCH(_mc_dev, _obj_desc) \
-       (strcmp((_mc_dev)->obj_desc.type, (_obj_desc)->type) == 0 && \
-        (_mc_dev)->obj_desc.id == (_obj_desc)->id)
-
-#define FSL_MC_IS_ALLOCATABLE(_obj_type) \
-       (strcmp(_obj_type, "dpbp") == 0 || \
-        strcmp(_obj_type, "dpmcp") == 0 || \
-        strcmp(_obj_type, "dpcon") == 0)
-
-struct irq_domain;
-struct msi_domain_info;
-
-/**
- * Maximum number of total IRQs that can be pre-allocated for an MC bus'
- * IRQ pool
- */
-#define FSL_MC_IRQ_POOL_MAX_TOTAL_IRQS 256
-
-struct device_node;
-struct irq_domain;
-struct msi_domain_info;
-
-/**
- * struct fsl_mc - Private data of a "fsl,qoriq-mc" platform device
- * @root_mc_bus_dev: MC object device representing the root DPRC
- * @num_translation_ranges: number of entries in addr_translation_ranges
- * @translation_ranges: array of bus to system address translation ranges
- */
-struct fsl_mc {
-       struct fsl_mc_device *root_mc_bus_dev;
-       u8 num_translation_ranges;
-       struct fsl_mc_addr_translation_range *translation_ranges;
-};
-
-/**
- * struct fsl_mc_addr_translation_range - bus to system address translation
- * range
- * @mc_region_type: Type of MC region for the range being translated
- * @start_mc_offset: Start MC offset of the range being translated
- * @end_mc_offset: MC offset of the first byte after the range (last MC
- * offset of the range is end_mc_offset - 1)
- * @start_phys_addr: system physical address corresponding to start_mc_addr
- */
-struct fsl_mc_addr_translation_range {
-       enum dprc_region_type mc_region_type;
-       u64 start_mc_offset;
-       u64 end_mc_offset;
-       phys_addr_t start_phys_addr;
-};
-
-/**
- * struct fsl_mc_resource_pool - Pool of MC resources of a given
- * type
- * @type: type of resources in the pool
- * @max_count: maximum number of resources in the pool
- * @free_count: number of free resources in the pool
- * @mutex: mutex to serialize access to the pool's free list
- * @free_list: anchor node of list of free resources in the pool
- * @mc_bus: pointer to the MC bus that owns this resource pool
- */
-struct fsl_mc_resource_pool {
-       enum fsl_mc_pool_type type;
-       int16_t max_count;
-       int16_t free_count;
-       struct mutex mutex;     /* serializes access to free_list */
-       struct list_head free_list;
-       struct fsl_mc_bus *mc_bus;
-};
-
-/**
- * struct fsl_mc_bus - logical bus that corresponds to a physical DPRC
- * @mc_dev: fsl-mc device for the bus device itself.
- * @resource_pools: array of resource pools (one pool per resource type)
- * for this MC bus. These resources represent allocatable entities
- * from the physical DPRC.
- * @irq_resources: Pointer to array of IRQ objects for the IRQ pool
- * @scan_mutex: Serializes bus scanning
- * @dprc_attr: DPRC attributes
- */
-struct fsl_mc_bus {
-       struct fsl_mc_device mc_dev;
-       struct fsl_mc_resource_pool resource_pools[FSL_MC_NUM_POOL_TYPES];
-       struct fsl_mc_device_irq *irq_resources;
-       struct mutex scan_mutex;    /* serializes bus scanning */
-       struct dprc_attributes dprc_attr;
-};
-
-#define to_fsl_mc_bus(_mc_dev) \
-       container_of(_mc_dev, struct fsl_mc_bus, mc_dev)
-
-int __must_check fsl_mc_device_add(struct dprc_obj_desc *obj_desc,
-                                  struct fsl_mc_io *mc_io,
-                                  struct device *parent_dev,
-                                  struct fsl_mc_device **new_mc_dev);
-
-void fsl_mc_device_remove(struct fsl_mc_device *mc_dev);
-
-int dprc_scan_container(struct fsl_mc_device *mc_bus_dev);
-
-int dprc_scan_objects(struct fsl_mc_device *mc_bus_dev,
-                     unsigned int *total_irq_count);
-
-int __init dprc_driver_init(void);
-
-void dprc_driver_exit(void);
-
-int __init fsl_mc_allocator_driver_init(void);
-
-void fsl_mc_allocator_driver_exit(void);
-
-int __must_check fsl_mc_resource_allocate(struct fsl_mc_bus *mc_bus,
-                                         enum fsl_mc_pool_type pool_type,
-                                         struct fsl_mc_resource
-                                                         **new_resource);
-
-void fsl_mc_resource_free(struct fsl_mc_resource *resource);
-
-struct irq_domain *fsl_mc_msi_create_irq_domain(struct fwnode_handle *fwnode,
-                                               struct msi_domain_info *info,
-                                               struct irq_domain *parent);
-
-int fsl_mc_find_msi_domain(struct device *mc_platform_dev,
-                          struct irq_domain **mc_msi_domain);
-
-int fsl_mc_msi_domain_alloc_irqs(struct device *dev,
-                                unsigned int irq_count);
-
-void fsl_mc_msi_domain_free_irqs(struct device *dev);
-
-int __init its_fsl_mc_msi_init(void);
-
-void its_fsl_mc_msi_cleanup(void);
-
-int fsl_mc_populate_irq_pool(struct fsl_mc_bus *mc_bus,
-                            unsigned int irq_count);
-
-void fsl_mc_cleanup_irq_pool(struct fsl_mc_bus *mc_bus);
-
-#endif /* _FSL_MC_PRIVATE_H_ */
index c5038cc77240667b0c46ff85a0dd4b49d9e603c5..89ad0cf54702099e921cfc579f14af9bcd5c9818 100644 (file)
@@ -37,8 +37,6 @@
 
 #include <linux/types.h>
 #include <linux/errno.h>
-#include <linux/io.h>
-#include <linux/dma-mapping.h>
 #include <linux/mutex.h>
 #include <linux/spinlock.h>
 
@@ -95,19 +93,6 @@ struct fsl_mc_io {
        };
 };
 
-int __must_check fsl_create_mc_io(struct device *dev,
-                                 phys_addr_t mc_portal_phys_addr,
-                                 u32 mc_portal_size,
-                                 struct fsl_mc_device *dpmcp_dev,
-                                 u32 flags, struct fsl_mc_io **new_mc_io);
-
-void fsl_destroy_mc_io(struct fsl_mc_io *mc_io);
-
-int fsl_mc_io_set_dpmcp(struct fsl_mc_io *mc_io,
-                       struct fsl_mc_device *dpmcp_dev);
-
-void fsl_mc_io_unset_dpmcp(struct fsl_mc_io *mc_io);
-
 int mc_send_command(struct fsl_mc_io *mc_io, struct mc_command *cmd);
 
 #endif /* _FSL_MC_SYS_H */
index 853cbf38a4004cb16d2fc9db58ef5ed9381f5ac7..f6e720e8446028fa7c6ea17b1e9f35e64b899573 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <linux/device.h>
 #include <linux/mod_devicetable.h>
-#include <linux/list.h>
 #include <linux/interrupt.h>
 #include "../include/dprc.h"
 
@@ -21,7 +20,6 @@
 
 struct fsl_mc_device;
 struct fsl_mc_io;
-struct fsl_mc_bus;
 
 /**
  * struct fsl_mc_driver - MC object device driver object
@@ -111,11 +109,6 @@ struct fsl_mc_device_irq {
  */
 #define FSL_MC_IS_DPRC 0x0001
 
-/**
- * Default DMA mask for devices on a fsl-mc bus
- */
-#define FSL_MC_DEFAULT_DMA_MASK        (~0ULL)
-
 /**
  * struct fsl_mc_device - MC object device object
  * @dev: Linux driver model device object
@@ -187,8 +180,6 @@ int __must_check __fsl_mc_driver_register(struct fsl_mc_driver *fsl_mc_driver,
 
 void fsl_mc_driver_unregister(struct fsl_mc_driver *driver);
 
-bool fsl_mc_bus_exists(void);
-
 int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
                                        u16 mc_io_flags,
                                        struct fsl_mc_io **new_mc_io);
@@ -207,8 +198,4 @@ int __must_check fsl_mc_allocate_irqs(struct fsl_mc_device *mc_dev);
 
 void fsl_mc_free_irqs(struct fsl_mc_device *mc_dev);
 
-bool fsl_mc_is_root_dprc(struct device *dev);
-
-extern struct bus_type fsl_mc_bus_type;
-
 #endif /* _FSL_MC_H_ */
index bb552193e4babca3c8cbdcccd7aeb5a5eb610b71..e72dfa9699f3e70a1048aa76b86b3b8ccb8ea874 100644 (file)
@@ -828,7 +828,7 @@ void start_rx_proc(struct phy_dev *phy_dev)
                                rx_complete, phy_dev, USB_COMPLETE);
 }
 
-static struct net_device_ops gdm_netdev_ops = {
+static const struct net_device_ops gdm_netdev_ops = {
        .ndo_open                       = gdm_lte_open,
        .ndo_stop                       = gdm_lte_close,
        .ndo_set_config                 = gdm_lte_set_config,
index eb7e2523c35455a90c354db7b6acbc1a80c9867b..ae396638f8975aa9f19244ccc51507cf1eefa496 100644 (file)
@@ -225,7 +225,6 @@ int register_lte_tty_device(struct tty_dev *tty_dev, struct device *device)
        int j;
 
        for (i = 0; i < TTY_MAX_COUNT; i++) {
-
                gdm = kmalloc(sizeof(*gdm), GFP_KERNEL);
                if (!gdm)
                        return -ENOMEM;
index d650d772095baa245fc100b6e8af5ee03773e857..15a7e81ec2d206775fb4729a0b53514b871de20f 100644 (file)
@@ -415,10 +415,10 @@ static void do_rx(struct work_struct *work)
                switch (cmd_evt) {
                case LTE_GET_INFORMATION_RESULT:
                        if (set_mac_address(hci->data, r->cb_data) == 0) {
-                               ret = r->callback(r->cb_data,
-                                                 r->buf,
-                                                 r->urb->actual_length,
-                                                 KERNEL_THREAD);
+                               r->callback(r->cb_data,
+                                           r->buf,
+                                           r->urb->actual_length,
+                                           KERNEL_THREAD);
                        }
                        break;
 
index a0232e8aec10b96612564259aeebaeee4e248dcd..abe2425058825d743605c87ea330e6118b960cb1 100644 (file)
@@ -14,6 +14,7 @@
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
 #include <linux/export.h>
+#include <linux/mutex.h>
 #include <linux/etherdevice.h>
 #include <linux/netlink.h>
 #include <asm/byteorder.h>
 
 #include "netlink_k.h"
 
-#if defined(DEFINE_MUTEX)
 static DEFINE_MUTEX(netlink_mutex);
-#else
-static struct semaphore netlink_mutex;
-#define mutex_lock(x)          down(x)
-#define mutex_unlock(x)                up(x)
-#endif
 
 #define ND_MAX_GROUP           30
 #define ND_IFINDEX_LEN         sizeof(int)
@@ -96,10 +91,6 @@ struct sock *netlink_init(int unit,
                .input  = netlink_rcv,
        };
 
-#if !defined(DEFINE_MUTEX)
-       init_MUTEX(&netlink_mutex);
-#endif
-
        sock = netlink_kernel_create(&init_net, unit, &cfg);
 
        if (sock)
index f0eb8441deed138fbf69e8d95d6294dd46250766..1d931519833c4020fd5461083bc7c80bea1373a0 100644 (file)
@@ -134,9 +134,9 @@ act2000_isa_config_irq(act2000_card *card, short irq)
 {
        int old_irq;
 
-       if (card->flags & ACT2000_FLAGS_IVALID) {
+       if (card->flags & ACT2000_FLAGS_IVALID)
                free_irq(card->irq, card);
-       }
+
        card->flags &= ~ACT2000_FLAGS_IVALID;
        outb(ISA_COR_IRQOFF, ISA_PORT_COR);
        if (!irq)
index 3f66ca20b5e544e3c0593f91cdf5c3e5139f894e..bf04e6ffebad1b1accfea258a4249124033eaeb5 100644 (file)
@@ -113,7 +113,9 @@ actcapi_chkhdr(act2000_card *card, actcapi_msghdr *hdr)
                        m->hdr.cmd.cmd = c;                     \
                        m->hdr.cmd.subcmd = s;                  \
                        m->hdr.msgnum = actcapi_nextsmsg(card); \
-               } else m = NULL;                                \
+               } else {                                        \
+                       m = NULL;                               \
+               }                                               \
        }
 
 #define ACTCAPI_CHKSKB if (!skb) {                                     \
@@ -547,12 +549,11 @@ static int
 actcapi_data_b3_ind(act2000_card *card, struct sk_buff *skb) {
        __u16 plci;
        __u16 ncci;
-       __u16 controller;
        __u8  blocknr;
        int chan;
        actcapi_msg *msg = (actcapi_msg *)skb->data;
 
-       EVAL_NCCI(msg->msg.data_b3_ind.fakencci, plci, controller, ncci);
+       EVAL_NCCI(msg->msg.data_b3_ind.fakencci, plci, ncci);
        chan = find_ncci(card, ncci);
        if (chan < 0)
                return 0;
@@ -990,7 +991,8 @@ actcapi_debug_dlpd(actcapi_dlpd *dlpd)
 }
 
 #ifdef DEBUG_DUMP_SKB
-static void dump_skb(struct sk_buff *skb) {
+static void dump_skb(struct sk_buff *skb)
+{
        char tmp[80];
        char *p = skb->data;
        char *t = tmp;
index 01ccdecd43f76920435b17365c7a5e950d4edf65..34884a5efee5163a9ca71a0e864feea12e3d6fd8 100644 (file)
@@ -114,9 +114,8 @@ typedef struct actcapi_ncpd {
 #define MAKE_NCCI(plci, contr, ncci)                                   \
        ((plci & 0x1f) | ((contr & 0x7) << 5) | ((ncci & 0xff) << 8))
 
-#define EVAL_NCCI(fakencci, plci, contr, ncci) {       \
+#define EVAL_NCCI(fakencci, plci, ncci) {      \
                plci  = fakencci & 0x1f;                \
-               contr = (fakencci >> 5) & 0x7;          \
                ncci  = (fakencci >> 8) & 0xff;         \
        }
 
@@ -128,13 +127,6 @@ typedef struct actcapi_ncpd {
  * Bit 5-7  = Controller
  * Bit 8-15 = reserved (must be 0)
  */
-#define MAKE_PLCI(plci, contr)                 \
-       ((plci & 0x1f) | ((contr & 0x7) << 5))
-
-#define EVAL_PLCI(fakeplci, plci, contr) {     \
-               plci  = fakeplci & 0x1f;        \
-               contr = (fakeplci >> 5) & 0x7;  \
-       }
 
 typedef struct actcapi_msg {
        actcapi_msghdr hdr;
index 46d957c34be1ea2f2fe78cdfde367f2dbd5e7566..514bfc2c5b53b84bda9177619736c57d6a388654 100644 (file)
@@ -62,7 +62,8 @@ icn_free_queue(icn_card *card, int channel)
        skb_queue_purge(queue);
        card->xlen[channel] = 0;
        card->sndcount[channel] = 0;
-       if ((skb = card->xskb[channel])) {
+       skb = card->xskb[channel];
+       if (skb) {
                card->xskb[channel] = NULL;
                dev_kfree_skb(skb);
        }
@@ -81,12 +82,11 @@ icn_shiftout(unsigned short port,
             int firstbit,
             int bitcount)
 {
-
        register u_char s;
        register u_char c;
 
        for (s = firstbit, c = bitcount; c > 0; s--, c--)
-               OUTB_P((u_char) ((val >> s) & 1) ? 0xff : 0, port);
+               OUTB_P((u_char)((val >> s) & 1) ? 0xff : 0, port);
 }
 
 /*
@@ -272,8 +272,10 @@ icn_pollbchan_receive(int channel, icn_card *card)
                        rbnext;
                        icn_maprelease_channel(card, mch & 2);
                        if (!eflag) {
-                               if ((cnt = card->rcvidx[channel])) {
-                                       if (!(skb = dev_alloc_skb(cnt))) {
+                               cnt = card->rcvidx[channel];
+                               if (cnt) {
+                                       skb = dev_alloc_skb(cnt);
+                                       if (!skb) {
                                                printk(KERN_WARNING "icn: receive out of memory\n");
                                                break;
                                        }
@@ -382,7 +384,7 @@ icn_pollbchan_send(int channel, icn_card *card)
 static void
 icn_pollbchan(unsigned long data)
 {
-       icn_card *card = (icn_card *) data;
+       icn_card *card = (icn_card *)data;
        unsigned long flags;
 
        if (card->flags & ICN_FLAGS_B1ACTIVE) {
@@ -472,7 +474,6 @@ icn_parse_status(u_char *status, int channel, icn_card *card)
 
                if (card->flags &
                    ((channel) ? ICN_FLAGS_B2ACTIVE : ICN_FLAGS_B1ACTIVE)) {
-
                        isdn_ctrl ncmd;
 
                        card->flags &= ~((channel) ?
@@ -544,7 +545,7 @@ icn_parse_status(u_char *status, int channel, icn_card *card)
                break;
        case 6:
                snprintf(cmd.parm.num, sizeof(cmd.parm.num), "%d",
-                        (int) simple_strtoul(status + 7, NULL, 16));
+                        (int)simple_strtoul(status + 7, NULL, 16));
                break;
        case 7:
                status += 3;
@@ -604,7 +605,7 @@ icn_putmsg(icn_card *card, unsigned char c)
 static void
 icn_polldchan(unsigned long data)
 {
-       icn_card *card = (icn_card *) data;
+       icn_card *card = (icn_card *)data;
        int mch = card->secondhalf ? 2 : 0;
        int avail = 0;
        int left;
@@ -656,9 +657,8 @@ icn_polldchan(unsigned long data)
                                                *q = '\0';
                                                strcat(vstr, "000");
                                                vstr[3] = '\0';
-                                               card->fw_rev = (int) simple_strtoul(vstr, NULL, 10);
+                                               card->fw_rev = (int)simple_strtoul(vstr, NULL, 10);
                                                continue;
-
                                        }
                                }
                        } else {
@@ -683,7 +683,7 @@ icn_polldchan(unsigned long data)
                        card->flags |= ICN_FLAGS_RBTIMER;
                        del_timer(&card->rb_timer);
                        card->rb_timer.function = icn_pollbchan;
-                       card->rb_timer.data = (unsigned long) card;
+                       card->rb_timer.data = (unsigned long)card;
                        card->rb_timer.expires = jiffies + ICN_TIMER_BCREAD;
                        add_timer(&card->rb_timer);
                }
@@ -805,17 +805,12 @@ icn_loadboot(u_char __user *buffer, icn_card *card)
        unsigned long flags;
 
 #ifdef BOOT_DEBUG
-       printk(KERN_DEBUG "icn_loadboot called, buffaddr=%08lx\n", (ulong) buffer);
+       printk(KERN_DEBUG "icn_loadboot called, buffaddr=%08lx\n", (ulong)buffer);
 #endif
-       if (!(codebuf = kmalloc(ICN_CODE_STAGE1, GFP_KERNEL))) {
-               printk(KERN_WARNING "icn: Could not allocate code buffer\n");
-               ret = -ENOMEM;
-               goto out;
-       }
-       if (copy_from_user(codebuf, buffer, ICN_CODE_STAGE1)) {
-               ret = -EFAULT;
-               goto out_kfree;
-       }
+       codebuf = memdup_user(buffer, ICN_CODE_STAGE1);
+       if (IS_ERR(codebuf))
+               return PTR_ERR(codebuf);
+
        if (!card->rvalid) {
                if (!request_region(card->port, ICN_PORTLEN, card->regname)) {
                        printk(KERN_WARNING
@@ -878,9 +873,9 @@ icn_loadboot(u_char __user *buffer, icn_card *card)
        }
        SLEEP(1);
        OUTB_P(0xff, ICN_RUN);  /* Start Boot-Code */
-       if ((ret = icn_check_loader(card->doubleS0 ? 2 : 1))) {
+       ret = icn_check_loader(card->doubleS0 ? 2 : 1);
+       if (ret)
                goto out_kfree;
-       }
        if (!card->doubleS0) {
                ret = 0;
                goto out_kfree;
@@ -898,7 +893,6 @@ icn_loadboot(u_char __user *buffer, icn_card *card)
 
 out_kfree:
        kfree(codebuf);
-out:
        return ret;
 }
 
@@ -980,18 +974,17 @@ icn_loadproto(u_char __user *buffer, icn_card *card)
                                       card->secondhalf);
 #endif
                                spin_lock_irqsave(&card->lock, flags);
-                               init_timer(&card->st_timer);
-                               card->st_timer.expires = jiffies + ICN_TIMER_DCREAD;
-                               card->st_timer.function = icn_polldchan;
-                               card->st_timer.data = (unsigned long) card;
-                               add_timer(&card->st_timer);
+                               setup_timer(&card->st_timer, icn_polldchan,
+                                           (unsigned long)card);
+                               mod_timer(&card->st_timer,
+                                         jiffies + ICN_TIMER_DCREAD);
                                card->flags |= ICN_FLAGS_RUNNING;
                                if (card->doubleS0) {
-                                       init_timer(&card->other->st_timer);
-                                       card->other->st_timer.expires = jiffies + ICN_TIMER_DCREAD;
-                                       card->other->st_timer.function = icn_polldchan;
-                                       card->other->st_timer.data = (unsigned long) card->other;
-                                       add_timer(&card->other->st_timer);
+                                       setup_timer(&card->other->st_timer,
+                                                   icn_polldchan,
+                                                   (unsigned long)card->other);
+                                       mod_timer(&card->other->st_timer,
+                                                 jiffies + ICN_TIMER_DCREAD);
                                        card->other->flags |= ICN_FLAGS_RUNNING;
                                }
                                spin_unlock_irqrestore(&card->lock, flags);
@@ -1022,7 +1015,8 @@ icn_readstatus(u_char __user *buf, int len, icn_card *card)
 
 /* Put command-strings into the command-queue of the Interface */
 static int
-icn_writecmd(const u_char *buf, int len, int user, icn_card *card)
+icn_writecmd(const u_char __user *ubuf, const u_char *kbuf, int len,
+            int user, icn_card *card)
 {
        int mch = card->secondhalf ? 2 : 0;
        int pp;
@@ -1045,10 +1039,10 @@ icn_writecmd(const u_char *buf, int len, int user, icn_card *card)
                if (count > len)
                        count = len;
                if (user) {
-                       if (copy_from_user(msg, buf, count))
+                       if (copy_from_user(msg, ubuf, count))
                                return -EFAULT;
                } else
-                       memcpy(msg, buf, count);
+                       memcpy(msg, kbuf, count);
 
                spin_lock_irqsave(&dev.devlock, flags);
                lastmap_card = dev.mcard;
@@ -1190,28 +1184,28 @@ icn_command(isdn_ctrl *c, icn_card *card)
                        }
                        break;
                case ICN_IOCTL_GETMMIO:
-                       return (long) dev.memaddr;
+                       return (long)dev.memaddr;
                case ICN_IOCTL_SETPORT:
                        if (a == 0x300 || a == 0x310 || a == 0x320 || a == 0x330
                            || a == 0x340 || a == 0x350 || a == 0x360 ||
                            a == 0x308 || a == 0x318 || a == 0x328 || a == 0x338
                            || a == 0x348 || a == 0x358 || a == 0x368) {
-                               if (card->port != (unsigned short) a) {
-                                       if (!request_region((unsigned short) a, ICN_PORTLEN, "icn-isdn")) {
+                               if (card->port != (unsigned short)a) {
+                                       if (!request_region((unsigned short)a, ICN_PORTLEN, "icn-isdn")) {
                                                printk(KERN_WARNING
                                                       "icn: (%s) ports 0x%03x-0x%03x in use.\n",
-                                                      CID, (int) a, (int) a + ICN_PORTLEN);
+                                                      CID, (int)a, (int)a + ICN_PORTLEN);
                                                return -EINVAL;
                                        }
-                                       release_region((unsigned short) a, ICN_PORTLEN);
+                                       release_region((unsigned short)a, ICN_PORTLEN);
                                        icn_stopcard(card);
                                        spin_lock_irqsave(&card->lock, flags);
                                        if (card->rvalid)
                                                release_region(card->port, ICN_PORTLEN);
-                                       card->port = (unsigned short) a;
+                                       card->port = (unsigned short)a;
                                        card->rvalid = 0;
                                        if (card->doubleS0) {
-                                               card->other->port = (unsigned short) a;
+                                               card->other->port = (unsigned short)a;
                                                card->other->rvalid = 0;
                                        }
                                        spin_unlock_irqrestore(&card->lock, flags);
@@ -1223,9 +1217,9 @@ icn_command(isdn_ctrl *c, icn_card *card)
                                return -EINVAL;
                        break;
                case ICN_IOCTL_GETPORT:
-                       return (int) card->port;
+                       return (int)card->port;
                case ICN_IOCTL_GETDOUBLE:
-                       return (int) card->doubleS0;
+                       return (int)card->doubleS0;
                case ICN_IOCTL_DEBUGVAR:
                        if (copy_to_user(arg,
                                         &card,
@@ -1246,10 +1240,11 @@ icn_command(isdn_ctrl *c, icn_card *card)
                                dev.firstload = 0;
                        }
                        icn_stopcard(card);
-                       return (icn_loadboot(arg, card));
+                       return icn_loadboot(arg, card);
                case ICN_IOCTL_LOADPROTO:
                        icn_stopcard(card);
-                       if ((i = (icn_loadproto(arg, card))))
+                       i = (icn_loadproto(arg, card));
+                       if (i)
                                return i;
                        if (card->doubleS0)
                                i = icn_loadproto(arg + ICN_CODE_STAGE2, card->other);
@@ -1262,19 +1257,20 @@ icn_command(isdn_ctrl *c, icn_card *card)
                                           arg,
                                           sizeof(cdef)))
                                return -EFAULT;
-                       return (icn_addcard(cdef.port, cdef.id1, cdef.id2));
+                       return icn_addcard(cdef.port, cdef.id1, cdef.id2);
                        break;
                case ICN_IOCTL_LEASEDCFG:
                        if (a) {
                                if (!card->leased) {
                                        card->leased = 1;
-                                       while (card->ptype == ISDN_PTYPE_UNKNOWN) {
+                                       while (card->ptype == ISDN_PTYPE_UNKNOWN)
                                                msleep_interruptible(ICN_BOOT_TIMEOUT1);
-                                       }
                                        msleep_interruptible(ICN_BOOT_TIMEOUT1);
                                        sprintf(cbuf, "00;FV2ON\n01;EAZ%c\n02;EAZ%c\n",
                                                (a & 1) ? '1' : 'C', (a & 2) ? '2' : 'C');
-                                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                                       i = icn_writecmd(NULL, cbuf,
+                                                        strlen(cbuf),
+                                                        0, card);
                                        printk(KERN_INFO
                                               "icn: (%s) Leased-line mode enabled\n",
                                               CID);
@@ -1287,7 +1283,9 @@ icn_command(isdn_ctrl *c, icn_card *card)
                                if (card->leased) {
                                        card->leased = 0;
                                        sprintf(cbuf, "00;FV2OFF\n");
-                                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                                       i = icn_writecmd(NULL, cbuf,
+                                                        strlen(cbuf),
+                                                        0, card);
                                        printk(KERN_INFO
                                               "icn: (%s) Leased-line mode disabled\n",
                                               CID);
@@ -1321,10 +1319,10 @@ icn_command(isdn_ctrl *c, icn_card *card)
                                /* Normal Dial */
                                strcpy(dcode, "CAL");
                        snprintf(cbuf, sizeof(cbuf),
-                                "%02d;D%s_R%s,%02d,%02d,%s\n", (int) (a + 1),
+                                "%02d;D%s_R%s,%02d,%02d,%s\n", (int)(a + 1),
                                 dcode, p, c->parm.setup.si1,
                                 c->parm.setup.si2, c->parm.setup.eazmsn);
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_ACCEPTD:
@@ -1335,16 +1333,18 @@ icn_command(isdn_ctrl *c, icn_card *card)
                        if (card->fw_rev >= 300) {
                                switch (card->l2_proto[a - 1]) {
                                case ISDN_PROTO_L2_X75I:
-                                       sprintf(cbuf, "%02d;BX75\n", (int) a);
+                                       sprintf(cbuf, "%02d;BX75\n", (int)a);
                                        break;
                                case ISDN_PROTO_L2_HDLC:
-                                       sprintf(cbuf, "%02d;BTRA\n", (int) a);
+                                       sprintf(cbuf, "%02d;BTRA\n", (int)a);
                                        break;
                                }
-                               i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                               i = icn_writecmd(NULL, cbuf,
+                                                strlen(cbuf), 0,
+                                                card);
                        }
-                       sprintf(cbuf, "%02d;DCON_R\n", (int) a);
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                       sprintf(cbuf, "%02d;DCON_R\n", (int)a);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_ACCEPTB:
@@ -1355,14 +1355,14 @@ icn_command(isdn_ctrl *c, icn_card *card)
                        if (card->fw_rev >= 300)
                                switch (card->l2_proto[a - 1]) {
                                case ISDN_PROTO_L2_X75I:
-                                       sprintf(cbuf, "%02d;BCON_R,BX75\n", (int) a);
+                                       sprintf(cbuf, "%02d;BCON_R,BX75\n", (int)a);
                                        break;
                                case ISDN_PROTO_L2_HDLC:
-                                       sprintf(cbuf, "%02d;BCON_R,BTRA\n", (int) a);
+                                       sprintf(cbuf, "%02d;BCON_R,BTRA\n", (int)a);
                                        break;
                                } else
-                               sprintf(cbuf, "%02d;BCON_R\n", (int) a);
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                               sprintf(cbuf, "%02d;BCON_R\n", (int)a);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_HANGUP:
@@ -1370,8 +1370,8 @@ icn_command(isdn_ctrl *c, icn_card *card)
                        return -ENODEV;
                if (c->arg < ICN_BCH) {
                        a = c->arg + 1;
-                       sprintf(cbuf, "%02d;BDIS_R\n%02d;DDIS_R\n", (int) a, (int) a);
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                       sprintf(cbuf, "%02d;BDIS_R\n%02d;DDIS_R\n", (int)a, (int)a);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_SETEAZ:
@@ -1382,12 +1382,12 @@ icn_command(isdn_ctrl *c, icn_card *card)
                if (c->arg < ICN_BCH) {
                        a = c->arg + 1;
                        if (card->ptype == ISDN_PTYPE_EURO) {
-                               sprintf(cbuf, "%02d;MS%s%s\n", (int) a,
+                               sprintf(cbuf, "%02d;MS%s%s\n", (int)a,
                                        c->parm.num[0] ? "N" : "ALL", c->parm.num);
                        } else
-                               sprintf(cbuf, "%02d;EAZ%s\n", (int) a,
+                               sprintf(cbuf, "%02d;EAZ%s\n", (int)a,
                                        c->parm.num[0] ? (char *)(c->parm.num) : "0123456789");
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_CLREAZ:
@@ -1398,10 +1398,10 @@ icn_command(isdn_ctrl *c, icn_card *card)
                if (c->arg < ICN_BCH) {
                        a = c->arg + 1;
                        if (card->ptype == ISDN_PTYPE_EURO)
-                               sprintf(cbuf, "%02d;MSNC\n", (int) a);
+                               sprintf(cbuf, "%02d;MSNC\n", (int)a);
                        else
-                               sprintf(cbuf, "%02d;EAZC\n", (int) a);
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                               sprintf(cbuf, "%02d;EAZC\n", (int)a);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                }
                break;
        case ISDN_CMD_SETL2:
@@ -1411,15 +1411,15 @@ icn_command(isdn_ctrl *c, icn_card *card)
                        a = c->arg;
                        switch (a >> 8) {
                        case ISDN_PROTO_L2_X75I:
-                               sprintf(cbuf, "%02d;BX75\n", (int) (a & 255) + 1);
+                               sprintf(cbuf, "%02d;BX75\n", (int)(a & 255) + 1);
                                break;
                        case ISDN_PROTO_L2_HDLC:
-                               sprintf(cbuf, "%02d;BTRA\n", (int) (a & 255) + 1);
+                               sprintf(cbuf, "%02d;BTRA\n", (int)(a & 255) + 1);
                                break;
                        default:
                                return -EINVAL;
                        }
-                       i = icn_writecmd(cbuf, strlen(cbuf), 0, card);
+                       i = icn_writecmd(NULL, cbuf, strlen(cbuf), 0, card);
                        card->l2_proto[a & 255] = (a >> 8);
                }
                break;
@@ -1446,7 +1446,7 @@ icn_findcard(int driverid)
                        return p;
                p = p->next;
        }
-       return (icn_card *) 0;
+       return (icn_card *)0;
 }
 
 /*
@@ -1458,7 +1458,7 @@ if_command(isdn_ctrl *c)
        icn_card *card = icn_findcard(c->driver);
 
        if (card)
-               return (icn_command(c, card));
+               return icn_command(c, card);
        printk(KERN_ERR
               "icn: if_command %d called with invalid driverId %d!\n",
               c->command, c->driver);
@@ -1473,7 +1473,7 @@ if_writecmd(const u_char __user *buf, int len, int id, int channel)
        if (card) {
                if (!(card->flags & ICN_FLAGS_RUNNING))
                        return -ENODEV;
-               return (icn_writecmd(buf, len, 1, card));
+               return icn_writecmd(buf, NULL, len, 1, card);
        }
        printk(KERN_ERR
               "icn: if_writecmd called with invalid driverId!\n");
@@ -1488,7 +1488,7 @@ if_readstatus(u_char __user *buf, int len, int id, int channel)
        if (card) {
                if (!(card->flags & ICN_FLAGS_RUNNING))
                        return -ENODEV;
-               return (icn_readstatus(buf, len, card));
+               return icn_readstatus(buf, len, card);
        }
        printk(KERN_ERR
               "icn: if_readstatus called with invalid driverId!\n");
@@ -1503,7 +1503,7 @@ if_sendbuf(int id, int channel, int ack, struct sk_buff *skb)
        if (card) {
                if (!(card->flags & ICN_FLAGS_RUNNING))
                        return -ENODEV;
-               return (icn_sendbuf(channel, ack, skb, card));
+               return icn_sendbuf(channel, ack, skb, card);
        }
        printk(KERN_ERR
               "icn: if_sendbuf called with invalid driverId!\n");
@@ -1520,10 +1520,11 @@ icn_initcard(int port, char *id)
        icn_card *card;
        int i;
 
-       if (!(card = kzalloc(sizeof(icn_card), GFP_KERNEL))) {
+       card = kzalloc(sizeof(icn_card), GFP_KERNEL);
+       if (!card) {
                printk(KERN_WARNING
                       "icn: (%s) Could not allocate card-struct.\n", id);
-               return (icn_card *) 0;
+               return (icn_card *)0;
        }
        spin_lock_init(&card->lock);
        card->port = port;
@@ -1555,7 +1556,7 @@ icn_initcard(int port, char *id)
                printk(KERN_WARNING
                       "icn: Unable to register %s\n", id);
                kfree(card);
-               return (icn_card *) 0;
+               return (icn_card *)0;
        }
        card->myid = card->interface.channels;
        sprintf(card->regname, "icn-isdn (%s)", card->interface.id);
@@ -1568,16 +1569,17 @@ icn_addcard(int port, char *id1, char *id2)
        icn_card *card;
        icn_card *card2;
 
-       if (!(card = icn_initcard(port, id1))) {
+       card = icn_initcard(port, id1);
+       if (!card)
                return -EIO;
-       }
        if (!strlen(id2)) {
                printk(KERN_INFO
                       "icn: (%s) ICN-2B, port 0x%x added\n",
                       card->interface.id, port);
                return 0;
        }
-       if (!(card2 = icn_initcard(port, id2))) {
+       card2 = icn_initcard(port, id2);
+       if (!card2) {
                printk(KERN_INFO
                       "icn: (%s) half ICN-4B, port 0x%x added\n", id2, port);
                return 0;
@@ -1611,13 +1613,14 @@ icn_setup(char *line)
        if (str && *str) {
                strlcpy(sid, str, sizeof(sid));
                icn_id = sid;
-               if ((p = strchr(sid, ','))) {
+               p = strchr(sid, ',');
+               if (p) {
                        *p++ = 0;
                        strcpy(sid2, p);
                        icn_id2 = sid2;
                }
        }
-       return (1);
+       return 1;
 }
 __setup("icn=", icn_setup);
 #endif /* MODULE */
@@ -1634,7 +1637,8 @@ static int __init icn_init(void)
        dev.firstload = 1;
        spin_lock_init(&dev.devlock);
 
-       if ((p = strchr(revision, ':'))) {
+       p = strchr(revision, ':');
+       if (p) {
                strncpy(rev, p + 1, 20);
                rev[20] = '\0';
                p = strchr(rev, '$');
@@ -1644,7 +1648,7 @@ static int __init icn_init(void)
                strcpy(rev, " ??? ");
        printk(KERN_NOTICE "ICN-ISDN-driver Rev%smem=0x%08lx\n", rev,
               dev.memaddr);
-       return (icn_addcard(portbase, icn_id, icn_id2));
+       return icn_addcard(portbase, icn_id, icn_id2);
 }
 
 static void __exit icn_exit(void)
index 4e3cbf857d6066cfceff3ff3422c9b5cfdbd3318..373f90feda5a9bcc8c244735ec3c67ffda565561 100644 (file)
@@ -92,9 +92,7 @@ int capi_conn_req(const char *calledPN, struct sk_buff **skb, int proto)
                *(skb_put(*skb, 1)) = 0x80;     /* Speech               */
                *(skb_put(*skb, 1)) = 0x10;     /* Circuit Mode         */
                *(skb_put(*skb, 1)) = 0x23;     /* A-law                */
-       }
-       else
-       {
+       } else {
                /* Bearer Capability - Mandatory*/
                *(skb_put(*skb, 1)) = 2;        /* BC0.Length           */
                *(skb_put(*skb, 1)) = 0x88;     /* Digital Information  */
index c5270e229efb799934f610c4aeda38f04f90f603..d417df5efb5fc2fbdb2f7978895eb4af07ee0f04 100644 (file)
@@ -359,11 +359,9 @@ static int pcbit_xmit(int driver, int chnum, int ack, struct sk_buff *skb)
                 */
 #ifdef BLOCK_TIMER
                if (chan->block_timer.function == NULL) {
-                       init_timer(&chan->block_timer);
-                       chan->block_timer.function =  &pcbit_block_timer;
-                       chan->block_timer.data = (long) chan;
-                       chan->block_timer.expires = jiffies + 1 * HZ;
-                       add_timer(&chan->block_timer);
+                       setup_timer(&chan->block_timer, &pcbit_block_timer,
+                                   (long)chan);
+                       mod_timer(&chan->block_timer, jiffies + 1 * HZ);
                }
 #endif
                return 0;
@@ -804,11 +802,7 @@ static int set_protocol_running(struct pcbit_dev *dev)
 {
        isdn_ctrl ctl;
 
-       init_timer(&dev->set_running_timer);
-
-       dev->set_running_timer.function = &set_running_timeout;
-       dev->set_running_timer.data = (ulong) dev;
-       dev->set_running_timer.expires = jiffies + SET_RUN_TIMEOUT;
+       setup_timer(&dev->set_running_timer, &set_running_timeout, (ulong)dev);
 
        /* kick it */
 
@@ -817,7 +811,7 @@ static int set_protocol_running(struct pcbit_dev *dev)
        writeb((0x80U | ((dev->rcv_seq & 0x07) << 3) | (dev->send_seq & 0x07)),
               dev->sh_mem + BANK4);
 
-       add_timer(&dev->set_running_timer);
+       mod_timer(&dev->set_running_timer, jiffies + SET_RUN_TIMEOUT);
 
        wait_event(dev->set_running_wq, dev->l2_state == L2_RUNNING ||
                                        dev->l2_state == L2_DOWN);
index e72c16420712c0a00cc9be91570503a921437c7c..6d291d548423cecda2966c03936027a698da3665 100644 (file)
@@ -298,11 +298,8 @@ void pcbit_fsm_event(struct pcbit_dev *dev, struct pcbit_chan *chan,
                        break;
 
        if (tentry->init != 0xff) {
-               init_timer(&chan->fsm_timer);
-               chan->fsm_timer.function = &pcbit_fsm_timer;
-               chan->fsm_timer.data = (ulong) chan;
-               chan->fsm_timer.expires = jiffies + tentry->timeout * HZ;
-               add_timer(&chan->fsm_timer);
+               setup_timer(&chan->fsm_timer, &pcbit_fsm_timer, (ulong)chan);
+               mod_timer(&chan->fsm_timer, jiffies + tentry->timeout * HZ);
        }
 
        spin_unlock_irqrestore(&dev->lock, flags);
index 46e1240ae0741a54008a976602b11a90f00ea685..a136c72547e5c740c8c2bf891c35685810e49982 100644 (file)
@@ -645,11 +645,9 @@ pcbit_l2_error(struct pcbit_dev *dev)
 
                dev->l2_state = L2_DOWN;
 
-               init_timer(&dev->error_recover_timer);
-               dev->error_recover_timer.function = &pcbit_l2_err_recover;
-               dev->error_recover_timer.data = (ulong) dev;
-               dev->error_recover_timer.expires = jiffies + ERRTIME;
-               add_timer(&dev->error_recover_timer);
+               setup_timer(&dev->error_recover_timer, &pcbit_l2_err_recover,
+                           (ulong)dev);
+               mod_timer(&dev->error_recover_timer, jiffies + ERRTIME);
        }
 }
 
index 76d9f74e7dcbfc9cfe6dd503f5e1bdf3bae37ba3..f47a17d7f6b3ec4421750cd9ea2851a220caab33 100644 (file)
 #include <linux/iio/sysfs.h>
 #include <linux/acpi.h>
 
-#define CONVERSION_TIME_MS             100
+#define ISL29018_CONV_TIME_MS          100
 
 #define ISL29018_REG_ADD_COMMAND1      0x00
-#define COMMMAND1_OPMODE_SHIFT         5
-#define COMMMAND1_OPMODE_MASK          (7 << COMMMAND1_OPMODE_SHIFT)
-#define COMMMAND1_OPMODE_POWER_DOWN    0
-#define COMMMAND1_OPMODE_ALS_ONCE      1
-#define COMMMAND1_OPMODE_IR_ONCE       2
-#define COMMMAND1_OPMODE_PROX_ONCE     3
+#define ISL29018_CMD1_OPMODE_SHIFT     5
+#define ISL29018_CMD1_OPMODE_MASK      (7 << ISL29018_CMD1_OPMODE_SHIFT)
+#define ISL29018_CMD1_OPMODE_POWER_DOWN        0
+#define ISL29018_CMD1_OPMODE_ALS_ONCE  1
+#define ISL29018_CMD1_OPMODE_IR_ONCE   2
+#define ISL29018_CMD1_OPMODE_PROX_ONCE 3
 
-#define ISL29018_REG_ADD_COMMANDII     0x01
-#define COMMANDII_RESOLUTION_SHIFT     2
-#define COMMANDII_RESOLUTION_MASK      (0x3 << COMMANDII_RESOLUTION_SHIFT)
+#define ISL29018_REG_ADD_COMMAND     0x01
+#define ISL29018_CMD2_RESOLUTION_SHIFT 2
+#define ISL29018_CMD2_RESOLUTION_MASK  (0x3 << ISL29018_CMD2_RESOLUTION_SHIFT)
 
-#define COMMANDII_RANGE_SHIFT          0
-#define COMMANDII_RANGE_MASK           (0x3 << COMMANDII_RANGE_SHIFT)
+#define ISL29018_CMD2_RANGE_SHIFT      0
+#define ISL29018_CMD2_RANGE_MASK       (0x3 << ISL29018_CMD2_RANGE_SHIFT)
 
-#define COMMANDII_SCHEME_SHIFT         7
-#define COMMANDII_SCHEME_MASK          (0x1 << COMMANDII_SCHEME_SHIFT)
+#define ISL29018_CMD2_SCHEME_SHIFT     7
+#define ISL29018_CMD2_SCHEME_MASK      (0x1 << ISL29018_CMD2_SCHEME_SHIFT)
 
 #define ISL29018_REG_ADD_DATA_LSB      0x02
 #define ISL29018_REG_ADD_DATA_MSB      0x03
@@ -127,13 +127,13 @@ static int isl29018_set_integration_time(struct isl29018_chip *chip,
        if (i >= ARRAY_SIZE(isl29018_int_utimes[chip->type]))
                return -EINVAL;
 
-       ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMANDII,
-                                COMMANDII_RESOLUTION_MASK,
-                                i << COMMANDII_RESOLUTION_SHIFT);
+       ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
+                                ISL29018_CMD2_RESOLUTION_MASK,
+                                i << ISL29018_CMD2_RESOLUTION_SHIFT);
        if (ret < 0)
                return ret;
 
-       /* keep the same range when integration time changes */
+       /* Keep the same range when integration time changes */
        int_time = chip->int_time;
        for (i = 0; i < ARRAY_SIZE(isl29018_scales[int_time]); ++i) {
                if (chip->scale.scale == isl29018_scales[int_time][i].scale &&
@@ -163,9 +163,9 @@ static int isl29018_set_scale(struct isl29018_chip *chip, int scale, int uscale)
        if (i >= ARRAY_SIZE(isl29018_scales[chip->int_time]))
                return -EINVAL;
 
-       ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMANDII,
-                                COMMANDII_RANGE_MASK,
-                                i << COMMANDII_RANGE_SHIFT);
+       ret = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
+                                ISL29018_CMD2_RANGE_MASK,
+                                i << ISL29018_CMD2_RANGE_SHIFT);
        if (ret < 0)
                return ret;
 
@@ -183,13 +183,13 @@ static int isl29018_read_sensor_input(struct isl29018_chip *chip, int mode)
 
        /* Set mode */
        status = regmap_write(chip->regmap, ISL29018_REG_ADD_COMMAND1,
-                             mode << COMMMAND1_OPMODE_SHIFT);
+                             mode << ISL29018_CMD1_OPMODE_SHIFT);
        if (status) {
                dev_err(dev,
                        "Error in setting operating mode err %d\n", status);
                return status;
        }
-       msleep(CONVERSION_TIME_MS);
+       msleep(ISL29018_CONV_TIME_MS);
        status = regmap_read(chip->regmap, ISL29018_REG_ADD_DATA_LSB, &lsb);
        if (status < 0) {
                dev_err(dev,
@@ -213,8 +213,8 @@ static int isl29018_read_lux(struct isl29018_chip *chip, int *lux)
        int lux_data;
        unsigned int data_x_range;
 
-       lux_data = isl29018_read_sensor_input(chip, COMMMAND1_OPMODE_ALS_ONCE);
-
+       lux_data = isl29018_read_sensor_input(chip,
+                                             ISL29018_CMD1_OPMODE_ALS_ONCE);
        if (lux_data < 0)
                return lux_data;
 
@@ -230,8 +230,8 @@ static int isl29018_read_ir(struct isl29018_chip *chip, int *ir)
 {
        int ir_data;
 
-       ir_data = isl29018_read_sensor_input(chip, COMMMAND1_OPMODE_IR_ONCE);
-
+       ir_data = isl29018_read_sensor_input(chip,
+                                            ISL29018_CMD1_OPMODE_IR_ONCE);
        if (ir_data < 0)
                return ir_data;
 
@@ -249,16 +249,16 @@ static int isl29018_read_proximity_ir(struct isl29018_chip *chip, int scheme,
        struct device *dev = regmap_get_device(chip->regmap);
 
        /* Do proximity sensing with required scheme */
-       status = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMANDII,
-                                   COMMANDII_SCHEME_MASK,
-                                   scheme << COMMANDII_SCHEME_SHIFT);
+       status = regmap_update_bits(chip->regmap, ISL29018_REG_ADD_COMMAND2,
+                                   ISL29018_CMD2_SCHEME_MASK,
+                                   scheme << ISL29018_CMD2_SCHEME_SHIFT);
        if (status) {
                dev_err(dev, "Error in setting operating mode\n");
                return status;
        }
 
        prox_data = isl29018_read_sensor_input(chip,
-                                              COMMMAND1_OPMODE_PROX_ONCE);
+                                              ISL29018_CMD1_OPMODE_PROX_ONCE);
        if (prox_data < 0)
                return prox_data;
 
@@ -267,8 +267,8 @@ static int isl29018_read_proximity_ir(struct isl29018_chip *chip, int scheme,
                return 0;
        }
 
-       ir_data = isl29018_read_sensor_input(chip, COMMMAND1_OPMODE_IR_ONCE);
-
+       ir_data = isl29018_read_sensor_input(chip,
+                                            ISL29018_CMD1_OPMODE_IR_ONCE);
        if (ir_data < 0)
                return ir_data;
 
@@ -280,7 +280,7 @@ static int isl29018_read_proximity_ir(struct isl29018_chip *chip, int scheme,
        return 0;
 }
 
-static ssize_t show_scale_available(struct device *dev,
+static ssize_t isl29018_show_scale_available(struct device *dev,
                                    struct device_attribute *attr, char *buf)
 {
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
@@ -297,7 +297,7 @@ static ssize_t show_scale_available(struct device *dev,
        return len;
 }
 
-static ssize_t show_int_time_available(struct device *dev,
+static ssize_t isl29018_show_int_time_available(struct device *dev,
                                       struct device_attribute *attr, char *buf)
 {
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
@@ -313,8 +313,7 @@ static ssize_t show_int_time_available(struct device *dev,
        return len;
 }
 
-/* proximity scheme */
-static ssize_t show_prox_infrared_suppression(struct device *dev,
+static ssize_t isl29018_show_prox_infrared_suppression(struct device *dev,
                                              struct device_attribute *attr,
                                              char *buf)
 {
@@ -322,13 +321,13 @@ static ssize_t show_prox_infrared_suppression(struct device *dev,
        struct isl29018_chip *chip = iio_priv(indio_dev);
 
        /*
-        * return the "proximity scheme" i.e. if the chip does on chip
+        * Return the "proximity scheme" i.e. if the chip does on chip
         * infrared suppression (1 means perform on chip suppression)
         */
        return sprintf(buf, "%d\n", chip->prox_scheme);
 }
 
-static ssize_t store_prox_infrared_suppression(struct device *dev,
+static ssize_t isl29018_store_prox_infrared_suppression(struct device *dev,
                                               struct device_attribute *attr,
                                               const char *buf, size_t count)
 {
@@ -338,13 +337,11 @@ static ssize_t store_prox_infrared_suppression(struct device *dev,
 
        if (kstrtoint(buf, 10, &val))
                return -EINVAL;
-       if (!(val == 0 || val == 1)) {
-               dev_err(dev, "The mode is not supported\n");
+       if (!(val == 0 || val == 1))
                return -EINVAL;
-       }
 
        /*
-        * get the  "proximity scheme" i.e. if the chip does on chip
+        * Get the "proximity scheme" i.e. if the chip does on chip
         * infrared suppression (1 means perform on chip suppression)
         */
        mutex_lock(&chip->lock);
@@ -354,7 +351,6 @@ static ssize_t store_prox_infrared_suppression(struct device *dev,
        return count;
 }
 
-/* Channel IO */
 static int isl29018_write_raw(struct iio_dev *indio_dev,
                              struct iio_chan_spec const *chan,
                              int val,
@@ -491,13 +487,13 @@ static const struct iio_chan_spec isl29023_channels[] = {
 };
 
 static IIO_DEVICE_ATTR(in_illuminance_integration_time_available, S_IRUGO,
-                      show_int_time_available, NULL, 0);
+                      isl29018_show_int_time_available, NULL, 0);
 static IIO_DEVICE_ATTR(in_illuminance_scale_available, S_IRUGO,
-                     show_scale_available, NULL, 0);
+                     isl29018_show_scale_available, NULL, 0);
 static IIO_DEVICE_ATTR(proximity_on_chip_ambient_infrared_suppression,
                                        S_IRUGO | S_IWUSR,
-                                       show_prox_infrared_suppression,
-                                       store_prox_infrared_suppression, 0);
+                                       isl29018_show_prox_infrared_suppression,
+                                       isl29018_store_prox_infrared_suppression, 0);
 
 #define ISL29018_DEV_ATTR(name) (&iio_dev_attr_##name.dev_attr.attr)
 
@@ -541,7 +537,7 @@ static int isl29035_detect(struct isl29018_chip *chip)
        if (id != ISL29035_DEVICE_ID)
                return -ENODEV;
 
-       /* clear out brownout bit */
+       /* Clear brownout bit */
        return regmap_update_bits(chip->regmap, ISL29035_REG_DEVICE_ID,
                                  ISL29035_BOUT_MASK, 0);
 }
@@ -574,7 +570,7 @@ static int isl29018_chip_init(struct isl29018_chip *chip)
         * conversions, clear the test registers, and then rewrite all
         * registers to the desired values.
         * ...
-        * FOR ISL29011, ISL29018, ISL29021, ISL29023
+        * For ISL29011, ISL29018, ISL29021, ISL29023
         * 1. Write 0x00 to register 0x08 (TEST)
         * 2. Write 0x00 to register 0x00 (CMD1)
         * 3. Rewrite all registers to the desired values
@@ -603,7 +599,7 @@ static int isl29018_chip_init(struct isl29018_chip *chip)
 
        usleep_range(1000, 2000);       /* per data sheet, page 10 */
 
-       /* set defaults */
+       /* Set defaults */
        status = isl29018_set_scale(chip, chip->scale.scale,
                                    chip->scale.uscale);
        if (status < 0) {
@@ -635,7 +631,7 @@ static const struct iio_info isl29023_info = {
        .write_raw = isl29018_write_raw,
 };
 
-static bool is_volatile_reg(struct device *dev, unsigned int reg)
+static bool isl29018_is_volatile_reg(struct device *dev, unsigned int reg)
 {
        switch (reg) {
        case ISL29018_REG_ADD_DATA_LSB:
@@ -649,37 +645,32 @@ static bool is_volatile_reg(struct device *dev, unsigned int reg)
        }
 }
 
-/*
- * isl29018_regmap_config: regmap configuration.
- * Use RBTREE mechanism for caching.
- */
 static const struct regmap_config isl29018_regmap_config = {
        .reg_bits = 8,
        .val_bits = 8,
-       .volatile_reg = is_volatile_reg,
+       .volatile_reg = isl29018_is_volatile_reg,
        .max_register = ISL29018_REG_TEST,
        .num_reg_defaults_raw = ISL29018_REG_TEST + 1,
        .cache_type = REGCACHE_RBTREE,
 };
 
-/* isl29035_regmap_config: regmap configuration for ISL29035 */
 static const struct regmap_config isl29035_regmap_config = {
        .reg_bits = 8,
        .val_bits = 8,
-       .volatile_reg = is_volatile_reg,
+       .volatile_reg = isl29018_is_volatile_reg,
        .max_register = ISL29035_REG_DEVICE_ID,
        .num_reg_defaults_raw = ISL29035_REG_DEVICE_ID + 1,
        .cache_type = REGCACHE_RBTREE,
 };
 
-struct chip_info {
+struct isl29018_chip_info {
        const struct iio_chan_spec *channels;
        int num_channels;
        const struct iio_info *indio_info;
        const struct regmap_config *regmap_cfg;
 };
 
-static const struct chip_info chip_info_tbl[] = {
+static const struct isl29018_chip_info isl29018_chip_info_tbl[] = {
        [isl29018] = {
                .channels = isl29018_channels,
                .num_channels = ARRAY_SIZE(isl29018_channels),
@@ -724,10 +715,8 @@ static int isl29018_probe(struct i2c_client *client,
        int dev_id = 0;
 
        indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*chip));
-       if (!indio_dev) {
-               dev_err(&client->dev, "iio allocation fails\n");
+       if (!indio_dev)
                return -ENOMEM;
-       }
        chip = iio_priv(indio_dev);
 
        i2c_set_clientdata(client, indio_dev);
@@ -750,7 +739,7 @@ static int isl29018_probe(struct i2c_client *client,
        chip->suspended = false;
 
        chip->regmap = devm_regmap_init_i2c(client,
-                               chip_info_tbl[dev_id].regmap_cfg);
+                               isl29018_chip_info_tbl[dev_id].regmap_cfg);
        if (IS_ERR(chip->regmap)) {
                err = PTR_ERR(chip->regmap);
                dev_err(&client->dev, "regmap initialization fails: %d\n", err);
@@ -761,19 +750,13 @@ static int isl29018_probe(struct i2c_client *client,
        if (err)
                return err;
 
-       indio_dev->info = chip_info_tbl[dev_id].indio_info;
-       indio_dev->channels = chip_info_tbl[dev_id].channels;
-       indio_dev->num_channels = chip_info_tbl[dev_id].num_channels;
+       indio_dev->info = isl29018_chip_info_tbl[dev_id].indio_info;
+       indio_dev->channels = isl29018_chip_info_tbl[dev_id].channels;
+       indio_dev->num_channels = isl29018_chip_info_tbl[dev_id].num_channels;
        indio_dev->name = name;
        indio_dev->dev.parent = &client->dev;
        indio_dev->modes = INDIO_DIRECT_MODE;
-       err = devm_iio_device_register(&client->dev, indio_dev);
-       if (err) {
-               dev_err(&client->dev, "iio registration fails\n");
-               return err;
-       }
-
-       return 0;
+       return devm_iio_device_register(&client->dev, indio_dev);
 }
 
 #ifdef CONFIG_PM_SLEEP
@@ -840,7 +823,6 @@ static const struct of_device_id isl29018_of_match[] = {
 MODULE_DEVICE_TABLE(of, isl29018_of_match);
 
 static struct i2c_driver isl29018_driver = {
-       .class  = I2C_CLASS_HWMON,
        .driver  = {
                        .name = "isl29018",
                        .acpi_match_table = ACPI_PTR(isl29018_acpi_match),
index 2e3b1d64e32ad7b45795f0ea056ac3909d332668..aa413e5878b9d82986f5fdd096100b5262ff1b30 100644 (file)
 #include <linux/iio/iio.h>
 #include <linux/iio/sysfs.h>
 
-#define CONVERSION_TIME_MS             100
+#define ISL29028_CONV_TIME_MS          100
 
 #define ISL29028_REG_CONFIGURE         0x01
 
-#define CONFIGURE_ALS_IR_MODE_ALS      0
-#define CONFIGURE_ALS_IR_MODE_IR       BIT(0)
-#define CONFIGURE_ALS_IR_MODE_MASK     BIT(0)
+#define ISL29028_CONF_ALS_IR_MODE_ALS  0
+#define ISL29028_CONF_ALS_IR_MODE_IR   BIT(0)
+#define ISL29028_CONF_ALS_IR_MODE_MASK BIT(0)
 
-#define CONFIGURE_ALS_RANGE_LOW_LUX    0
-#define CONFIGURE_ALS_RANGE_HIGH_LUX   BIT(1)
-#define CONFIGURE_ALS_RANGE_MASK       BIT(1)
+#define ISL29028_CONF_ALS_RANGE_LOW_LUX        0
+#define ISL29028_CONF_ALS_RANGE_HIGH_LUX       BIT(1)
+#define ISL29028_CONF_ALS_RANGE_MASK   BIT(1)
 
-#define CONFIGURE_ALS_DIS              0
-#define CONFIGURE_ALS_EN               BIT(2)
-#define CONFIGURE_ALS_EN_MASK          BIT(2)
+#define ISL29028_CONF_ALS_DIS          0
+#define ISL29028_CONF_ALS_EN           BIT(2)
+#define ISL29028_CONF_ALS_EN_MASK      BIT(2)
 
-#define CONFIGURE_PROX_DRIVE           BIT(3)
+#define ISL29028_CONF_PROX_SLP_SH      4
+#define ISL29028_CONF_PROX_SLP_MASK    (7 << ISL29028_CONF_PROX_SLP_SH)
 
-#define CONFIGURE_PROX_SLP_SH          4
-#define CONFIGURE_PROX_SLP_MASK                (7 << CONFIGURE_PROX_SLP_SH)
-
-#define CONFIGURE_PROX_EN              BIT(7)
-#define CONFIGURE_PROX_EN_MASK         BIT(7)
+#define ISL29028_CONF_PROX_EN          BIT(7)
+#define ISL29028_CONF_PROX_EN_MASK     BIT(7)
 
 #define ISL29028_REG_INTERRUPT         0x02
 
 
 #define ISL29028_NUM_REGS              (ISL29028_REG_TEST2_MODE + 1)
 
-enum als_ir_mode {
-       MODE_NONE = 0,
-       MODE_ALS,
-       MODE_IR
+enum isl29028_als_ir_mode {
+       ISL29028_MODE_NONE = 0,
+       ISL29028_MODE_ALS,
+       ISL29028_MODE_IR,
 };
 
 struct isl29028_chip {
@@ -76,7 +74,7 @@ struct isl29028_chip {
        bool                    enable_prox;
 
        int                     lux_scale;
-       int                     als_ir_mode;
+       enum isl29028_als_ir_mode       als_ir_mode;
 };
 
 static int isl29028_set_proxim_sampling(struct isl29028_chip *chip,
@@ -91,7 +89,8 @@ static int isl29028_set_proxim_sampling(struct isl29028_chip *chip,
                        break;
        }
        return regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                       CONFIGURE_PROX_SLP_MASK, sel << CONFIGURE_PROX_SLP_SH);
+                                 ISL29028_CONF_PROX_SLP_MASK,
+                                 sel << ISL29028_CONF_PROX_SLP_SH);
 }
 
 static int isl29028_enable_proximity(struct isl29028_chip *chip, bool enable)
@@ -100,9 +99,9 @@ static int isl29028_enable_proximity(struct isl29028_chip *chip, bool enable)
        int val = 0;
 
        if (enable)
-               val = CONFIGURE_PROX_EN;
+               val = ISL29028_CONF_PROX_EN;
        ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                                CONFIGURE_PROX_EN_MASK, val);
+                                ISL29028_CONF_PROX_EN_MASK, val);
        if (ret < 0)
                return ret;
 
@@ -113,40 +112,40 @@ static int isl29028_enable_proximity(struct isl29028_chip *chip, bool enable)
 
 static int isl29028_set_als_scale(struct isl29028_chip *chip, int lux_scale)
 {
-       int val = (lux_scale == 2000) ? CONFIGURE_ALS_RANGE_HIGH_LUX :
-                                       CONFIGURE_ALS_RANGE_LOW_LUX;
+       int val = (lux_scale == 2000) ? ISL29028_CONF_ALS_RANGE_HIGH_LUX :
+                                       ISL29028_CONF_ALS_RANGE_LOW_LUX;
 
        return regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-               CONFIGURE_ALS_RANGE_MASK, val);
+               ISL29028_CONF_ALS_RANGE_MASK, val);
 }
 
 static int isl29028_set_als_ir_mode(struct isl29028_chip *chip,
-                                   enum als_ir_mode mode)
+                                   enum isl29028_als_ir_mode mode)
 {
        int ret = 0;
 
        switch (mode) {
-       case MODE_ALS:
+       case ISL29028_MODE_ALS:
                ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                                        CONFIGURE_ALS_IR_MODE_MASK,
-                                        CONFIGURE_ALS_IR_MODE_ALS);
+                                        ISL29028_CONF_ALS_IR_MODE_MASK,
+                                        ISL29028_CONF_ALS_IR_MODE_ALS);
                if (ret < 0)
                        return ret;
 
                ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                                        CONFIGURE_ALS_RANGE_MASK,
-                                        CONFIGURE_ALS_RANGE_HIGH_LUX);
+                                        ISL29028_CONF_ALS_RANGE_MASK,
+                                        ISL29028_CONF_ALS_RANGE_HIGH_LUX);
                break;
 
-       case MODE_IR:
+       case ISL29028_MODE_IR:
                ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                                        CONFIGURE_ALS_IR_MODE_MASK,
-                                        CONFIGURE_ALS_IR_MODE_IR);
+                                        ISL29028_CONF_ALS_IR_MODE_MASK,
+                                        ISL29028_CONF_ALS_IR_MODE_IR);
                break;
 
-       case MODE_NONE:
+       case ISL29028_MODE_NONE:
                return regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                       CONFIGURE_ALS_EN_MASK, CONFIGURE_ALS_DIS);
+                       ISL29028_CONF_ALS_EN_MASK, ISL29028_CONF_ALS_DIS);
        }
 
        if (ret < 0)
@@ -154,12 +153,13 @@ static int isl29028_set_als_ir_mode(struct isl29028_chip *chip,
 
        /* Enable the ALS/IR */
        ret = regmap_update_bits(chip->regmap, ISL29028_REG_CONFIGURE,
-                                CONFIGURE_ALS_EN_MASK, CONFIGURE_ALS_EN);
+                                ISL29028_CONF_ALS_EN_MASK,
+                                ISL29028_CONF_ALS_EN);
        if (ret < 0)
                return ret;
 
        /* Need to wait for conversion time if ALS/IR mode enabled */
-       mdelay(CONVERSION_TIME_MS);
+       mdelay(ISL29028_CONV_TIME_MS);
        return 0;
 }
 
@@ -223,14 +223,14 @@ static int isl29028_als_get(struct isl29028_chip *chip, int *als_data)
        int ret;
        int als_ir_data;
 
-       if (chip->als_ir_mode != MODE_ALS) {
-               ret = isl29028_set_als_ir_mode(chip, MODE_ALS);
+       if (chip->als_ir_mode != ISL29028_MODE_ALS) {
+               ret = isl29028_set_als_ir_mode(chip, ISL29028_MODE_ALS);
                if (ret < 0) {
                        dev_err(dev,
                                "Error in enabling ALS mode err %d\n", ret);
                        return ret;
                }
-               chip->als_ir_mode = MODE_ALS;
+               chip->als_ir_mode = ISL29028_MODE_ALS;
        }
 
        ret = isl29028_read_als_ir(chip, &als_ir_data);
@@ -256,14 +256,14 @@ static int isl29028_ir_get(struct isl29028_chip *chip, int *ir_data)
        struct device *dev = regmap_get_device(chip->regmap);
        int ret;
 
-       if (chip->als_ir_mode != MODE_IR) {
-               ret = isl29028_set_als_ir_mode(chip, MODE_IR);
+       if (chip->als_ir_mode != ISL29028_MODE_IR) {
+               ret = isl29028_set_als_ir_mode(chip, ISL29028_MODE_IR);
                if (ret < 0) {
                        dev_err(dev,
                                "Error in enabling IR mode err %d\n", ret);
                        return ret;
                }
-               chip->als_ir_mode = MODE_IR;
+               chip->als_ir_mode = ISL29028_MODE_IR;
        }
        return isl29028_read_als_ir(chip, ir_data);
 }
@@ -383,8 +383,8 @@ static int isl29028_read_raw(struct iio_dev *indio_dev,
 }
 
 static IIO_CONST_ATTR(in_proximity_sampling_frequency_available,
-                               "1, 3, 5, 10, 13, 20, 83, 100");
-static IIO_CONST_ATTR(in_illuminance_scale_available, "125, 2000");
+                               "1 3 5 10 13 20 83 100");
+static IIO_CONST_ATTR(in_illuminance_scale_available, "125 2000");
 
 #define ISL29028_DEV_ATTR(name) (&iio_dev_attr_##name.dev_attr.attr)
 #define ISL29028_CONST_ATTR(name) (&iio_const_attr_##name.dev_attr.attr)
@@ -428,7 +428,7 @@ static int isl29028_chip_init(struct isl29028_chip *chip)
        chip->enable_prox  = false;
        chip->prox_sampling = 20;
        chip->lux_scale = 2000;
-       chip->als_ir_mode = MODE_NONE;
+       chip->als_ir_mode = ISL29028_MODE_NONE;
 
        ret = regmap_write(chip->regmap, ISL29028_REG_TEST1_MODE, 0x0);
        if (ret < 0) {
@@ -462,7 +462,7 @@ static int isl29028_chip_init(struct isl29028_chip *chip)
        return ret;
 }
 
-static bool is_volatile_reg(struct device *dev, unsigned int reg)
+static bool isl29028_is_volatile_reg(struct device *dev, unsigned int reg)
 {
        switch (reg) {
        case ISL29028_REG_INTERRUPT:
@@ -478,7 +478,7 @@ static bool is_volatile_reg(struct device *dev, unsigned int reg)
 static const struct regmap_config isl29028_regmap_config = {
        .reg_bits = 8,
        .val_bits = 8,
-       .volatile_reg = is_volatile_reg,
+       .volatile_reg = isl29028_is_volatile_reg,
        .max_register = ISL29028_NUM_REGS - 1,
        .num_reg_defaults_raw = ISL29028_NUM_REGS,
        .cache_type = REGCACHE_RBTREE,
@@ -546,7 +546,6 @@ static const struct of_device_id isl29028_of_match[] = {
 MODULE_DEVICE_TABLE(of, isl29028_of_match);
 
 static struct i2c_driver isl29028_driver = {
-       .class  = I2C_CLASS_HWMON,
        .driver  = {
                .name = "isl29028",
                .of_match_table = isl29028_of_match,
index 75e8685e6df23b7fc4232d1e61010a148093f0e9..24edbc39ab4e7fb3a3ec80d1329e426158f506fa 100644 (file)
@@ -23,8 +23,8 @@
 #include "ade7854.h"
 
 static ssize_t ade7854_read_8bit(struct device *dev,
-               struct device_attribute *attr,
-               char *buf)
+                                struct device_attribute *attr,
+                                char *buf)
 {
        int ret;
        u8 val = 0;
@@ -40,8 +40,8 @@ static ssize_t ade7854_read_8bit(struct device *dev,
 }
 
 static ssize_t ade7854_read_16bit(struct device *dev,
-               struct device_attribute *attr,
-               char *buf)
+                                 struct device_attribute *attr,
+                                 char *buf)
 {
        int ret;
        u16 val = 0;
@@ -57,8 +57,8 @@ static ssize_t ade7854_read_16bit(struct device *dev,
 }
 
 static ssize_t ade7854_read_24bit(struct device *dev,
-               struct device_attribute *attr,
-               char *buf)
+                                 struct device_attribute *attr,
+                                 char *buf)
 {
        int ret;
        u32 val;
@@ -74,8 +74,8 @@ static ssize_t ade7854_read_24bit(struct device *dev,
 }
 
 static ssize_t ade7854_read_32bit(struct device *dev,
-               struct device_attribute *attr,
-               char *buf)
+                                 struct device_attribute *attr,
+                                 char *buf)
 {
        int ret;
        u32 val = 0;
@@ -91,9 +91,9 @@ static ssize_t ade7854_read_32bit(struct device *dev,
 }
 
 static ssize_t ade7854_write_8bit(struct device *dev,
-               struct device_attribute *attr,
-               const char *buf,
-               size_t len)
+                                 struct device_attribute *attr,
+                                 const char *buf,
+                                 size_t len)
 {
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
@@ -112,9 +112,9 @@ error_ret:
 }
 
 static ssize_t ade7854_write_16bit(struct device *dev,
-               struct device_attribute *attr,
-               const char *buf,
-               size_t len)
+                                  struct device_attribute *attr,
+                                  const char *buf,
+                                  size_t len)
 {
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
@@ -133,9 +133,9 @@ error_ret:
 }
 
 static ssize_t ade7854_write_24bit(struct device *dev,
-               struct device_attribute *attr,
-               const char *buf,
-               size_t len)
+                                  struct device_attribute *attr,
+                                  const char *buf,
+                                  size_t len)
 {
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
@@ -154,9 +154,9 @@ error_ret:
 }
 
 static ssize_t ade7854_write_32bit(struct device *dev,
-               struct device_attribute *attr,
-               const char *buf,
-               size_t len)
+                                  struct device_attribute *attr,
+                                  const char *buf,
+                                  size_t len)
 {
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
        struct iio_dev *indio_dev = dev_to_iio_dev(dev);
index b7337fd813d59de481854d26ef280d8c1a5c44e4..632253c11cd42df6a052f705a88d85c41f1622fe 100644 (file)
@@ -115,7 +115,6 @@ void ks_wlan_hw_sleep_doze_request(struct ks_wlan_private *priv)
 
  out:
        priv->sleep_mode = atomic_read(&priv->sleepstatus.status);
-       return;
 }
 
 void ks_wlan_hw_sleep_wakeup_request(struct ks_wlan_private *priv)
@@ -146,7 +145,6 @@ void ks_wlan_hw_sleep_wakeup_request(struct ks_wlan_private *priv)
 
  out:
        priv->sleep_mode = atomic_read(&priv->sleepstatus.status);
-       return;
 }
 
 void ks_wlan_hw_wakeup_request(struct ks_wlan_private *priv)
@@ -297,11 +295,10 @@ static int enqueue_txdev(struct ks_wlan_private *priv, unsigned char *p,
 static int write_to_device(struct ks_wlan_private *priv, unsigned char *buffer,
                           unsigned long size)
 {
-       int rc, retval;
+       int retval;
        unsigned char rw_data;
        struct hostif_hdr *hdr;
        hdr = (struct hostif_hdr *)buffer;
-       rc = 0;
 
        DPRINTK(4, "size=%d\n", hdr->size);
        if (hdr->event < HIF_DATA_REQ || HIF_REQ_MAX < hdr->event) {
@@ -358,7 +355,6 @@ static void tx_device_task(void *dev)
                                           &priv->ks_wlan_hw.rw_wq, 0);
                }
        }
-       return;
 }
 
 int ks_wlan_hw_tx(struct ks_wlan_private *priv, void *p, unsigned long size,
@@ -406,8 +402,6 @@ static void rx_event_task(unsigned long dev)
                        tasklet_schedule(&priv->ks_wlan_hw.rx_bh_task);
                }
        }
-
-       return;
 }
 
 static void ks_wlan_hw_rx(void *dev, uint16_t size)
@@ -558,8 +552,6 @@ static void ks7010_rw_function(struct work_struct *work)
 
  err_out:
        sdio_release_host(priv->ks_wlan_hw.sdio_card->func);
-
-       return;
 }
 
 static void ks_sdio_interrupt(struct sdio_func *func)
@@ -667,7 +659,6 @@ static void ks_sdio_interrupt(struct sdio_func *func)
  intr_out:
        queue_delayed_work(priv->ks_wlan_hw.ks7010sdio_wq,
                           &priv->ks_wlan_hw.rw_wq, 0);
-       return;
 }
 
 static int trx_device_init(struct ks_wlan_private *priv)
@@ -702,8 +693,6 @@ static void trx_device_exit(struct ks_wlan_private *priv)
        }
 
        tasklet_kill(&priv->ks_wlan_hw.rx_bh_task);
-
-       return;
 }
 
 static int ks7010_sdio_update_index(struct ks_wlan_private *priv, u32 index)
@@ -711,7 +700,6 @@ static int ks7010_sdio_update_index(struct ks_wlan_private *priv, u32 index)
        int rc = 0;
        int retval;
        unsigned char *data_buf;
-       data_buf = NULL;
 
        data_buf = kmalloc(sizeof(u32), GFP_KERNEL);
        if (!data_buf) {
@@ -732,8 +720,7 @@ static int ks7010_sdio_update_index(struct ks_wlan_private *priv, u32 index)
                goto error_out;
        }
  error_out:
-       if (data_buf)
-               kfree(data_buf);
+       kfree(data_buf);
        return rc;
 }
 
@@ -744,7 +731,7 @@ static int ks7010_sdio_data_compare(struct ks_wlan_private *priv, u32 address,
        int rc = 0;
        int retval;
        unsigned char *read_buf;
-       read_buf = NULL;
+
        read_buf = kmalloc(ROM_BUFF_SIZE, GFP_KERNEL);
        if (!read_buf) {
                rc = 1;
@@ -763,8 +750,7 @@ static int ks7010_sdio_data_compare(struct ks_wlan_private *priv, u32 address,
                goto error_out;
        }
  error_out:
-       if (read_buf)
-               kfree(read_buf);
+       kfree(read_buf);
        return rc;
 }
 
@@ -778,14 +764,10 @@ static int ks7010_upload_firmware(struct ks_wlan_private *priv,
        int length;
        const struct firmware *fw_entry = NULL;
 
-       rom_buf = NULL;
-
        /* buffer allocate */
        rom_buf = kmalloc(ROM_BUFF_SIZE, GFP_KERNEL);
-       if (!rom_buf) {
-               rc = 3;
-               goto error_out0;
-       }
+       if (!rom_buf)
+               return 3;
 
        sdio_claim_host(card->func);
 
@@ -799,7 +781,7 @@ static int ks7010_upload_firmware(struct ks_wlan_private *priv,
 
        retval = request_firmware(&fw_entry, ROM_FILE, &priv->ks_wlan_hw.sdio_card->func->dev);
        if (retval)
-               return retval;
+               goto error_out0;
 
        length = fw_entry->size;
 
@@ -879,8 +861,7 @@ static int ks7010_upload_firmware(struct ks_wlan_private *priv,
        release_firmware(fw_entry);
  error_out0:
        sdio_release_host(card->func);
-       if (rom_buf)
-               kfree(rom_buf);
+       kfree(rom_buf);
        return rc;
 }
 
@@ -1141,7 +1122,6 @@ static void ks7010_sdio_remove(struct sdio_func *func)
        int ret;
        struct ks_sdio_card *card;
        struct ks_wlan_private *priv;
-       struct net_device *netdev;
        DPRINTK(1, "ks7010_sdio_remove()\n");
 
        card = sdio_get_drvdata(func);
@@ -1151,8 +1131,9 @@ static void ks7010_sdio_remove(struct sdio_func *func)
 
        DPRINTK(1, "priv = card->priv\n");
        priv = card->priv;
-       netdev = priv->net_dev;
        if (priv) {
+               struct net_device *netdev = priv->net_dev;
+
                ks_wlan_net_stop(netdev);
                DPRINTK(1, "ks_wlan_net_stop\n");
 
@@ -1199,9 +1180,7 @@ static void ks7010_sdio_remove(struct sdio_func *func)
                unregister_netdev(netdev);
 
                trx_device_exit(priv);
-               if (priv->ks_wlan_hw.read_buf) {
-                       kfree(priv->ks_wlan_hw.read_buf);
-               }
+               kfree(priv->ks_wlan_hw.read_buf);
                free_netdev(priv->net_dev);
                card->priv = NULL;
        }
@@ -1219,7 +1198,6 @@ static void ks7010_sdio_remove(struct sdio_func *func)
        DPRINTK(1, "kfree()\n");
 
        DPRINTK(5, " Bye !!\n");
-       return;
 }
 
 static struct sdio_driver ks7010_sdio_driver = {
index a8822fe2bd60295ded9a8dfc15d5ee75556bd406..e09df36016ad32569cf92698043c9a678bb0b906 100644 (file)
@@ -69,16 +69,20 @@ inline u32 get_DWORD(struct ks_wlan_private *priv)
        return data;
 }
 
-void ks_wlan_hw_wakeup_task(struct work_struct *work)
+static void ks_wlan_hw_wakeup_task(struct work_struct *work)
 {
        struct ks_wlan_private *priv =
            container_of(work, struct ks_wlan_private, ks_wlan_wakeup_task);
        int ps_status = atomic_read(&priv->psstatus.status);
+       long time_left;
 
        if (ps_status == PS_SNOOZE) {
                ks_wlan_hw_wakeup_request(priv);
-               if (!wait_for_completion_interruptible_timeout(&priv->psstatus.wakeup_wait, HZ / 50)) { /* 20ms timeout */
-                       DPRINTK(1, "wake up timeout !!!\n");
+               time_left = wait_for_completion_interruptible_timeout(
+                               &priv->psstatus.wakeup_wait,
+                               msecs_to_jiffies(20));
+               if (time_left <= 0) {
+                       DPRINTK(1, "wake up timeout or interrupted !!!\n");
                        schedule_work(&priv->ks_wlan_wakeup_task);
                        return;
                }
@@ -481,8 +485,7 @@ void hostif_data_indication(struct ks_wlan_private *priv)
                        netif_rx(skb);
                } else {
                        printk(KERN_WARNING
-                              "%s: Memory squeeze, dropping packet.\n",
-                              skb->dev->name);
+                              "ks_wlan: Memory squeeze, dropping packet.\n");
                        priv->nstats.rx_dropped++;
                }
                break;
@@ -517,8 +520,7 @@ void hostif_data_indication(struct ks_wlan_private *priv)
                        netif_rx(skb);
                } else {
                        printk(KERN_WARNING
-                              "%s: Memory squeeze, dropping packet.\n",
-                              skb->dev->name);
+                              "ks_wlan: Memory squeeze, dropping packet.\n");
                        priv->nstats.rx_dropped++;
                }
                break;
@@ -1194,6 +1196,8 @@ int hostif_data_request(struct ks_wlan_private *priv, struct sk_buff *packet)
                DPRINTK(1, "ethernet->h_source=%02X:%02X:%02X:%02X:%02X:%02X\n",
                        eth->h_source[0], eth->h_source[1], eth->h_source[2],
                        eth->h_source[3], eth->h_source[4], eth->h_source[5]);
+               dev_kfree_skb(packet);
+               kfree(pp);
                return -3;
        }
 
@@ -1505,7 +1509,7 @@ void hostif_infrastructure_set_request(struct ks_wlan_private *priv)
        ks_wlan_hw_tx(priv, pp, hif_align_size(sizeof(*pp)), NULL, NULL, NULL);
 }
 
-void hostif_infrastructure_set2_request(struct ks_wlan_private *priv)
+static void hostif_infrastructure_set2_request(struct ks_wlan_private *priv)
 {
        struct hostif_infrastructure_set2_request_t *pp;
        uint16_t capability;
index 1e21eb1c46675721c19e4f4a6a06cf64fc393458..d69b4c945d218621f71fa25fe63fb38fe123e915 100644 (file)
@@ -3396,13 +3396,13 @@ void send_packet_complete(void *arg1, void *arg2)
 
        DPRINTK(3, "\n");
 
-       priv->nstats.tx_bytes += packet->len;
        priv->nstats.tx_packets++;
 
        if (netif_queue_stopped(priv->net_dev))
                netif_wake_queue(priv->net_dev);
 
        if (packet) {
+               priv->nstats.tx_bytes += packet->len;
                dev_kfree_skb(packet);
                packet = NULL;
        }
index e14c109b3cabd021c777daf2f4fe59f3621ff43b..d332678781d2dacb2e225f43154aea4207700367 100644 (file)
 #define getUInt32( A, B )      (uint32_t)(A[B+0] << 0) + (A[B+1] << 8) + (A[B+2] << 16) + (A[B+3] << 24)
 
 // Convert from UInt32 to Byte[] in a portable way
-#define putUInt32( A, B, C )   A[B+0] = (uint8_t) (C & 0xff);          \
-                               A[B+1] = (uint8_t) ((C>>8) & 0xff);     \
-                               A[B+2] = (uint8_t) ((C>>16) & 0xff);    \
-                               A[B+3] = (uint8_t) ((C>>24) & 0xff)
+#define putUInt32(A, B, C)                                     \
+do {                                                           \
+       A[B + 0] = (uint8_t)(C & 0xff);                         \
+       A[B + 1] = (uint8_t)((C >> 8) & 0xff);                  \
+       A[B + 2] = (uint8_t)((C >> 16) & 0xff);                 \
+       A[B + 3] = (uint8_t)((C >> 24) & 0xff);                 \
+} while (0)
 
 // Reset the state to the empty message.
-#define MichaelClear( A )      A->L = A->K0; \
-                               A->R = A->K1; \
-                               A->nBytesInM = 0;
+#define MichaelClear(A)                        \
+do {                                   \
+       A->L = A->K0;                   \
+       A->R = A->K1;                   \
+       A->nBytesInM = 0;               \
+} while (0)
 
 static
 void MichaelInitializeFunction(struct michel_mic_t *Mic, uint8_t * key)
index 3f6447c650424f08523f3a12649019f5905ede56..3b92d38d37e2ed6a7910158f20f6ee410a3f2a30 100644 (file)
@@ -138,8 +138,8 @@ struct lnet_debugfs_symlink_def {
 void lustre_insert_debugfs(struct ctl_table *table,
                           const struct lnet_debugfs_symlink_def *symlinks);
 int lprocfs_call_handler(void *data, int write, loff_t *ppos,
-                         void __user *buffer, size_t *lenp,
-                         int (*handler)(void *data, int write,
-                         loff_t pos, void __user *buffer, int len));
+                        void __user *buffer, size_t *lenp,
+                        int (*handler)(void *data, int write, loff_t pos,
+                                       void __user *buffer, int len));
 
 #endif /* _LIBCFS_H */
index 25adab19fd8665245f72cc3dde33be559e5e6a78..b7bd6e8ab33ffd3143556e68d892d98f6cd93591 100644 (file)
@@ -247,19 +247,19 @@ do {                                                                      \
 #define LCONSOLE_EMERG(format, ...) CDEBUG(D_CONSOLE | D_EMERG, format, ## __VA_ARGS__)
 
 int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata,
-                           const char *format1, ...)
+                    const char *format1, ...)
        __printf(2, 3);
 
 int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata,
-                             const char *format1,
-                             va_list args, const char *format2, ...)
+                      const char *format1,
+                      va_list args, const char *format2, ...)
        __printf(4, 5);
 
 /* other external symbols that tracefile provides: */
 int cfs_trace_copyin_string(char *knl_buffer, int knl_buffer_nob,
-               const char __user *usr_buffer, int usr_buffer_nob);
+                           const char __user *usr_buffer, int usr_buffer_nob);
 int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
-               const char *knl_buffer, char *append);
+                            const char *knl_buffer, char *append);
 
 #define LIBCFS_DEBUG_FILE_PATH_DEFAULT "/tmp/lustre-log"
 
index d3f9a6020ee3ba1b58d6501125c53c52dfed71bb..bdbbe934584c707da7f03d474b974f5732e11eb7 100644 (file)
@@ -143,6 +143,9 @@ static inline int cfs_fail_timeout_set(__u32 id, __u32 value, int ms, int set)
 #define CFS_FAIL_TIMEOUT_ORSET(id, value, secs) \
        cfs_fail_timeout_set(id, value, secs * 1000, CFS_FAIL_LOC_ORSET)
 
+#define CFS_FAIL_TIMEOUT_RESET(id, value, secs) \
+       cfs_fail_timeout_set(id, value, secs * 1000, CFS_FAIL_LOC_RESET)
+
 #define CFS_FAIL_TIMEOUT_MS_ORSET(id, value, ms) \
        cfs_fail_timeout_set(id, value, ms, CFS_FAIL_LOC_ORSET)
 
index 4daa3823f60a51f9b24613447c8da106ff6f8ec9..d401ae17dbafd0de04190e432f60fcb416c4e0e2 100644 (file)
@@ -360,13 +360,4 @@ do {                                                           \
        ptr += cfs_size_round(len);                          \
 } while (0)
 
-#define LOGL0(var, len, ptr)                         \
-do {                                               \
-       if (!len)                                      \
-               break;                            \
-       memcpy((char *)ptr, (const char *)var, len);    \
-       *((char *)(ptr) + len) = 0;                  \
-       ptr += cfs_size_round(len + 1);          \
-} while (0)
-
 #endif
index 513a8225f888d687992269e642c35971ce2d036b..a59c5e99cbd3ca4ec3e69b7f6396aa5b5254c24a 100644 (file)
@@ -605,73 +605,20 @@ void lnet_counters_reset(void);
 
 unsigned int lnet_iov_nob(unsigned int niov, struct kvec *iov);
 int lnet_extract_iov(int dst_niov, struct kvec *dst,
-                    int src_niov, struct kvec *src,
+                    int src_niov, const struct kvec *src,
                      unsigned int offset, unsigned int len);
 
 unsigned int lnet_kiov_nob(unsigned int niov, lnet_kiov_t *iov);
 int lnet_extract_kiov(int dst_niov, lnet_kiov_t *dst,
-                     int src_niov, lnet_kiov_t *src,
+                     int src_niov, const lnet_kiov_t *src,
                      unsigned int offset, unsigned int len);
 
-void lnet_copy_iov2iov(unsigned int ndiov, struct kvec *diov,
-                      unsigned int doffset,
-                       unsigned int nsiov, struct kvec *siov,
+void lnet_copy_iov2iter(struct iov_iter *to,
+                       unsigned int nsiov, const struct kvec *siov,
                        unsigned int soffset, unsigned int nob);
-void lnet_copy_kiov2iov(unsigned int niov, struct kvec *iov,
-                       unsigned int iovoffset,
-                        unsigned int nkiov, lnet_kiov_t *kiov,
+void lnet_copy_kiov2iter(struct iov_iter *to,
+                        unsigned int nkiov, const lnet_kiov_t *kiov,
                         unsigned int kiovoffset, unsigned int nob);
-void lnet_copy_iov2kiov(unsigned int nkiov, lnet_kiov_t *kiov,
-                       unsigned int kiovoffset,
-                        unsigned int niov, struct kvec *iov,
-                        unsigned int iovoffset, unsigned int nob);
-void lnet_copy_kiov2kiov(unsigned int ndkiov, lnet_kiov_t *dkiov,
-                        unsigned int doffset,
-                         unsigned int nskiov, lnet_kiov_t *skiov,
-                         unsigned int soffset, unsigned int nob);
-
-static inline void
-lnet_copy_iov2flat(int dlen, void *dest, unsigned int doffset,
-                  unsigned int nsiov, struct kvec *siov, unsigned int soffset,
-                  unsigned int nob)
-{
-       struct kvec diov = {/*.iov_base = */ dest, /*.iov_len = */ dlen};
-
-       lnet_copy_iov2iov(1, &diov, doffset,
-                         nsiov, siov, soffset, nob);
-}
-
-static inline void
-lnet_copy_kiov2flat(int dlen, void *dest, unsigned int doffset,
-                   unsigned int nsiov, lnet_kiov_t *skiov,
-                   unsigned int soffset, unsigned int nob)
-{
-       struct kvec diov = {/* .iov_base = */ dest, /* .iov_len = */ dlen};
-
-       lnet_copy_kiov2iov(1, &diov, doffset,
-                          nsiov, skiov, soffset, nob);
-}
-
-static inline void
-lnet_copy_flat2iov(unsigned int ndiov, struct kvec *diov, unsigned int doffset,
-                  int slen, void *src, unsigned int soffset, unsigned int nob)
-{
-       struct kvec siov = {/*.iov_base = */ src, /*.iov_len = */slen};
-
-       lnet_copy_iov2iov(ndiov, diov, doffset,
-                         1, &siov, soffset, nob);
-}
-
-static inline void
-lnet_copy_flat2kiov(unsigned int ndiov, lnet_kiov_t *dkiov,
-                   unsigned int doffset, int slen, void *src,
-                   unsigned int soffset, unsigned int nob)
-{
-       struct kvec siov = {/* .iov_base = */ src, /* .iov_len = */ slen};
-
-       lnet_copy_iov2kiov(ndiov, dkiov, doffset,
-                          1, &siov, soffset, nob);
-}
 
 void lnet_me_unlink(lnet_me_t *me);
 
index 7967b013cbae9debaf06b29750937ec00457b6d5..640ff72753113180056e26eb5c9f07e12f1a9c75 100644 (file)
@@ -220,10 +220,7 @@ typedef struct lnet_lnd {
         * credit if the LND does flow control.
         */
        int (*lnd_recv)(struct lnet_ni *ni, void *private, lnet_msg_t *msg,
-                       int delayed, unsigned int niov,
-                       struct kvec *iov, lnet_kiov_t *kiov,
-                       unsigned int offset, unsigned int mlen,
-                       unsigned int rlen);
+                       int delayed, struct iov_iter *to, unsigned int rlen);
 
        /*
         * lnet_parse() has had to delay processing of this message
index e098b6c086e102c5f6ad4cec126c17dce2e394f4..f8be0e2f7bf7f72e40a5258b9c5745afc1273eca 100644 (file)
@@ -503,21 +503,7 @@ typedef struct {
 /* NB lustre portals uses struct iovec internally! */
 typedef struct iovec lnet_md_iovec_t;
 
-/**
- * A page-based fragment of a MD.
- */
-typedef struct {
-       /** Pointer to the page where the fragment resides */
-       struct page     *kiov_page;
-       /** Length in bytes of the fragment */
-       unsigned int     kiov_len;
-       /**
-        * Starting offset of the fragment within the page. Note that the
-        * end of the fragment must not pass the end of the page; i.e.,
-        * kiov_len + kiov_offset <= PAGE_SIZE.
-        */
-       unsigned int     kiov_offset;
-} lnet_kiov_t;
+typedef struct bio_vec lnet_kiov_t;
 /** @} lnet_md */
 
 /** \addtogroup lnet_eq
index 4f5978b3767bfba14b7e73be2d879de0a69afed1..c7a5d49e487f0ca6b65653226127d38d26cee696 100644 (file)
@@ -128,6 +128,7 @@ static int kiblnd_msgtype2size(int type)
 static int kiblnd_unpack_rd(struct kib_msg *msg, int flip)
 {
        struct kib_rdma_desc *rd;
+       int msg_size;
        int nob;
        int n;
        int i;
@@ -146,12 +147,6 @@ static int kiblnd_unpack_rd(struct kib_msg *msg, int flip)
 
        n = rd->rd_nfrags;
 
-       if (n <= 0 || n > IBLND_MAX_RDMA_FRAGS) {
-               CERROR("Bad nfrags: %d, should be 0 < n <= %d\n",
-                      n, IBLND_MAX_RDMA_FRAGS);
-               return 1;
-       }
-
        nob = offsetof(struct kib_msg, ibm_u) +
              kiblnd_rd_msg_size(rd, msg->ibm_type, n);
 
@@ -161,6 +156,13 @@ static int kiblnd_unpack_rd(struct kib_msg *msg, int flip)
                return 1;
        }
 
+       msg_size = kiblnd_rd_size(rd);
+       if (msg_size <= 0 || msg_size > LNET_MAX_PAYLOAD) {
+               CERROR("Bad msg_size: %d, should be 0 < n <= %d\n",
+                      msg_size, LNET_MAX_PAYLOAD);
+               return 1;
+       }
+
        if (!flip)
                return 0;
 
@@ -618,7 +620,7 @@ static int kiblnd_get_completion_vector(struct kib_conn *conn, int cpt)
 }
 
 struct kib_conn *kiblnd_create_conn(struct kib_peer *peer, struct rdma_cm_id *cmid,
-                              int state, int version)
+                                   int state, int version)
 {
        /*
         * CAVEAT EMPTOR:
index 078a0c3e88455b119607eddc4188e990cc9960db..14576977200f8bb2112fa454854ec7351ad0d23a 100644 (file)
@@ -113,8 +113,9 @@ extern struct kib_tunables  kiblnd_tunables;
 #define IBLND_OOB_CAPABLE(v)       ((v) != IBLND_MSG_VERSION_1)
 #define IBLND_OOB_MSGS(v)         (IBLND_OOB_CAPABLE(v) ? 2 : 0)
 
-#define IBLND_MSG_SIZE         (4 << 10)        /* max size of queued messages (inc hdr) */
-#define IBLND_MAX_RDMA_FRAGS    LNET_MAX_IOV      /* max # of fragments supported */
+#define IBLND_FRAG_SHIFT       (PAGE_SHIFT - 12)       /* frag size on wire is in 4K units */
+#define IBLND_MSG_SIZE         (4 << 10)               /* max size of queued messages (inc hdr) */
+#define IBLND_MAX_RDMA_FRAGS   (LNET_MAX_PAYLOAD >> 12)/* max # of fragments supported in 4K size */
 
 /************************/
 /* derived constants... */
@@ -133,8 +134,8 @@ extern struct kib_tunables  kiblnd_tunables;
 /* WRs and CQEs (per connection) */
 #define IBLND_RECV_WRS(c)      IBLND_RX_MSGS(c)
 #define IBLND_SEND_WRS(c)      \
-       ((c->ibc_max_frags + 1) * kiblnd_concurrent_sends(c->ibc_version, \
-                                                         c->ibc_peer->ibp_ni))
+       (((c->ibc_max_frags + 1) << IBLND_FRAG_SHIFT) * \
+         kiblnd_concurrent_sends(c->ibc_version, c->ibc_peer->ibp_ni))
 #define IBLND_CQ_ENTRIES(c)    (IBLND_RECV_WRS(c) + IBLND_SEND_WRS(c))
 
 struct kib_hca_dev;
@@ -582,6 +583,8 @@ struct kib_peer {
        unsigned short          ibp_connecting;
        /* reconnect this peer later */
        unsigned short          ibp_reconnecting:1;
+       /* counter of how many times we triggered a conn race */
+       unsigned char           ibp_races;
        /* # consecutive reconnection attempts to this peer */
        unsigned int            ibp_reconnected;
        /* errno on closing this peer */
@@ -607,14 +610,14 @@ kiblnd_cfg_rdma_frags(struct lnet_ni *ni)
 
        tunables = &ni->ni_lnd_tunables->lt_tun_u.lt_o2ib;
        mod = tunables->lnd_map_on_demand;
-       return mod ? mod : IBLND_MAX_RDMA_FRAGS;
+       return mod ? mod : IBLND_MAX_RDMA_FRAGS >> IBLND_FRAG_SHIFT;
 }
 
 static inline int
 kiblnd_rdma_frags(int version, struct lnet_ni *ni)
 {
        return version == IBLND_MSG_VERSION_1 ?
-                         IBLND_MAX_RDMA_FRAGS :
+                         (IBLND_MAX_RDMA_FRAGS >> IBLND_FRAG_SHIFT) :
                          kiblnd_cfg_rdma_frags(ni);
 }
 
@@ -1034,5 +1037,4 @@ int  kiblnd_post_rx(struct kib_rx *rx, int credit);
 
 int  kiblnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg);
 int  kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
-                unsigned int niov, struct kvec *iov, lnet_kiov_t *kiov,
-                unsigned int offset, unsigned int mlen, unsigned int rlen);
+                struct iov_iter *to, unsigned int rlen);
index 596a697b9d39db3865ca476ff2788b4c2cbefce1..3a86879f1b8daada45b73cc97105fa34a21902a0 100644 (file)
 
 #include "o2iblnd.h"
 
+#define MAX_CONN_RACES_BEFORE_ABORT 20
+
 static void kiblnd_peer_alive(struct kib_peer *peer);
 static void kiblnd_peer_connect_failed(struct kib_peer *peer, int active, int error);
-static void kiblnd_check_sends(struct kib_conn *conn);
 static void kiblnd_init_tx_msg(lnet_ni_t *ni, struct kib_tx *tx,
-                               int type, int body_nob);
+                              int type, int body_nob);
 static int kiblnd_init_rdma(struct kib_conn *conn, struct kib_tx *tx, int type,
-                            int resid, struct kib_rdma_desc *dstrd, __u64 dstcookie);
+                           int resid, struct kib_rdma_desc *dstrd,
+                           __u64 dstcookie);
 static void kiblnd_queue_tx_locked(struct kib_tx *tx, struct kib_conn *conn);
 static void kiblnd_queue_tx(struct kib_tx *tx, struct kib_conn *conn);
 static void kiblnd_unmap_tx(lnet_ni_t *ni, struct kib_tx *tx);
+static void kiblnd_check_sends_locked(struct kib_conn *conn);
 
 static void
 kiblnd_tx_done(lnet_ni_t *ni, struct kib_tx *tx)
@@ -211,9 +214,9 @@ kiblnd_post_rx(struct kib_rx *rx, int credit)
                conn->ibc_outstanding_credits++;
        else
                conn->ibc_reserved_credits++;
+       kiblnd_check_sends_locked(conn);
        spin_unlock(&conn->ibc_lock);
 
-       kiblnd_check_sends(conn);
 out:
        kiblnd_conn_decref(conn);
        return rc;
@@ -344,8 +347,8 @@ kiblnd_handle_rx(struct kib_rx *rx)
                    !IBLND_OOB_CAPABLE(conn->ibc_version)) /* v1 only */
                        conn->ibc_outstanding_credits++;
 
+               kiblnd_check_sends_locked(conn);
                spin_unlock(&conn->ibc_lock);
-               kiblnd_check_sends(conn);
        }
 
        switch (msg->ibm_type) {
@@ -648,7 +651,7 @@ static int kiblnd_map_tx(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc
 
 static int
 kiblnd_setup_rd_iov(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc *rd,
-                   unsigned int niov, struct kvec *iov, int offset, int nob)
+                   unsigned int niov, const struct kvec *iov, int offset, int nob)
 {
        struct kib_net *net = ni->ni_data;
        struct page *page;
@@ -705,7 +708,7 @@ kiblnd_setup_rd_iov(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc *rd,
 
 static int
 kiblnd_setup_rd_kiov(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc *rd,
-                    int nkiov, lnet_kiov_t *kiov, int offset, int nob)
+                    int nkiov, const lnet_kiov_t *kiov, int offset, int nob)
 {
        struct kib_net *net = ni->ni_data;
        struct scatterlist *sg;
@@ -717,8 +720,8 @@ kiblnd_setup_rd_kiov(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc *rd,
        LASSERT(nkiov > 0);
        LASSERT(net);
 
-       while (offset >= kiov->kiov_len) {
-               offset -= kiov->kiov_len;
+       while (offset >= kiov->bv_len) {
+               offset -= kiov->bv_len;
                nkiov--;
                kiov++;
                LASSERT(nkiov > 0);
@@ -728,10 +731,10 @@ kiblnd_setup_rd_kiov(lnet_ni_t *ni, struct kib_tx *tx, struct kib_rdma_desc *rd,
        do {
                LASSERT(nkiov > 0);
 
-               fragnob = min((int)(kiov->kiov_len - offset), nob);
+               fragnob = min((int)(kiov->bv_len - offset), nob);
 
-               sg_set_page(sg, kiov->kiov_page, fragnob,
-                           kiov->kiov_offset + offset);
+               sg_set_page(sg, kiov->bv_page, fragnob,
+                           kiov->bv_offset + offset);
                sg = sg_next(sg);
                if (!sg) {
                        CERROR("lacking enough sg entries to map tx\n");
@@ -761,7 +764,6 @@ kiblnd_post_tx_locked(struct kib_conn *conn, struct kib_tx *tx, int credit)
        LASSERT(tx->tx_queued);
        /* We rely on this for QP sizing */
        LASSERT(tx->tx_nwrq > 0);
-       LASSERT(tx->tx_nwrq <= 1 + conn->ibc_max_frags);
 
        LASSERT(!credit || credit == 1);
        LASSERT(conn->ibc_outstanding_credits >= 0);
@@ -800,7 +802,7 @@ kiblnd_post_tx_locked(struct kib_conn *conn, struct kib_tx *tx, int credit)
              conn->ibc_noops_posted == IBLND_OOB_MSGS(ver)))) {
                /*
                 * OK to drop when posted enough NOOPs, since
-                * kiblnd_check_sends will queue NOOP again when
+                * kiblnd_check_sends_locked will queue NOOP again when
                 * posted NOOPs complete
                 */
                spin_unlock(&conn->ibc_lock);
@@ -905,7 +907,7 @@ kiblnd_post_tx_locked(struct kib_conn *conn, struct kib_tx *tx, int credit)
 }
 
 static void
-kiblnd_check_sends(struct kib_conn *conn)
+kiblnd_check_sends_locked(struct kib_conn *conn)
 {
        int ver = conn->ibc_version;
        lnet_ni_t *ni = conn->ibc_peer->ibp_ni;
@@ -918,8 +920,6 @@ kiblnd_check_sends(struct kib_conn *conn)
                return;
        }
 
-       spin_lock(&conn->ibc_lock);
-
        LASSERT(conn->ibc_nsends_posted <= kiblnd_concurrent_sends(ver, ni));
        LASSERT(!IBLND_OOB_CAPABLE(ver) ||
                conn->ibc_noops_posted <= IBLND_OOB_MSGS(ver));
@@ -969,8 +969,6 @@ kiblnd_check_sends(struct kib_conn *conn)
                if (kiblnd_post_tx_locked(conn, tx, credit))
                        break;
        }
-
-       spin_unlock(&conn->ibc_lock);
 }
 
 static void
@@ -1016,16 +1014,11 @@ kiblnd_tx_complete(struct kib_tx *tx, int status)
        if (idle)
                list_del(&tx->tx_list);
 
-       kiblnd_conn_addref(conn);              /* 1 ref for me.... */
-
+       kiblnd_check_sends_locked(conn);
        spin_unlock(&conn->ibc_lock);
 
        if (idle)
                kiblnd_tx_done(conn->ibc_peer->ibp_ni, tx);
-
-       kiblnd_check_sends(conn);
-
-       kiblnd_conn_decref(conn);              /* ...until here */
 }
 
 static void
@@ -1078,6 +1071,15 @@ kiblnd_init_rdma(struct kib_conn *conn, struct kib_tx *tx, int type,
        LASSERT(type == IBLND_MSG_GET_DONE ||
                type == IBLND_MSG_PUT_DONE);
 
+       if (kiblnd_rd_size(srcrd) > conn->ibc_max_frags << PAGE_SHIFT) {
+               CERROR("RDMA is too large for peer %s (%d), src size: %d dst size: %d\n",
+                      libcfs_nid2str(conn->ibc_peer->ibp_nid),
+                      conn->ibc_max_frags << PAGE_SHIFT,
+                      kiblnd_rd_size(srcrd), kiblnd_rd_size(dstrd));
+               rc = -EMSGSIZE;
+               goto too_big;
+       }
+
        while (resid > 0) {
                if (srcidx >= srcrd->rd_nfrags) {
                        CERROR("Src buffer exhausted: %d frags\n", srcidx);
@@ -1091,16 +1093,6 @@ kiblnd_init_rdma(struct kib_conn *conn, struct kib_tx *tx, int type,
                        break;
                }
 
-               if (tx->tx_nwrq >= conn->ibc_max_frags) {
-                       CERROR("RDMA has too many fragments for peer %s (%d), src idx/frags: %d/%d dst idx/frags: %d/%d\n",
-                              libcfs_nid2str(conn->ibc_peer->ibp_nid),
-                              conn->ibc_max_frags,
-                              srcidx, srcrd->rd_nfrags,
-                              dstidx, dstrd->rd_nfrags);
-                       rc = -EMSGSIZE;
-                       break;
-               }
-
                wrknob = min(min(kiblnd_rd_frag_size(srcrd, srcidx),
                                 kiblnd_rd_frag_size(dstrd, dstidx)),
                             (__u32)resid);
@@ -1132,7 +1124,7 @@ kiblnd_init_rdma(struct kib_conn *conn, struct kib_tx *tx, int type,
                wrq++;
                sge++;
        }
-
+too_big:
        if (rc < 0)                          /* no RDMA if completing with failure */
                tx->tx_nwrq = 0;
 
@@ -1204,9 +1196,8 @@ kiblnd_queue_tx(struct kib_tx *tx, struct kib_conn *conn)
 {
        spin_lock(&conn->ibc_lock);
        kiblnd_queue_tx_locked(tx, conn);
+       kiblnd_check_sends_locked(conn);
        spin_unlock(&conn->ibc_lock);
-
-       kiblnd_check_sends(conn);
 }
 
 static int kiblnd_resolve_addr(struct rdma_cm_id *cmid,
@@ -1499,6 +1490,7 @@ kiblnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
        lnet_kiov_t *payload_kiov = lntmsg->msg_kiov;
        unsigned int payload_offset = lntmsg->msg_offset;
        unsigned int payload_nob = lntmsg->msg_len;
+       struct iov_iter from;
        struct kib_msg *ibmsg;
        struct kib_rdma_desc  *rd;
        struct kib_tx *tx;
@@ -1518,6 +1510,17 @@ kiblnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
        /* payload is either all vaddrs or all pages */
        LASSERT(!(payload_kiov && payload_iov));
 
+       if (payload_kiov)
+               iov_iter_bvec(&from, ITER_BVEC | WRITE,
+                             payload_kiov, payload_niov,
+                             payload_nob + payload_offset);
+       else
+               iov_iter_kvec(&from, ITER_KVEC | WRITE,
+                             payload_iov, payload_niov,
+                             payload_nob + payload_offset);
+
+       iov_iter_advance(&from, payload_offset);
+
        switch (type) {
        default:
                LBUG();
@@ -1637,17 +1640,8 @@ kiblnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
        ibmsg = tx->tx_msg;
        ibmsg->ibm_u.immediate.ibim_hdr = *hdr;
 
-       if (payload_kiov)
-               lnet_copy_kiov2flat(IBLND_MSG_SIZE, ibmsg,
-                                   offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                   payload_niov, payload_kiov,
-                                   payload_offset, payload_nob);
-       else
-               lnet_copy_iov2flat(IBLND_MSG_SIZE, ibmsg,
-                                  offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                  payload_niov, payload_iov,
-                                  payload_offset, payload_nob);
-
+       copy_from_iter(&ibmsg->ibm_u.immediate.ibim_payload, IBLND_MSG_SIZE,
+                      &from);
        nob = offsetof(struct kib_immediate_msg, ibim_payload[payload_nob]);
        kiblnd_init_tx_msg(ni, tx, IBLND_MSG_IMMEDIATE, nob);
 
@@ -1719,8 +1713,7 @@ kiblnd_reply(lnet_ni_t *ni, struct kib_rx *rx, lnet_msg_t *lntmsg)
 
 int
 kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
-           unsigned int niov, struct kvec *iov, lnet_kiov_t *kiov,
-           unsigned int offset, unsigned int mlen, unsigned int rlen)
+           struct iov_iter *to, unsigned int rlen)
 {
        struct kib_rx *rx = private;
        struct kib_msg *rxmsg = rx->rx_msg;
@@ -1730,10 +1723,9 @@ kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
        int post_credit = IBLND_POSTRX_PEER_CREDIT;
        int rc = 0;
 
-       LASSERT(mlen <= rlen);
+       LASSERT(iov_iter_count(to) <= rlen);
        LASSERT(!in_interrupt());
        /* Either all pages or all vaddrs */
-       LASSERT(!(kiov && iov));
 
        switch (rxmsg->ibm_type) {
        default:
@@ -1749,16 +1741,8 @@ kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
                        break;
                }
 
-               if (kiov)
-                       lnet_copy_flat2kiov(niov, kiov, offset,
-                                           IBLND_MSG_SIZE, rxmsg,
-                                           offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                           mlen);
-               else
-                       lnet_copy_flat2iov(niov, iov, offset,
-                                          IBLND_MSG_SIZE, rxmsg,
-                                          offsetof(struct kib_msg, ibm_u.immediate.ibim_payload),
-                                          mlen);
+               copy_to_iter(&rxmsg->ibm_u.immediate.ibim_payload,
+                            IBLND_MSG_SIZE, to);
                lnet_finalize(ni, lntmsg, 0);
                break;
 
@@ -1766,7 +1750,7 @@ kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
                struct kib_msg  *txmsg;
                struct kib_rdma_desc *rd;
 
-               if (!mlen) {
+               if (!iov_iter_count(to)) {
                        lnet_finalize(ni, lntmsg, 0);
                        kiblnd_send_completion(rx->rx_conn, IBLND_MSG_PUT_NAK, 0,
                                               rxmsg->ibm_u.putreq.ibprm_cookie);
@@ -1784,12 +1768,16 @@ kiblnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
 
                txmsg = tx->tx_msg;
                rd = &txmsg->ibm_u.putack.ibpam_rd;
-               if (!kiov)
+               if (!(to->type & ITER_BVEC))
                        rc = kiblnd_setup_rd_iov(ni, tx, rd,
-                                                niov, iov, offset, mlen);
+                                                to->nr_segs, to->kvec,
+                                                to->iov_offset,
+                                                iov_iter_count(to));
                else
                        rc = kiblnd_setup_rd_kiov(ni, tx, rd,
-                                                 niov, kiov, offset, mlen);
+                                                 to->nr_segs, to->bvec,
+                                                 to->iov_offset,
+                                                 iov_iter_count(to));
                if (rc) {
                        CERROR("Can't setup PUT sink for %s: %d\n",
                               libcfs_nid2str(conn->ibc_peer->ibp_nid), rc);
@@ -2183,14 +2171,11 @@ kiblnd_connreq_done(struct kib_conn *conn, int status)
                return;
        }
 
-       /**
-        * refcount taken by cmid is not reliable after I released the glock
-        * because this connection is visible to other threads now, another
-        * thread can find and close this connection right after I released
-        * the glock, if kiblnd_cm_callback for RDMA_CM_EVENT_DISCONNECTED is
-        * called, it can release the connection refcount taken by cmid.
-        * It means the connection could be destroyed before I finish my
-        * operations on it.
+       /*
+        * +1 ref for myself, this connection is visible to other threads
+        * now, refcount of peer:ibp_conns can be released by connection
+        * close from either a different thread, or the calling of
+        * kiblnd_check_sends_locked() below. See bz21911 for details.
         */
        kiblnd_conn_addref(conn);
        write_unlock_irqrestore(&kiblnd_data.kib_global_lock, flags);
@@ -2202,10 +2187,9 @@ kiblnd_connreq_done(struct kib_conn *conn, int status)
 
                kiblnd_queue_tx_locked(tx, conn);
        }
+       kiblnd_check_sends_locked(conn);
        spin_unlock(&conn->ibc_lock);
 
-       kiblnd_check_sends(conn);
-
        /* schedule blocked rxs */
        kiblnd_handle_early_rxs(conn);
 
@@ -2240,6 +2224,7 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
        struct kib_rej rej;
        int version = IBLND_MSG_VERSION;
        unsigned long flags;
+       int max_frags;
        int rc;
        struct sockaddr_in *peer_addr;
 
@@ -2346,22 +2331,20 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
                goto failed;
        }
 
-       if (reqmsg->ibm_u.connparams.ibcp_max_frags >
-           kiblnd_rdma_frags(version, ni)) {
-               CWARN("Can't accept conn from %s (version %x): max_frags %d too large (%d wanted)\n",
-                     libcfs_nid2str(nid), version,
-                     reqmsg->ibm_u.connparams.ibcp_max_frags,
+       max_frags = reqmsg->ibm_u.connparams.ibcp_max_frags >> IBLND_FRAG_SHIFT;
+       if (max_frags > kiblnd_rdma_frags(version, ni)) {
+               CWARN("Can't accept conn from %s (version %x): max message size %d is too large (%d wanted)\n",
+                     libcfs_nid2str(nid), version, max_frags,
                      kiblnd_rdma_frags(version, ni));
 
                if (version >= IBLND_MSG_VERSION)
                        rej.ibr_why = IBLND_REJECT_RDMA_FRAGS;
 
                goto failed;
-       } else if (reqmsg->ibm_u.connparams.ibcp_max_frags <
-                  kiblnd_rdma_frags(version, ni) && !net->ibn_fmr_ps) {
-               CWARN("Can't accept conn from %s (version %x): max_frags %d incompatible without FMR pool (%d wanted)\n",
-                     libcfs_nid2str(nid), version,
-                     reqmsg->ibm_u.connparams.ibcp_max_frags,
+       } else if (max_frags < kiblnd_rdma_frags(version, ni) &&
+                  !net->ibn_fmr_ps) {
+               CWARN("Can't accept conn from %s (version %x): max message size %d incompatible without FMR pool (%d wanted)\n",
+                     libcfs_nid2str(nid), version, max_frags,
                      kiblnd_rdma_frags(version, ni));
 
                if (version == IBLND_MSG_VERSION)
@@ -2387,7 +2370,7 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
        }
 
        /* We have validated the peer's parameters so use those */
-       peer->ibp_max_frags = reqmsg->ibm_u.connparams.ibcp_max_frags;
+       peer->ibp_max_frags = max_frags;
        peer->ibp_queue_depth = reqmsg->ibm_u.connparams.ibcp_queue_depth;
 
        write_lock_irqsave(g_lock, flags);
@@ -2419,23 +2402,37 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
                        goto failed;
                }
 
-               /* tie-break connection race in favour of the higher NID */
+               /*
+                * Tie-break connection race in favour of the higher NID.
+                * If we keep running into a race condition multiple times,
+                * we have to assume that the connection attempt with the
+                * higher NID is stuck in a connecting state and will never
+                * recover.  As such, we pass through this if-block and let
+                * the lower NID connection win so we can move forward.
+                */
                if (peer2->ibp_connecting &&
-                   nid < ni->ni_nid) {
+                   nid < ni->ni_nid && peer2->ibp_races <
+                   MAX_CONN_RACES_BEFORE_ABORT) {
+                       peer2->ibp_races++;
                        write_unlock_irqrestore(g_lock, flags);
 
-                       CWARN("Conn race %s\n", libcfs_nid2str(peer2->ibp_nid));
+                       CDEBUG(D_NET, "Conn race %s\n",
+                              libcfs_nid2str(peer2->ibp_nid));
 
                        kiblnd_peer_decref(peer);
                        rej.ibr_why = IBLND_REJECT_CONN_RACE;
                        goto failed;
                }
-
+               if (peer2->ibp_races >= MAX_CONN_RACES_BEFORE_ABORT)
+                       CNETERR("Conn race %s: unresolved after %d attempts, letting lower NID win\n",
+                               libcfs_nid2str(peer2->ibp_nid),
+                               MAX_CONN_RACES_BEFORE_ABORT);
                /**
                 * passive connection is allowed even this peer is waiting for
                 * reconnection.
                 */
                peer2->ibp_reconnecting = 0;
+               peer2->ibp_races = 0;
                peer2->ibp_accepting++;
                kiblnd_peer_addref(peer2);
 
@@ -2494,7 +2491,7 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
        kiblnd_init_msg(ackmsg, IBLND_MSG_CONNACK,
                        sizeof(ackmsg->ibm_u.connparams));
        ackmsg->ibm_u.connparams.ibcp_queue_depth = conn->ibc_queue_depth;
-       ackmsg->ibm_u.connparams.ibcp_max_frags = conn->ibc_max_frags;
+       ackmsg->ibm_u.connparams.ibcp_max_frags = conn->ibc_max_frags << IBLND_FRAG_SHIFT;
        ackmsg->ibm_u.connparams.ibcp_max_msg_size = IBLND_MSG_SIZE;
 
        kiblnd_pack_msg(ni, ackmsg, version, 0, nid, reqmsg->ibm_srcstamp);
@@ -2526,9 +2523,9 @@ kiblnd_passive_connect(struct rdma_cm_id *cmid, void *priv, int priv_nob)
 
  failed:
        if (ni) {
-               lnet_ni_decref(ni);
                rej.ibr_cp.ibcp_queue_depth = kiblnd_msg_queue_size(version, ni);
                rej.ibr_cp.ibcp_max_frags = kiblnd_rdma_frags(version, ni);
+               lnet_ni_decref(ni);
        }
 
        rej.ibr_version             = version;
@@ -2556,7 +2553,7 @@ kiblnd_check_reconnect(struct kib_conn *conn, int version,
 
        if (cp) {
                msg_size = cp->ibcp_max_msg_size;
-               frag_num = cp->ibcp_max_frags;
+               frag_num        = cp->ibcp_max_frags << IBLND_FRAG_SHIFT;
                queue_dep = cp->ibcp_queue_depth;
        }
 
@@ -2821,11 +2818,11 @@ kiblnd_check_connreply(struct kib_conn *conn, void *priv, int priv_nob)
                goto failed;
        }
 
-       if (msg->ibm_u.connparams.ibcp_max_frags >
+       if ((msg->ibm_u.connparams.ibcp_max_frags >> IBLND_FRAG_SHIFT) >
            conn->ibc_max_frags) {
                CERROR("%s has incompatible max_frags %d (<=%d wanted)\n",
                       libcfs_nid2str(peer->ibp_nid),
-                      msg->ibm_u.connparams.ibcp_max_frags,
+                      msg->ibm_u.connparams.ibcp_max_frags >> IBLND_FRAG_SHIFT,
                       conn->ibc_max_frags);
                rc = -EPROTO;
                goto failed;
@@ -2859,7 +2856,7 @@ kiblnd_check_connreply(struct kib_conn *conn, void *priv, int priv_nob)
        conn->ibc_credits = msg->ibm_u.connparams.ibcp_queue_depth;
        conn->ibc_reserved_credits = msg->ibm_u.connparams.ibcp_queue_depth;
        conn->ibc_queue_depth = msg->ibm_u.connparams.ibcp_queue_depth;
-       conn->ibc_max_frags = msg->ibm_u.connparams.ibcp_max_frags;
+       conn->ibc_max_frags = msg->ibm_u.connparams.ibcp_max_frags >> IBLND_FRAG_SHIFT;
        LASSERT(conn->ibc_credits + conn->ibc_reserved_credits +
                IBLND_OOB_MSGS(ver) <= IBLND_RX_MSGS(conn));
 
@@ -2916,7 +2913,7 @@ kiblnd_active_connect(struct rdma_cm_id *cmid)
        memset(msg, 0, sizeof(*msg));
        kiblnd_init_msg(msg, IBLND_MSG_CONNREQ, sizeof(msg->ibm_u.connparams));
        msg->ibm_u.connparams.ibcp_queue_depth = conn->ibc_queue_depth;
-       msg->ibm_u.connparams.ibcp_max_frags = conn->ibc_max_frags;
+       msg->ibm_u.connparams.ibcp_max_frags = conn->ibc_max_frags << IBLND_FRAG_SHIFT;
        msg->ibm_u.connparams.ibcp_max_msg_size = IBLND_MSG_SIZE;
 
        kiblnd_pack_msg(peer->ibp_ni, msg, version,
@@ -3233,7 +3230,11 @@ kiblnd_check_conns(int idx)
         */
        list_for_each_entry_safe(conn, temp, &checksends, ibc_connd_list) {
                list_del(&conn->ibc_connd_list);
-               kiblnd_check_sends(conn);
+
+               spin_lock(&conn->ibc_lock);
+               kiblnd_check_sends_locked(conn);
+               spin_unlock(&conn->ibc_lock);
+
                kiblnd_conn_decref(conn);
        }
 }
@@ -3419,6 +3420,12 @@ kiblnd_qp_event(struct ib_event *event, void *arg)
        case IB_EVENT_COMM_EST:
                CDEBUG(D_NET, "%s established\n",
                       libcfs_nid2str(conn->ibc_peer->ibp_nid));
+               /*
+                * We received a packet but connection isn't established
+                * probably handshake packet was lost, so free to
+                * force make connection established
+                */
+               rdma_notify(conn->ibc_cmid, IB_EVENT_COMM_EST);
                return;
 
        default:
index 07ec540946cdcc41aa17e6f884b4050815f34580..cbc9a9c5385f4819cadb9dc93f663a993fa3c318 100644 (file)
@@ -1468,11 +1468,6 @@ ksocknal_close_conn_locked(struct ksock_conn *conn, int error)
 
                conn->ksnc_route = NULL;
 
-#if 0     /* irrelevant with only eager routes */
-               /* make route least favourite */
-               list_del(&route->ksnr_list);
-               list_add_tail(&route->ksnr_list, &peer->ksnp_routes);
-#endif
                ksocknal_route_decref(route);     /* drop conn's ref on route */
        }
 
index a56632b4ee37f67a80452829e3f2d007a9d07be8..e6ca0cf52691fec8c55fd3968fe4801fdbe7054c 100644 (file)
@@ -86,8 +86,6 @@ struct ksock_sched {                          /* per scheduler state */
        int                     kss_nconns;     /* # connections assigned to
                                                 * this scheduler */
        struct ksock_sched_info *kss_info;      /* owner of it */
-       struct page             *kss_rx_scratch_pgs[LNET_MAX_IOV];
-       struct kvec             kss_scratch_iov[LNET_MAX_IOV];
 };
 
 struct ksock_sched_info {
@@ -616,9 +614,7 @@ void ksocknal_shutdown(lnet_ni_t *ni);
 int ksocknal_ctl(lnet_ni_t *ni, unsigned int cmd, void *arg);
 int ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg);
 int ksocknal_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
-                 int delayed, unsigned int niov,
-                 struct kvec *iov, lnet_kiov_t *kiov,
-                 unsigned int offset, unsigned int mlen, unsigned int rlen);
+                 int delayed, struct iov_iter *to, unsigned int rlen);
 int ksocknal_accept(lnet_ni_t *ni, struct socket *sock);
 
 int ksocknal_add_peer(lnet_ni_t *ni, lnet_process_id_t id, __u32 ip, int port);
@@ -635,7 +631,7 @@ int  ksocknal_close_peer_conns_locked(struct ksock_peer *peer,
 int ksocknal_close_conn_and_siblings(struct ksock_conn *conn, int why);
 int ksocknal_close_matching_conns(lnet_process_id_t id, __u32 ipaddr);
 struct ksock_conn *ksocknal_find_conn_locked(struct ksock_peer *peer,
-                                       struct ksock_tx *tx, int nonblk);
+                                            struct ksock_tx *tx, int nonblk);
 
 int  ksocknal_launch_packet(lnet_ni_t *ni, struct ksock_tx *tx,
                            lnet_process_id_t id);
index 303576d815c64adadf7b3a00355f2c43e5721251..1bdf9620697013e056f8a4e00bfd9c63dce9848b 100644 (file)
@@ -164,13 +164,13 @@ ksocknal_send_kiov(struct ksock_conn *conn, struct ksock_tx *tx)
        do {
                LASSERT(tx->tx_nkiov > 0);
 
-               if (nob < (int)kiov->kiov_len) {
-                       kiov->kiov_offset += nob;
-                       kiov->kiov_len -= nob;
+               if (nob < (int)kiov->bv_len) {
+                       kiov->bv_offset += nob;
+                       kiov->bv_len -= nob;
                        return rc;
                }
 
-               nob -= (int)kiov->kiov_len;
+               nob -= (int)kiov->bv_len;
                tx->tx_kiov = ++kiov;
                tx->tx_nkiov--;
        } while (nob);
@@ -326,13 +326,13 @@ ksocknal_recv_kiov(struct ksock_conn *conn)
        do {
                LASSERT(conn->ksnc_rx_nkiov > 0);
 
-               if (nob < (int)kiov->kiov_len) {
-                       kiov->kiov_offset += nob;
-                       kiov->kiov_len -= nob;
+               if (nob < (int)kiov->bv_len) {
+                       kiov->bv_offset += nob;
+                       kiov->bv_len -= nob;
                        return -EAGAIN;
                }
 
-               nob -= kiov->kiov_len;
+               nob -= kiov->bv_len;
                conn->ksnc_rx_kiov = ++kiov;
                conn->ksnc_rx_nkiov--;
        } while (nob);
@@ -1325,39 +1325,36 @@ ksocknal_process_receive(struct ksock_conn *conn)
 
 int
 ksocknal_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed,
-             unsigned int niov, struct kvec *iov, lnet_kiov_t *kiov,
-             unsigned int offset, unsigned int mlen, unsigned int rlen)
+             struct iov_iter *to, unsigned int rlen)
 {
        struct ksock_conn *conn = private;
        struct ksock_sched *sched = conn->ksnc_scheduler;
 
-       LASSERT(mlen <= rlen);
-       LASSERT(niov <= LNET_MAX_IOV);
+       LASSERT(iov_iter_count(to) <= rlen);
+       LASSERT(to->nr_segs <= LNET_MAX_IOV);
 
        conn->ksnc_cookie = msg;
-       conn->ksnc_rx_nob_wanted = mlen;
+       conn->ksnc_rx_nob_wanted = iov_iter_count(to);
        conn->ksnc_rx_nob_left = rlen;
 
-       if (!mlen || iov) {
+       if (to->type & ITER_KVEC) {
                conn->ksnc_rx_nkiov = 0;
                conn->ksnc_rx_kiov = NULL;
                conn->ksnc_rx_iov = conn->ksnc_rx_iov_space.iov;
                conn->ksnc_rx_niov =
                        lnet_extract_iov(LNET_MAX_IOV, conn->ksnc_rx_iov,
-                                        niov, iov, offset, mlen);
+                                        to->nr_segs, to->kvec,
+                                        to->iov_offset, iov_iter_count(to));
        } else {
                conn->ksnc_rx_niov = 0;
                conn->ksnc_rx_iov = NULL;
                conn->ksnc_rx_kiov = conn->ksnc_rx_iov_space.kiov;
                conn->ksnc_rx_nkiov =
                        lnet_extract_kiov(LNET_MAX_IOV, conn->ksnc_rx_kiov,
-                                         niov, kiov, offset, mlen);
+                                        to->nr_segs, to->bvec,
+                                        to->iov_offset, iov_iter_count(to));
        }
 
-       LASSERT(mlen ==
-               lnet_iov_nob(conn->ksnc_rx_niov, conn->ksnc_rx_iov) +
-               lnet_kiov_nob(conn->ksnc_rx_nkiov, conn->ksnc_rx_kiov));
-
        LASSERT(conn->ksnc_rx_scheduled);
 
        spin_lock_bh(&sched->kss_lock);
@@ -2008,13 +2005,6 @@ ksocknal_connect(struct ksock_route *route)
                list_splice_init(&peer->ksnp_tx_queue, &zombies);
        }
 
-#if 0     /* irrelevant with only eager routes */
-       if (!route->ksnr_deleted) {
-               /* make this route least-favourite for re-selection */
-               list_del(&route->ksnr_list);
-               list_add_tail(&route->ksnr_list, &peer->ksnp_routes);
-       }
-#endif
        write_unlock_bh(&ksocknal_data.ksnd_global_lock);
 
        ksocknal_peer_failed(peer);
index 6a17757fce1eb5fe08418aea9e2d393a937a4e50..6c95e989ca129087fc5adce305830784db57c8f7 100644 (file)
@@ -73,9 +73,9 @@ ksocknal_lib_zc_capable(struct ksock_conn *conn)
 int
 ksocknal_lib_send_iov(struct ksock_conn *conn, struct ksock_tx *tx)
 {
+       struct msghdr msg = {.msg_flags = MSG_DONTWAIT};
        struct socket *sock = conn->ksnc_sock;
-       int nob;
-       int rc;
+       int nob, i;
 
        if (*ksocknal_tunables.ksnd_enable_csum && /* checksum enabled */
            conn->ksnc_proto == &ksocknal_protocol_v2x && /* V2.x connection  */
@@ -83,34 +83,16 @@ ksocknal_lib_send_iov(struct ksock_conn *conn, struct ksock_tx *tx)
            !tx->tx_msg.ksm_csum)                    /* not checksummed  */
                ksocknal_lib_csum_tx(tx);
 
-       /*
-        * NB we can't trust socket ops to either consume our iovs
-        * or leave them alone.
-        */
-       {
-#if SOCKNAL_SINGLE_FRAG_TX
-               struct kvec scratch;
-               struct kvec *scratchiov = &scratch;
-               unsigned int niov = 1;
-#else
-               struct kvec *scratchiov = conn->ksnc_scheduler->kss_scratch_iov;
-               unsigned int niov = tx->tx_niov;
-#endif
-               struct msghdr msg = {.msg_flags = MSG_DONTWAIT};
-               int i;
+       for (nob = i = 0; i < tx->tx_niov; i++)
+               nob += tx->tx_iov[i].iov_len;
 
-               for (nob = i = 0; i < niov; i++) {
-                       scratchiov[i] = tx->tx_iov[i];
-                       nob += scratchiov[i].iov_len;
-               }
+       if (!list_empty(&conn->ksnc_tx_queue) ||
+           nob < tx->tx_resid)
+               msg.msg_flags |= MSG_MORE;
 
-               if (!list_empty(&conn->ksnc_tx_queue) ||
-                   nob < tx->tx_resid)
-                       msg.msg_flags |= MSG_MORE;
-
-               rc = kernel_sendmsg(sock, &msg, scratchiov, niov, nob);
-       }
-       return rc;
+       iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC,
+                     tx->tx_iov, tx->tx_niov, nob);
+       return sock_sendmsg(sock, &msg);
 }
 
 int
@@ -124,20 +106,16 @@ ksocknal_lib_send_kiov(struct ksock_conn *conn, struct ksock_tx *tx)
        /* Not NOOP message */
        LASSERT(tx->tx_lnetmsg);
 
-       /*
-        * NB we can't trust socket ops to either consume our iovs
-        * or leave them alone.
-        */
        if (tx->tx_msg.ksm_zc_cookies[0]) {
                /* Zero copy is enabled */
                struct sock *sk = sock->sk;
-               struct page *page = kiov->kiov_page;
-               int offset = kiov->kiov_offset;
-               int fragsize = kiov->kiov_len;
+               struct page *page = kiov->bv_page;
+               int offset = kiov->bv_offset;
+               int fragsize = kiov->bv_len;
                int msgflg = MSG_DONTWAIT;
 
                CDEBUG(D_NET, "page %p + offset %x for %d\n",
-                      page, offset, kiov->kiov_len);
+                      page, offset, kiov->bv_len);
 
                if (!list_empty(&conn->ksnc_tx_queue) ||
                    fragsize < tx->tx_resid)
@@ -150,34 +128,19 @@ ksocknal_lib_send_kiov(struct ksock_conn *conn, struct ksock_tx *tx)
                        rc = tcp_sendpage(sk, page, offset, fragsize, msgflg);
                }
        } else {
-#if SOCKNAL_SINGLE_FRAG_TX || !SOCKNAL_RISK_KMAP_DEADLOCK
-               struct kvec scratch;
-               struct kvec *scratchiov = &scratch;
-               unsigned int niov = 1;
-#else
-#ifdef CONFIG_HIGHMEM
-#warning "XXX risk of kmap deadlock on multiple frags..."
-#endif
-               struct kvec *scratchiov = conn->ksnc_scheduler->kss_scratch_iov;
-               unsigned int niov = tx->tx_nkiov;
-#endif
                struct msghdr msg = {.msg_flags = MSG_DONTWAIT};
                int i;
 
-               for (nob = i = 0; i < niov; i++) {
-                       scratchiov[i].iov_base = kmap(kiov[i].kiov_page) +
-                                                kiov[i].kiov_offset;
-                       nob += scratchiov[i].iov_len = kiov[i].kiov_len;
-               }
+               for (nob = i = 0; i < tx->tx_nkiov; i++)
+                       nob += kiov[i].bv_len;
 
                if (!list_empty(&conn->ksnc_tx_queue) ||
                    nob < tx->tx_resid)
                        msg.msg_flags |= MSG_MORE;
 
-               rc = kernel_sendmsg(sock, &msg, (struct kvec *)scratchiov, niov, nob);
-
-               for (i = 0; i < niov; i++)
-                       kunmap(kiov[i].kiov_page);
+               iov_iter_bvec(&msg.msg_iter, WRITE | ITER_BVEC,
+                             kiov, tx->tx_nkiov, nob);
+               rc = sock_sendmsg(sock, &msg);
        }
        return rc;
 }
@@ -201,14 +164,7 @@ ksocknal_lib_eager_ack(struct ksock_conn *conn)
 int
 ksocknal_lib_recv_iov(struct ksock_conn *conn)
 {
-#if SOCKNAL_SINGLE_FRAG_RX
-       struct kvec scratch;
-       struct kvec *scratchiov = &scratch;
-       unsigned int niov = 1;
-#else
-       struct kvec *scratchiov = conn->ksnc_scheduler->kss_scratch_iov;
        unsigned int niov = conn->ksnc_rx_niov;
-#endif
        struct kvec *iov = conn->ksnc_rx_iov;
        struct msghdr msg = {
                .msg_flags = 0
@@ -220,20 +176,15 @@ ksocknal_lib_recv_iov(struct ksock_conn *conn)
        int sum;
        __u32 saved_csum;
 
-       /*
-        * NB we can't trust socket ops to either consume our iovs
-        * or leave them alone.
-        */
        LASSERT(niov > 0);
 
-       for (nob = i = 0; i < niov; i++) {
-               scratchiov[i] = iov[i];
-               nob += scratchiov[i].iov_len;
-       }
+       for (nob = i = 0; i < niov; i++)
+               nob += iov[i].iov_len;
+
        LASSERT(nob <= conn->ksnc_rx_nob_wanted);
 
-       rc = kernel_recvmsg(conn->ksnc_sock, &msg, scratchiov, niov, nob,
-                           MSG_DONTWAIT);
+       iov_iter_kvec(&msg.msg_iter, READ | ITER_KVEC, iov, niov, nob);
+       rc = sock_recvmsg(conn->ksnc_sock, &msg, MSG_DONTWAIT);
 
        saved_csum = 0;
        if (conn->ksnc_proto == &ksocknal_protocol_v2x) {
@@ -259,67 +210,10 @@ ksocknal_lib_recv_iov(struct ksock_conn *conn)
        return rc;
 }
 
-static void
-ksocknal_lib_kiov_vunmap(void *addr)
-{
-       if (!addr)
-               return;
-
-       vunmap(addr);
-}
-
-static void *
-ksocknal_lib_kiov_vmap(lnet_kiov_t *kiov, int niov,
-                      struct kvec *iov, struct page **pages)
-{
-       void *addr;
-       int nob;
-       int i;
-
-       if (!*ksocknal_tunables.ksnd_zc_recv || !pages)
-               return NULL;
-
-       LASSERT(niov <= LNET_MAX_IOV);
-
-       if (niov < 2 ||
-           niov < *ksocknal_tunables.ksnd_zc_recv_min_nfrags)
-               return NULL;
-
-       for (nob = i = 0; i < niov; i++) {
-               if ((kiov[i].kiov_offset && i > 0) ||
-                   (kiov[i].kiov_offset + kiov[i].kiov_len != PAGE_SIZE && i < niov - 1))
-                       return NULL;
-
-               pages[i] = kiov[i].kiov_page;
-               nob += kiov[i].kiov_len;
-       }
-
-       addr = vmap(pages, niov, VM_MAP, PAGE_KERNEL);
-       if (!addr)
-               return NULL;
-
-       iov->iov_base = addr + kiov[0].kiov_offset;
-       iov->iov_len = nob;
-
-       return addr;
-}
-
 int
 ksocknal_lib_recv_kiov(struct ksock_conn *conn)
 {
-#if SOCKNAL_SINGLE_FRAG_RX || !SOCKNAL_RISK_KMAP_DEADLOCK
-       struct kvec scratch;
-       struct kvec *scratchiov = &scratch;
-       struct page **pages = NULL;
-       unsigned int niov = 1;
-#else
-#ifdef CONFIG_HIGHMEM
-#warning "XXX risk of kmap deadlock on multiple frags..."
-#endif
-       struct kvec *scratchiov = conn->ksnc_scheduler->kss_scratch_iov;
-       struct page **pages = conn->ksnc_scheduler->kss_rx_scratch_pgs;
        unsigned int niov = conn->ksnc_rx_nkiov;
-#endif
        lnet_kiov_t   *kiov = conn->ksnc_rx_kiov;
        struct msghdr msg = {
                .msg_flags = 0
@@ -328,63 +222,32 @@ ksocknal_lib_recv_kiov(struct ksock_conn *conn)
        int i;
        int rc;
        void *base;
-       void *addr;
        int sum;
        int fragnob;
-       int n;
-
-       /*
-        * NB we can't trust socket ops to either consume our iovs
-        * or leave them alone.
-        */
-       addr = ksocknal_lib_kiov_vmap(kiov, niov, scratchiov, pages);
-       if (addr) {
-               nob = scratchiov[0].iov_len;
-               n = 1;
 
-       } else {
-               for (nob = i = 0; i < niov; i++) {
-                       nob += scratchiov[i].iov_len = kiov[i].kiov_len;
-                       scratchiov[i].iov_base = kmap(kiov[i].kiov_page) +
-                                                kiov[i].kiov_offset;
-               }
-               n = niov;
-       }
+       for (nob = i = 0; i < niov; i++)
+               nob += kiov[i].bv_len;
 
        LASSERT(nob <= conn->ksnc_rx_nob_wanted);
 
-       rc = kernel_recvmsg(conn->ksnc_sock, &msg, (struct kvec *)scratchiov,
-                           n, nob, MSG_DONTWAIT);
+       iov_iter_bvec(&msg.msg_iter, READ | ITER_BVEC, kiov, niov, nob);
+       rc = sock_recvmsg(conn->ksnc_sock, &msg, MSG_DONTWAIT);
 
        if (conn->ksnc_msg.ksm_csum) {
                for (i = 0, sum = rc; sum > 0; i++, sum -= fragnob) {
                        LASSERT(i < niov);
 
-                       /*
-                        * Dang! have to kmap again because I have nowhere to
-                        * stash the mapped address.  But by doing it while the
-                        * page is still mapped, the kernel just bumps the map
-                        * count and returns me the address it stashed.
-                        */
-                       base = kmap(kiov[i].kiov_page) + kiov[i].kiov_offset;
-                       fragnob = kiov[i].kiov_len;
+                       base = kmap(kiov[i].bv_page) + kiov[i].bv_offset;
+                       fragnob = kiov[i].bv_len;
                        if (fragnob > sum)
                                fragnob = sum;
 
                        conn->ksnc_rx_csum = ksocknal_csum(conn->ksnc_rx_csum,
                                                           base, fragnob);
 
-                       kunmap(kiov[i].kiov_page);
+                       kunmap(kiov[i].bv_page);
                }
        }
-
-       if (addr) {
-               ksocknal_lib_kiov_vunmap(addr);
-       } else {
-               for (i = 0; i < niov; i++)
-                       kunmap(kiov[i].kiov_page);
-       }
-
        return rc;
 }
 
@@ -406,12 +269,12 @@ ksocknal_lib_csum_tx(struct ksock_tx *tx)
 
        if (tx->tx_kiov) {
                for (i = 0; i < tx->tx_nkiov; i++) {
-                       base = kmap(tx->tx_kiov[i].kiov_page) +
-                              tx->tx_kiov[i].kiov_offset;
+                       base = kmap(tx->tx_kiov[i].bv_page) +
+                              tx->tx_kiov[i].bv_offset;
 
-                       csum = ksocknal_csum(csum, base, tx->tx_kiov[i].kiov_len);
+                       csum = ksocknal_csum(csum, base, tx->tx_kiov[i].bv_len);
 
-                       kunmap(tx->tx_kiov[i].kiov_page);
+                       kunmap(tx->tx_kiov[i].bv_page);
                }
        } else {
                for (i = 1; i < tx->tx_niov; i++)
index 42b15a76918398831325518799dd758011aaf465..23b36b89096417d42df650aeef016987ce3c03b4 100644 (file)
@@ -328,15 +328,20 @@ libcfs_debug_str2mask(int *mask, const char *str, int is_subsys)
  */
 void libcfs_debug_dumplog_internal(void *arg)
 {
+       static time64_t last_dump_time;
+       time64_t current_time;
        void *journal_info;
 
        journal_info = current->journal_info;
        current->journal_info = NULL;
+       current_time = ktime_get_real_seconds();
 
-       if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) != 0) {
+       if (strncmp(libcfs_debug_file_path_arr, "NONE", 4) &&
+           current_time > last_dump_time) {
+               last_dump_time = current_time;
                snprintf(debug_file_name, sizeof(debug_file_name) - 1,
                         "%s.%lld.%ld", libcfs_debug_file_path_arr,
-                        (s64)ktime_get_real_seconds(), (long_ptr_t)arg);
+                        (s64)current_time, (long_ptr_t)arg);
                pr_alert("LustreError: dumping log to %s\n", debug_file_name);
                cfs_tracefile_dump_all_pages(debug_file_name);
                libcfs_run_debug_log_upcall(debug_file_name);
index 9288ee08d1f724874dcc18f6f5a869c45f04edab..e4b1a0a86eae3a4941de57b4692a6e1c34e4ccd9 100644 (file)
@@ -90,8 +90,10 @@ int __cfs_fail_check_set(__u32 id, __u32 value, int set)
                }
        }
 
-       if ((set == CFS_FAIL_LOC_ORSET || set == CFS_FAIL_LOC_RESET) &&
-           (value & CFS_FAIL_ONCE))
+       /* Take into account the current call for FAIL_ONCE for ORSET only,
+        * as RESET is a new fail_loc, it does not change the current call
+        */
+       if ((set == CFS_FAIL_LOC_ORSET) && (value & CFS_FAIL_ONCE))
                set_bit(CFS_FAIL_ONCE_BIT, &cfs_fail_loc);
        /* Lost race to set CFS_FAILED_BIT. */
        if (test_and_set_bit(CFS_FAILED_BIT, &cfs_fail_loc)) {
index fc697cdfcdaf678ab55704acf263375486da840f..56a614d7713b1d81afd12974034b3f62caa8120e 100644 (file)
@@ -229,8 +229,6 @@ cfs_str2num_check(char *str, int nob, unsigned *num,
        char *endp, cache;
        int rc;
 
-       str = cfs_trimwhite(str);
-
        /**
         * kstrouint can only handle strings composed
         * of only numbers. We need to scan the string
index 5c0116ade90949caa46e2c077cfec870e39b7b3e..7f56d2c9dd001bda96d2beda6d2c10e0b7649786 100644 (file)
@@ -95,8 +95,8 @@ static int cfs_crypto_hash_alloc(enum cfs_crypto_hash_alg hash_alg,
                err = crypto_ahash_setkey(tfm, key, key_len);
        else if ((*type)->cht_key != 0)
                err = crypto_ahash_setkey(tfm,
-                                        (unsigned char *)&((*type)->cht_key),
-                                        (*type)->cht_size);
+                                         (unsigned char *)&((*type)->cht_key),
+                                         (*type)->cht_size);
 
        if (err != 0) {
                ahash_request_free(*req);
index 1834bf7a27effbe2080797ff81ade09fd7581760..e0b2f16aab122737a560615a15cd54bce729d7e1 100644 (file)
@@ -134,11 +134,11 @@ lnet_md_build(lnet_libmd_t *lmd, lnet_md_t *umd, int unlink)
 
                for (i = 0; i < (int)niov; i++) {
                        /* We take the page pointer on trust */
-                       if (lmd->md_iov.kiov[i].kiov_offset +
-                           lmd->md_iov.kiov[i].kiov_len > PAGE_SIZE)
+                       if (lmd->md_iov.kiov[i].bv_offset +
+                           lmd->md_iov.kiov[i].bv_len > PAGE_SIZE)
                                return -EINVAL; /* invalid length */
 
-                       total_length += lmd->md_iov.kiov[i].kiov_len;
+                       total_length += lmd->md_iov.kiov[i].bv_len;
                }
 
                lmd->md_length = total_length;
index e6d3b801d87d4d1116be7e287b62f2f633810933..f89c9fe57c6201b85b670c8f0c371747966f14d0 100644 (file)
@@ -166,25 +166,17 @@ lnet_iov_nob(unsigned int niov, struct kvec *iov)
 EXPORT_SYMBOL(lnet_iov_nob);
 
 void
-lnet_copy_iov2iov(unsigned int ndiov, struct kvec *diov, unsigned int doffset,
-                 unsigned int nsiov, struct kvec *siov, unsigned int soffset,
-                 unsigned int nob)
+lnet_copy_iov2iter(struct iov_iter *to,
+                  unsigned int nsiov, const struct kvec *siov,
+                  unsigned int soffset, unsigned int nob)
 {
        /* NB diov, siov are READ-ONLY */
-       unsigned int this_nob;
+       const char *s;
+       size_t left;
 
        if (!nob)
                return;
 
-       /* skip complete frags before 'doffset' */
-       LASSERT(ndiov > 0);
-       while (doffset >= diov->iov_len) {
-               doffset -= diov->iov_len;
-               diov++;
-               ndiov--;
-               LASSERT(ndiov > 0);
-       }
-
        /* skip complete frags before 'soffset' */
        LASSERT(nsiov > 0);
        while (soffset >= siov->iov_len) {
@@ -194,39 +186,68 @@ lnet_copy_iov2iov(unsigned int ndiov, struct kvec *diov, unsigned int doffset,
                LASSERT(nsiov > 0);
        }
 
+       s = (char *)siov->iov_base + soffset;
+       left = siov->iov_len - soffset;
        do {
-               LASSERT(ndiov > 0);
+               size_t n, copy = left;
                LASSERT(nsiov > 0);
-               this_nob = min(diov->iov_len - doffset,
-                              siov->iov_len - soffset);
-               this_nob = min(this_nob, nob);
 
-               memcpy((char *)diov->iov_base + doffset,
-                      (char *)siov->iov_base + soffset, this_nob);
-               nob -= this_nob;
+               if (copy > nob)
+                       copy = nob;
+               n = copy_to_iter(s, copy, to);
+               if (n != copy)
+                       return;
+               nob -= n;
 
-               if (diov->iov_len > doffset + this_nob) {
-                       doffset += this_nob;
-               } else {
-                       diov++;
-                       ndiov--;
-                       doffset = 0;
-               }
+               siov++;
+               s = (char *)siov->iov_base;
+               left = siov->iov_len;
+               nsiov--;
+       } while (nob > 0);
+}
+EXPORT_SYMBOL(lnet_copy_iov2iter);
 
-               if (siov->iov_len > soffset + this_nob) {
-                       soffset += this_nob;
-               } else {
-                       siov++;
-                       nsiov--;
-                       soffset = 0;
-               }
+void
+lnet_copy_kiov2iter(struct iov_iter *to,
+                   unsigned int nsiov, const lnet_kiov_t *siov,
+                   unsigned int soffset, unsigned int nob)
+{
+       if (!nob)
+               return;
+
+       LASSERT(!in_interrupt());
+
+       LASSERT(nsiov > 0);
+       while (soffset >= siov->bv_len) {
+               soffset -= siov->bv_len;
+               siov++;
+               nsiov--;
+               LASSERT(nsiov > 0);
+       }
+
+       do {
+               size_t copy = siov->bv_len - soffset, n;
+
+               LASSERT(nsiov > 0);
+
+               if (copy > nob)
+                       copy = nob;
+               n = copy_page_to_iter(siov->bv_page,
+                                     siov->bv_offset + soffset,
+                                     copy, to);
+               if (n != copy)
+                       return;
+               nob -= n;
+               siov++;
+               nsiov--;
+               soffset = 0;
        } while (nob > 0);
 }
-EXPORT_SYMBOL(lnet_copy_iov2iov);
+EXPORT_SYMBOL(lnet_copy_kiov2iter);
 
 int
 lnet_extract_iov(int dst_niov, struct kvec *dst,
-                int src_niov, struct kvec *src,
+                int src_niov, const struct kvec *src,
                 unsigned int offset, unsigned int len)
 {
        /*
@@ -280,238 +301,15 @@ lnet_kiov_nob(unsigned int niov, lnet_kiov_t *kiov)
 
        LASSERT(!niov || kiov);
        while (niov-- > 0)
-               nob += (kiov++)->kiov_len;
+               nob += (kiov++)->bv_len;
 
        return nob;
 }
 EXPORT_SYMBOL(lnet_kiov_nob);
 
-void
-lnet_copy_kiov2kiov(unsigned int ndiov, lnet_kiov_t *diov, unsigned int doffset,
-                   unsigned int nsiov, lnet_kiov_t *siov, unsigned int soffset,
-                   unsigned int nob)
-{
-       /* NB diov, siov are READ-ONLY */
-       unsigned int this_nob;
-       char *daddr = NULL;
-       char *saddr = NULL;
-
-       if (!nob)
-               return;
-
-       LASSERT(!in_interrupt());
-
-       LASSERT(ndiov > 0);
-       while (doffset >= diov->kiov_len) {
-               doffset -= diov->kiov_len;
-               diov++;
-               ndiov--;
-               LASSERT(ndiov > 0);
-       }
-
-       LASSERT(nsiov > 0);
-       while (soffset >= siov->kiov_len) {
-               soffset -= siov->kiov_len;
-               siov++;
-               nsiov--;
-               LASSERT(nsiov > 0);
-       }
-
-       do {
-               LASSERT(ndiov > 0);
-               LASSERT(nsiov > 0);
-               this_nob = min(diov->kiov_len - doffset,
-                              siov->kiov_len - soffset);
-               this_nob = min(this_nob, nob);
-
-               if (!daddr)
-                       daddr = ((char *)kmap(diov->kiov_page)) +
-                               diov->kiov_offset + doffset;
-               if (!saddr)
-                       saddr = ((char *)kmap(siov->kiov_page)) +
-                               siov->kiov_offset + soffset;
-
-               /*
-                * Vanishing risk of kmap deadlock when mapping 2 pages.
-                * However in practice at least one of the kiovs will be mapped
-                * kernel pages and the map/unmap will be NOOPs
-                */
-               memcpy(daddr, saddr, this_nob);
-               nob -= this_nob;
-
-               if (diov->kiov_len > doffset + this_nob) {
-                       daddr += this_nob;
-                       doffset += this_nob;
-               } else {
-                       kunmap(diov->kiov_page);
-                       daddr = NULL;
-                       diov++;
-                       ndiov--;
-                       doffset = 0;
-               }
-
-               if (siov->kiov_len > soffset + this_nob) {
-                       saddr += this_nob;
-                       soffset += this_nob;
-               } else {
-                       kunmap(siov->kiov_page);
-                       saddr = NULL;
-                       siov++;
-                       nsiov--;
-                       soffset = 0;
-               }
-       } while (nob > 0);
-
-       if (daddr)
-               kunmap(diov->kiov_page);
-       if (saddr)
-               kunmap(siov->kiov_page);
-}
-EXPORT_SYMBOL(lnet_copy_kiov2kiov);
-
-void
-lnet_copy_kiov2iov(unsigned int niov, struct kvec *iov, unsigned int iovoffset,
-                  unsigned int nkiov, lnet_kiov_t *kiov,
-                  unsigned int kiovoffset, unsigned int nob)
-{
-       /* NB iov, kiov are READ-ONLY */
-       unsigned int this_nob;
-       char *addr = NULL;
-
-       if (!nob)
-               return;
-
-       LASSERT(!in_interrupt());
-
-       LASSERT(niov > 0);
-       while (iovoffset >= iov->iov_len) {
-               iovoffset -= iov->iov_len;
-               iov++;
-               niov--;
-               LASSERT(niov > 0);
-       }
-
-       LASSERT(nkiov > 0);
-       while (kiovoffset >= kiov->kiov_len) {
-               kiovoffset -= kiov->kiov_len;
-               kiov++;
-               nkiov--;
-               LASSERT(nkiov > 0);
-       }
-
-       do {
-               LASSERT(niov > 0);
-               LASSERT(nkiov > 0);
-               this_nob = min(iov->iov_len - iovoffset,
-                              (__kernel_size_t)kiov->kiov_len - kiovoffset);
-               this_nob = min(this_nob, nob);
-
-               if (!addr)
-                       addr = ((char *)kmap(kiov->kiov_page)) +
-                               kiov->kiov_offset + kiovoffset;
-
-               memcpy((char *)iov->iov_base + iovoffset, addr, this_nob);
-               nob -= this_nob;
-
-               if (iov->iov_len > iovoffset + this_nob) {
-                       iovoffset += this_nob;
-               } else {
-                       iov++;
-                       niov--;
-                       iovoffset = 0;
-               }
-
-               if (kiov->kiov_len > kiovoffset + this_nob) {
-                       addr += this_nob;
-                       kiovoffset += this_nob;
-               } else {
-                       kunmap(kiov->kiov_page);
-                       addr = NULL;
-                       kiov++;
-                       nkiov--;
-                       kiovoffset = 0;
-               }
-
-       } while (nob > 0);
-
-       if (addr)
-               kunmap(kiov->kiov_page);
-}
-EXPORT_SYMBOL(lnet_copy_kiov2iov);
-
-void
-lnet_copy_iov2kiov(unsigned int nkiov, lnet_kiov_t *kiov,
-                  unsigned int kiovoffset, unsigned int niov,
-                  struct kvec *iov, unsigned int iovoffset,
-                  unsigned int nob)
-{
-       /* NB kiov, iov are READ-ONLY */
-       unsigned int this_nob;
-       char *addr = NULL;
-
-       if (!nob)
-               return;
-
-       LASSERT(!in_interrupt());
-
-       LASSERT(nkiov > 0);
-       while (kiovoffset >= kiov->kiov_len) {
-               kiovoffset -= kiov->kiov_len;
-               kiov++;
-               nkiov--;
-               LASSERT(nkiov > 0);
-       }
-
-       LASSERT(niov > 0);
-       while (iovoffset >= iov->iov_len) {
-               iovoffset -= iov->iov_len;
-               iov++;
-               niov--;
-               LASSERT(niov > 0);
-       }
-
-       do {
-               LASSERT(nkiov > 0);
-               LASSERT(niov > 0);
-               this_nob = min((__kernel_size_t)kiov->kiov_len - kiovoffset,
-                              iov->iov_len - iovoffset);
-               this_nob = min(this_nob, nob);
-
-               if (!addr)
-                       addr = ((char *)kmap(kiov->kiov_page)) +
-                               kiov->kiov_offset + kiovoffset;
-
-               memcpy(addr, (char *)iov->iov_base + iovoffset, this_nob);
-               nob -= this_nob;
-
-               if (kiov->kiov_len > kiovoffset + this_nob) {
-                       addr += this_nob;
-                       kiovoffset += this_nob;
-               } else {
-                       kunmap(kiov->kiov_page);
-                       addr = NULL;
-                       kiov++;
-                       nkiov--;
-                       kiovoffset = 0;
-               }
-
-               if (iov->iov_len > iovoffset + this_nob) {
-                       iovoffset += this_nob;
-               } else {
-                       iov++;
-                       niov--;
-                       iovoffset = 0;
-               }
-       } while (nob > 0);
-
-       if (addr)
-               kunmap(kiov->kiov_page);
-}
-EXPORT_SYMBOL(lnet_copy_iov2kiov);
-
 int
 lnet_extract_kiov(int dst_niov, lnet_kiov_t *dst,
-                 int src_niov, lnet_kiov_t *src,
+                 int src_niov, const lnet_kiov_t *src,
                  unsigned int offset, unsigned int len)
 {
        /*
@@ -526,8 +324,8 @@ lnet_extract_kiov(int dst_niov, lnet_kiov_t *dst,
                return 0;                    /* no frags */
 
        LASSERT(src_niov > 0);
-       while (offset >= src->kiov_len) {      /* skip initial frags */
-               offset -= src->kiov_len;
+       while (offset >= src->bv_len) {      /* skip initial frags */
+               offset -= src->bv_len;
                src_niov--;
                src++;
                LASSERT(src_niov > 0);
@@ -538,19 +336,19 @@ lnet_extract_kiov(int dst_niov, lnet_kiov_t *dst,
                LASSERT(src_niov > 0);
                LASSERT((int)niov <= dst_niov);
 
-               frag_len = src->kiov_len - offset;
-               dst->kiov_page = src->kiov_page;
-               dst->kiov_offset = src->kiov_offset + offset;
+               frag_len = src->bv_len - offset;
+               dst->bv_page = src->bv_page;
+               dst->bv_offset = src->bv_offset + offset;
 
                if (len <= frag_len) {
-                       dst->kiov_len = len;
-                       LASSERT(dst->kiov_offset + dst->kiov_len
+                       dst->bv_len = len;
+                       LASSERT(dst->bv_offset + dst->bv_len
                                        <= PAGE_SIZE);
                        return niov;
                }
 
-               dst->kiov_len = frag_len;
-               LASSERT(dst->kiov_offset + dst->kiov_len <= PAGE_SIZE);
+               dst->bv_len = frag_len;
+               LASSERT(dst->bv_offset + dst->bv_len <= PAGE_SIZE);
 
                len -= frag_len;
                dst++;
@@ -569,6 +367,7 @@ lnet_ni_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed,
        unsigned int niov = 0;
        struct kvec *iov = NULL;
        lnet_kiov_t *kiov = NULL;
+       struct iov_iter to;
        int rc;
 
        LASSERT(!in_interrupt());
@@ -594,8 +393,14 @@ lnet_ni_recv(lnet_ni_t *ni, void *private, lnet_msg_t *msg, int delayed,
                }
        }
 
-       rc = ni->ni_lnd->lnd_recv(ni, private, msg, delayed,
-                                 niov, iov, kiov, offset, mlen, rlen);
+       if (iov) {
+               iov_iter_kvec(&to, ITER_KVEC | READ, iov, niov, mlen + offset);
+               iov_iter_advance(&to, offset);
+       } else {
+               iov_iter_bvec(&to, ITER_BVEC | READ, kiov, niov, mlen + offset);
+               iov_iter_advance(&to, offset);
+       }
+       rc = ni->ni_lnd->lnd_recv(ni, private, msg, delayed, &to, rlen);
        if (rc < 0)
                lnet_finalize(ni, msg, rc);
 }
@@ -2002,6 +1807,9 @@ lnet_parse(lnet_ni_t *ni, lnet_hdr_t *hdr, lnet_nid_t from_nid,
                       libcfs_nid2str(from_nid), libcfs_nid2str(src_nid),
                       lnet_msgtyp2str(type), rc);
                lnet_msg_free(msg);
+               if (rc == -ESHUTDOWN)
+                       /* We are shutting down. Don't do anything more */
+                       return 0;
                goto drop;
        }
 
index 910e106e221d07b2686e5ca98e9b68fdf36bf9bb..0897e588bd548e0ebc1f173975dd39cebc022396 100644 (file)
@@ -449,23 +449,7 @@ lnet_finalize(lnet_ni_t *ni, lnet_msg_t *msg, int status)
 
        if (!msg)
                return;
-#if 0
-       CDEBUG(D_WARNING, "%s msg->%s Flags:%s%s%s%s%s%s%s%s%s%s%s txp %s rxp %s\n",
-              lnet_msgtyp2str(msg->msg_type), libcfs_id2str(msg->msg_target),
-              msg->msg_target_is_router ? "t" : "",
-              msg->msg_routing ? "X" : "",
-              msg->msg_ack ? "A" : "",
-              msg->msg_sending ? "S" : "",
-              msg->msg_receiving ? "R" : "",
-              msg->msg_delayed ? "d" : "",
-              msg->msg_txcredit ? "C" : "",
-              msg->msg_peertxcredit ? "c" : "",
-              msg->msg_rtrcredit ? "F" : "",
-              msg->msg_peerrtrcredit ? "f" : "",
-              msg->msg_onactivelist ? "!" : "",
-              !msg->msg_txpeer ? "<none>" : libcfs_nid2str(msg->msg_txpeer->lp_nid),
-              !msg->msg_rxpeer ? "<none>" : libcfs_nid2str(msg->msg_rxpeer->lp_nid));
-#endif
+
        msg->msg_ev.status = status;
 
        if (msg->msg_md) {
index 891fd59401d7eedbba81e19e5939d7c7cbccb4d6..4e6dd5149b4fbb58b79f28fe69662e0f6c42ded9 100644 (file)
@@ -265,21 +265,17 @@ lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout)
        long jiffies_left = timeout * msecs_to_jiffies(MSEC_PER_SEC);
        unsigned long then;
        struct timeval tv;
+       struct kvec  iov = { .iov_base = buffer, .iov_len  = nob };
+       struct msghdr msg = {NULL,};
 
        LASSERT(nob > 0);
        /*
         * Caller may pass a zero timeout if she thinks the socket buffer is
         * empty enough to take the whole message immediately
         */
+       iov_iter_kvec(&msg.msg_iter, WRITE | ITER_KVEC, &iov, 1, nob);
        for (;;) {
-               struct kvec  iov = {
-                       .iov_base = buffer,
-                       .iov_len  = nob
-               };
-               struct msghdr msg = {
-                       .msg_flags      = !timeout ? MSG_DONTWAIT : 0
-               };
-
+               msg.msg_flags = !timeout ? MSG_DONTWAIT : 0;
                if (timeout) {
                        /* Set send timeout to remaining time */
                        jiffies_to_timeval(jiffies_left, &tv);
@@ -296,9 +292,6 @@ lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout)
                rc = kernel_sendmsg(sock, &msg, &iov, 1, nob);
                jiffies_left -= jiffies - then;
 
-               if (rc == nob)
-                       return 0;
-
                if (rc < 0)
                        return rc;
 
@@ -307,11 +300,11 @@ lnet_sock_write(struct socket *sock, void *buffer, int nob, int timeout)
                        return -ECONNABORTED;
                }
 
+               if (!msg_data_left(&msg))
+                       break;
+
                if (jiffies_left <= 0)
                        return -EAGAIN;
-
-               buffer = ((char *)buffer) + rc;
-               nob -= rc;
        }
        return 0;
 }
index 08402712a452cc697513fc2676f91659834092a2..cb213b8f51cf16303bcad470433e384e0eb2dbc1 100644 (file)
@@ -42,36 +42,23 @@ lolnd_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
 
 static int
 lolnd_recv(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
-          int delayed, unsigned int niov,
-          struct kvec *iov, lnet_kiov_t *kiov,
-          unsigned int offset, unsigned int mlen, unsigned int rlen)
+          int delayed, struct iov_iter *to, unsigned int rlen)
 {
        lnet_msg_t *sendmsg = private;
 
        if (lntmsg) {              /* not discarding */
-               if (sendmsg->msg_iov) {
-                       if (iov)
-                               lnet_copy_iov2iov(niov, iov, offset,
-                                                 sendmsg->msg_niov,
-                                                 sendmsg->msg_iov,
-                                                 sendmsg->msg_offset, mlen);
-                       else
-                               lnet_copy_iov2kiov(niov, kiov, offset,
-                                                  sendmsg->msg_niov,
-                                                  sendmsg->msg_iov,
-                                                  sendmsg->msg_offset, mlen);
-               } else {
-                       if (iov)
-                               lnet_copy_kiov2iov(niov, iov, offset,
-                                                  sendmsg->msg_niov,
-                                                  sendmsg->msg_kiov,
-                                                  sendmsg->msg_offset, mlen);
-                       else
-                               lnet_copy_kiov2kiov(niov, kiov, offset,
-                                                   sendmsg->msg_niov,
-                                                   sendmsg->msg_kiov,
-                                                   sendmsg->msg_offset, mlen);
-               }
+               if (sendmsg->msg_iov)
+                       lnet_copy_iov2iter(to,
+                                          sendmsg->msg_niov,
+                                          sendmsg->msg_iov,
+                                          sendmsg->msg_offset,
+                                          iov_iter_count(to));
+               else
+                       lnet_copy_kiov2iter(to,
+                                           sendmsg->msg_niov,
+                                           sendmsg->msg_kiov,
+                                           sendmsg->msg_offset,
+                                           iov_iter_count(to));
 
                lnet_finalize(ni, lntmsg, 0);
        }
index 063543233035c599e395407d7b964b02e952a3b3..69819c93fc0b1d5bbef186eef0bb8a204cb140b3 100644 (file)
@@ -1307,7 +1307,7 @@ lnet_destroy_rtrbuf(lnet_rtrbuf_t *rb, int npages)
        int sz = offsetof(lnet_rtrbuf_t, rb_kiov[npages]);
 
        while (--npages >= 0)
-               __free_page(rb->rb_kiov[npages].kiov_page);
+               __free_page(rb->rb_kiov[npages].bv_page);
 
        LIBCFS_FREE(rb, sz);
 }
@@ -1333,15 +1333,15 @@ lnet_new_rtrbuf(lnet_rtrbufpool_t *rbp, int cpt)
                                GFP_KERNEL | __GFP_ZERO, 0);
                if (!page) {
                        while (--i >= 0)
-                               __free_page(rb->rb_kiov[i].kiov_page);
+                               __free_page(rb->rb_kiov[i].bv_page);
 
                        LIBCFS_FREE(rb, sz);
                        return NULL;
                }
 
-               rb->rb_kiov[i].kiov_len = PAGE_SIZE;
-               rb->rb_kiov[i].kiov_offset = 0;
-               rb->rb_kiov[i].kiov_page = page;
+               rb->rb_kiov[i].bv_len = PAGE_SIZE;
+               rb->rb_kiov[i].bv_offset = 0;
+               rb->rb_kiov[i].bv_page = page;
        }
 
        return rb;
index 13d0454e7fcb3e82693195ab31bb353e45eb4004..b20c5d394e3b827bfee563015fc34ca1a075c08c 100644 (file)
@@ -226,7 +226,7 @@ brw_fill_bulk(struct srpc_bulk *bk, int pattern, __u64 magic)
        struct page *pg;
 
        for (i = 0; i < bk->bk_niov; i++) {
-               pg = bk->bk_iovs[i].kiov_page;
+               pg = bk->bk_iovs[i].bv_page;
                brw_fill_page(pg, pattern, magic);
        }
 }
@@ -238,7 +238,7 @@ brw_check_bulk(struct srpc_bulk *bk, int pattern, __u64 magic)
        struct page *pg;
 
        for (i = 0; i < bk->bk_niov; i++) {
-               pg = bk->bk_iovs[i].kiov_page;
+               pg = bk->bk_iovs[i].bv_page;
                if (brw_check_page(pg, pattern, magic)) {
                        CERROR("Bulk page %p (%d/%d) is corrupted!\n",
                               pg, i, bk->bk_niov);
index 1be3cad727aebd88b20beacb4f4f61326b8835e8..55afb53b0743a0c8c5ba2e27a0547db8dbabd5b5 100644 (file)
@@ -152,10 +152,10 @@ lstcon_rpc_put(struct lstcon_rpc *crpc)
        LASSERT(list_empty(&crpc->crp_link));
 
        for (i = 0; i < bulk->bk_niov; i++) {
-               if (!bulk->bk_iovs[i].kiov_page)
+               if (!bulk->bk_iovs[i].bv_page)
                        continue;
 
-               __free_page(bulk->bk_iovs[i].kiov_page);
+               __free_page(bulk->bk_iovs[i].bv_page);
        }
 
        srpc_client_rpc_decref(crpc->crp_rpc);
@@ -705,7 +705,7 @@ lstcon_next_id(int idx, int nkiov, lnet_kiov_t *kiov)
 
        LASSERT(i < nkiov);
 
-       pid = (lnet_process_id_packed_t *)page_address(kiov[i].kiov_page);
+       pid = (lnet_process_id_packed_t *)page_address(kiov[i].bv_page);
 
        return &pid[idx % SFW_ID_PER_PAGE];
 }
@@ -849,12 +849,11 @@ lstcon_testrpc_prep(struct lstcon_node *nd, int transop, unsigned feats,
                              min_t(int, nob, PAGE_SIZE);
                        nob -= len;
 
-                       bulk->bk_iovs[i].kiov_offset = 0;
-                       bulk->bk_iovs[i].kiov_len = len;
-                       bulk->bk_iovs[i].kiov_page =
-                               alloc_page(GFP_KERNEL);
+                       bulk->bk_iovs[i].bv_offset = 0;
+                       bulk->bk_iovs[i].bv_len = len;
+                       bulk->bk_iovs[i].bv_page = alloc_page(GFP_KERNEL);
 
-                       if (!bulk->bk_iovs[i].kiov_page) {
+                       if (!bulk->bk_iovs[i].bv_page) {
                                lstcon_rpc_put(*crpc);
                                return -ENOMEM;
                        }
index c2f121f44d3387e76e9ca68d9d9e7af9f68d09b3..abbd6287b4bd5fc9b896d2ff69b121418028bbc8 100644 (file)
@@ -784,8 +784,8 @@ sfw_add_test_instance(struct sfw_batch *tsb, struct srpc_server_rpc *rpc)
                lnet_process_id_packed_t id;
                int j;
 
-               dests = page_address(bk->bk_iovs[i / SFW_ID_PER_PAGE].kiov_page);
-               LASSERT(dests);         /* my pages are within KVM always */
+               dests = page_address(bk->bk_iovs[i / SFW_ID_PER_PAGE].bv_page);
+               LASSERT(dests);  /* my pages are within KVM always */
                id = dests[i % SFW_ID_PER_PAGE];
                if (msg->msg_magic != SRPC_MSG_MAGIC)
                        sfw_unpack_id(id);
index 3b26d6eb42409d7d59678339cb6a5e4d7fc2c513..f5619d8744ef7558137242588976d5fb41a8fde8 100644 (file)
@@ -91,9 +91,9 @@ srpc_add_bulk_page(struct srpc_bulk *bk, struct page *pg, int i, int nob)
        LASSERT(nob > 0);
        LASSERT(i >= 0 && i < bk->bk_niov);
 
-       bk->bk_iovs[i].kiov_offset = 0;
-       bk->bk_iovs[i].kiov_page = pg;
-       bk->bk_iovs[i].kiov_len = nob;
+       bk->bk_iovs[i].bv_offset = 0;
+       bk->bk_iovs[i].bv_page = pg;
+       bk->bk_iovs[i].bv_len = nob;
        return nob;
 }
 
@@ -106,7 +106,7 @@ srpc_free_bulk(struct srpc_bulk *bk)
        LASSERT(bk);
 
        for (i = 0; i < bk->bk_niov; i++) {
-               pg = bk->bk_iovs[i].kiov_page;
+               pg = bk->bk_iovs[i].bv_page;
                if (!pg)
                        break;
 
index f0efe5b9fbec4afb32ab40e1fc974c73f5dbfd35..08eaec735d6fb3b290ff4957862d2fd73335eda9 100644 (file)
  *
  * lustre/fld/fld_internal.h
  *
+ * Subsystem Description:
+ * FLD is FID Location Database, which stores where (IE, on which MDT)
+ * FIDs are located.
+ * The database is basically a record file, each record consists of a FID
+ * sequence range, MDT/OST index, and flags. The FLD for the whole FS
+ * is only stored on the sequence controller(MDT0) right now, but each target
+ * also has its local FLD, which only stores the local sequence.
+ *
+ * The FLD subsystem usually has two tasks:
+ * 1. maintain the database, i.e. when the sequence controller allocates
+ * new sequence ranges to some nodes, it will call the FLD API to insert the
+ * location information <sequence_range, node_index> in FLDB.
+ *
+ * 2. Handle requests from other nodes, i.e. if client needs to know where
+ * the FID is located, if it can not find the information in the local cache,
+ * it will send a FLD lookup RPC to the FLD service, and the FLD service will
+ * look up the FLDB entry and return the location information to client.
+ *
+ *
  * Author: Yury Umanets <umka@clusterfs.com>
  * Author: Tom WangDi <wangdi@clusterfs.com>
  */
index e59d626a15481c14a4304badf0bf86830c2538c7..ed7962e4f0794100063a9026f02b8c33cca69f2b 100644 (file)
 #include "../include/lustre_mdc.h"
 #include "fld_internal.h"
 
-/* TODO: these 3 functions are copies of flow-control code from mdc_lib.c
- * It should be common thing. The same about mdc RPC lock
- */
-static int fld_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw)
-{
-       int rc;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       rc = list_empty(&mcw->mcw_entry);
-       spin_unlock(&cli->cl_loi_list_lock);
-       return rc;
-};
-
-static void fld_enter_request(struct client_obd *cli)
-{
-       struct mdc_cache_waiter mcw;
-       struct l_wait_info lwi = { 0 };
-
-       spin_lock(&cli->cl_loi_list_lock);
-       if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-               list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters);
-               init_waitqueue_head(&mcw.mcw_waitq);
-               spin_unlock(&cli->cl_loi_list_lock);
-               l_wait_event(mcw.mcw_waitq, fld_req_avail(cli, &mcw), &lwi);
-       } else {
-               cli->cl_r_in_flight++;
-               spin_unlock(&cli->cl_loi_list_lock);
-       }
-}
-
-static void fld_exit_request(struct client_obd *cli)
-{
-       struct list_head *l, *tmp;
-       struct mdc_cache_waiter *mcw;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       cli->cl_r_in_flight--;
-       list_for_each_safe(l, tmp, &cli->cl_cache_waiters) {
-               if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-                       /* No free request slots anymore */
-                       break;
-               }
-
-               mcw = list_entry(l, struct mdc_cache_waiter, mcw_entry);
-               list_del_init(&mcw->mcw_entry);
-               cli->cl_r_in_flight++;
-               wake_up(&mcw->mcw_waitq);
-       }
-       spin_unlock(&cli->cl_loi_list_lock);
-}
-
 static int fld_rrb_hash(struct lu_client_fld *fld, u64 seq)
 {
        LASSERT(fld->lcf_count > 0);
@@ -439,9 +388,9 @@ int fld_client_rpc(struct obd_export *exp,
        req->rq_reply_portal = MDC_REPLY_PORTAL;
        ptlrpc_at_set_req_timeout(req);
 
-       fld_enter_request(&exp->exp_obd->u.cli);
+       obd_get_request_slot(&exp->exp_obd->u.cli);
        rc = ptlrpc_queue_wait(req);
-       fld_exit_request(&exp->exp_obd->u.cli);
+       obd_put_request_slot(&exp->exp_obd->u.cli);
        if (rc)
                goto out_req;
 
index 3cd4a2577d90d410801fe78c04bdda17bc59ec99..5e63a275317b227f5749e13633b5c42732072573 100644 (file)
@@ -191,6 +191,9 @@ struct cl_attr {
         * Group identifier for quota purposes.
         */
        gid_t  cat_gid;
+
+       /* nlink of the directory */
+       __u64  cat_nlink;
 };
 
 /**
@@ -320,7 +323,7 @@ struct cl_object_operations {
         *       to be used instead of newly created.
         */
        int  (*coo_page_init)(const struct lu_env *env, struct cl_object *obj,
-                               struct cl_page *page, pgoff_t index);
+                             struct cl_page *page, pgoff_t index);
        /**
         * Initialize lock slice for this layer. Called top-to-bottom through
         * every object layer when a new cl_lock is instantiated. Layer
@@ -686,17 +689,6 @@ enum cl_page_type {
        CPT_TRANSIENT,
 };
 
-/**
- * Flags maintained for every cl_page.
- */
-enum cl_page_flags {
-       /**
-        * Set when pagein completes. Used for debugging (read completes at
-        * most once for a page).
-        */
-       CPF_READ_COMPLETED = 1 << 0
-};
-
 /**
  * Fields are protected by the lock on struct page, except for atomics and
  * immutables.
@@ -711,24 +703,19 @@ struct cl_page {
        atomic_t             cp_ref;
        /** An object this page is a part of. Immutable after creation. */
        struct cl_object        *cp_obj;
-       /** List of slices. Immutable after creation. */
-       struct list_head               cp_layers;
        /** vmpage */
        struct page             *cp_vmpage;
+       /** Linkage of pages within group. Pages must be owned */
+       struct list_head         cp_batch;
+       /** List of slices. Immutable after creation. */
+       struct list_head         cp_layers;
+       /** Linkage of pages within cl_req. */
+       struct list_head         cp_flight;
        /**
         * Page state. This field is const to avoid accidental update, it is
         * modified only internally within cl_page.c. Protected by a VM lock.
         */
        const enum cl_page_state cp_state;
-       /** Linkage of pages within group. Protected by cl_page::cp_mutex. */
-       struct list_head                cp_batch;
-       /** Mutex serializing membership of a page in a batch. */
-       struct mutex            cp_mutex;
-       /** Linkage of pages within cl_req. */
-       struct list_head               cp_flight;
-       /** Transfer error. */
-       int                   cp_error;
-
        /**
         * Page type. Only CPT_TRANSIENT is used so far. Immutable after
         * creation.
@@ -740,10 +727,6 @@ struct cl_page {
         * by sub-io. Protected by a VM lock.
         */
        struct cl_io        *cp_owner;
-       /**
-        * Debug information, the task is owning the page.
-        */
-       struct task_struct      *cp_task;
        /**
         * Owning IO request in cl_page_state::CPS_PAGEOUT and
         * cl_page_state::CPS_PAGEIN states. This field is maintained only in
@@ -756,8 +739,6 @@ struct cl_page {
        struct lu_ref_link       cp_obj_ref;
        /** Link to a queue, for debugging. */
        struct lu_ref_link       cp_queue_ref;
-       /** Per-page flags from enum cl_page_flags. Protected by a VM lock. */
-       unsigned                 cp_flags;
        /** Assigned if doing a sync_io */
        struct cl_sync_io       *cp_sync_io;
 };
@@ -1056,23 +1037,32 @@ do {                                                                      \
        }                                                                    \
 } while (0)
 
-static inline int __page_in_use(const struct cl_page *page, int refc)
-{
-       if (page->cp_type == CPT_CACHEABLE)
-               ++refc;
-       LASSERT(atomic_read(&page->cp_ref) > 0);
-       return (atomic_read(&page->cp_ref) > refc);
-}
-
-#define cl_page_in_use(pg)       __page_in_use(pg, 1)
-#define cl_page_in_use_noref(pg) __page_in_use(pg, 0)
-
 static inline struct page *cl_page_vmpage(struct cl_page *page)
 {
        LASSERT(page->cp_vmpage);
        return page->cp_vmpage;
 }
 
+/**
+ * Check if a cl_page is in use.
+ *
+ * Client cache holds a refcount, this refcount will be dropped when
+ * the page is taken out of cache, see vvp_page_delete().
+ */
+static inline bool __page_in_use(const struct cl_page *page, int refc)
+{
+       return (atomic_read(&page->cp_ref) > refc + 1);
+}
+
+/**
+ * Caller itself holds a refcount of cl_page.
+ */
+#define cl_page_in_use(pg)      __page_in_use(pg, 1)
+/**
+ * Caller doesn't hold a refcount.
+ */
+#define cl_page_in_use_noref(pg) __page_in_use(pg, 0)
+
 /** @} cl_page */
 
 /** \addtogroup cl_lock cl_lock
@@ -2197,6 +2187,7 @@ static inline void cl_object_page_init(struct cl_object *clob, int size)
 {
        clob->co_slice_off = cl_object_header(clob)->coh_page_bufsize;
        cl_object_header(clob)->coh_page_bufsize += cfs_size_round(size);
+       WARN_ON(cl_object_header(clob)->coh_page_bufsize > 512);
 }
 
 static inline void *cl_object_page_slice(struct cl_object *clob,
@@ -2346,6 +2337,10 @@ struct cl_client_cache {
         * Lock to protect ccc_lru list
         */
        spinlock_t              ccc_lru_lock;
+       /**
+        * Set if unstable check is enabled
+        */
+       unsigned int            ccc_unstable_check:1;
        /**
         * # of unstable pages for this mount point
         */
@@ -2354,7 +2349,7 @@ struct cl_client_cache {
         * Waitq for awaiting unstable pages to reach zero.
         * Used at umounting time and signaled on BRW commit
         */
-        wait_queue_head_t      ccc_unstable_waitq;
+       wait_queue_head_t       ccc_unstable_waitq;
 
 };
 
index d68e60e7fef73250993ead48bec64201e38b4075..ff35e6302d05bf1d9e2bf2ba8cb06a8b9e33c20e 100644 (file)
@@ -681,6 +681,12 @@ static struct lustre_attr lustre_attr_##name = __ATTR(name, mode, show, store)
 
 extern const struct sysfs_ops lustre_sysfs_ops;
 
+struct root_squash_info;
+int lprocfs_wr_root_squash(const char *buffer, unsigned long count,
+                          struct root_squash_info *squash, char *name);
+int lprocfs_wr_nosquash_nids(const char *buffer, unsigned long count,
+                            struct root_squash_info *squash, char *name);
+
 /* all quota proc functions */
 int lprocfs_quota_rd_bunit(char *page, char **start,
                           loff_t off, int count,
index 6e25c1bb6aa316aa7e783ed9c1e9fc45aeec48b5..502bc41658c6381a909ba14819b4a05bde13208d 100644 (file)
@@ -327,7 +327,7 @@ struct lu_device_type {
        /**
         * Number of existing device type instances.
         */
-       unsigned                                ldt_device_nr;
+       atomic_t                                ldt_device_nr;
        /**
         * Linkage into a global list of all device types.
         *
@@ -673,7 +673,6 @@ void lu_object_add(struct lu_object *before, struct lu_object *o);
 
 int  lu_device_type_init(struct lu_device_type *ldt);
 void lu_device_type_fini(struct lu_device_type *ldt);
-void lu_types_stop(void);
 
 /** @} ctors */
 
@@ -1025,7 +1024,8 @@ enum lu_context_tag {
        /**
         * Contexts usable in cache shrinker thread.
         */
-       LCT_SHRINKER  = LCT_MD_THREAD|LCT_DT_THREAD|LCT_CL_THREAD|LCT_NOREF
+       LCT_SHRINKER  = LCT_MD_THREAD | LCT_DT_THREAD | LCT_CL_THREAD |
+                       LCT_NOREF
 };
 
 /**
@@ -1263,6 +1263,22 @@ struct lu_name {
        int         ln_namelen;
 };
 
+/**
+ * Validate names (path components)
+ *
+ * To be valid \a name must be non-empty, '\0' terminated of length \a
+ * name_len, and not contain '/'. The maximum length of a name (before
+ * say -ENAMETOOLONG will be returned) is really controlled by llite
+ * and the server. We only check for something insane coming from bad
+ * integer handling here.
+ */
+static inline bool lu_name_is_valid_2(const char *name, size_t name_len)
+{
+       return name && name_len > 0 && name_len < INT_MAX &&
+              name[name_len] == '\0' && strlen(name) == name_len &&
+              !memchr(name, '/', name_len);
+}
+
 /**
  * Common buffer structure to be passed around for various xattr_{s,g}et()
  * methods.
index 051864c23b5b2e2f5124c02c547928aedb4b64bb..3a0feac5b6028b0975d7ce7376241b4421b6874f 100644 (file)
@@ -93,6 +93,7 @@
 /* Defn's shared with user-space. */
 #include "lustre_user.h"
 #include "lustre_errno.h"
+#include "../lustre_ver.h"
 
 /*
  *  GENERAL STUFF
@@ -196,12 +197,12 @@ static inline unsigned fld_range_type(const struct lu_seq_range *range)
        return range->lsr_flags & LU_SEQ_RANGE_MASK;
 }
 
-static inline int fld_range_is_ost(const struct lu_seq_range *range)
+static inline bool fld_range_is_ost(const struct lu_seq_range *range)
 {
        return fld_range_type(range) == LU_SEQ_RANGE_OST;
 }
 
-static inline int fld_range_is_mdt(const struct lu_seq_range *range)
+static inline bool fld_range_is_mdt(const struct lu_seq_range *range)
 {
        return fld_range_type(range) == LU_SEQ_RANGE_MDT;
 }
@@ -260,23 +261,23 @@ static inline void range_init(struct lu_seq_range *range)
  * check if given seq id \a s is within given range \a r
  */
 
-static inline int range_within(const struct lu_seq_range *range,
-                              __u64 s)
+static inline bool range_within(const struct lu_seq_range *range,
+                               __u64 s)
 {
        return s >= range->lsr_start && s < range->lsr_end;
 }
 
-static inline int range_is_sane(const struct lu_seq_range *range)
+static inline bool range_is_sane(const struct lu_seq_range *range)
 {
        return (range->lsr_end >= range->lsr_start);
 }
 
-static inline int range_is_zero(const struct lu_seq_range *range)
+static inline bool range_is_zero(const struct lu_seq_range *range)
 {
        return (range->lsr_start == 0 && range->lsr_end == 0);
 }
 
-static inline int range_is_exhausted(const struct lu_seq_range *range)
+static inline bool range_is_exhausted(const struct lu_seq_range *range)
 
 {
        return range_space(range) == 0;
@@ -437,69 +438,69 @@ enum dot_lustre_oid {
        FID_OID_DOT_LUSTRE_OBF = 2UL,
 };
 
-static inline int fid_seq_is_mdt0(__u64 seq)
+static inline bool fid_seq_is_mdt0(__u64 seq)
 {
        return (seq == FID_SEQ_OST_MDT0);
 }
 
-static inline int fid_seq_is_mdt(const __u64 seq)
+static inline bool fid_seq_is_mdt(__u64 seq)
 {
        return seq == FID_SEQ_OST_MDT0 || seq >= FID_SEQ_NORMAL;
 };
 
-static inline int fid_seq_is_echo(__u64 seq)
+static inline bool fid_seq_is_echo(__u64 seq)
 {
        return (seq == FID_SEQ_ECHO);
 }
 
-static inline int fid_is_echo(const struct lu_fid *fid)
+static inline bool fid_is_echo(const struct lu_fid *fid)
 {
        return fid_seq_is_echo(fid_seq(fid));
 }
 
-static inline int fid_seq_is_llog(__u64 seq)
+static inline bool fid_seq_is_llog(__u64 seq)
 {
        return (seq == FID_SEQ_LLOG);
 }
 
-static inline int fid_is_llog(const struct lu_fid *fid)
+static inline bool fid_is_llog(const struct lu_fid *fid)
 {
        /* file with OID == 0 is not llog but contains last oid */
        return fid_seq_is_llog(fid_seq(fid)) && fid_oid(fid) > 0;
 }
 
-static inline int fid_seq_is_rsvd(const __u64 seq)
+static inline bool fid_seq_is_rsvd(__u64 seq)
 {
        return (seq > FID_SEQ_OST_MDT0 && seq <= FID_SEQ_RSVD);
 };
 
-static inline int fid_seq_is_special(const __u64 seq)
+static inline bool fid_seq_is_special(__u64 seq)
 {
        return seq == FID_SEQ_SPECIAL;
 };
 
-static inline int fid_seq_is_local_file(const __u64 seq)
+static inline bool fid_seq_is_local_file(__u64 seq)
 {
        return seq == FID_SEQ_LOCAL_FILE ||
               seq == FID_SEQ_LOCAL_NAME;
 };
 
-static inline int fid_seq_is_root(const __u64 seq)
+static inline bool fid_seq_is_root(__u64 seq)
 {
        return seq == FID_SEQ_ROOT;
 }
 
-static inline int fid_seq_is_dot(const __u64 seq)
+static inline bool fid_seq_is_dot(__u64 seq)
 {
        return seq == FID_SEQ_DOT_LUSTRE;
 }
 
-static inline int fid_seq_is_default(const __u64 seq)
+static inline bool fid_seq_is_default(__u64 seq)
 {
        return seq == FID_SEQ_LOV_DEFAULT;
 }
 
-static inline int fid_is_mdt0(const struct lu_fid *fid)
+static inline bool fid_is_mdt0(const struct lu_fid *fid)
 {
        return fid_seq_is_mdt0(fid_seq(fid));
 }
@@ -516,12 +517,12 @@ static inline void lu_root_fid(struct lu_fid *fid)
  * \param fid the fid to be tested.
  * \return true if the fid is a igif; otherwise false.
  */
-static inline int fid_seq_is_igif(const __u64 seq)
+static inline bool fid_seq_is_igif(__u64 seq)
 {
        return seq >= FID_SEQ_IGIF && seq <= FID_SEQ_IGIF_MAX;
 }
 
-static inline int fid_is_igif(const struct lu_fid *fid)
+static inline bool fid_is_igif(const struct lu_fid *fid)
 {
        return fid_seq_is_igif(fid_seq(fid));
 }
@@ -531,27 +532,27 @@ static inline int fid_is_igif(const struct lu_fid *fid)
  * \param fid the fid to be tested.
  * \return true if the fid is a idif; otherwise false.
  */
-static inline int fid_seq_is_idif(const __u64 seq)
+static inline bool fid_seq_is_idif(__u64 seq)
 {
        return seq >= FID_SEQ_IDIF && seq <= FID_SEQ_IDIF_MAX;
 }
 
-static inline int fid_is_idif(const struct lu_fid *fid)
+static inline bool fid_is_idif(const struct lu_fid *fid)
 {
        return fid_seq_is_idif(fid_seq(fid));
 }
 
-static inline int fid_is_local_file(const struct lu_fid *fid)
+static inline bool fid_is_local_file(const struct lu_fid *fid)
 {
        return fid_seq_is_local_file(fid_seq(fid));
 }
 
-static inline int fid_seq_is_norm(const __u64 seq)
+static inline bool fid_seq_is_norm(__u64 seq)
 {
        return (seq >= FID_SEQ_NORMAL);
 }
 
-static inline int fid_is_norm(const struct lu_fid *fid)
+static inline bool fid_is_norm(const struct lu_fid *fid)
 {
        return fid_seq_is_norm(fid_seq(fid));
 }
@@ -658,7 +659,7 @@ static inline void ostid_set_id(struct ost_id *oi, __u64 oid)
                oi->oi_fid.f_oid = oid;
                oi->oi_fid.f_ver = oid >> 48;
        } else {
-               if (oid > OBIF_MAX_OID) {
+               if (oid >= OBIF_MAX_OID) {
                        CERROR("Bad %llu to set " DOSTID "\n", oid, POSTID(oi));
                        return;
                }
@@ -683,7 +684,7 @@ static inline int fid_set_id(struct lu_fid *fid, __u64 oid)
                fid->f_oid = oid;
                fid->f_ver = oid >> 48;
        } else {
-               if (oid > OBIF_MAX_OID) {
+               if (oid >= OBIF_MAX_OID) {
                        CERROR("Too large OID %#llx to set REG "DFID"\n",
                               (unsigned long long)oid, PFID(fid));
                        return -EBADF;
@@ -769,7 +770,7 @@ static inline int fid_to_ostid(const struct lu_fid *fid, struct ost_id *ostid)
 }
 
 /* Check whether the fid is for LAST_ID */
-static inline int fid_is_last_id(const struct lu_fid *fid)
+static inline bool fid_is_last_id(const struct lu_fid *fid)
 {
        return (fid_oid(fid) == 0);
 }
@@ -838,7 +839,7 @@ static inline void fid_be_to_cpu(struct lu_fid *dst, const struct lu_fid *src)
        dst->f_ver = be32_to_cpu(fid_ver(src));
 }
 
-static inline int fid_is_sane(const struct lu_fid *fid)
+static inline bool fid_is_sane(const struct lu_fid *fid)
 {
        return fid &&
               ((fid_seq(fid) >= FID_SEQ_START && fid_ver(fid) == 0) ||
@@ -846,15 +847,10 @@ static inline int fid_is_sane(const struct lu_fid *fid)
                fid_seq_is_rsvd(fid_seq(fid)));
 }
 
-static inline int fid_is_zero(const struct lu_fid *fid)
-{
-       return fid_seq(fid) == 0 && fid_oid(fid) == 0;
-}
-
 void lustre_swab_lu_fid(struct lu_fid *fid);
 void lustre_swab_lu_seq_range(struct lu_seq_range *range);
 
-static inline int lu_fid_eq(const struct lu_fid *f0, const struct lu_fid *f1)
+static inline bool lu_fid_eq(const struct lu_fid *f0, const struct lu_fid *f1)
 {
        return memcmp(f0, f1, sizeof(*f0)) == 0;
 }
@@ -1033,7 +1029,7 @@ static inline int lu_dirent_calc_size(int namelen, __u16 attr)
        return (size + 7) & ~7;
 }
 
-static inline int lu_dirent_size(struct lu_dirent *ent)
+static inline int lu_dirent_size(const struct lu_dirent *ent)
 {
        if (le16_to_cpu(ent->lde_reclen) == 0) {
                return lu_dirent_calc_size(le16_to_cpu(ent->lde_namelen),
@@ -1067,19 +1063,19 @@ struct lustre_handle {
 
 #define DEAD_HANDLE_MAGIC 0xdeadbeefcafebabeULL
 
-static inline int lustre_handle_is_used(struct lustre_handle *lh)
+static inline bool lustre_handle_is_used(const struct lustre_handle *lh)
 {
        return lh->cookie != 0ull;
 }
 
-static inline int lustre_handle_equal(const struct lustre_handle *lh1,
-                                     const struct lustre_handle *lh2)
+static inline bool lustre_handle_equal(const struct lustre_handle *lh1,
+                                      const struct lustre_handle *lh2)
 {
        return lh1->cookie == lh2->cookie;
 }
 
 static inline void lustre_handle_copy(struct lustre_handle *tgt,
-                                     struct lustre_handle *src)
+                                     const struct lustre_handle *src)
 {
        tgt->cookie = src->cookie;
 }
@@ -1293,6 +1289,9 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
 #define OBD_CONNECT_OPEN_BY_FID        0x20000000000000ULL     /* open by fid won't pack
                                                         * name in request
                                                         */
+#define OBD_CONNECT_LFSCK      0x40000000000000ULL/* support online LFSCK */
+#define OBD_CONNECT_UNLINK_CLOSE 0x100000000000000ULL/* close file in unlink */
+#define OBD_CONNECT_DIR_STRIPE  0x400000000000000ULL/* striped DNE dir */
 
 /* XXX README XXX:
  * Please DO NOT add flag values here before first ensuring that this same
@@ -1318,14 +1317,6 @@ void lustre_swab_ptlrpc_body(struct ptlrpc_body *pb);
 #define CLIENT_CONNECT_MDT_REQD (OBD_CONNECT_IBITS | OBD_CONNECT_FID | \
                                 OBD_CONNECT_FULL20)
 
-#define OBD_OCD_VERSION(major, minor, patch, fix) (((major)<<24) + \
-                                                 ((minor)<<16) + \
-                                                 ((patch)<<8) + (fix))
-#define OBD_OCD_VERSION_MAJOR(version) ((int)((version)>>24)&255)
-#define OBD_OCD_VERSION_MINOR(version) ((int)((version)>>16)&255)
-#define OBD_OCD_VERSION_PATCH(version) ((int)((version)>>8)&255)
-#define OBD_OCD_VERSION_FIX(version)   ((int)(version)&255)
-
 /* This structure is used for both request and reply.
  *
  * If we eventually have separate connect data for different types, which we
@@ -1478,10 +1469,21 @@ enum obdo_flags {
        OBD_FL_LOCAL_MASK   = 0xF0000000,
 };
 
-#define LOV_MAGIC_V1      0x0BD10BD0
-#define LOV_MAGIC       LOV_MAGIC_V1
-#define LOV_MAGIC_JOIN_V1 0x0BD20BD0
-#define LOV_MAGIC_V3      0x0BD30BD0
+/*
+ * All LOV EA magics should have the same postfix, if some new version
+ * Lustre instroduces new LOV EA magic, then when down-grade to an old
+ * Lustre, even though the old version system does not recognizes such
+ * new magic, it still can distinguish the corrupted cases by checking
+ * the magic's postfix.
+ */
+#define LOV_MAGIC_MAGIC 0x0BD0
+#define LOV_MAGIC_MASK  0xFFFF
+
+#define LOV_MAGIC_V1           (0x0BD10000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_JOIN_V1      (0x0BD20000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_V3           (0x0BD30000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC_MIGRATE      (0x0BD40000 | LOV_MAGIC_MAGIC)
+#define LOV_MAGIC              LOV_MAGIC_V1
 
 /*
  * magic for fully defined striping
@@ -1498,14 +1500,6 @@ enum obdo_flags {
 #define LOV_MAGIC_V1_DEF  0x0CD10BD0
 #define LOV_MAGIC_V3_DEF  0x0CD30BD0
 
-#define LOV_PATTERN_RAID0      0x001   /* stripes are used round-robin */
-#define LOV_PATTERN_RAID1      0x002   /* stripes are mirrors of each other */
-#define LOV_PATTERN_FIRST      0x100   /* first stripe is not in round-robin */
-#define LOV_PATTERN_CMOBD      0x200
-
-#define LOV_PATTERN_F_MASK     0xffff0000
-#define LOV_PATTERN_F_RELEASED 0x80000000 /* HSM released file */
-
 #define lov_pattern(pattern)           (pattern & ~LOV_PATTERN_F_MASK)
 #define lov_pattern_flags(pattern)     (pattern & LOV_PATTERN_F_MASK)
 
@@ -1569,25 +1563,25 @@ static inline void lmm_oi_set_id(struct ost_id *oi, __u64 oid)
        oi->oi.oi_id = oid;
 }
 
-static inline __u64 lmm_oi_id(struct ost_id *oi)
+static inline __u64 lmm_oi_id(const struct ost_id *oi)
 {
        return oi->oi.oi_id;
 }
 
-static inline __u64 lmm_oi_seq(struct ost_id *oi)
+static inline __u64 lmm_oi_seq(const struct ost_id *oi)
 {
        return oi->oi.oi_seq;
 }
 
 static inline void lmm_oi_le_to_cpu(struct ost_id *dst_oi,
-                                   struct ost_id *src_oi)
+                                   const struct ost_id *src_oi)
 {
        dst_oi->oi.oi_id = le64_to_cpu(src_oi->oi.oi_id);
        dst_oi->oi.oi_seq = le64_to_cpu(src_oi->oi.oi_seq);
 }
 
 static inline void lmm_oi_cpu_to_le(struct ost_id *dst_oi,
-                                   struct ost_id *src_oi)
+                                   const struct ost_id *src_oi)
 {
        dst_oi->oi.oi_id = cpu_to_le64(src_oi->oi.oi_id);
        dst_oi->oi.oi_seq = cpu_to_le64(src_oi->oi.oi_seq);
@@ -1610,6 +1604,7 @@ static inline void lmm_oi_cpu_to_le(struct ost_id *dst_oi,
 #define XATTR_NAME_LOV   "trusted.lov"
 #define XATTR_NAME_LMA   "trusted.lma"
 #define XATTR_NAME_LMV   "trusted.lmv"
+#define XATTR_NAME_DEFAULT_LMV "trusted.dmv"
 #define XATTR_NAME_LINK         "trusted.link"
 #define XATTR_NAME_FID   "trusted.fid"
 #define XATTR_NAME_VERSION      "trusted.version"
@@ -1727,6 +1722,8 @@ lov_mds_md_max_stripe_count(size_t buf_size, __u32 lmm_magic)
 #define OBD_MD_FLDATAVERSION (0x0010000000000000ULL) /* iversion sum */
 #define OBD_MD_FLRELEASED    (0x0020000000000000ULL) /* file released */
 
+#define OBD_MD_DEFAULT_MEA   (0x0040000000000000ULL) /* default MEA */
+
 #define OBD_MD_FLGETATTR (OBD_MD_FLID    | OBD_MD_FLATIME | OBD_MD_FLMTIME | \
                          OBD_MD_FLCTIME | OBD_MD_FLSIZE  | OBD_MD_FLBLKSZ | \
                          OBD_MD_FLMODE  | OBD_MD_FLTYPE  | OBD_MD_FLUID   | \
@@ -1782,7 +1779,7 @@ void lustre_swab_obd_statfs(struct obd_statfs *os);
                                      * it to sync quickly
                                      */
 
-#define OBD_OBJECT_EOF 0xffffffffffffffffULL
+#define OBD_OBJECT_EOF LUSTRE_EOF
 
 #define OST_MIN_PRECREATE 32
 #define OST_MAX_PRECREATE 20000
@@ -1878,12 +1875,6 @@ struct obd_quotactl {
 
 void lustre_swab_obd_quotactl(struct obd_quotactl *q);
 
-#define Q_QUOTACHECK   0x800100 /* deprecated as of 2.4 */
-#define Q_INITQUOTA    0x800101 /* deprecated as of 2.4  */
-#define Q_GETOINFO     0x800102 /* get obd quota info */
-#define Q_GETOQUOTA    0x800103 /* get obd quotas */
-#define Q_FINVALIDATE  0x800104 /* deprecated as of 2.4 */
-
 #define Q_COPY(out, in, member) (out)->member = (in)->member
 
 #define QCTL_COPY(out, in)             \
@@ -1946,8 +1937,8 @@ enum mds_cmd {
        MDS_DISCONNECT          = 39,
        MDS_GETSTATUS           = 40,
        MDS_STATFS              = 41,
-       MDS_PIN                 = 42,
-       MDS_UNPIN               = 43,
+       MDS_PIN                 = 42, /* obsolete, never used in a release */
+       MDS_UNPIN               = 43, /* obsolete, never used in a release */
        MDS_SYNC                = 44,
        MDS_DONE_WRITING        = 45,
        MDS_SET_INFO            = 46,
@@ -1956,7 +1947,7 @@ enum mds_cmd {
        MDS_GETXATTR            = 49,
        MDS_SETXATTR            = 50, /* obsolete, now it's MDS_REINT op */
        MDS_WRITEPAGE           = 51,
-       MDS_IS_SUBDIR           = 52,
+       MDS_IS_SUBDIR           = 52, /* obsolete, never used in a release */
        MDS_GET_INFO            = 53,
        MDS_HSM_STATE_GET       = 54,
        MDS_HSM_STATE_SET       = 55,
@@ -1984,7 +1975,7 @@ enum mdt_reint_cmd {
        REINT_OPEN     = 6,
        REINT_SETXATTR = 7,
        REINT_RMENTRY  = 8,
-/*      REINT_WRITE    = 9, */
+       REINT_MIGRATE  = 9,
        REINT_MAX
 };
 
@@ -2028,7 +2019,7 @@ void lustre_swab_generic_32s(__u32 *val);
 
 #define MDS_INODELOCK_MAXSHIFT 5
 /* This FULL lock is useful to take on unlink sort of operations */
-#define MDS_INODELOCK_FULL ((1<<(MDS_INODELOCK_MAXSHIFT+1))-1)
+#define MDS_INODELOCK_FULL ((1 << (MDS_INODELOCK_MAXSHIFT + 1)) - 1)
 
 /* NOTE: until Lustre 1.8.7/2.1.1 the fid_ver() was packed into name[2],
  * but was moved into name[1] along with the OID to avoid consuming the
@@ -2108,43 +2099,43 @@ enum md_transient_state {
 };
 
 struct mdt_body {
-       struct lu_fid  fid1;
-       struct lu_fid  fid2;
-       struct lustre_handle handle;
-       __u64     valid;
-       __u64     size;   /* Offset, in the case of MDS_READPAGE */
-       __s64     mtime;
-       __s64     atime;
-       __s64     ctime;
-       __u64     blocks; /* XID, in the case of MDS_READPAGE */
-       __u64     ioepoch;
-       __u64     t_state; /* transient file state defined in
-                           * enum md_transient_state
-                           * was "ino" until 2.4.0
-                           */
-       __u32     fsuid;
-       __u32     fsgid;
-       __u32     capability;
-       __u32     mode;
-       __u32     uid;
-       __u32     gid;
-       __u32     flags; /* from vfs for pin/unpin, LUSTRE_BFLAG close */
-       __u32     rdev;
-       __u32     nlink; /* #bytes to read in the case of MDS_READPAGE */
-       __u32     unused2; /* was "generation" until 2.4.0 */
-       __u32     suppgid;
-       __u32     eadatasize;
-       __u32     aclsize;
-       __u32     max_mdsize;
-       __u32     max_cookiesize;
-       __u32     uid_h; /* high 32-bits of uid, for FUID */
-       __u32     gid_h; /* high 32-bits of gid, for FUID */
-       __u32     padding_5; /* also fix lustre_swab_mdt_body */
-       __u64     padding_6;
-       __u64     padding_7;
-       __u64     padding_8;
-       __u64     padding_9;
-       __u64     padding_10;
+       struct lu_fid mbo_fid1;
+       struct lu_fid mbo_fid2;
+       struct lustre_handle mbo_handle;
+       __u64   mbo_valid;
+       __u64   mbo_size;       /* Offset, in the case of MDS_READPAGE */
+       __s64   mbo_mtime;
+       __s64   mbo_atime;
+       __s64   mbo_ctime;
+       __u64   mbo_blocks;     /* XID, in the case of MDS_READPAGE */
+       __u64   mbo_ioepoch;
+       __u64   mbo_t_state;    /* transient file state defined in
+                                * enum md_transient_state
+                                * was "ino" until 2.4.0
+                                */
+       __u32   mbo_fsuid;
+       __u32   mbo_fsgid;
+       __u32   mbo_capability;
+       __u32   mbo_mode;
+       __u32   mbo_uid;
+       __u32   mbo_gid;
+       __u32   mbo_flags;
+       __u32   mbo_rdev;
+       __u32   mbo_nlink;      /* #bytes to read in the case of MDS_READPAGE */
+       __u32   mbo_unused2;    /* was "generation" until 2.4.0 */
+       __u32   mbo_suppgid;
+       __u32   mbo_eadatasize;
+       __u32   mbo_aclsize;
+       __u32   mbo_max_mdsize;
+       __u32   mbo_max_cookiesize;
+       __u32   mbo_uid_h;      /* high 32-bits of uid, for FUID */
+       __u32   mbo_gid_h;      /* high 32-bits of gid, for FUID */
+       __u32   mbo_padding_5;  /* also fix lustre_swab_mdt_body */
+       __u64   mbo_padding_6;
+       __u64   mbo_padding_7;
+       __u64   mbo_padding_8;
+       __u64   mbo_padding_9;
+       __u64   mbo_padding_10;
 }; /* 216 */
 
 void lustre_swab_mdt_body(struct mdt_body *b);
@@ -2263,6 +2254,11 @@ void lustre_swab_mdt_rec_setattr(struct mdt_rec_setattr *sa);
                                              */
 #define MDS_OPEN_RELEASE   02000000000000ULL /* Open the file for HSM release */
 
+#define MDS_OPEN_FL_INTERNAL (MDS_OPEN_HAS_EA | MDS_OPEN_HAS_OBJS |    \
+                             MDS_OPEN_OWNEROVERRIDE | MDS_OPEN_LOCK |  \
+                             MDS_OPEN_BY_FID | MDS_OPEN_LEASE |        \
+                             MDS_OPEN_RELEASE)
+
 enum mds_op_bias {
        MDS_CHECK_SPLIT         = 1 << 0,
        MDS_CROSS_REF           = 1 << 1,
@@ -2277,6 +2273,7 @@ enum mds_op_bias {
        MDS_CREATE_VOLATILE     = 1 << 10,
        MDS_OWNEROVERRIDE       = 1 << 11,
        MDS_HSM_RELEASE         = 1 << 12,
+       MDS_RENAME_MIGRATE      = BIT(13),
 };
 
 /* instance of mdt_reint_rec */
@@ -2472,7 +2469,7 @@ struct lmv_desc {
        __u32 ld_tgt_count;             /* how many MDS's */
        __u32 ld_active_tgt_count;       /* how many active */
        __u32 ld_default_stripe_count;     /* how many objects are used */
-       __u32 ld_pattern;                 /* default MEA_MAGIC_* */
+       __u32 ld_pattern;                 /* default hash pattern */
        __u64 ld_default_hash_size;
        __u64 ld_padding_1;             /* also fix lustre_swab_lmv_desc */
        __u32 ld_padding_2;             /* also fix lustre_swab_lmv_desc */
@@ -2482,23 +2479,129 @@ struct lmv_desc {
        struct obd_uuid ld_uuid;
 };
 
-/* TODO: lmv_stripe_md should contain mds capabilities for all slave fids */
-struct lmv_stripe_md {
-       __u32    mea_magic;
-       __u32    mea_count;
-       __u32    mea_master;
-       __u32    mea_padding;
-       char      mea_pool_name[LOV_MAXPOOLNAME];
-       struct lu_fid mea_ids[0];
+/* LMV layout EA, and it will be stored both in master and slave object */
+struct lmv_mds_md_v1 {
+       __u32 lmv_magic;
+       __u32 lmv_stripe_count;
+       __u32 lmv_master_mdt_index;     /* On master object, it is master
+                                        * MDT index, on slave object, it
+                                        * is stripe index of the slave obj
+                                        */
+       __u32 lmv_hash_type;            /* dir stripe policy, i.e. indicate
+                                        * which hash function to be used,
+                                        * Note: only lower 16 bits is being
+                                        * used for now. Higher 16 bits will
+                                        * be used to mark the object status,
+                                        * for example migrating or dead.
+                                        */
+       __u32 lmv_layout_version;       /* Used for directory restriping */
+       __u32 lmv_padding1;
+       __u64 lmv_padding2;
+       __u64 lmv_padding3;
+       char lmv_pool_name[LOV_MAXPOOLNAME];    /* pool name */
+       struct lu_fid lmv_stripe_fids[0];       /* FIDs for each stripe */
+};
+
+#define LMV_MAGIC_V1    0x0CD20CD0     /* normal stripe lmv magic */
+#define LMV_MAGIC       LMV_MAGIC_V1
+
+/* #define LMV_USER_MAGIC 0x0CD30CD0 */
+#define LMV_MAGIC_STRIPE 0x0CD40CD0    /* magic for dir sub_stripe */
+
+/*
+ *Right now only the lower part(0-16bits) of lmv_hash_type is being used,
+ * and the higher part will be the flag to indicate the status of object,
+ * for example the object is being migrated. And the hash function
+ * might be interpreted differently with different flags.
+ */
+#define LMV_HASH_TYPE_MASK             0x0000ffff
+
+#define LMV_HASH_FLAG_MIGRATION                0x80000000
+#define LMV_HASH_FLAG_DEAD             0x40000000
+
+/**
+ * The FNV-1a hash algorithm is as follows:
+ *     hash = FNV_offset_basis
+ *     for each octet_of_data to be hashed
+ *             hash = hash XOR octet_of_data
+ *             hash = hash × FNV_prime
+ *     return hash
+ * http://en.wikipedia.org/wiki/Fowler–Noll–Vo_hash_function#FNV-1a_hash
+ *
+ * http://www.isthe.com/chongo/tech/comp/fnv/index.html#FNV-reference-source
+ * FNV_prime is 2^40 + 2^8 + 0xb3 = 0x100000001b3ULL
+ **/
+#define LUSTRE_FNV_1A_64_PRIME         0x100000001b3ULL
+#define LUSTRE_FNV_1A_64_OFFSET_BIAS   0xcbf29ce484222325ULL
+static inline __u64 lustre_hash_fnv_1a_64(const void *buf, size_t size)
+{
+       __u64 hash = LUSTRE_FNV_1A_64_OFFSET_BIAS;
+       const unsigned char *p = buf;
+       size_t i;
+
+       for (i = 0; i < size; i++) {
+               hash ^= p[i];
+               hash *= LUSTRE_FNV_1A_64_PRIME;
+       }
+
+       return hash;
+}
+
+union lmv_mds_md {
+       __u32                   lmv_magic;
+       struct lmv_mds_md_v1    lmv_md_v1;
+       struct lmv_user_md      lmv_user_md;
 };
 
-#define MEA_MAGIC_LAST_CHAR      0xb2221ca1
-#define MEA_MAGIC_ALL_CHARS      0xb222a11c
-#define MEA_MAGIC_HASH_SEGMENT   0xb222a11b
+void lustre_swab_lmv_mds_md(union lmv_mds_md *lmm);
 
-#define MAX_HASH_SIZE_32        0x7fffffffUL
-#define MAX_HASH_SIZE      0x7fffffffffffffffULL
-#define MAX_HASH_HIGHEST_BIT     0x1000000000000000ULL
+static inline ssize_t lmv_mds_md_size(int stripe_count, unsigned int lmm_magic)
+{
+       ssize_t len = -EINVAL;
+
+       switch (lmm_magic) {
+       case LMV_MAGIC_V1: {
+               struct lmv_mds_md_v1 *lmm1;
+
+               len = sizeof(*lmm1);
+               len += stripe_count * sizeof(lmm1->lmv_stripe_fids[0]);
+               break; }
+       default:
+               break;
+       }
+       return len;
+}
+
+static inline int lmv_mds_md_stripe_count_get(const union lmv_mds_md *lmm)
+{
+       switch (le32_to_cpu(lmm->lmv_magic)) {
+       case LMV_MAGIC_V1:
+               return le32_to_cpu(lmm->lmv_md_v1.lmv_stripe_count);
+       case LMV_USER_MAGIC:
+               return le32_to_cpu(lmm->lmv_user_md.lum_stripe_count);
+       default:
+               return -EINVAL;
+       }
+}
+
+static inline int lmv_mds_md_stripe_count_set(union lmv_mds_md *lmm,
+                                             unsigned int stripe_count)
+{
+       int rc = 0;
+
+       switch (le32_to_cpu(lmm->lmv_magic)) {
+       case LMV_MAGIC_V1:
+               lmm->lmv_md_v1.lmv_stripe_count = cpu_to_le32(stripe_count);
+               break;
+       case LMV_USER_MAGIC:
+               lmm->lmv_user_md.lum_stripe_count = cpu_to_le32(stripe_count);
+               break;
+       default:
+               rc = -EINVAL;
+               break;
+       }
+       return rc;
+}
 
 enum fld_rpc_opc {
        FLD_QUERY       = 900,
@@ -2582,8 +2685,8 @@ struct ldlm_res_id {
 #define PLDLMRES(res)  (res)->lr_name.name[0], (res)->lr_name.name[1], \
                        (res)->lr_name.name[2], (res)->lr_name.name[3]
 
-static inline int ldlm_res_eq(const struct ldlm_res_id *res0,
-                             const struct ldlm_res_id *res1)
+static inline bool ldlm_res_eq(const struct ldlm_res_id *res0,
+                              const struct ldlm_res_id *res1)
 {
        return !memcmp(res0, res1, sizeof(*res0));
 }
@@ -2622,15 +2725,15 @@ struct ldlm_extent {
 
 #define LDLM_GID_ANY ((__u64)-1)
 
-static inline int ldlm_extent_overlap(struct ldlm_extent *ex1,
-                                     struct ldlm_extent *ex2)
+static inline int ldlm_extent_overlap(const struct ldlm_extent *ex1,
+                                     const struct ldlm_extent *ex2)
 {
        return (ex1->start <= ex2->end) && (ex2->start <= ex1->end);
 }
 
 /* check if @ex1 contains @ex2 */
-static inline int ldlm_extent_contain(struct ldlm_extent *ex1,
-                                     struct ldlm_extent *ex2)
+static inline int ldlm_extent_contain(const struct ldlm_extent *ex1,
+                                     const struct ldlm_extent *ex2)
 {
        return (ex1->start <= ex2->start) && (ex1->end >= ex2->end);
 }
@@ -2833,7 +2936,29 @@ enum obd_cmd {
 };
 #define OBD_FIRST_OPC OBD_PING
 
-/* catalog of log objects */
+/**
+ * llog contexts indices.
+ *
+ * There is compatibility problem with indexes below, they are not
+ * continuous and must keep their numbers for compatibility needs.
+ * See LU-5218 for details.
+ */
+enum llog_ctxt_id {
+       LLOG_CONFIG_ORIG_CTXT  =  0,
+       LLOG_CONFIG_REPL_CTXT = 1,
+       LLOG_MDS_OST_ORIG_CTXT = 2,
+       LLOG_MDS_OST_REPL_CTXT = 3, /* kept just to avoid re-assignment */
+       LLOG_SIZE_ORIG_CTXT = 4,
+       LLOG_SIZE_REPL_CTXT = 5,
+       LLOG_TEST_ORIG_CTXT = 8,
+       LLOG_TEST_REPL_CTXT = 9, /* kept just to avoid re-assignment */
+       LLOG_CHANGELOG_ORIG_CTXT = 12, /**< changelog generation on mdd */
+       LLOG_CHANGELOG_REPL_CTXT = 13, /**< changelog access on clients */
+       /* for multiple changelog consumers */
+       LLOG_CHANGELOG_USER_ORIG_CTXT = 14,
+       LLOG_AGENT_ORIG_CTXT = 15, /**< agent requests generation on cdt */
+       LLOG_MAX_CTXTS
+};
 
 /** Identifier for a single log object */
 struct llog_logid {
@@ -2939,7 +3064,7 @@ struct llog_setattr64_rec {
        __u32                   lsr_uid_h;
        __u32                   lsr_gid;
        __u32                   lsr_gid_h;
-       __u64                   lsr_padding;
+       __u64                   lsr_valid;
        struct llog_rec_tail    lsr_tail;
 } __packed;
 
@@ -2990,7 +3115,7 @@ enum agent_req_status {
        ARS_SUCCEED,
 };
 
-static inline char *agent_req_status2name(enum agent_req_status ars)
+static inline const char *agent_req_status2name(const enum agent_req_status ars)
 {
        switch (ars) {
        case ARS_WAITING:
@@ -3068,8 +3193,8 @@ struct llog_log_hdr {
        __u32              llh_cat_idx;
        /* for a catalog the first plain slot is next to it */
        struct obd_uuid  llh_tgtuuid;
-       __u32              llh_reserved[LLOG_HEADER_SIZE/sizeof(__u32) - 23];
-       __u32              llh_bitmap[LLOG_BITMAP_BYTES/sizeof(__u32)];
+       __u32              llh_reserved[LLOG_HEADER_SIZE / sizeof(__u32) - 23];
+       __u32              llh_bitmap[LLOG_BITMAP_BYTES / sizeof(__u32)];
        struct llog_rec_tail    llh_tail;
 } __packed;
 
@@ -3166,7 +3291,7 @@ struct obdo {
 #define o_cksum   o_nlink
 #define o_grant_used o_data_version
 
-static inline void lustre_set_wire_obdo(struct obd_connect_data *ocd,
+static inline void lustre_set_wire_obdo(const struct obd_connect_data *ocd,
                                        struct obdo *wobdo,
                                        const struct obdo *lobdo)
 {
@@ -3185,7 +3310,7 @@ static inline void lustre_set_wire_obdo(struct obd_connect_data *ocd,
        }
 }
 
-static inline void lustre_get_wire_obdo(struct obd_connect_data *ocd,
+static inline void lustre_get_wire_obdo(const struct obd_connect_data *ocd,
                                        struct obdo *lobdo,
                                        const struct obdo *wobdo)
 {
@@ -3284,17 +3409,17 @@ void lustre_swab_lustre_capa(struct lustre_capa *c);
 
 /** lustre_capa::lc_opc */
 enum {
-       CAPA_OPC_BODY_WRITE   = 1<<0,  /**< write object data */
-       CAPA_OPC_BODY_READ    = 1<<1,  /**< read object data */
-       CAPA_OPC_INDEX_LOOKUP = 1<<2,  /**< lookup object fid */
-       CAPA_OPC_INDEX_INSERT = 1<<3,  /**< insert object fid */
-       CAPA_OPC_INDEX_DELETE = 1<<4,  /**< delete object fid */
-       CAPA_OPC_OSS_WRITE    = 1<<5,  /**< write oss object data */
-       CAPA_OPC_OSS_READ     = 1<<6,  /**< read oss object data */
-       CAPA_OPC_OSS_TRUNC    = 1<<7,  /**< truncate oss object */
-       CAPA_OPC_OSS_DESTROY  = 1<<8,  /**< destroy oss object */
-       CAPA_OPC_META_WRITE   = 1<<9,  /**< write object meta data */
-       CAPA_OPC_META_READ    = 1<<10, /**< read object meta data */
+       CAPA_OPC_BODY_WRITE   = 1 << 0,  /**< write object data */
+       CAPA_OPC_BODY_READ    = 1 << 1,  /**< read object data */
+       CAPA_OPC_INDEX_LOOKUP = 1 << 2,  /**< lookup object fid */
+       CAPA_OPC_INDEX_INSERT = 1 << 3,  /**< insert object fid */
+       CAPA_OPC_INDEX_DELETE = 1 << 4,  /**< delete object fid */
+       CAPA_OPC_OSS_WRITE    = 1 << 5,  /**< write oss object data */
+       CAPA_OPC_OSS_READ     = 1 << 6,  /**< read oss object data */
+       CAPA_OPC_OSS_TRUNC    = 1 << 7,  /**< truncate oss object */
+       CAPA_OPC_OSS_DESTROY  = 1 << 8,  /**< destroy oss object */
+       CAPA_OPC_META_WRITE   = 1 << 9,  /**< write object meta data */
+       CAPA_OPC_META_READ    = 1 << 10, /**< read object meta data */
 };
 
 #define CAPA_OPC_OSS_RW (CAPA_OPC_OSS_READ | CAPA_OPC_OSS_WRITE)
diff --git a/drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h b/drivers/staging/lustre/lustre/include/lustre/lustre_ioctl.h
new file mode 100644 (file)
index 0000000..f3d7c94
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License version 2 for more details (a copy is included
+ * in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.gnu.org/licenses/gpl-2.0.html
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
+ * Use is subject to license terms.
+ *
+ * Copyright (c) 2011, 2015, Intel Corporation.
+ */
+#ifndef LUSTRE_IOCTL_H_
+#define LUSTRE_IOCTL_H_
+
+#include <linux/types.h>
+#include "../../../include/linux/libcfs/libcfs.h"
+#include "lustre_idl.h"
+
+#ifdef __KERNEL__
+# include <linux/ioctl.h>
+# include <linux/string.h>
+# include "../obd_support.h"
+#else /* __KERNEL__ */
+# include <malloc.h>
+# include <string.h>
+#include <libcfs/util/ioctl.h>
+#endif /* !__KERNEL__ */
+
+#if !defined(__KERNEL__) && !defined(LUSTRE_UTILS)
+# error This file is for Lustre internal use only.
+#endif
+
+enum md_echo_cmd {
+       ECHO_MD_CREATE          = 1, /* Open/Create file on MDT */
+       ECHO_MD_MKDIR           = 2, /* Mkdir on MDT */
+       ECHO_MD_DESTROY         = 3, /* Unlink file on MDT */
+       ECHO_MD_RMDIR           = 4, /* Rmdir on MDT */
+       ECHO_MD_LOOKUP          = 5, /* Lookup on MDT */
+       ECHO_MD_GETATTR         = 6, /* Getattr on MDT */
+       ECHO_MD_SETATTR         = 7, /* Setattr on MDT */
+       ECHO_MD_ALLOC_FID       = 8, /* Get FIDs from MDT */
+};
+
+#define OBD_DEV_ID 1
+#define OBD_DEV_NAME "obd"
+#define OBD_DEV_PATH "/dev/" OBD_DEV_NAME
+#define OBD_DEV_MAJOR 10
+#define OBD_DEV_MINOR 241
+
+#define OBD_IOCTL_VERSION      0x00010004
+#define OBD_DEV_BY_DEVNAME     0xffffd0de
+#define OBD_MAX_IOCTL_BUFFER   CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER
+
+struct obd_ioctl_data {
+       __u32           ioc_len;
+       __u32           ioc_version;
+
+       union {
+               __u64   ioc_cookie;
+               __u64   ioc_u64_1;
+       };
+       union {
+               __u32   ioc_conn1;
+               __u32   ioc_u32_1;
+       };
+       union {
+               __u32   ioc_conn2;
+               __u32   ioc_u32_2;
+       };
+
+       struct obdo     ioc_obdo1;
+       struct obdo     ioc_obdo2;
+
+       __u64           ioc_count;
+       __u64           ioc_offset;
+       __u32           ioc_dev;
+       __u32           ioc_command;
+
+       __u64           ioc_nid;
+       __u32           ioc_nal;
+       __u32           ioc_type;
+
+       /* buffers the kernel will treat as user pointers */
+       __u32           ioc_plen1;
+       char __user    *ioc_pbuf1;
+       __u32           ioc_plen2;
+       char __user    *ioc_pbuf2;
+
+       /* inline buffers for various arguments */
+       __u32           ioc_inllen1;
+       char           *ioc_inlbuf1;
+       __u32           ioc_inllen2;
+       char           *ioc_inlbuf2;
+       __u32           ioc_inllen3;
+       char           *ioc_inlbuf3;
+       __u32           ioc_inllen4;
+       char           *ioc_inlbuf4;
+
+       char            ioc_bulk[0];
+};
+
+struct obd_ioctl_hdr {
+       __u32           ioc_len;
+       __u32           ioc_version;
+};
+
+static inline __u32 obd_ioctl_packlen(struct obd_ioctl_data *data)
+{
+       __u32 len = cfs_size_round(sizeof(*data));
+
+       len += cfs_size_round(data->ioc_inllen1);
+       len += cfs_size_round(data->ioc_inllen2);
+       len += cfs_size_round(data->ioc_inllen3);
+       len += cfs_size_round(data->ioc_inllen4);
+
+       return len;
+}
+
+static inline int obd_ioctl_is_invalid(struct obd_ioctl_data *data)
+{
+       if (data->ioc_len > (1 << 30)) {
+               CERROR("OBD ioctl: ioc_len larger than 1<<30\n");
+               return 1;
+       }
+
+       if (data->ioc_inllen1 > (1 << 30)) {
+               CERROR("OBD ioctl: ioc_inllen1 larger than 1<<30\n");
+               return 1;
+       }
+
+       if (data->ioc_inllen2 > (1 << 30)) {
+               CERROR("OBD ioctl: ioc_inllen2 larger than 1<<30\n");
+               return 1;
+       }
+
+       if (data->ioc_inllen3 > (1 << 30)) {
+               CERROR("OBD ioctl: ioc_inllen3 larger than 1<<30\n");
+               return 1;
+       }
+
+       if (data->ioc_inllen4 > (1 << 30)) {
+               CERROR("OBD ioctl: ioc_inllen4 larger than 1<<30\n");
+               return 1;
+       }
+
+       if (data->ioc_inlbuf1 && !data->ioc_inllen1) {
+               CERROR("OBD ioctl: inlbuf1 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (data->ioc_inlbuf2 && !data->ioc_inllen2) {
+               CERROR("OBD ioctl: inlbuf2 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (data->ioc_inlbuf3 && !data->ioc_inllen3) {
+               CERROR("OBD ioctl: inlbuf3 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (data->ioc_inlbuf4 && !data->ioc_inllen4) {
+               CERROR("OBD ioctl: inlbuf4 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (data->ioc_pbuf1 && !data->ioc_plen1) {
+               CERROR("OBD ioctl: pbuf1 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (data->ioc_pbuf2 && !data->ioc_plen2) {
+               CERROR("OBD ioctl: pbuf2 pointer but 0 length\n");
+               return 1;
+       }
+
+       if (!data->ioc_pbuf1 && data->ioc_plen1) {
+               CERROR("OBD ioctl: plen1 set but NULL pointer\n");
+               return 1;
+       }
+
+       if (!data->ioc_pbuf2 && data->ioc_plen2) {
+               CERROR("OBD ioctl: plen2 set but NULL pointer\n");
+               return 1;
+       }
+
+       if (obd_ioctl_packlen(data) > data->ioc_len) {
+               CERROR("OBD ioctl: packlen exceeds ioc_len (%d > %d)\n",
+                      obd_ioctl_packlen(data), data->ioc_len);
+               return 1;
+       }
+
+       return 0;
+}
+
+#ifdef __KERNEL__
+
+int obd_ioctl_getdata(char **buf, int *len, void __user *arg);
+int obd_ioctl_popdata(void __user *arg, void *data, int len);
+
+static inline void obd_ioctl_freedata(char *buf, size_t len)
+{
+       kvfree(buf);
+}
+
+#else /* __KERNEL__ */
+
+static inline int obd_ioctl_pack(struct obd_ioctl_data *data, char **pbuf,
+                                int max_len)
+{
+       char *ptr;
+       struct obd_ioctl_data *overlay;
+
+       data->ioc_len = obd_ioctl_packlen(data);
+       data->ioc_version = OBD_IOCTL_VERSION;
+
+       if (*pbuf && data->ioc_len > max_len) {
+               fprintf(stderr, "pbuf = %p, ioc_len = %u, max_len = %d\n",
+                       *pbuf, data->ioc_len, max_len);
+               return -EINVAL;
+       }
+
+       if (!*pbuf)
+               *pbuf = malloc(data->ioc_len);
+
+       if (!*pbuf)
+               return -ENOMEM;
+
+       overlay = (struct obd_ioctl_data *)*pbuf;
+       memcpy(*pbuf, data, sizeof(*data));
+
+       ptr = overlay->ioc_bulk;
+       if (data->ioc_inlbuf1)
+               LOGL(data->ioc_inlbuf1, data->ioc_inllen1, ptr);
+
+       if (data->ioc_inlbuf2)
+               LOGL(data->ioc_inlbuf2, data->ioc_inllen2, ptr);
+
+       if (data->ioc_inlbuf3)
+               LOGL(data->ioc_inlbuf3, data->ioc_inllen3, ptr);
+
+       if (data->ioc_inlbuf4)
+               LOGL(data->ioc_inlbuf4, data->ioc_inllen4, ptr);
+
+       if (obd_ioctl_is_invalid(overlay)) {
+               fprintf(stderr, "invalid ioctl data: ioc_len = %u, max_len = %d\n",
+                       data->ioc_len, max_len);
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
+static inline int
+obd_ioctl_unpack(struct obd_ioctl_data *data, char *pbuf, int max_len)
+{
+       char *ptr;
+       struct obd_ioctl_data *overlay;
+
+       if (!pbuf)
+               return 1;
+
+       overlay = (struct obd_ioctl_data *)pbuf;
+
+       /* Preserve the caller's buffer pointers */
+       overlay->ioc_inlbuf1 = data->ioc_inlbuf1;
+       overlay->ioc_inlbuf2 = data->ioc_inlbuf2;
+       overlay->ioc_inlbuf3 = data->ioc_inlbuf3;
+       overlay->ioc_inlbuf4 = data->ioc_inlbuf4;
+
+       memcpy(data, pbuf, sizeof(*data));
+
+       ptr = overlay->ioc_bulk;
+       if (data->ioc_inlbuf1)
+               LOGU(data->ioc_inlbuf1, data->ioc_inllen1, ptr);
+
+       if (data->ioc_inlbuf2)
+               LOGU(data->ioc_inlbuf2, data->ioc_inllen2, ptr);
+
+       if (data->ioc_inlbuf3)
+               LOGU(data->ioc_inlbuf3, data->ioc_inllen3, ptr);
+
+       if (data->ioc_inlbuf4)
+               LOGU(data->ioc_inlbuf4, data->ioc_inllen4, ptr);
+
+       return 0;
+}
+
+#endif /* !__KERNEL__ */
+
+/*
+ * OBD_IOC_DATA_TYPE is only for compatibility reasons with older
+ * Linux Lustre user tools. New ioctls should NOT use this macro as
+ * the ioctl "size". Instead the ioctl should get a "size" argument
+ * which is the actual data type used by the ioctl, to ensure the
+ * ioctl interface is versioned correctly.
+ */
+#define OBD_IOC_DATA_TYPE      long
+
+/*     IOC_LDLM_TEST           _IOWR('f', 40, long) */
+/*     IOC_LDLM_DUMP           _IOWR('f', 41, long) */
+/*     IOC_LDLM_REGRESS_START  _IOWR('f', 42, long) */
+/*     IOC_LDLM_REGRESS_STOP   _IOWR('f', 43, long) */
+
+#define OBD_IOC_CREATE         _IOWR('f', 101, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_DESTROY                _IOW('f', 104, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_PREALLOCATE     _IOWR('f', 105, OBD_IOC_DATA_TYPE) */
+
+#define OBD_IOC_SETATTR                _IOW('f', 107, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_GETATTR                _IOWR('f', 108, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_READ           _IOWR('f', 109, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_WRITE          _IOWR('f', 110, OBD_IOC_DATA_TYPE)
+
+#define OBD_IOC_STATFS         _IOWR('f', 113, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_SYNC           _IOW('f', 114, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_READ2           _IOWR('f', 115, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_FORMAT          _IOWR('f', 116, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_PARTITION       _IOWR('f', 117, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_COPY            _IOWR('f', 120, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_MIGR            _IOWR('f', 121, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_PUNCH           _IOWR('f', 122, OBD_IOC_DATA_TYPE) */
+
+/*     OBD_IOC_MODULE_DEBUG    _IOWR('f', 124, OBD_IOC_DATA_TYPE) */
+#define OBD_IOC_BRW_READ       _IOWR('f', 125, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_BRW_WRITE      _IOWR('f', 126, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_NAME2DEV       _IOWR('f', 127, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_UUID2DEV       _IOWR('f', 130, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_GETNAME                _IOWR('f', 131, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_GETMDNAME      _IOR('f', 131, char[MAX_OBD_NAME])
+#define OBD_IOC_GETDTNAME      OBD_IOC_GETNAME
+#define OBD_IOC_LOV_GET_CONFIG _IOWR('f', 132, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_CLIENT_RECOVER _IOW('f', 133, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_PING_TARGET    _IOW('f', 136, OBD_IOC_DATA_TYPE)
+
+/*     OBD_IOC_DEC_FS_USE_COUNT _IO('f', 139) */
+#define OBD_IOC_NO_TRANSNO     _IOW('f', 140, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_SET_READONLY   _IOW('f', 141, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_ABORT_RECOVERY _IOR('f', 142, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_ROOT_SQUASH     _IOWR('f', 143, OBD_IOC_DATA_TYPE) */
+#define OBD_GET_VERSION                _IOWR('f', 144, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_GSS_SUPPORT     _IOWR('f', 145, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_CLOSE_UUID      _IOWR('f', 147, OBD_IOC_DATA_TYPE) */
+#define OBD_IOC_CHANGELOG_SEND _IOW('f', 148, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_GETDEVICE      _IOWR('f', 149, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_FID2PATH       _IOWR('f', 150, OBD_IOC_DATA_TYPE)
+/*     lustre/lustre_user.h    151-153 */
+/*     OBD_IOC_LOV_SETSTRIPE   154 LL_IOC_LOV_SETSTRIPE */
+/*     OBD_IOC_LOV_GETSTRIPE   155 LL_IOC_LOV_GETSTRIPE */
+/*     OBD_IOC_LOV_SETEA       156 LL_IOC_LOV_SETEA */
+/*     lustre/lustre_user.h    157-159 */
+#define        OBD_IOC_QUOTACHECK      _IOW('f', 160, int)
+#define        OBD_IOC_POLL_QUOTACHECK _IOR('f', 161, struct if_quotacheck *)
+#define OBD_IOC_QUOTACTL       _IOWR('f', 162, struct if_quotactl)
+/*     lustre/lustre_user.h    163-176 */
+#define OBD_IOC_CHANGELOG_REG  _IOW('f', 177, struct obd_ioctl_data)
+#define OBD_IOC_CHANGELOG_DEREG        _IOW('f', 178, struct obd_ioctl_data)
+#define OBD_IOC_CHANGELOG_CLEAR        _IOW('f', 179, struct obd_ioctl_data)
+/*     OBD_IOC_RECORD          _IOWR('f', 180, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_ENDRECORD       _IOWR('f', 181, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_PARSE           _IOWR('f', 182, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_DORECORD        _IOWR('f', 183, OBD_IOC_DATA_TYPE) */
+#define OBD_IOC_PROCESS_CFG    _IOWR('f', 184, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_DUMP_LOG        _IOWR('f', 185, OBD_IOC_DATA_TYPE) */
+/*     OBD_IOC_CLEAR_LOG       _IOWR('f', 186, OBD_IOC_DATA_TYPE) */
+#define OBD_IOC_PARAM          _IOW('f', 187, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_POOL           _IOWR('f', 188, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_REPLACE_NIDS   _IOWR('f', 189, OBD_IOC_DATA_TYPE)
+
+#define OBD_IOC_CATLOGLIST     _IOWR('f', 190, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_LLOG_INFO      _IOWR('f', 191, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_LLOG_PRINT     _IOWR('f', 192, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_LLOG_CANCEL    _IOWR('f', 193, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_LLOG_REMOVE    _IOWR('f', 194, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_LLOG_CHECK     _IOWR('f', 195, OBD_IOC_DATA_TYPE)
+/*     OBD_IOC_LLOG_CATINFO    _IOWR('f', 196, OBD_IOC_DATA_TYPE) */
+#define OBD_IOC_NODEMAP                _IOWR('f', 197, OBD_IOC_DATA_TYPE)
+
+/*     ECHO_IOC_GET_STRIPE     _IOWR('f', 200, OBD_IOC_DATA_TYPE) */
+/*     ECHO_IOC_SET_STRIPE     _IOWR('f', 201, OBD_IOC_DATA_TYPE) */
+/*     ECHO_IOC_ENQUEUE        _IOWR('f', 202, OBD_IOC_DATA_TYPE) */
+/*     ECHO_IOC_CANCEL         _IOWR('f', 203, OBD_IOC_DATA_TYPE) */
+
+#define OBD_IOC_GET_OBJ_VERSION        _IOR('f', 210, OBD_IOC_DATA_TYPE)
+
+/*     lustre/lustre_user.h    212-217 */
+#define OBD_IOC_GET_MNTOPT     _IOW('f', 220, mntopt_t)
+#define OBD_IOC_ECHO_MD                _IOR('f', 221, struct obd_ioctl_data)
+#define OBD_IOC_ECHO_ALLOC_SEQ _IOWR('f', 222, struct obd_ioctl_data)
+#define OBD_IOC_START_LFSCK    _IOWR('f', 230, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_STOP_LFSCK     _IOW('f', 231, OBD_IOC_DATA_TYPE)
+#define OBD_IOC_QUERY_LFSCK    _IOR('f', 232, struct obd_ioctl_data)
+/*     lustre/lustre_user.h    240-249 */
+/*     LIBCFS_IOC_DEBUG_MASK   250 */
+
+#define IOC_OSC_SET_ACTIVE     _IOWR('h', 21, void *)
+
+#endif /* LUSTRE_IOCTL_H_ */
index ef6f38ff359ea15208cca36131537aa7f4a21f59..351fb4c1521d6d916a591aa8f0ee11c66df2ba84 100644 (file)
@@ -45,6 +45,8 @@
 #include "ll_fiemap.h"
 #include "../linux/lustre_user.h"
 
+#define LUSTRE_EOF 0xffffffffffffffffULL
+
 /* for statfs() */
 #define LL_SUPER_MAGIC 0x0BD00BD0
 
@@ -117,6 +119,11 @@ struct lu_fid {
        __u32 f_ver;
 };
 
+static inline bool fid_is_zero(const struct lu_fid *fid)
+{
+       return !fid->f_seq && !fid->f_oid;
+}
+
 struct filter_fid {
        struct lu_fid   ff_parent;  /* ff_parent.f_ver == file stripe number */
 };
@@ -167,7 +174,7 @@ struct lustre_mdt_attrs {
  */
 struct ost_id {
        union {
-               struct ostid {
+               struct {
                        __u64   oi_id;
                        __u64   oi_seq;
                } oi;
@@ -188,26 +195,20 @@ struct ost_id {
  * *STRIPE* - set/get lov_user_md
  * *INFO    - set/get lov_user_mds_data
  */
-/* see <lustre_lib.h> for ioctl numberss 101-150 */
+/*     lustre_ioctl.h                  101-150 */
 #define LL_IOC_GETFLAGS                 _IOR('f', 151, long)
 #define LL_IOC_SETFLAGS                 _IOW('f', 152, long)
 #define LL_IOC_CLRFLAGS                 _IOW('f', 153, long)
-/* LL_IOC_LOV_SETSTRIPE: See also OBD_IOC_LOV_SETSTRIPE */
 #define LL_IOC_LOV_SETSTRIPE       _IOW('f', 154, long)
-/* LL_IOC_LOV_GETSTRIPE: See also OBD_IOC_LOV_GETSTRIPE */
 #define LL_IOC_LOV_GETSTRIPE       _IOW('f', 155, long)
-/* LL_IOC_LOV_SETEA: See also OBD_IOC_LOV_SETEA */
 #define LL_IOC_LOV_SETEA               _IOW('f', 156, long)
 #define LL_IOC_RECREATE_OBJ         _IOW('f', 157, long)
 #define LL_IOC_RECREATE_FID         _IOW('f', 157, struct lu_fid)
 #define LL_IOC_GROUP_LOCK             _IOW('f', 158, long)
 #define LL_IOC_GROUP_UNLOCK         _IOW('f', 159, long)
-/* LL_IOC_QUOTACHECK: See also OBD_IOC_QUOTACHECK */
-#define LL_IOC_QUOTACHECK             _IOW('f', 160, int)
-/* LL_IOC_POLL_QUOTACHECK: See also OBD_IOC_POLL_QUOTACHECK */
-#define LL_IOC_POLL_QUOTACHECK   _IOR('f', 161, struct if_quotacheck *)
-/* LL_IOC_QUOTACTL: See also OBD_IOC_QUOTACTL */
-#define LL_IOC_QUOTACTL                 _IOWR('f', 162, struct if_quotactl)
+/* #define LL_IOC_QUOTACHECK           160 OBD_IOC_QUOTACHECK */
+/* #define LL_IOC_POLL_QUOTACHECK      161 OBD_IOC_POLL_QUOTACHECK */
+/* #define LL_IOC_QUOTACTL             162 OBD_IOC_QUOTACTL */
 #define IOC_OBD_STATFS           _IOWR('f', 164, struct obd_statfs *)
 #define IOC_LOV_GETINFO                 _IOWR('f', 165, struct lov_user_mds_data *)
 #define LL_IOC_FLUSHCTX                 _IOW('f', 166, long)
@@ -221,8 +222,7 @@ struct ost_id {
 #define LL_IOC_GET_CONNECT_FLAGS       _IOWR('f', 174, __u64 *)
 #define LL_IOC_GET_MDTIDX             _IOR('f', 175, int)
 
-/* see <lustre_lib.h> for ioctl numbers 177-210 */
-
+/*     lustre_ioctl.h                  177-210 */
 #define LL_IOC_HSM_STATE_GET           _IOR('f', 211, struct hsm_user_state)
 #define LL_IOC_HSM_STATE_SET           _IOW('f', 212, struct hsm_state_set)
 #define LL_IOC_HSM_CT_START            _IOW('f', 213, struct lustre_kernelcomm)
@@ -242,6 +242,8 @@ struct ost_id {
 #define LL_IOC_SET_LEASE               _IOWR('f', 243, long)
 #define LL_IOC_GET_LEASE               _IO('f', 244)
 #define LL_IOC_HSM_IMPORT              _IOWR('f', 245, struct hsm_user_import)
+#define LL_IOC_LMV_SET_DEFAULT_STRIPE  _IOWR('f', 246, struct lmv_user_md)
+#define LL_IOC_MIGRATE                 _IOR('f', 247, int)
 
 #define LL_STATFS_LMV     1
 #define LL_STATFS_LOV     2
@@ -253,10 +255,6 @@ struct ost_id {
 #define IOC_MDC_GETFILEINFO     _IOWR(IOC_MDC_TYPE, 22, struct lov_user_mds_data *)
 #define LL_IOC_MDC_GETINFO      _IOWR(IOC_MDC_TYPE, 23, struct lov_user_mds_data *)
 
-/* Keep these for backward compartability. */
-#define LL_IOC_OBD_STATFS       IOC_OBD_STATFS
-#define IOC_MDC_GETSTRIPE       IOC_MDC_GETFILESTRIPE
-
 #define MAX_OBD_NAME 128 /* If this changes, a NEW ioctl must be added */
 
 /* Define O_LOV_DELAY_CREATE to be a mask that is not useful for regular
@@ -278,12 +276,16 @@ struct ost_id {
 #define LOV_USER_MAGIC_JOIN_V1 0x0BD20BD0
 #define LOV_USER_MAGIC_V3 0x0BD30BD0
 
-#define LMV_MAGIC_V1      0x0CD10CD0    /*normal stripe lmv magic */
-#define LMV_USER_MAGIC    0x0CD20CD0    /*default lmv magic*/
+#define LMV_USER_MAGIC    0x0CD30CD0    /*default lmv magic*/
 
-#define LOV_PATTERN_RAID0 0x001
-#define LOV_PATTERN_RAID1 0x002
-#define LOV_PATTERN_FIRST 0x100
+#define LOV_PATTERN_RAID0      0x001
+#define LOV_PATTERN_RAID1      0x002
+#define LOV_PATTERN_FIRST      0x100
+#define LOV_PATTERN_CMOBD      0x200
+
+#define LOV_PATTERN_F_MASK     0xffff0000
+#define LOV_PATTERN_F_HOLE     0x40000000 /* there is hole in LOV EA */
+#define LOV_PATTERN_F_RELEASED 0x80000000 /* HSM released file */
 
 #define LOV_MAXPOOLNAME 16
 #define LOV_POOLNAMEF "%.16s"
@@ -374,19 +376,26 @@ struct lov_user_mds_data_v3 {
 } __packed;
 #endif
 
-/* keep this to be the same size as lov_user_ost_data_v1 */
 struct lmv_user_mds_data {
        struct lu_fid   lum_fid;
        __u32           lum_padding;
        __u32           lum_mds;
 };
 
-/* lum_type */
-enum {
-       LMV_STRIPE_TYPE = 0,
-       LMV_DEFAULT_TYPE = 1,
+enum lmv_hash_type {
+       LMV_HASH_TYPE_UNKNOWN   = 0,    /* 0 is reserved for testing purpose */
+       LMV_HASH_TYPE_ALL_CHARS = 1,
+       LMV_HASH_TYPE_FNV_1A_64 = 2,
 };
 
+#define LMV_HASH_NAME_ALL_CHARS                "all_char"
+#define LMV_HASH_NAME_FNV_1A_64                "fnv_1a_64"
+
+/*
+ * Got this according to how get LOV_MAX_STRIPE_COUNT, see above,
+ * (max buffer size - lmv+rpc header) / sizeof(struct lmv_user_mds_data)
+ */
+#define LMV_MAX_STRIPE_COUNT 2000  /* ((12 * 4096 - 256) / 24) */
 #define lmv_user_md lmv_user_md_v1
 struct lmv_user_md_v1 {
        __u32   lum_magic;       /* must be the first field */
@@ -399,7 +408,7 @@ struct lmv_user_md_v1 {
        __u32   lum_padding3;
        char    lum_pool_name[LOV_MAXPOOLNAME];
        struct  lmv_user_mds_data  lum_objects[0];
-};
+} __packed;
 
 static inline int lmv_user_md_size(int stripes, int lmm_magic)
 {
@@ -407,6 +416,8 @@ static inline int lmv_user_md_size(int stripes, int lmm_magic)
                      stripes * sizeof(struct lmv_user_mds_data);
 }
 
+void lustre_swab_lmv_user_md(struct lmv_user_md *lum);
+
 struct ll_recreate_obj {
        __u64 lrc_id;
        __u32 lrc_ost_idx;
@@ -498,6 +509,12 @@ static inline void obd_uuid2fsname(char *buf, char *uuid, int buflen)
 
 /********* Quotas **********/
 
+#define Q_QUOTACHECK   0x800100 /* deprecated as of 2.4 */
+#define Q_INITQUOTA    0x800101 /* deprecated as of 2.4  */
+#define Q_GETOINFO     0x800102 /* get obd quota info */
+#define Q_GETOQUOTA    0x800103 /* get obd quotas */
+#define Q_FINVALIDATE  0x800104 /* deprecated as of 2.4 */
+
 /* these must be explicitly translated into linux Q_* in ll_dir_ioctl */
 #define LUSTRE_Q_QUOTAON    0x800002     /* turn quotas on */
 #define LUSTRE_Q_QUOTAOFF   0x800003     /* turn quotas off */
@@ -736,7 +753,7 @@ static inline void hsm_set_cl_error(int *flags, int error)
        *flags |= (error << CLF_HSM_ERR_L);
 }
 
-#define CR_MAXSIZE cfs_size_round(2*NAME_MAX + 1 + \
+#define CR_MAXSIZE cfs_size_round(2 * NAME_MAX + 1 + \
                                  sizeof(struct changelog_ext_rec))
 
 struct changelog_rec {
@@ -978,7 +995,7 @@ struct hsm_user_request {
 /** Return pointer to data field in a hsm user request */
 static inline void *hur_data(struct hsm_user_request *hur)
 {
-       return &(hur->hur_user_item[hur->hur_request.hr_itemcount]);
+       return &hur->hur_user_item[hur->hur_request.hr_itemcount];
 }
 
 /**
index 60051a5cfe208750130e7112b937bbbad9c1ff78..1ec4231cb988e451b26c3a73b9dbce649669a80c 100644 (file)
@@ -968,6 +968,7 @@ struct ldlm_enqueue_info {
        void *ei_cb_cp;  /** lock completion callback */
        void *ei_cb_gl;  /** lock glimpse callback */
        void *ei_cbdata; /** Data to be passed into callbacks. */
+       unsigned int ei_enq_slave:1; /* whether enqueue slave stripes */
 };
 
 extern struct obd_ops ldlm_obd_ops;
@@ -1281,16 +1282,6 @@ int ldlm_cli_cancel_list(struct list_head *head, int count,
 int intent_disposition(struct ldlm_reply *rep, int flag);
 void intent_set_disposition(struct ldlm_reply *rep, int flag);
 
-/* ioctls for trying requests */
-#define IOC_LDLM_TYPE             'f'
-#define IOC_LDLM_MIN_NR                 40
-
-#define IOC_LDLM_TEST             _IOWR('f', 40, long)
-#define IOC_LDLM_DUMP             _IOWR('f', 41, long)
-#define IOC_LDLM_REGRESS_START   _IOWR('f', 42, long)
-#define IOC_LDLM_REGRESS_STOP     _IOWR('f', 43, long)
-#define IOC_LDLM_MAX_NR                 43
-
 /**
  * "Modes" of acquiring lock_res, necessary to tell lockdep that taking more
  * than one lock_res is dead-lock safe.
index e7e0c21a9b4032ec387393d3c1fab8230e153206..a0f064d237c926d34223dda28ccbe32e9479131c 100644 (file)
 /** l_flags bits marked as "all_flags" bits */
 #define LDLM_FL_ALL_FLAGS_MASK          0x00FFFFFFC08F932FULL
 
-/** l_flags bits marked as "ast" bits */
-#define LDLM_FL_AST_MASK                0x0000000080008000ULL
-
-/** l_flags bits marked as "blocked" bits */
-#define LDLM_FL_BLOCKED_MASK            0x000000000000000EULL
-
-/** l_flags bits marked as "gone" bits */
-#define LDLM_FL_GONE_MASK               0x0006004000000000ULL
-
-/** l_flags bits marked as "inherit" bits */
-#define LDLM_FL_INHERIT_MASK            0x0000000000800000ULL
-
-/** l_flags bits marked as "off_wire" bits */
-#define LDLM_FL_OFF_WIRE_MASK           0x00FFFFFF00000000ULL
-
 /** extent, mode, or resource changed */
 #define LDLM_FL_LOCK_CHANGED            0x0000000000000001ULL /* bit 0 */
 #define ldlm_is_lock_changed(_l)        LDLM_TEST_FLAG((_l), 1ULL <<  0)
 #define ldlm_set_excl(_l)               LDLM_SET_FLAG((_l), 1ULL << 55)
 #define ldlm_clear_excl(_l)             LDLM_CLEAR_FLAG((_l), 1ULL << 55)
 
+/** l_flags bits marked as "ast" bits */
+#define LDLM_FL_AST_MASK               (LDLM_FL_FLOCK_DEADLOCK         |\
+                                        LDLM_FL_AST_DISCARD_DATA)
+
+/** l_flags bits marked as "blocked" bits */
+#define LDLM_FL_BLOCKED_MASK           (LDLM_FL_BLOCK_GRANTED          |\
+                                        LDLM_FL_BLOCK_CONV             |\
+                                        LDLM_FL_BLOCK_WAIT)
+
+/** l_flags bits marked as "gone" bits */
+#define LDLM_FL_GONE_MASK              (LDLM_FL_DESTROYED              |\
+                                        LDLM_FL_FAILED)
+
+/** l_flags bits marked as "inherit" bits */
+/* Flags inherited from wire on enqueue/reply between client/server. */
+/* NO_TIMEOUT flag to force ldlm_lock_match() to wait with no timeout. */
+/* TEST_LOCK flag to not let TEST lock to be granted. */
+#define LDLM_FL_INHERIT_MASK           (LDLM_FL_CANCEL_ON_BLOCK        |\
+                                        LDLM_FL_NO_TIMEOUT             |\
+                                        LDLM_FL_TEST_LOCK)
+
 /** test for ldlm_lock flag bit set */
 #define LDLM_TEST_FLAG(_l, _b)        (((_l)->l_flags & (_b)) != 0)
 
index 743671a547efe364391b3815b0cac7da219e3ff1..3167806931935218f415a439a21d1440b16a8965 100644 (file)
@@ -229,6 +229,7 @@ enum local_oid {
        MDD_LOV_OBJ_OSEQ        = 4121UL,
        LFSCK_NAMESPACE_OID     = 4122UL,
        REMOTE_PARENT_DIR_OID   = 4123UL,
+       SLAVE_LLOG_CATALOGS_OID = 4124UL,
 };
 
 static inline void lu_local_obj_fid(struct lu_fid *fid, __u32 oid)
@@ -392,21 +393,19 @@ struct ldlm_namespace;
  * but was moved into name[1] along with the OID to avoid consuming the
  * renaming name[2,3] fields that need to be used for the quota identifier.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_reg_res_name(const struct lu_fid *fid, struct ldlm_res_id *res)
 {
        memset(res, 0, sizeof(*res));
        res->name[LUSTRE_RES_ID_SEQ_OFF] = fid_seq(fid);
        res->name[LUSTRE_RES_ID_VER_OID_OFF] = fid_ver_oid(fid);
-
-       return res;
 }
 
 /*
  * Return true if resource is for object identified by FID.
  */
-static inline int fid_res_name_eq(const struct lu_fid *fid,
-                                 const struct ldlm_res_id *res)
+static inline bool fid_res_name_eq(const struct lu_fid *fid,
+                                  const struct ldlm_res_id *res)
 {
        return res->name[LUSTRE_RES_ID_SEQ_OFF] == fid_seq(fid) &&
               res->name[LUSTRE_RES_ID_VER_OID_OFF] == fid_ver_oid(fid);
@@ -415,29 +414,25 @@ static inline int fid_res_name_eq(const struct lu_fid *fid,
 /*
  * Extract FID from LDLM resource. Reverse of fid_build_reg_res_name().
  */
-static inline struct lu_fid *
+static inline void
 fid_extract_from_res_name(struct lu_fid *fid, const struct ldlm_res_id *res)
 {
        fid->f_seq = res->name[LUSTRE_RES_ID_SEQ_OFF];
        fid->f_oid = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF]);
        fid->f_ver = (__u32)(res->name[LUSTRE_RES_ID_VER_OID_OFF] >> 32);
        LASSERT(fid_res_name_eq(fid, res));
-
-       return fid;
 }
 
 /*
  * Build (DLM) resource identifier from global quota FID and quota ID.
  */
-static inline struct ldlm_res_id *
+static inline void
 fid_build_quota_res_name(const struct lu_fid *glb_fid, union lquota_id *qid,
                         struct ldlm_res_id *res)
 {
        fid_build_reg_res_name(glb_fid, res);
        res->name[LUSTRE_RES_ID_QUOTA_SEQ_OFF] = fid_seq(&qid->qid_fid);
        res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] = fid_ver_oid(&qid->qid_fid);
-
-       return res;
 }
 
 /*
@@ -454,14 +449,12 @@ static inline void fid_extract_from_quota_res(struct lu_fid *glb_fid,
                (__u32)(res->name[LUSTRE_RES_ID_QUOTA_VER_OID_OFF] >> 32);
 }
 
-static inline struct ldlm_res_id *
+static inline void
 fid_build_pdo_res_name(const struct lu_fid *fid, unsigned int hash,
                       struct ldlm_res_id *res)
 {
        fid_build_reg_res_name(fid, res);
        res->name[LUSTRE_RES_ID_HSH_OFF] = hash;
-
-       return res;
 }
 
 /**
@@ -482,7 +475,7 @@ fid_build_pdo_res_name(const struct lu_fid *fid, unsigned int hash,
  *    res will be built from normal FID directly, i.e. res[0] = f_seq,
  *    res[1] = f_oid + f_ver.
  */
-static inline void ostid_build_res_name(struct ost_id *oi,
+static inline void ostid_build_res_name(const struct ost_id *oi,
                                        struct ldlm_res_id *name)
 {
        memset(name, 0, sizeof(*name));
@@ -497,8 +490,8 @@ static inline void ostid_build_res_name(struct ost_id *oi,
 /**
  * Return true if the resource is for the object identified by this id & group.
  */
-static inline int ostid_res_name_eq(struct ost_id *oi,
-                                   struct ldlm_res_id *name)
+static inline int ostid_res_name_eq(const struct ost_id *oi,
+                                   const struct ldlm_res_id *name)
 {
        /* Note: it is just a trick here to save some effort, probably the
         * correct way would be turn them into the FID and compare
@@ -603,13 +596,14 @@ static inline __u32 fid_flatten32(const struct lu_fid *fid)
         * (from OID), or up to 128M inodes without collisions for new files.
         */
        ino = ((seq & 0x000fffffULL) << 12) + ((seq >> 8) & 0xfffff000) +
-              (seq >> (64 - (40-8)) & 0xffffff00) +
+              (seq >> (64 - (40 - 8)) & 0xffffff00) +
               (fid_oid(fid) & 0xff000fff) + ((fid_oid(fid) & 0x00fff000) << 8);
 
        return ino ? ino : fid_oid(fid);
 }
 
-static inline int lu_fid_diff(struct lu_fid *fid1, struct lu_fid *fid2)
+static inline int lu_fid_diff(const struct lu_fid *fid1,
+                             const struct lu_fid *fid2)
 {
        LASSERTF(fid_seq(fid1) == fid_seq(fid2), "fid1:"DFID", fid2:"DFID"\n",
                 PFID(fid1), PFID(fid2));
index 1a63a6b9e1161e472342777e1195bc11406d90d9..bc1dd46601510747780516ad568a0c1c905a766a 100644 (file)
@@ -66,6 +66,7 @@ struct portals_handle_ops {
 struct portals_handle {
        struct list_head                        h_link;
        __u64                           h_cookie;
+       const void                      *h_owner;
        struct portals_handle_ops       *h_ops;
 
        /* newly added fields to handle the RCU issue. -jxiong */
@@ -83,7 +84,7 @@ struct portals_handle {
 void class_handle_hash(struct portals_handle *,
                       struct portals_handle_ops *ops);
 void class_handle_unhash(struct portals_handle *);
-void *class_handle2object(__u64 cookie);
+void *class_handle2object(__u64 cookie, const void *owner);
 void class_handle_free_cb(struct rcu_head *rcu);
 int class_handle_init(void);
 void class_handle_cleanup(void);
index 4445be7a59ddede2e1b1bce2f47255ce142e282e..b7a7a74ff19989626e776d01bfe7ac29bea8731b 100644 (file)
@@ -305,28 +305,6 @@ struct obd_import {
        time64_t             imp_last_reply_time;    /* for health check */
 };
 
-typedef void (*obd_import_callback)(struct obd_import *imp, void *closure,
-                                   int event, void *event_arg, void *cb_data);
-
-/**
- * Structure for import observer.
- * It is possible to register "observer" on an import and every time
- * something happens to an import (like connect/evict/disconnect)
- * obderver will get its callback called with event type
- */
-struct obd_import_observer {
-       struct list_head           oio_chain;
-       obd_import_callback  oio_cb;
-       void            *oio_cb_data;
-};
-
-void class_observe_import(struct obd_import *imp, obd_import_callback cb,
-                         void *cb_data);
-void class_unobserve_import(struct obd_import *imp, obd_import_callback cb,
-                           void *cb_data);
-void class_notify_import_observers(struct obd_import *imp, int event,
-                                  void *event_arg);
-
 /* import.c */
 static inline unsigned int at_est2timeout(unsigned int val)
 {
index 06958f217fc8f8ef28c8d2ae567f6b852f66cfd6..adb8c47083c86f41914445fda81e2c9b7e399dc4 100644 (file)
@@ -75,7 +75,6 @@ int do_set_info_async(struct obd_import *imp,
                      struct ptlrpc_request_set *set);
 
 #define OBD_RECOVERY_MAX_TIME (obd_timeout * 18) /* b13079 */
-#define OBD_MAX_IOCTL_BUFFER CONFIG_LUSTRE_OBD_MAX_IOCTL_BUFFER
 
 void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id);
 
@@ -99,289 +98,6 @@ struct obd_client_handle {
 /* statfs_pack.c */
 void statfs_unpack(struct kstatfs *sfs, struct obd_statfs *osfs);
 
-/*
- * For md echo client
- */
-enum md_echo_cmd {
-       ECHO_MD_CREATE       = 1, /* Open/Create file on MDT */
-       ECHO_MD_MKDIR   = 2, /* Mkdir on MDT */
-       ECHO_MD_DESTROY      = 3, /* Unlink file on MDT */
-       ECHO_MD_RMDIR   = 4, /* Rmdir on MDT */
-       ECHO_MD_LOOKUP       = 5, /* Lookup on MDT */
-       ECHO_MD_GETATTR      = 6, /* Getattr on MDT */
-       ECHO_MD_SETATTR      = 7, /* Setattr on MDT */
-       ECHO_MD_ALLOC_FID    = 8, /* Get FIDs from MDT */
-};
-
-/*
- *   OBD IOCTLS
- */
-#define OBD_IOCTL_VERSION 0x00010004
-
-struct obd_ioctl_data {
-       __u32 ioc_len;
-       __u32 ioc_version;
-
-       union {
-               __u64 ioc_cookie;
-               __u64 ioc_u64_1;
-       };
-       union {
-               __u32 ioc_conn1;
-               __u32 ioc_u32_1;
-       };
-       union {
-               __u32 ioc_conn2;
-               __u32 ioc_u32_2;
-       };
-
-       struct obdo ioc_obdo1;
-       struct obdo ioc_obdo2;
-
-       u64      ioc_count;
-       u64      ioc_offset;
-       __u32    ioc_dev;
-       __u32    ioc_command;
-
-       __u64 ioc_nid;
-       __u32 ioc_nal;
-       __u32 ioc_type;
-
-       /* buffers the kernel will treat as user pointers */
-       __u32  ioc_plen1;
-       void __user *ioc_pbuf1;
-       __u32  ioc_plen2;
-       void __user *ioc_pbuf2;
-
-       /* inline buffers for various arguments */
-       __u32  ioc_inllen1;
-       char  *ioc_inlbuf1;
-       __u32  ioc_inllen2;
-       char  *ioc_inlbuf2;
-       __u32  ioc_inllen3;
-       char  *ioc_inlbuf3;
-       __u32  ioc_inllen4;
-       char  *ioc_inlbuf4;
-
-       char    ioc_bulk[0];
-};
-
-struct obd_ioctl_hdr {
-       __u32 ioc_len;
-       __u32 ioc_version;
-};
-
-static inline int obd_ioctl_packlen(struct obd_ioctl_data *data)
-{
-       int len = cfs_size_round(sizeof(struct obd_ioctl_data));
-
-       len += cfs_size_round(data->ioc_inllen1);
-       len += cfs_size_round(data->ioc_inllen2);
-       len += cfs_size_round(data->ioc_inllen3);
-       len += cfs_size_round(data->ioc_inllen4);
-       return len;
-}
-
-static inline int obd_ioctl_is_invalid(struct obd_ioctl_data *data)
-{
-       if (data->ioc_len > OBD_MAX_IOCTL_BUFFER) {
-               CERROR("OBD ioctl: ioc_len larger than %d\n",
-                      OBD_MAX_IOCTL_BUFFER);
-               return 1;
-       }
-       if (data->ioc_inllen1 > OBD_MAX_IOCTL_BUFFER) {
-               CERROR("OBD ioctl: ioc_inllen1 larger than ioc_len\n");
-               return 1;
-       }
-       if (data->ioc_inllen2 > OBD_MAX_IOCTL_BUFFER) {
-               CERROR("OBD ioctl: ioc_inllen2 larger than ioc_len\n");
-               return 1;
-       }
-       if (data->ioc_inllen3 > OBD_MAX_IOCTL_BUFFER) {
-               CERROR("OBD ioctl: ioc_inllen3 larger than ioc_len\n");
-               return 1;
-       }
-       if (data->ioc_inllen4 > OBD_MAX_IOCTL_BUFFER) {
-               CERROR("OBD ioctl: ioc_inllen4 larger than ioc_len\n");
-               return 1;
-       }
-       if (data->ioc_inlbuf1 && !data->ioc_inllen1) {
-               CERROR("OBD ioctl: inlbuf1 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_inlbuf2 && !data->ioc_inllen2) {
-               CERROR("OBD ioctl: inlbuf2 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_inlbuf3 && !data->ioc_inllen3) {
-               CERROR("OBD ioctl: inlbuf3 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_inlbuf4 && !data->ioc_inllen4) {
-               CERROR("OBD ioctl: inlbuf4 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_pbuf1 && !data->ioc_plen1) {
-               CERROR("OBD ioctl: pbuf1 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_pbuf2 && !data->ioc_plen2) {
-               CERROR("OBD ioctl: pbuf2 pointer but 0 length\n");
-               return 1;
-       }
-       if (data->ioc_plen1 && !data->ioc_pbuf1) {
-               CERROR("OBD ioctl: plen1 set but NULL pointer\n");
-               return 1;
-       }
-       if (data->ioc_plen2 && !data->ioc_pbuf2) {
-               CERROR("OBD ioctl: plen2 set but NULL pointer\n");
-               return 1;
-       }
-       if (obd_ioctl_packlen(data) > data->ioc_len) {
-               CERROR("OBD ioctl: packlen exceeds ioc_len (%d > %d)\n",
-                      obd_ioctl_packlen(data), data->ioc_len);
-               return 1;
-       }
-       return 0;
-}
-
-#include "obd_support.h"
-
-/* function defined in lustre/obdclass/<platform>/<platform>-module.c */
-int obd_ioctl_getdata(char **buf, int *len, void __user *arg);
-int obd_ioctl_popdata(void __user *arg, void *data, int len);
-
-static inline void obd_ioctl_freedata(char *buf, int len)
-{
-       kvfree(buf);
-       return;
-}
-
-/*
- * BSD ioctl description:
- * #define IOC_V1       _IOR(g, n1, long)
- * #define IOC_V2       _IOW(g, n2, long)
- *
- * ioctl(f, IOC_V1, arg);
- * arg will be treated as a long value,
- *
- * ioctl(f, IOC_V2, arg)
- * arg will be treated as a pointer, bsd will call
- * copyin(buf, arg, sizeof(long))
- *
- * To make BSD ioctl handles argument correctly and simplely,
- * we change _IOR to _IOWR so BSD will copyin obd_ioctl_data
- * for us. Does this change affect Linux?  (XXX Liang)
- */
-#define OBD_IOC_DATA_TYPE long
-
-#define OBD_IOC_CREATE          _IOWR('f', 101, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_DESTROY                _IOW('f', 104, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PREALLOCATE        _IOWR('f', 105, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_SETATTR                _IOW('f', 107, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_GETATTR                _IOWR ('f', 108, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_READ              _IOWR('f', 109, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_WRITE            _IOWR('f', 110, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_STATFS          _IOWR('f', 113, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_SYNC              _IOW('f', 114, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_READ2            _IOWR('f', 115, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_FORMAT          _IOWR('f', 116, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PARTITION            _IOWR('f', 117, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_COPY              _IOWR('f', 120, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_MIGR              _IOWR('f', 121, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PUNCH            _IOWR('f', 122, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_MODULE_DEBUG      _IOWR('f', 124, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_BRW_READ              _IOWR('f', 125, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_BRW_WRITE            _IOWR('f', 126, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_NAME2DEV              _IOWR('f', 127, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_UUID2DEV              _IOWR('f', 130, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_GETNAME                _IOWR('f', 131, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_GETMDNAME            _IOR('f', 131, char[MAX_OBD_NAME])
-#define OBD_IOC_GETDTNAME             OBD_IOC_GETNAME
-
-#define OBD_IOC_LOV_GET_CONFIG  _IOWR('f', 132, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_CLIENT_RECOVER  _IOW('f', 133, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PING_TARGET        _IOW('f', 136, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_DEC_FS_USE_COUNT       _IO  ('f', 139)
-#define OBD_IOC_NO_TRANSNO          _IOW('f', 140, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_SET_READONLY      _IOW('f', 141, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_ABORT_RECOVERY  _IOR('f', 142, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_ROOT_SQUASH        _IOWR('f', 143, OBD_IOC_DATA_TYPE)
-
-#define OBD_GET_VERSION                _IOWR ('f', 144, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_GSS_SUPPORT        _IOWR('f', 145, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_CLOSE_UUID          _IOWR ('f', 147, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_CHANGELOG_SEND  _IOW('f', 148, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_GETDEVICE            _IOWR ('f', 149, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_FID2PATH              _IOWR ('f', 150, OBD_IOC_DATA_TYPE)
-/* see also <lustre/lustre_user.h> for ioctls 151-153 */
-/* OBD_IOC_LOV_SETSTRIPE: See also LL_IOC_LOV_SETSTRIPE */
-#define OBD_IOC_LOV_SETSTRIPE    _IOW('f', 154, OBD_IOC_DATA_TYPE)
-/* OBD_IOC_LOV_GETSTRIPE: See also LL_IOC_LOV_GETSTRIPE */
-#define OBD_IOC_LOV_GETSTRIPE    _IOW('f', 155, OBD_IOC_DATA_TYPE)
-/* OBD_IOC_LOV_SETEA: See also LL_IOC_LOV_SETEA */
-#define OBD_IOC_LOV_SETEA            _IOW('f', 156, OBD_IOC_DATA_TYPE)
-/* see <lustre/lustre_user.h> for ioctls 157-159 */
-/* OBD_IOC_QUOTACHECK: See also LL_IOC_QUOTACHECK */
-#define OBD_IOC_QUOTACHECK          _IOW('f', 160, int)
-/* OBD_IOC_POLL_QUOTACHECK: See also LL_IOC_POLL_QUOTACHECK */
-#define OBD_IOC_POLL_QUOTACHECK        _IOR('f', 161, struct if_quotacheck *)
-/* OBD_IOC_QUOTACTL: See also LL_IOC_QUOTACTL */
-#define OBD_IOC_QUOTACTL              _IOWR('f', 162, struct if_quotactl)
-/* see  also <lustre/lustre_user.h> for ioctls 163-176 */
-#define OBD_IOC_CHANGELOG_REG    _IOW('f', 177, struct obd_ioctl_data)
-#define OBD_IOC_CHANGELOG_DEREG        _IOW('f', 178, struct obd_ioctl_data)
-#define OBD_IOC_CHANGELOG_CLEAR        _IOW('f', 179, struct obd_ioctl_data)
-#define OBD_IOC_RECORD          _IOWR('f', 180, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_ENDRECORD            _IOWR('f', 181, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PARSE            _IOWR('f', 182, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_DORECORD              _IOWR('f', 183, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PROCESS_CFG        _IOWR('f', 184, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_DUMP_LOG              _IOWR('f', 185, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_CLEAR_LOG            _IOWR('f', 186, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PARAM            _IOW('f', 187, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_POOL              _IOWR('f', 188, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_REPLACE_NIDS      _IOWR('f', 189, OBD_IOC_DATA_TYPE)
-
-#define OBD_IOC_CATLOGLIST          _IOWR('f', 190, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_LLOG_INFO            _IOWR('f', 191, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_LLOG_PRINT          _IOWR('f', 192, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_LLOG_CANCEL        _IOWR('f', 193, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_LLOG_REMOVE        _IOWR('f', 194, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_LLOG_CHECK          _IOWR('f', 195, OBD_IOC_DATA_TYPE)
-/* OBD_IOC_LLOG_CATINFO is deprecated */
-#define OBD_IOC_LLOG_CATINFO      _IOWR('f', 196, OBD_IOC_DATA_TYPE)
-
-/*     #define ECHO_IOC_GET_STRIPE    _IOWR('f', 200, OBD_IOC_DATA_TYPE) */
-/*     #define ECHO_IOC_SET_STRIPE    _IOWR('f', 201, OBD_IOC_DATA_TYPE) */
-/*     #define ECHO_IOC_ENQUEUE       _IOWR('f', 202, OBD_IOC_DATA_TYPE) */
-/*     #define ECHO_IOC_CANCEL        _IOWR('f', 203, OBD_IOC_DATA_TYPE) */
-
-#define OBD_IOC_GET_OBJ_VERSION        _IOR('f', 210, OBD_IOC_DATA_TYPE)
-
-/* <lustre/lustre_user.h> defines ioctl number 218-219 */
-#define OBD_IOC_GET_MNTOPT          _IOW('f', 220, mntopt_t)
-
-#define OBD_IOC_ECHO_MD                _IOR('f', 221, struct obd_ioctl_data)
-#define OBD_IOC_ECHO_ALLOC_SEQ  _IOWR('f', 222, struct obd_ioctl_data)
-
-#define OBD_IOC_START_LFSCK           _IOWR('f', 230, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_STOP_LFSCK            _IOW('f', 231, OBD_IOC_DATA_TYPE)
-#define OBD_IOC_PAUSE_LFSCK           _IOW('f', 232, OBD_IOC_DATA_TYPE)
-
-/* XXX _IOWR('f', 250, long) has been defined in
- * libcfs/include/libcfs/libcfs_private.h for debug, don't use it
- */
-
 /* Until such time as we get_info the per-stripe maximum from the OST,
  * we define this to be 2T - 4k, which is the ext3 maxbytes.
  */
@@ -391,6 +107,8 @@ static inline void obd_ioctl_freedata(char *buf, int len)
 #define LOVEA_DELETE_VALUES(size, count, offset) (size == 0 && count == 0 && \
                                                 offset == (typeof(offset))(-1))
 
+#define LMVEA_DELETE_VALUES(count, offset) ((count) == 0 && \
+                                           (offset) == (typeof(offset))(-1))
 /* #define POISON_BULK 0 */
 
 /*
index b16897702559ad006cc1b82891adf3a006a06b67..8333d76e0450adb2b6a66de8a561f50236b84700 100644 (file)
 
 #include "obd_class.h"
 #include "lustre_net.h"
-#include "lustre_mds.h"
 #include "lustre_ha.h"
 
 /* 4UL * 1024 * 1024 */
 #define LL_MAX_BLKSIZE_BITS     (22)
-#define LL_MAX_BLKSIZE   (1UL<<LL_MAX_BLKSIZE_BITS)
+#define LL_MAX_BLKSIZE   (1UL << LL_MAX_BLKSIZE_BITS)
 
 /*
  * This is embedded into llite super-blocks to keep track of
@@ -81,17 +80,6 @@ static inline void ll_dir_chain_fini(struct ll_dir_chain *chain)
 {
 }
 
-static inline unsigned long hash_x_index(__u64 hash, int hash64)
-{
-       if (BITS_PER_LONG == 32 && hash64)
-               hash >>= 32;
-       /* save hash 0 as index 0 because otherwise we'll save it at
-        * page index end (~0UL) and it causes truncate_inode_pages_range()
-        * to loop forever.
-        */
-       return ~0UL - (hash + !hash);
-}
-
 /** @} lite */
 
 #endif
diff --git a/drivers/staging/lustre/lustre/include/lustre_lmv.h b/drivers/staging/lustre/lustre/include/lustre_lmv.h
new file mode 100644 (file)
index 0000000..085e596
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * GPL HEADER START
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 only,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License version 2 for more details.  A copy is
+ * included in the COPYING file that accompanied this code.
+ *
+ * You should have received a copy of the GNU General Public License
+ * version 2 along with this program; If not, see
+ * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+ *
+ * GPL HEADER END
+ */
+/*
+ * Copyright (c) 2013, Intel Corporation.
+ */
+/*
+ * lustre/include/lustre_lmv.h
+ *
+ * Lustre LMV structures and functions.
+ *
+ * Author: Di Wang <di.wang@intel.com>
+ */
+
+#ifndef _LUSTRE_LMV_H
+#define _LUSTRE_LMV_H
+#include "lustre/lustre_idl.h"
+
+struct lmv_oinfo {
+       struct lu_fid   lmo_fid;
+       u32             lmo_mds;
+       struct inode    *lmo_root;
+};
+
+struct lmv_stripe_md {
+       __u32   lsm_md_magic;
+       __u32   lsm_md_stripe_count;
+       __u32   lsm_md_master_mdt_index;
+       __u32   lsm_md_hash_type;
+       __u32   lsm_md_layout_version;
+       __u32   lsm_md_default_count;
+       __u32   lsm_md_default_index;
+       char    lsm_md_pool_name[LOV_MAXPOOLNAME];
+       struct lmv_oinfo lsm_md_oinfo[0];
+};
+
+static inline bool
+lsm_md_eq(const struct lmv_stripe_md *lsm1, const struct lmv_stripe_md *lsm2)
+{
+       int idx;
+
+       if (lsm1->lsm_md_magic != lsm2->lsm_md_magic ||
+           lsm1->lsm_md_stripe_count != lsm2->lsm_md_stripe_count ||
+           lsm1->lsm_md_master_mdt_index != lsm2->lsm_md_master_mdt_index ||
+           lsm1->lsm_md_hash_type != lsm2->lsm_md_hash_type ||
+           lsm1->lsm_md_layout_version != lsm2->lsm_md_layout_version ||
+           !strcmp(lsm1->lsm_md_pool_name, lsm2->lsm_md_pool_name))
+               return false;
+
+       for (idx = 0; idx < lsm1->lsm_md_stripe_count; idx++) {
+               if (!lu_fid_eq(&lsm1->lsm_md_oinfo[idx].lmo_fid,
+                              &lsm2->lsm_md_oinfo[idx].lmo_fid))
+                       return false;
+       }
+
+       return true;
+}
+
+union lmv_mds_md;
+
+int lmv_unpack_md(struct obd_export *exp, struct lmv_stripe_md **lsmp,
+                 const union lmv_mds_md *lmm, int stripe_count);
+
+static inline int lmv_alloc_memmd(struct lmv_stripe_md **lsmp, int stripe_count)
+{
+       return lmv_unpack_md(NULL, lsmp, NULL, stripe_count);
+}
+
+static inline void lmv_free_memmd(struct lmv_stripe_md *lsm)
+{
+       lmv_unpack_md(NULL, &lsm, NULL, 0);
+}
+
+static inline void lmv1_le_to_cpu(struct lmv_mds_md_v1 *lmv_dst,
+                                 const struct lmv_mds_md_v1 *lmv_src)
+{
+       int i;
+
+       lmv_dst->lmv_magic = le32_to_cpu(lmv_src->lmv_magic);
+       lmv_dst->lmv_stripe_count = le32_to_cpu(lmv_src->lmv_stripe_count);
+       lmv_dst->lmv_master_mdt_index =
+               le32_to_cpu(lmv_src->lmv_master_mdt_index);
+       lmv_dst->lmv_hash_type = le32_to_cpu(lmv_src->lmv_hash_type);
+       lmv_dst->lmv_layout_version = le32_to_cpu(lmv_src->lmv_layout_version);
+
+       for (i = 0; i < lmv_src->lmv_stripe_count; i++)
+               fid_le_to_cpu(&lmv_dst->lmv_stripe_fids[i],
+                             &lmv_src->lmv_stripe_fids[i]);
+}
+
+static inline void lmv_le_to_cpu(union lmv_mds_md *lmv_dst,
+                                const union lmv_mds_md *lmv_src)
+{
+       switch (le32_to_cpu(lmv_src->lmv_magic)) {
+       case LMV_MAGIC_V1:
+               lmv1_le_to_cpu(&lmv_dst->lmv_md_v1, &lmv_src->lmv_md_v1);
+               break;
+       default:
+               break;
+       }
+}
+
+#endif
index b96e02317bfcf65bd1474a04fb6a18e1eea8cc1e..995b266932e33c71b4fe4cb43a9cd99cd20f6ffc 100644 (file)
@@ -277,12 +277,11 @@ static inline void llog_ctxt_put(struct llog_ctxt *ctxt)
        __llog_ctxt_put(NULL, ctxt);
 }
 
-static inline void llog_group_init(struct obd_llog_group *olg, int group)
+static inline void llog_group_init(struct obd_llog_group *olg)
 {
        init_waitqueue_head(&olg->olg_waitq);
        spin_lock_init(&olg->olg_lock);
        mutex_init(&olg->olg_cat_processing);
-       olg->olg_seq = group;
 }
 
 static inline int llog_group_set_ctxt(struct obd_llog_group *olg,
index fa62b95d351fd6a67869a437abca8ad3e0a41176..9549fb4987470865db8482f5f2efe80cbfd09b80 100644 (file)
@@ -96,7 +96,7 @@ static inline void mdc_get_rpc_lock(struct mdc_rpc_lock *lck,
                                    struct lookup_intent *it)
 {
        if (it && (it->it_op == IT_GETATTR || it->it_op == IT_LOOKUP ||
-                  it->it_op == IT_LAYOUT))
+                  it->it_op == IT_LAYOUT || it->it_op == IT_READDIR))
                return;
 
        /* This would normally block until the existing request finishes.
@@ -136,7 +136,7 @@ static inline void mdc_put_rpc_lock(struct mdc_rpc_lock *lck,
                                    struct lookup_intent *it)
 {
        if (it && (it->it_op == IT_GETATTR || it->it_op == IT_LOOKUP ||
-                  it->it_op == IT_LAYOUT))
+                  it->it_op == IT_LAYOUT || it->it_op == IT_READDIR))
                return;
 
        if (lck->rpcl_it == MDC_FAKE_RPCL_IT) { /* OBD_FAIL_MDC_RPCS_SEM */
@@ -163,27 +163,22 @@ static inline void mdc_put_rpc_lock(struct mdc_rpc_lock *lck,
 static inline void mdc_update_max_ea_from_body(struct obd_export *exp,
                                               struct mdt_body *body)
 {
-       if (body->valid & OBD_MD_FLMODEASIZE) {
+       if (body->mbo_valid & OBD_MD_FLMODEASIZE) {
                struct client_obd *cli = &exp->exp_obd->u.cli;
 
-               if (cli->cl_max_mds_easize < body->max_mdsize) {
-                       cli->cl_max_mds_easize = body->max_mdsize;
+               if (cli->cl_max_mds_easize < body->mbo_max_mdsize) {
+                       cli->cl_max_mds_easize = body->mbo_max_mdsize;
                        cli->cl_default_mds_easize =
-                           min_t(__u32, body->max_mdsize, PAGE_SIZE);
+                           min_t(__u32, body->mbo_max_mdsize, PAGE_SIZE);
                }
-               if (cli->cl_max_mds_cookiesize < body->max_cookiesize) {
-                       cli->cl_max_mds_cookiesize = body->max_cookiesize;
+               if (cli->cl_max_mds_cookiesize < body->mbo_max_cookiesize) {
+                       cli->cl_max_mds_cookiesize = body->mbo_max_cookiesize;
                        cli->cl_default_mds_cookiesize =
-                           min_t(__u32, body->max_cookiesize, PAGE_SIZE);
+                           min_t(__u32, body->mbo_max_cookiesize, PAGE_SIZE);
                }
        }
 }
 
-struct mdc_cache_waiter {
-       struct list_head              mcw_entry;
-       wait_queue_head_t            mcw_waitq;
-};
-
 /* mdc/mdc_locks.c */
 int it_open_error(int phase, struct lookup_intent *it);
 
index 4104bd9bd5c4dcb0f8d2d140a80ead0e42ed8986..23a7e4f78e9ab29eff0b51f91e497bcc85e5b33a 100644 (file)
@@ -58,9 +58,6 @@ struct mds_group_info {
 #define MDD_OBD_NAME     "mdd_obd"
 #define MDD_OBD_UUID     "mdd_obd_uuid"
 
-/* these are local flags, used only on the client, private */
-#define M_CHECK_STALE     0200000000
-
 /** @} mds */
 
 #endif
index 544a43c862b9185c18179e22f550b2460776d015..ca0e68366f066b7e0b8858883d392e790dad9e3f 100644 (file)
@@ -149,14 +149,11 @@ extern struct req_format RQF_MDS_GETATTR;
 extern struct req_format RQF_MDS_GETATTR_NAME;
 extern struct req_format RQF_MDS_CLOSE;
 extern struct req_format RQF_MDS_RELEASE_CLOSE;
-extern struct req_format RQF_MDS_PIN;
-extern struct req_format RQF_MDS_UNPIN;
 extern struct req_format RQF_MDS_CONNECT;
 extern struct req_format RQF_MDS_DISCONNECT;
 extern struct req_format RQF_MDS_GET_INFO;
 extern struct req_format RQF_MDS_READPAGE;
 extern struct req_format RQF_MDS_WRITEPAGE;
-extern struct req_format RQF_MDS_IS_SUBDIR;
 extern struct req_format RQF_MDS_DONE_WRITING;
 extern struct req_format RQF_MDS_REINT;
 extern struct req_format RQF_MDS_REINT_CREATE;
index 64559a16f4deaa8635fff733161203b194db42ee..414075f82390e07e892ab8d67f022c1d13464f76 100644 (file)
@@ -2,14 +2,21 @@
 #define _LUSTRE_VER_H_
 
 #define LUSTRE_MAJOR 2
-#define LUSTRE_MINOR 4
+#define LUSTRE_MINOR 5
 #define LUSTRE_PATCH 60
 #define LUSTRE_FIX 0
-#define LUSTRE_VERSION_STRING "2.4.60"
+#define LUSTRE_VERSION_STRING "2.5.99"
 
-#define LUSTRE_VERSION_CODE OBD_OCD_VERSION(LUSTRE_MAJOR, \
-                                           LUSTRE_MINOR, LUSTRE_PATCH, \
-                                           LUSTRE_FIX)
+#define OBD_OCD_VERSION(major, minor, patch, fix)                      \
+       (((major) << 24) + ((minor) << 16) + ((patch) << 8) + (fix))
+
+#define OBD_OCD_VERSION_MAJOR(version) ((int)((version) >> 24) & 255)
+#define OBD_OCD_VERSION_MINOR(version) ((int)((version) >> 16) & 255)
+#define OBD_OCD_VERSION_PATCH(version) ((int)((version) >>  8) & 255)
+#define OBD_OCD_VERSION_FIX(version)   ((int)((version) >>  0) & 255)
+
+#define LUSTRE_VERSION_CODE                                            \
+       OBD_OCD_VERSION(LUSTRE_MAJOR, LUSTRE_MINOR, LUSTRE_PATCH, LUSTRE_FIX)
 
 /*
  * If lustre version of client and servers it connects to differs by more
index a1bc2c478ff9a1d49a73f966f61ad667a1823d0a..f3d141b03556e1f9e1a0c5ef57875137d09c0b72 100644 (file)
 
 #include <linux/spinlock.h>
 
-#define IOC_OSC_TYPE    'h'
-#define IOC_OSC_MIN_NR       20
-#define IOC_OSC_SET_ACTIVE   _IOWR(IOC_OSC_TYPE, 21, struct obd_device *)
-#define IOC_OSC_MAX_NR       50
-
-#define IOC_MDC_TYPE    'i'
-#define IOC_MDC_MIN_NR       20
-#define IOC_MDC_MAX_NR       50
-
 #include "lustre/lustre_idl.h"
 #include "lustre_lib.h"
 #include "lu_ref.h"
@@ -181,27 +172,6 @@ struct brw_page {
        u32 flag;
 };
 
-/* llog contexts */
-enum llog_ctxt_id {
-       LLOG_CONFIG_ORIG_CTXT  =  0,
-       LLOG_CONFIG_REPL_CTXT,
-       LLOG_MDS_OST_ORIG_CTXT,
-       LLOG_MDS_OST_REPL_CTXT,
-       LLOG_SIZE_ORIG_CTXT,
-       LLOG_SIZE_REPL_CTXT,
-       LLOG_RD1_ORIG_CTXT,
-       LLOG_RD1_REPL_CTXT,
-       LLOG_TEST_ORIG_CTXT,
-       LLOG_TEST_REPL_CTXT,
-       LLOG_LOVEA_ORIG_CTXT,
-       LLOG_LOVEA_REPL_CTXT,
-       LLOG_CHANGELOG_ORIG_CTXT,       /**< changelog generation on mdd */
-       LLOG_CHANGELOG_REPL_CTXT,       /**< changelog access on clients */
-       LLOG_CHANGELOG_USER_ORIG_CTXT,  /**< for multiple changelog consumers */
-       LLOG_AGENT_ORIG_CTXT,           /**< agent requests generation on cdt */
-       LLOG_MAX_CTXTS
-};
-
 struct timeout_item {
        enum timeout_event ti_event;
        unsigned long    ti_timeout;
@@ -211,11 +181,12 @@ struct timeout_item {
        struct list_head         ti_chain;
 };
 
-#define OSC_MAX_RIF_DEFAULT       8
-#define OSC_MAX_RIF_MAX         256
-#define OSC_MAX_DIRTY_DEFAULT  (OSC_MAX_RIF_DEFAULT * 4)
-#define OSC_MAX_DIRTY_MB_MAX   2048     /* arbitrary, but < MAX_LONG bytes */
-#define OSC_DEFAULT_RESENDS      10
+#define OBD_MAX_RIF_DEFAULT    8
+#define OBD_MAX_RIF_MAX                512
+#define OSC_MAX_RIF_MAX                256
+#define OSC_MAX_DIRTY_DEFAULT  (OBD_MAX_RIF_DEFAULT * 4)
+#define OSC_MAX_DIRTY_MB_MAX   2048    /* arbitrary, but < MAX_LONG bytes */
+#define OSC_DEFAULT_RESENDS    10
 
 /* possible values for fo_sync_lock_cancel */
 enum {
@@ -225,9 +196,6 @@ enum {
        NUM_SYNC_ON_CANCEL_STATES
 };
 
-#define MDC_MAX_RIF_DEFAULT       8
-#define MDC_MAX_RIF_MAX         512
-
 enum obd_cl_sem_lock_class {
        OBD_CLI_SEM_NORMAL,
        OBD_CLI_SEM_MGC,
@@ -254,8 +222,8 @@ struct client_obd {
        struct sptlrpc_flavor    cl_flvr_mgc;   /* fixed flavor of mgc->mgs */
 
        /* the grant values are protected by loi_list_lock below */
-       long                 cl_dirty;   /* all _dirty_ in bytes */
-       long                 cl_dirty_max;     /* allowed w/o rpc */
+       long                 cl_dirty_pages;    /* all _dirty_ in pahges */
+       long                 cl_dirty_max_pages;/* allowed w/o rpc */
        long                 cl_dirty_transit; /* dirty synchronous */
        long                 cl_avail_grant;   /* bytes of credit for ost */
        long                 cl_lost_grant;    /* lost credits (trunc) */
@@ -275,7 +243,6 @@ struct client_obd {
         * the extent size. A chunk is max(PAGE_SIZE, OST block size)
         */
        int               cl_chunkbits;
-       int               cl_chunk;
        int               cl_extent_tax; /* extent overhead, by bytes */
 
        /* keep track of objects that have lois that contain pages which
@@ -474,7 +441,6 @@ struct niobuf_local {
        __u32           flags;
        struct page     *page;
        struct dentry   *dentry;
-       int             lnb_grant_used;
        int             rc;
 };
 
@@ -517,7 +483,6 @@ struct niobuf_local {
 #define N_LOCAL_TEMP_PAGE 0x10000000
 
 struct obd_trans_info {
-       __u64               oti_transno;
        __u64               oti_xid;
        /* Only used on the server side for tracking acks. */
        struct oti_req_ack_lock {
@@ -527,50 +492,11 @@ struct obd_trans_info {
        void                *oti_handle;
        struct llog_cookie       oti_onecookie;
        struct llog_cookie      *oti_logcookies;
-       int                   oti_numcookies;
-       /** synchronous write is needed */
-       unsigned long            oti_sync_write:1;
 
-       /* initial thread handling transaction */
-       struct ptlrpc_thread *oti_thread;
-       __u32               oti_conn_cnt;
        /** VBR: versions */
        __u64               oti_pre_version;
-       /** JobID */
-       char                *oti_jobid;
-
-       struct obd_uuid  *oti_ost_uuid;
 };
 
-static inline void oti_alloc_cookies(struct obd_trans_info *oti,
-                                    int num_cookies)
-{
-       if (!oti)
-               return;
-
-       if (num_cookies == 1)
-               oti->oti_logcookies = &oti->oti_onecookie;
-       else
-               oti->oti_logcookies = libcfs_kvzalloc(num_cookies * sizeof(oti->oti_onecookie),
-                                                     GFP_NOFS);
-
-       oti->oti_numcookies = num_cookies;
-}
-
-static inline void oti_free_cookies(struct obd_trans_info *oti)
-{
-       if (!oti || !oti->oti_logcookies)
-               return;
-
-       if (oti->oti_logcookies == &oti->oti_onecookie)
-               LASSERT(oti->oti_numcookies == 1);
-       else
-               kvfree(oti->oti_logcookies);
-
-       oti->oti_logcookies = NULL;
-       oti->oti_numcookies = 0;
-}
-
 /*
  * Events signalled through obd_notify() upcall-chain.
  */
@@ -616,7 +542,6 @@ struct target_recovery_data {
 };
 
 struct obd_llog_group {
-       int             olg_seq;
        struct llog_ctxt  *olg_ctxts[LLOG_MAX_CTXTS];
        wait_queue_head_t       olg_waitq;
        spinlock_t         olg_lock;
@@ -625,7 +550,6 @@ struct obd_llog_group {
 
 /* corresponds to one of the obd's */
 #define OBD_DEVICE_MAGIC       0XAB5CD6EF
-#define OBD_DEV_BY_DEVNAME      0xffffd0de
 
 struct lvfs_run_ctxt {
        struct dt_device *dt;
@@ -653,7 +577,6 @@ struct obd_device {
                      obd_starting:1,      /* started setup */
                      obd_force:1,       /* cleanup with > 0 obd refcount */
                      obd_fail:1,        /* cleanup with failover */
-                     obd_async_recov:1, /* allow asynchronous orphan cleanup */
                      obd_no_conn:1,       /* deny new connections */
                      obd_inactive:1,      /* device active/inactive
                                            * (for sysfs status only!!)
@@ -728,9 +651,6 @@ struct obd_device {
        struct completion       obd_kobj_unregister;
 };
 
-#define OBD_LLOG_FL_SENDNOW     0x0001
-#define OBD_LLOG_FL_EXIT       0x0002
-
 enum obd_cleanup_stage {
 /* Special case hack for MDS LOVs */
        OBD_CLEANUP_EARLY,
@@ -740,8 +660,6 @@ enum obd_cleanup_stage {
 
 /* get/set_info keys */
 #define KEY_ASYNC             "async"
-#define KEY_BLOCKSIZE_BITS      "blocksize_bits"
-#define KEY_BLOCKSIZE     "blocksize"
 #define KEY_CHANGELOG_CLEAR     "changelog_clear"
 #define KEY_FID2PATH       "fid2path"
 #define KEY_CHECKSUM       "checksum"
@@ -753,13 +671,11 @@ enum obd_cleanup_stage {
 #define KEY_GRANT_SHRINK       "grant_shrink"
 #define KEY_HSM_COPYTOOL_SEND   "hsm_send"
 #define KEY_INIT_RECOV_BACKUP   "init_recov_bk"
-#define KEY_INIT_RECOV   "initial_recov"
 #define KEY_INTERMDS       "inter_mds"
 #define KEY_LAST_ID         "last_id"
 #define KEY_LAST_FID           "last_fid"
 #define KEY_LOCK_TO_STRIPE      "lock_to_stripe"
 #define KEY_LOVDESC         "lovdesc"
-#define KEY_LOV_IDX         "lov_idx"
 #define KEY_MAX_EASIZE         "max_easize"
 #define KEY_DEFAULT_EASIZE     "default_easize"
 #define KEY_MDS_CONN       "mds_conn"
@@ -772,11 +688,9 @@ enum obd_cleanup_stage {
 /*      KEY_SET_INFO in lustre_idl.h */
 #define KEY_SPTLRPC_CONF       "sptlrpc_conf"
 #define KEY_CONNECT_FLAG       "connect_flags"
-#define KEY_SYNC_LOCK_CANCEL    "sync_lock_cancel"
 
 #define KEY_CACHE_SET          "cache_set"
 #define KEY_CACHE_LRU_SHRINK   "cache_lru_shrink"
-#define KEY_CHANGELOG_INDEX    "changelog_index"
 
 struct lu_context;
 
@@ -801,9 +715,11 @@ static inline int it_to_lock_mode(struct lookup_intent *it)
        /* CREAT needs to be tested before open (both could be set) */
        if (it->it_op & IT_CREAT)
                return LCK_CW;
-       else if (it->it_op & (IT_READDIR | IT_GETATTR | IT_OPEN | IT_LOOKUP |
+       else if (it->it_op & (IT_GETATTR | IT_OPEN | IT_LOOKUP |
                              IT_LAYOUT))
                return LCK_CR;
+       else if (it->it_op & IT_READDIR)
+               return LCK_PR;
        else if (it->it_op &  IT_GETXATTR)
                return LCK_PR;
        else if (it->it_op &  IT_SETXATTR)
@@ -831,6 +747,7 @@ struct md_op_data {
        __u32              op_fsgid;
        cfs_cap_t              op_cap;
        void               *op_data;
+       size_t                  op_data_size;
 
        /* iattr fields and blocks. */
        struct iattr        op_attr;
@@ -845,9 +762,6 @@ struct md_op_data {
        /* Various operation flags. */
        enum mds_op_bias        op_bias;
 
-       /* Operation type */
-       __u32              op_opc;
-
        /* Used by readdir */
        __u64              op_offset;
 
@@ -864,9 +778,21 @@ struct md_op_data {
        struct lustre_handle    op_lease_handle;
 };
 
+#define op_stripe_offset       op_ioepoch
+#define op_max_pages           op_valid
+
+struct md_callback {
+       int (*md_blocking_ast)(struct ldlm_lock *lock,
+                              struct ldlm_lock_desc *desc,
+                              void *data, int flag);
+};
+
 enum op_cli_flags {
        CLI_SET_MEA     = 1 << 0,
        CLI_RM_ENTRY    = 1 << 1,
+       CLI_HASH64      = BIT(2),
+       CLI_API32       = BIT(3),
+       CLI_MIGRATE     = BIT(4),
 };
 
 struct md_enqueue_info;
@@ -894,8 +820,6 @@ struct obd_ops {
                              __u32 keylen, void *key,
                              __u32 vallen, void *val,
                              struct ptlrpc_request_set *set);
-       int (*attach)(struct obd_device *dev, u32 len, void *data);
-       int (*detach)(struct obd_device *dev);
        int (*setup)(struct obd_device *dev, struct lustre_cfg *cfg);
        int (*precleanup)(struct obd_device *dev,
                          enum obd_cleanup_stage cleanup_stage);
@@ -927,8 +851,8 @@ struct obd_ops {
        int (*fid_fini)(struct obd_device *obd);
 
        /* Allocate new fid according to passed @hint. */
-       int (*fid_alloc)(struct obd_export *exp, struct lu_fid *fid,
-                        struct md_op_data *op_data);
+       int (*fid_alloc)(const struct lu_env *env, struct obd_export *exp,
+                        struct lu_fid *fid, struct md_op_data *op_data);
 
        /*
         * Object with @fid is getting deleted, we may want to do something
@@ -972,8 +896,6 @@ struct obd_ops {
                        struct niobuf_remote *remote, int pages,
                        struct niobuf_local *local,
                        struct obd_trans_info *oti, int rc);
-       int (*find_cbdata)(struct obd_export *, struct lov_stripe_md *,
-                          ldlm_iterator_t it, void *data);
        int (*init_export)(struct obd_export *exp);
        int (*destroy_export)(struct obd_export *exp);
 
@@ -1009,27 +931,11 @@ struct obd_ops {
         */
 };
 
-enum {
-       LUSTRE_OPC_MKDIR    = (1 << 0),
-       LUSTRE_OPC_SYMLINK  = (1 << 1),
-       LUSTRE_OPC_MKNOD    = (1 << 2),
-       LUSTRE_OPC_CREATE   = (1 << 3),
-       LUSTRE_OPC_ANY      = (1 << 4)
-};
-
 /* lmv structures */
-#define MEA_MAGIC_LAST_CHAR      0xb2221ca1
-#define MEA_MAGIC_ALL_CHARS      0xb222a11c
-#define MEA_MAGIC_HASH_SEGMENT   0xb222a11b
-
-#define MAX_HASH_SIZE_32        0x7fffffffUL
-#define MAX_HASH_SIZE      0x7fffffffffffffffULL
-#define MAX_HASH_HIGHEST_BIT     0x1000000000000000ULL
-
 struct lustre_md {
        struct mdt_body  *body;
        struct lov_stripe_md    *lsm;
-       struct lmv_stripe_md    *mea;
+       struct lmv_stripe_md    *lmv;
 #ifdef CONFIG_FS_POSIX_ACL
        struct posix_acl        *posix_acl;
 #endif
@@ -1045,12 +951,11 @@ struct md_open_data {
 };
 
 struct lookup_intent;
+struct cl_attr;
 
 struct md_ops {
        int (*getstatus)(struct obd_export *, struct lu_fid *);
        int (*null_inode)(struct obd_export *, const struct lu_fid *);
-       int (*find_cbdata)(struct obd_export *, const struct lu_fid *,
-                          ldlm_iterator_t, void *);
        int (*close)(struct obd_export *, struct md_op_data *,
                     struct md_open_data *, struct ptlrpc_request **);
        int (*create)(struct obd_export *, struct md_op_data *,
@@ -1059,15 +964,15 @@ struct md_ops {
        int (*done_writing)(struct obd_export *, struct md_op_data  *,
                            struct md_open_data *);
        int (*enqueue)(struct obd_export *, struct ldlm_enqueue_info *,
+                      const ldlm_policy_data_t *,
                       struct lookup_intent *, struct md_op_data *,
-                      struct lustre_handle *, void *, int,
-                      struct ptlrpc_request **, __u64);
+                      struct lustre_handle *, __u64);
        int (*getattr)(struct obd_export *, struct md_op_data *,
                       struct ptlrpc_request **);
        int (*getattr_name)(struct obd_export *, struct md_op_data *,
                            struct ptlrpc_request **);
        int (*intent_lock)(struct obd_export *, struct md_op_data *,
-                          void *, int, struct lookup_intent *, int,
+                          struct lookup_intent *,
                           struct ptlrpc_request **,
                           ldlm_blocking_callback, __u64);
        int (*link)(struct obd_export *, struct md_op_data *,
@@ -1075,17 +980,14 @@ struct md_ops {
        int (*rename)(struct obd_export *, struct md_op_data *,
                      const char *, int, const char *, int,
                      struct ptlrpc_request **);
-       int (*is_subdir)(struct obd_export *, const struct lu_fid *,
-                        const struct lu_fid *,
-                          struct ptlrpc_request **);
        int (*setattr)(struct obd_export *, struct md_op_data *, void *,
                       int, void *, int, struct ptlrpc_request **,
                         struct md_open_data **mod);
        int (*sync)(struct obd_export *, const struct lu_fid *,
                    struct ptlrpc_request **);
-       int (*readpage)(struct obd_export *, struct md_op_data *,
-                       struct page **, struct ptlrpc_request **);
-
+       int (*read_page)(struct obd_export *, struct md_op_data *,
+                        struct md_callback *cb_op, __u64 hash_offset,
+                        struct page **ppage);
        int (*unlink)(struct obd_export *, struct md_op_data *,
                      struct ptlrpc_request **);
 
@@ -1105,12 +1007,20 @@ struct md_ops {
 
        int (*free_lustre_md)(struct obd_export *, struct lustre_md *);
 
+       int (*merge_attr)(struct obd_export *,
+                         const struct lmv_stripe_md *lsm,
+                         struct cl_attr *attr);
+
+       int (*update_lsm_md)(struct obd_export *, struct lmv_stripe_md *lsm,
+                            struct mdt_body *, ldlm_blocking_callback);
+
        int (*set_open_replay_data)(struct obd_export *,
                                    struct obd_client_handle *,
                                    struct lookup_intent *);
        int (*clear_open_replay_data)(struct obd_export *,
                                      struct obd_client_handle *);
-       int (*set_lock_data)(struct obd_export *, __u64 *, void *, __u64 *);
+       int (*set_lock_data)(struct obd_export *, const struct lustre_handle *,
+                            void *, __u64 *);
 
        enum ldlm_mode (*lock_match)(struct obd_export *, __u64,
                                     const struct lu_fid *, enum ldlm_type,
@@ -1121,6 +1031,11 @@ struct md_ops {
                             ldlm_policy_data_t *, enum ldlm_mode,
                             enum ldlm_cancel_flags flags, void *opaque);
 
+       int (*get_fid_from_lsm)(struct obd_export *,
+                               const struct lmv_stripe_md *,
+                               const char *name, int namelen,
+                               struct lu_fid *fid);
+
        int (*intent_getattr_async)(struct obd_export *,
                                    struct md_enqueue_info *,
                                    struct ldlm_enqueue_info *);
@@ -1164,10 +1079,6 @@ static inline const struct lsm_operations *lsm_op_find(int magic)
        }
 }
 
-/* Requests for obd_extent_calc() */
-#define OBD_CALC_STRIPE_START   1
-#define OBD_CALC_STRIPE_END     2
-
 static inline struct md_open_data *obd_mod_alloc(void)
 {
        struct md_open_data *mod;
@@ -1259,4 +1170,28 @@ static inline int cli_brw_size(struct obd_device *obd)
        return obd->u.cli.cl_max_pages_per_rpc << PAGE_SHIFT;
 }
 
+/*
+ * when RPC size or the max RPCs in flight is increased, the max dirty pages
+ * of the client should be increased accordingly to avoid sending fragmented
+ * RPCs over the network when the client runs out of the maximum dirty space
+ * when so many RPCs are being generated.
+ */
+static inline void client_adjust_max_dirty(struct client_obd *cli)
+{
+       /* initializing */
+       if (cli->cl_dirty_max_pages <= 0)
+               cli->cl_dirty_max_pages =
+                       (OSC_MAX_DIRTY_DEFAULT * 1024 * 1024) >> PAGE_SHIFT;
+       else {
+               long dirty_max = cli->cl_max_rpcs_in_flight *
+                                cli->cl_max_pages_per_rpc;
+
+               if (dirty_max > cli->cl_dirty_max_pages)
+                       cli->cl_dirty_max_pages = dirty_max;
+       }
+
+       if (cli->cl_dirty_max_pages > totalram_pages / 8)
+               cli->cl_dirty_max_pages = totalram_pages / 8;
+}
+
 #endif /* __OBD_H */
index 6482a937000bc87c4c052927040f0bcd7e659c7a..9702ad49dd4886465e977a472f8a646d026d206e 100644 (file)
@@ -56,7 +56,6 @@
 #define OBD_STATFS_FOR_MDT0    0x0008  /* The statfs is only for retrieving
                                         * information from MDT0.
                                         */
-#define OBD_FL_PUNCH       0x00000001  /* To indicate it is punch operation */
 
 /* OBD Device Declarations */
 extern struct obd_device *obd_devs[MAX_OBD_DEVICES];
@@ -97,6 +96,11 @@ int obd_zombie_impexp_init(void);
 void obd_zombie_impexp_stop(void);
 void obd_zombie_barrier(void);
 
+int obd_get_request_slot(struct client_obd *cli);
+void obd_put_request_slot(struct client_obd *cli);
+__u32 obd_get_max_rpcs_in_flight(struct client_obd *cli);
+int obd_set_max_rpcs_in_flight(struct client_obd *cli, __u32 max);
+
 struct llog_handle;
 struct llog_rec_hdr;
 typedef int (*llog_cb_t)(const struct lu_env *, struct llog_handle *,
@@ -265,10 +269,10 @@ static inline int lprocfs_climp_check(struct obd_device *obd)
 struct inode;
 struct lu_attr;
 struct obdo;
-void obdo_refresh_inode(struct inode *dst, struct obdo *src, u32 valid);
+void obdo_refresh_inode(struct inode *dst, const struct obdo *src, u32 valid);
 
-void obdo_to_ioobj(struct obdo *oa, struct obd_ioobj *ioobj);
-void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, u32 valid);
+void obdo_to_ioobj(const struct obdo *oa, struct obd_ioobj *ioobj);
+void md_from_obdo(struct md_op_data *op_data, const struct obdo *oa, u32 valid);
 
 #define OBT(dev)       (dev)->obd_type
 #define OBP(dev, op)    (dev)->obd_type->typ_dt_ops->op
@@ -925,7 +929,8 @@ static inline int obd_fid_fini(struct obd_device *obd)
        return rc;
 }
 
-static inline int obd_fid_alloc(struct obd_export *exp,
+static inline int obd_fid_alloc(const struct lu_env *env,
+                               struct obd_export *exp,
                                struct lu_fid *fid,
                                struct md_op_data *op_data)
 {
@@ -934,7 +939,7 @@ static inline int obd_fid_alloc(struct obd_export *exp,
        EXP_CHECK_DT_OP(exp, fid_alloc);
        EXP_COUNTER_INCREMENT(exp, fid_alloc);
 
-       rc = OBP(exp->exp_obd, fid_alloc)(exp, fid, op_data);
+       rc = OBP(exp->exp_obd, fid_alloc)(env, exp, fid, op_data);
        return rc;
 }
 
@@ -1172,19 +1177,6 @@ static inline int obd_iocontrol(unsigned int cmd, struct obd_export *exp,
        return rc;
 }
 
-static inline int obd_find_cbdata(struct obd_export *exp,
-                                 struct lov_stripe_md *lsm,
-                                 ldlm_iterator_t it, void *data)
-{
-       int rc;
-
-       EXP_CHECK_DT_OP(exp, find_cbdata);
-       EXP_COUNTER_INCREMENT(exp, find_cbdata);
-
-       rc = OBP(exp->exp_obd, find_cbdata)(exp, lsm, it, data);
-       return rc;
-}
-
 static inline void obd_import_event(struct obd_device *obd,
                                    struct obd_import *imp,
                                    enum obd_import_event event)
@@ -1210,12 +1202,7 @@ static inline int obd_notify(struct obd_device *obd,
        if (rc)
                return rc;
 
-       /* the check for async_recov is a complete hack - I'm hereby
-        * overloading the meaning to also mean "this was called from
-        * mds_postsetup".  I know that my mds is able to handle notifies
-        * by this point, and it needs to get them to execute mds_postrecov.
-        */
-       if (!obd->obd_set_up && !obd->obd_async_recov) {
+       if (!obd->obd_set_up) {
                CDEBUG(D_HA, "obd %s not set up\n", obd->obd_name);
                return -EINVAL;
        }
@@ -1358,18 +1345,6 @@ static inline int md_null_inode(struct obd_export *exp,
        return rc;
 }
 
-static inline int md_find_cbdata(struct obd_export *exp,
-                                const struct lu_fid *fid,
-                                ldlm_iterator_t it, void *data)
-{
-       int rc;
-
-       EXP_CHECK_MD_OP(exp, find_cbdata);
-       EXP_MD_COUNTER_INCREMENT(exp, find_cbdata);
-       rc = MDP(exp->exp_obd, find_cbdata)(exp, fid, it, data);
-       return rc;
-}
-
 static inline int md_close(struct obd_export *exp, struct md_op_data *op_data,
                           struct md_open_data *mod,
                           struct ptlrpc_request **request)
@@ -1410,19 +1385,18 @@ static inline int md_done_writing(struct obd_export *exp,
 
 static inline int md_enqueue(struct obd_export *exp,
                             struct ldlm_enqueue_info *einfo,
+                            const ldlm_policy_data_t *policy,
                             struct lookup_intent *it,
                             struct md_op_data *op_data,
                             struct lustre_handle *lockh,
-                            void *lmm, int lmmsize,
-                            struct ptlrpc_request **req,
                             __u64 extra_lock_flags)
 {
        int rc;
 
        EXP_CHECK_MD_OP(exp, enqueue);
        EXP_MD_COUNTER_INCREMENT(exp, enqueue);
-       rc = MDP(exp->exp_obd, enqueue)(exp, einfo, it, op_data, lockh,
-                                       lmm, lmmsize, req, extra_lock_flags);
+       rc = MDP(exp->exp_obd, enqueue)(exp, einfo, policy, it, op_data, lockh,
+                                       extra_lock_flags);
        return rc;
 }
 
@@ -1439,9 +1413,9 @@ static inline int md_getattr_name(struct obd_export *exp,
 }
 
 static inline int md_intent_lock(struct obd_export *exp,
-                                struct md_op_data *op_data, void *lmm,
-                                int lmmsize, struct lookup_intent *it,
-                                int lookup_flags, struct ptlrpc_request **reqp,
+                                struct md_op_data *op_data,
+                                struct lookup_intent *it,
+                                struct ptlrpc_request **reqp,
                                 ldlm_blocking_callback cb_blocking,
                                 __u64 extra_lock_flags)
 {
@@ -1449,9 +1423,8 @@ static inline int md_intent_lock(struct obd_export *exp,
 
        EXP_CHECK_MD_OP(exp, intent_lock);
        EXP_MD_COUNTER_INCREMENT(exp, intent_lock);
-       rc = MDP(exp->exp_obd, intent_lock)(exp, op_data, lmm, lmmsize,
-                                           it, lookup_flags, reqp, cb_blocking,
-                                           extra_lock_flags);
+       rc = MDP(exp->exp_obd, intent_lock)(exp, op_data, it, reqp,
+                                           cb_blocking, extra_lock_flags);
        return rc;
 }
 
@@ -1479,19 +1452,6 @@ static inline int md_rename(struct obd_export *exp, struct md_op_data *op_data,
        return rc;
 }
 
-static inline int md_is_subdir(struct obd_export *exp,
-                              const struct lu_fid *pfid,
-                              const struct lu_fid *cfid,
-                              struct ptlrpc_request **request)
-{
-       int rc;
-
-       EXP_CHECK_MD_OP(exp, is_subdir);
-       EXP_MD_COUNTER_INCREMENT(exp, is_subdir);
-       rc = MDP(exp->exp_obd, is_subdir)(exp, pfid, cfid, request);
-       return rc;
-}
-
 static inline int md_setattr(struct obd_export *exp, struct md_op_data *op_data,
                             void *ea, int ealen, void *ea2, int ea2len,
                             struct ptlrpc_request **request,
@@ -1517,15 +1477,18 @@ static inline int md_sync(struct obd_export *exp, const struct lu_fid *fid,
        return rc;
 }
 
-static inline int md_readpage(struct obd_export *exp, struct md_op_data *opdata,
-                             struct page **pages,
-                             struct ptlrpc_request **request)
+static inline int md_read_page(struct obd_export *exp,
+                              struct md_op_data *op_data,
+                              struct md_callback *cb_op,
+                              __u64  hash_offset,
+                              struct page **ppage)
 {
        int rc;
 
-       EXP_CHECK_MD_OP(exp, readpage);
-       EXP_MD_COUNTER_INCREMENT(exp, readpage);
-       rc = MDP(exp->exp_obd, readpage)(exp, opdata, pages, request);
+       EXP_CHECK_MD_OP(exp, read_page);
+       EXP_MD_COUNTER_INCREMENT(exp, read_page);
+       rc = MDP(exp->exp_obd, read_page)(exp, op_data, cb_op, hash_offset,
+                                         ppage);
        return rc;
 }
 
@@ -1559,6 +1522,25 @@ static inline int md_free_lustre_md(struct obd_export *exp,
        return MDP(exp->exp_obd, free_lustre_md)(exp, md);
 }
 
+static inline int md_update_lsm_md(struct obd_export *exp,
+                                  struct lmv_stripe_md *lsm,
+                                  struct mdt_body *body,
+                                  ldlm_blocking_callback cb)
+{
+       EXP_CHECK_MD_OP(exp, update_lsm_md);
+       EXP_MD_COUNTER_INCREMENT(exp, update_lsm_md);
+       return MDP(exp->exp_obd, update_lsm_md)(exp, lsm, body, cb);
+}
+
+static inline int md_merge_attr(struct obd_export *exp,
+                               const struct lmv_stripe_md *lsm,
+                               struct cl_attr *attr)
+{
+       EXP_CHECK_MD_OP(exp, merge_attr);
+       EXP_MD_COUNTER_INCREMENT(exp, merge_attr);
+       return MDP(exp->exp_obd, merge_attr)(exp, lsm, attr);
+}
+
 static inline int md_setxattr(struct obd_export *exp, const struct lu_fid *fid,
                              u64 valid, const char *name,
                              const char *input, int input_size,
@@ -1603,7 +1585,8 @@ static inline int md_clear_open_replay_data(struct obd_export *exp,
 }
 
 static inline int md_set_lock_data(struct obd_export *exp,
-                                  __u64 *lockh, void *data, __u64 *bits)
+                                  const struct lustre_handle *lockh,
+                                  void *data, __u64 *bits)
 {
        EXP_CHECK_MD_OP(exp, set_lock_data);
        EXP_MD_COUNTER_INCREMENT(exp, set_lock_data);
@@ -1674,6 +1657,19 @@ static inline int md_revalidate_lock(struct obd_export *exp,
        return rc;
 }
 
+static inline int md_get_fid_from_lsm(struct obd_export *exp,
+                                     const struct lmv_stripe_md *lsm,
+                                     const char *name, int namelen,
+                                     struct lu_fid *fid)
+{
+       int rc;
+
+       EXP_CHECK_MD_OP(exp, get_fid_from_lsm);
+       EXP_MD_COUNTER_INCREMENT(exp, get_fid_from_lsm);
+       rc = MDP(exp->exp_obd, get_fid_from_lsm)(exp, lsm, name, namelen, fid);
+       return rc;
+}
+
 /* OBD Metadata Support */
 
 int obd_init_caches(void);
@@ -1682,16 +1678,6 @@ void obd_cleanup_caches(void);
 /* support routines */
 extern struct kmem_cache *obdo_cachep;
 
-static inline void obdo2fid(struct obdo *oa, struct lu_fid *fid)
-{
-       /* something here */
-}
-
-static inline void fid2obdo(struct lu_fid *fid, struct obdo *oa)
-{
-       /* something here */
-}
-
 typedef int (*register_lwp_cb)(void *data);
 
 struct lwp_register_item {
@@ -1734,4 +1720,13 @@ extern spinlock_t obd_types_lock;
 /* prng.c */
 #define ll_generate_random_uuid(uuid_out) cfs_get_random_bytes(uuid_out, sizeof(class_uuid_t))
 
+/* root squash info */
+struct rw_semaphore;
+struct root_squash_info {
+       uid_t                   rsi_uid;
+       gid_t                   rsi_gid;
+       struct list_head        rsi_nosquash_nids;
+       struct rw_semaphore     rsi_sem;
+};
+
 #endif /* __LINUX_OBD_CLASS_H */
index 845e64a56c21b9a7532e9d5158a3f3a37b7913b8..4d7a5c8dfe9a7eaf90d414cf23b5ee9f7a2f97d6 100644 (file)
@@ -52,9 +52,7 @@ extern unsigned int at_max;
 extern unsigned int at_history;
 extern int at_early_margin;
 extern int at_extra;
-extern unsigned int obd_sync_filter;
 extern unsigned int obd_max_dirty_pages;
-extern atomic_t obd_unstable_pages;
 extern atomic_t obd_dirty_pages;
 extern atomic_t obd_dirty_transit_pages;
 extern char obd_jobid_var[];
@@ -117,17 +115,17 @@ extern char obd_jobid_var[];
  * running on a backup server. (If it's too low, import_select_connection
  * will increase the timeout anyhow.)
  */
-#define INITIAL_CONNECT_TIMEOUT max(CONNECTION_SWITCH_MIN, obd_timeout/20)
+#define INITIAL_CONNECT_TIMEOUT max(CONNECTION_SWITCH_MIN, obd_timeout / 20)
 /* The max delay between connects is SWITCH_MAX + SWITCH_INC + INITIAL */
 #define RECONNECT_DELAY_MAX (CONNECTION_SWITCH_MAX + CONNECTION_SWITCH_INC + \
                             INITIAL_CONNECT_TIMEOUT)
 /* The min time a target should wait for clients to reconnect in recovery */
-#define OBD_RECOVERY_TIME_MIN    (2*RECONNECT_DELAY_MAX)
+#define OBD_RECOVERY_TIME_MIN    (2 * RECONNECT_DELAY_MAX)
 #define OBD_IR_FACTOR_MIN       1
 #define OBD_IR_FACTOR_MAX       10
-#define OBD_IR_FACTOR_DEFAULT    (OBD_IR_FACTOR_MAX/2)
+#define OBD_IR_FACTOR_DEFAULT    (OBD_IR_FACTOR_MAX / 2)
 /* default timeout for the MGS to become IR_FULL */
-#define OBD_IR_MGS_TIMEOUT       (4*obd_timeout)
+#define OBD_IR_MGS_TIMEOUT       (4 * obd_timeout)
 #define LONG_UNLINK 300          /* Unlink should happen before now */
 
 /**
@@ -318,6 +316,10 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_LDLM_AGL_NOLOCK        0x31b
 #define OBD_FAIL_LDLM_OST_LVB           0x31c
 #define OBD_FAIL_LDLM_ENQUEUE_HANG      0x31d
+#define OBD_FAIL_LDLM_CP_CB_WAIT2       0x320
+#define OBD_FAIL_LDLM_CP_CB_WAIT3       0x321
+#define OBD_FAIL_LDLM_CP_CB_WAIT4       0x322
+#define OBD_FAIL_LDLM_CP_CB_WAIT5       0x323
 
 /* LOCKLESS IO */
 #define OBD_FAIL_LDLM_SET_CONTENTION     0x385
@@ -400,6 +402,7 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_MDC_GETATTR_ENQUEUE     0x803
 #define OBD_FAIL_MDC_RPCS_SEM           0x804
 #define OBD_FAIL_MDC_LIGHTWEIGHT        0x805
+#define OBD_FAIL_MDC_CLOSE              0x806
 
 #define OBD_FAIL_MGS                0x900
 #define OBD_FAIL_MGS_ALL_REQUEST_NET     0x901
@@ -455,6 +458,7 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_LOV_INIT                          0x1403
 #define OBD_FAIL_GLIMPSE_DELAY                     0x1404
 #define OBD_FAIL_LLITE_XATTR_ENOMEM                0x1405
+#define OBD_FAIL_GETATTR_DELAY                     0x1409
 
 #define OBD_FAIL_FID_INDIR     0x1501
 #define OBD_FAIL_FID_INLMA     0x1502
@@ -474,11 +478,15 @@ extern char obd_jobid_var[];
 #define OBD_FAIL_LFSCK_CRASH           0x160a
 #define OBD_FAIL_LFSCK_NO_AUTO         0x160b
 #define OBD_FAIL_LFSCK_NO_DOUBLESCAN   0x160c
+#define OBD_FAIL_LFSCK_INVALID_PFID    0x1619
 
 /* UPDATE */
 #define OBD_FAIL_UPDATE_OBJ_NET                        0x1700
 #define OBD_FAIL_UPDATE_OBJ_NET_REP            0x1701
 
+/* LMV */
+#define OBD_FAIL_UNKNOWN_LMV_STRIPE            0x1901
+
 /* Assign references to moved code to reduce code changes */
 #define OBD_FAIL_PRECHECK(id)             CFS_FAIL_PRECHECK(id)
 #define OBD_FAIL_CHECK(id)                   CFS_FAIL_CHECK(id)
@@ -520,7 +528,8 @@ do {                                                                              \
        POISON_PTR(ptr);                                                      \
 } while (0)
 
-#define KEY_IS(str) \
-       (keylen >= (sizeof(str)-1) && memcmp(key, str, (sizeof(str)-1)) == 0)
+#define KEY_IS(str)                                    \
+       (keylen >= (sizeof(str) - 1) &&                 \
+       memcmp(key, str, (sizeof(str) - 1)) == 0)
 
 #endif
index f5023d9b78f5d833de8602d64b937aa8b8172233..ecf472e4813da118603eae0701696ce9094153b5 100644 (file)
@@ -221,7 +221,7 @@ void ldlm_extent_unlink_lock(struct ldlm_lock *lock)
 }
 
 void ldlm_extent_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy,
-                                    ldlm_policy_data_t *lpolicy)
+                                     ldlm_policy_data_t *lpolicy)
 {
        memset(lpolicy, 0, sizeof(*lpolicy));
        lpolicy->l_extent.start = wpolicy->l_extent.start;
@@ -230,7 +230,7 @@ void ldlm_extent_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy,
 }
 
 void ldlm_extent_policy_local_to_wire(const ldlm_policy_data_t *lpolicy,
-                                    ldlm_wire_policy_data_t *wpolicy)
+                                     ldlm_wire_policy_data_t *wpolicy)
 {
        memset(wpolicy, 0, sizeof(*wpolicy));
        wpolicy->l_extent.start = lpolicy->l_extent.start;
index d6b61bc391357191f1a35fe5ade6ae3309481b84..78a84509fe76890501a3cb829d0f3e6207de5bc8 100644 (file)
@@ -97,7 +97,7 @@ ldlm_flock_destroy(struct ldlm_lock *lock, enum ldlm_mode mode, __u64 flags)
        LASSERT(hlist_unhashed(&lock->l_exp_flock_hash));
 
        list_del_init(&lock->l_res_link);
-       if (flags == LDLM_FL_WAIT_NOREPROC && !ldlm_is_failed(lock)) {
+       if (flags == LDLM_FL_WAIT_NOREPROC) {
                /* client side - set a flag to prevent sending a CANCEL */
                lock->l_flags |= LDLM_FL_LOCAL_ONLY | LDLM_FL_CBPENDING;
 
@@ -166,7 +166,7 @@ reprocess:
                 */
                list_for_each(tmp, &res->lr_granted) {
                        lock = list_entry(tmp, struct ldlm_lock,
-                                             l_res_link);
+                                         l_res_link);
                        if (ldlm_same_flock_owner(lock, req)) {
                                ownlocks = tmp;
                                break;
@@ -182,7 +182,7 @@ reprocess:
                 */
                list_for_each(tmp, &res->lr_granted) {
                        lock = list_entry(tmp, struct ldlm_lock,
-                                             l_res_link);
+                                         l_res_link);
 
                        if (ldlm_same_flock_owner(lock, req)) {
                                if (!ownlocks)
@@ -339,10 +339,10 @@ reprocess:
                                                lock->l_granted_mode, &null_cbs,
                                                NULL, 0, LVB_T_NONE);
                        lock_res_and_lock(req);
-                       if (!new2) {
+                       if (IS_ERR(new2)) {
                                ldlm_flock_destroy(req, lock->l_granted_mode,
                                                   *flags);
-                               *err = -ENOLCK;
+                               *err = PTR_ERR(new2);
                                return LDLM_ITER_STOP;
                        }
                        goto reprocess;
@@ -455,27 +455,21 @@ ldlm_flock_completion_ast(struct ldlm_lock *lock, __u64 flags, void *data)
        enum ldlm_error             err;
        int                          rc = 0;
 
+       OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CP_CB_WAIT2, 4);
+       if (OBD_FAIL_PRECHECK(OBD_FAIL_LDLM_CP_CB_WAIT3)) {
+               lock_res_and_lock(lock);
+               lock->l_flags |= LDLM_FL_FAIL_LOC;
+               unlock_res_and_lock(lock);
+               OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CP_CB_WAIT3, 4);
+       }
        CDEBUG(D_DLMTRACE, "flags: 0x%llx data: %p getlk: %p\n",
               flags, data, getlk);
 
-       /* Import invalidation. We need to actually release the lock
-        * references being held, so that it can go away. No point in
-        * holding the lock even if app still believes it has it, since
-        * server already dropped it anyway. Only for granted locks too.
-        */
-       if ((lock->l_flags & (LDLM_FL_FAILED|LDLM_FL_LOCAL_ONLY)) ==
-           (LDLM_FL_FAILED|LDLM_FL_LOCAL_ONLY)) {
-               if (lock->l_req_mode == lock->l_granted_mode &&
-                   lock->l_granted_mode != LCK_NL && !data)
-                       ldlm_lock_decref_internal(lock, lock->l_req_mode);
-
-               /* Need to wake up the waiter if we were evicted */
-               wake_up(&lock->l_waitq);
-               return 0;
-       }
-
        LASSERT(flags != LDLM_FL_WAIT_NOREPROC);
 
+       if (flags & LDLM_FL_FAILED)
+               goto granted;
+
        if (!(flags & (LDLM_FL_BLOCK_WAIT | LDLM_FL_BLOCK_GRANTED |
                       LDLM_FL_BLOCK_CONV))) {
                if (!data)
@@ -514,12 +508,21 @@ ldlm_flock_completion_ast(struct ldlm_lock *lock, __u64 flags, void *data)
 granted:
        OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CP_CB_WAIT, 10);
 
-       if (ldlm_is_failed(lock)) {
-               LDLM_DEBUG(lock, "client-side enqueue waking up: failed");
-               return -EIO;
+       if (OBD_FAIL_PRECHECK(OBD_FAIL_LDLM_CP_CB_WAIT4)) {
+               lock_res_and_lock(lock);
+               /* DEADLOCK is always set with CBPENDING */
+               lock->l_flags |= LDLM_FL_FLOCK_DEADLOCK | LDLM_FL_CBPENDING;
+               unlock_res_and_lock(lock);
+               OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CP_CB_WAIT4, 4);
+       }
+       if (OBD_FAIL_PRECHECK(OBD_FAIL_LDLM_CP_CB_WAIT5)) {
+               lock_res_and_lock(lock);
+               /* DEADLOCK is always set with CBPENDING */
+               lock->l_flags |= LDLM_FL_FAIL_LOC |
+                                LDLM_FL_FLOCK_DEADLOCK | LDLM_FL_CBPENDING;
+               unlock_res_and_lock(lock);
+               OBD_FAIL_TIMEOUT(OBD_FAIL_LDLM_CP_CB_WAIT5, 4);
        }
-
-       LDLM_DEBUG(lock, "client-side enqueue granted");
 
        lock_res_and_lock(lock);
 
@@ -530,20 +533,59 @@ granted:
        if (ldlm_is_destroyed(lock)) {
                unlock_res_and_lock(lock);
                LDLM_DEBUG(lock, "client-side enqueue waking up: destroyed");
-               return 0;
+               /*
+                * An error is still to be returned, to propagate it up to
+                * ldlm_cli_enqueue_fini() caller.
+                */
+               return -EIO;
        }
 
        /* ldlm_lock_enqueue() has already placed lock on the granted list. */
-       list_del_init(&lock->l_res_link);
+       ldlm_resource_unlink_lock(lock);
+
+       /*
+        * Import invalidation. We need to actually release the lock
+        * references being held, so that it can go away. No point in
+        * holding the lock even if app still believes it has it, since
+        * server already dropped it anyway. Only for granted locks too.
+        */
+       /* Do the same for DEADLOCK'ed locks. */
+       if (ldlm_is_failed(lock) || ldlm_is_flock_deadlock(lock)) {
+               int mode;
+
+               if (flags & LDLM_FL_TEST_LOCK)
+                       LASSERT(ldlm_is_test_lock(lock));
+
+               if (ldlm_is_test_lock(lock) || ldlm_is_flock_deadlock(lock))
+                       mode = getlk->fl_type;
+               else
+                       mode = lock->l_granted_mode;
+
+               if (ldlm_is_flock_deadlock(lock)) {
+                       LDLM_DEBUG(lock, "client-side enqueue deadlock received");
+                       rc = -EDEADLK;
+               }
+               ldlm_flock_destroy(lock, mode, LDLM_FL_WAIT_NOREPROC);
+               unlock_res_and_lock(lock);
+
+               /* Need to wake up the waiter if we were evicted */
+               wake_up(&lock->l_waitq);
+
+               /*
+                * An error is still to be returned, to propagate it up to
+                * ldlm_cli_enqueue_fini() caller.
+                */
+               return rc ? : -EIO;
+       }
+
+       LDLM_DEBUG(lock, "client-side enqueue granted");
 
-       if (ldlm_is_flock_deadlock(lock)) {
-               LDLM_DEBUG(lock, "client-side enqueue deadlock received");
-               rc = -EDEADLK;
-       } else if (flags & LDLM_FL_TEST_LOCK) {
+       if (flags & LDLM_FL_TEST_LOCK) {
                /* fcntl(F_GETLK) request */
                /* The old mode was saved in getlk->fl_type so that if the mode
                 * in the lock changes we can decref the appropriate refcount.
                 */
+               LASSERT(ldlm_is_test_lock(lock));
                ldlm_flock_destroy(lock, getlk->fl_type, LDLM_FL_WAIT_NOREPROC);
                switch (lock->l_granted_mode) {
                case LCK_PR:
index e4cf65d2d3b1c3076fbeab10bba06799246134ed..dc0e4af59931f4d8b025736137f41fbfb195d803 100644 (file)
@@ -100,8 +100,8 @@ enum {
 int ldlm_cancel_lru(struct ldlm_namespace *ns, int nr,
                    enum ldlm_cancel_flags sync, int flags);
 int ldlm_cancel_lru_local(struct ldlm_namespace *ns,
-                        struct list_head *cancels, int count, int max,
-                        enum ldlm_cancel_flags cancel_flags, int flags);
+                         struct list_head *cancels, int count, int max,
+                         enum ldlm_cancel_flags cancel_flags, int flags);
 extern int ldlm_enqueue_min;
 
 /* ldlm_resource.c */
@@ -200,8 +200,7 @@ ldlm_interval_extent(struct ldlm_interval *node)
 
        LASSERT(!list_empty(&node->li_group));
 
-       lock = list_entry(node->li_group.next, struct ldlm_lock,
-                             l_sl_policy);
+       lock = list_entry(node->li_group.next, struct ldlm_lock, l_sl_policy);
        return &lock->l_policy_data.l_extent;
 }
 
@@ -302,7 +301,7 @@ static inline int is_granted_or_cancelled(struct ldlm_lock *lock)
 
        lock_res_and_lock(lock);
        if ((lock->l_req_mode == lock->l_granted_mode) &&
-            !ldlm_is_cp_reqd(lock))
+           !ldlm_is_cp_reqd(lock))
                ret = 1;
        else if (ldlm_is_failed(lock) || ldlm_is_cancel(lock))
                ret = 1;
@@ -326,13 +325,13 @@ void ldlm_ibits_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy,
 void ldlm_ibits_policy_local_to_wire(const ldlm_policy_data_t *lpolicy,
                                     ldlm_wire_policy_data_t *wpolicy);
 void ldlm_extent_policy_wire_to_local(const ldlm_wire_policy_data_t *wpolicy,
-                                    ldlm_policy_data_t *lpolicy);
+                                     ldlm_policy_data_t *lpolicy);
 void ldlm_extent_policy_local_to_wire(const ldlm_policy_data_t *lpolicy,
-                                    ldlm_wire_policy_data_t *wpolicy);
+                                     ldlm_wire_policy_data_t *wpolicy);
 void ldlm_flock_policy_wire18_to_local(const ldlm_wire_policy_data_t *wpolicy,
-                                    ldlm_policy_data_t *lpolicy);
+                                      ldlm_policy_data_t *lpolicy);
 void ldlm_flock_policy_wire21_to_local(const ldlm_wire_policy_data_t *wpolicy,
-                                    ldlm_policy_data_t *lpolicy);
+                                      ldlm_policy_data_t *lpolicy);
 
 void ldlm_flock_policy_local_to_wire(const ldlm_policy_data_t *lpolicy,
                                     ldlm_wire_policy_data_t *wpolicy);
index 7c832aae7d5ed0d18de59b451826d28381a5b23c..0d466e22bf57414b7e04d58f7ea5142ce14f2531 100644 (file)
@@ -82,7 +82,7 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid,
                        if (priority) {
                                list_del(&item->oic_item);
                                list_add(&item->oic_item,
-                                            &imp->imp_conn_list);
+                                        &imp->imp_conn_list);
                                item->oic_last_attempt = 0;
                        }
                        CDEBUG(D_HA, "imp %p@%s: found existing conn %s%s\n",
@@ -102,7 +102,7 @@ static int import_set_conn(struct obd_import *imp, struct obd_uuid *uuid,
                        list_add(&imp_conn->oic_item, &imp->imp_conn_list);
                else
                        list_add_tail(&imp_conn->oic_item,
-                                         &imp->imp_conn_list);
+                                     &imp->imp_conn_list);
                CDEBUG(D_HA, "imp %p@%s: add connection %s at %s\n",
                       imp, imp->imp_obd->obd_name, uuid->uuid,
                       (priority ? "head" : "tail"));
@@ -299,12 +299,14 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
               min_t(unsigned int, LUSTRE_CFG_BUFLEN(lcfg, 2),
                     sizeof(server_uuid)));
 
-       cli->cl_dirty = 0;
+       cli->cl_dirty_pages = 0;
        cli->cl_avail_grant = 0;
-       /* FIXME: Should limit this for the sum of all cl_dirty_max. */
-       cli->cl_dirty_max = OSC_MAX_DIRTY_DEFAULT * 1024 * 1024;
-       if (cli->cl_dirty_max >> PAGE_SHIFT > totalram_pages / 8)
-               cli->cl_dirty_max = totalram_pages << (PAGE_SHIFT - 3);
+       /* FIXME: Should limit this for the sum of all cl_dirty_max_pages. */
+       /*
+        * cl_dirty_max_pages may be changed at connect time in
+        * ptlrpc_connect_interpret().
+        */
+       client_adjust_max_dirty(cli);
        INIT_LIST_HEAD(&cli->cl_cache_waiters);
        INIT_LIST_HEAD(&cli->cl_loi_ready_list);
        INIT_LIST_HEAD(&cli->cl_loi_hp_ready_list);
@@ -360,7 +362,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
        cli->cl_chunkbits = PAGE_SHIFT;
 
        if (!strcmp(name, LUSTRE_MDC_NAME)) {
-               cli->cl_max_rpcs_in_flight = MDC_MAX_RIF_DEFAULT;
+               cli->cl_max_rpcs_in_flight = OBD_MAX_RIF_DEFAULT;
        } else if (totalram_pages >> (20 - PAGE_SHIFT) <= 128 /* MB */) {
                cli->cl_max_rpcs_in_flight = 2;
        } else if (totalram_pages >> (20 - PAGE_SHIFT) <= 256 /* MB */) {
@@ -368,7 +370,7 @@ int client_obd_setup(struct obd_device *obddev, struct lustre_cfg *lcfg)
        } else if (totalram_pages >> (20 - PAGE_SHIFT) <= 512 /* MB */) {
                cli->cl_max_rpcs_in_flight = 4;
        } else {
-               cli->cl_max_rpcs_in_flight = OSC_MAX_RIF_DEFAULT;
+               cli->cl_max_rpcs_in_flight = OBD_MAX_RIF_DEFAULT;
        }
        rc = ldlm_get_ref();
        if (rc) {
@@ -690,7 +692,7 @@ void target_send_reply(struct ptlrpc_request *req, int rc, int fail_id)
        if (rs->rs_transno > exp->exp_last_committed) {
                /* not committed already */
                list_add_tail(&rs->rs_obd_list,
-                                 &exp->exp_uncommitted_replies);
+                             &exp->exp_uncommitted_replies);
        }
        spin_unlock(&exp->exp_uncommitted_replies_lock);
 
@@ -795,7 +797,7 @@ void ldlm_dump_export_locks(struct obd_export *exp)
                CERROR("dumping locks for export %p,ignore if the unmount doesn't hang\n",
                       exp);
                list_for_each_entry(lock, &exp->exp_locks_list,
-                                       l_exp_refs_link)
+                                   l_exp_refs_link)
                        LDLM_ERROR(lock, "lock:");
        }
        spin_unlock(&exp->exp_locks_list_guard);
index a5993f745ebe49d06354ab3688fe9c8c01982b5a..55b746044b924b286c0386e7c61f34c81c4af1e4 100644 (file)
@@ -481,8 +481,8 @@ int ldlm_lock_change_resource(struct ldlm_namespace *ns, struct ldlm_lock *lock,
        unlock_res_and_lock(lock);
 
        newres = ldlm_resource_get(ns, NULL, new_resid, type, 1);
-       if (!newres)
-               return -ENOMEM;
+       if (IS_ERR(newres))
+               return PTR_ERR(newres);
 
        lu_ref_add(&newres->lr_reference, "lock", lock);
        /*
@@ -542,7 +542,7 @@ struct ldlm_lock *__ldlm_handle2lock(const struct lustre_handle *handle,
 
        LASSERT(handle);
 
-       lock = class_handle2object(handle->cookie);
+       lock = class_handle2object(handle->cookie, NULL);
        if (!lock)
                return NULL;
 
@@ -937,7 +937,7 @@ static void search_granted_lock(struct list_head *queue,
                                /* go to next policy group within mode group */
                                tmp = policy_end->l_res_link.next;
                                lock = list_entry(tmp, struct ldlm_lock,
-                                                     l_res_link);
+                                                 l_res_link);
                        }  /* loop over policy groups within the mode group */
 
                        /* insert point is last lock of the mode group,
@@ -1028,15 +1028,28 @@ void ldlm_grant_lock(struct ldlm_lock *lock, struct list_head *work_list)
        check_res_locked(res);
 
        lock->l_granted_mode = lock->l_req_mode;
+
+       if (work_list && lock->l_completion_ast)
+               ldlm_add_ast_work_item(lock, NULL, work_list);
+
        if (res->lr_type == LDLM_PLAIN || res->lr_type == LDLM_IBITS)
                ldlm_grant_lock_with_skiplist(lock);
        else if (res->lr_type == LDLM_EXTENT)
                ldlm_extent_add_lock(res, lock);
-       else
+       else if (res->lr_type == LDLM_FLOCK) {
+               /*
+                * We should not add locks to granted list in the following cases:
+                * - this is an UNLOCK but not a real lock;
+                * - this is a TEST lock;
+                * - this is a F_CANCELLK lock (async flock has req_mode == 0)
+                * - this is a deadlock (flock cannot be granted)
+                */
+               if (!lock->l_req_mode || lock->l_req_mode == LCK_NL ||
+                   ldlm_is_test_lock(lock) || ldlm_is_flock_deadlock(lock))
+                       return;
                ldlm_resource_add_lock(res, &res->lr_granted, lock);
-
-       if (work_list && lock->l_completion_ast)
-               ldlm_add_ast_work_item(lock, NULL, work_list);
+       } else
+               LBUG();
 
        ldlm_pool_add(&ldlm_res_to_ns(res)->ns_pool, lock);
 }
@@ -1103,7 +1116,7 @@ static struct ldlm_lock *search_queue(struct list_head *queue,
                 * of bits.
                 */
                if (lock->l_resource->lr_type == LDLM_IBITS &&
-                    ((lock->l_policy_data.l_inodebits.bits &
+                   ((lock->l_policy_data.l_inodebits.bits &
                      policy->l_inodebits.bits) !=
                      policy->l_inodebits.bits))
                        continue;
@@ -1214,7 +1227,7 @@ enum ldlm_mode ldlm_lock_match(struct ldlm_namespace *ns, __u64 flags,
        }
 
        res = ldlm_resource_get(ns, NULL, res_id, type, 0);
-       if (!res) {
+       if (IS_ERR(res)) {
                LASSERT(!old_lock);
                return 0;
        }
@@ -1363,12 +1376,12 @@ int ldlm_fill_lvb(struct ldlm_lock *lock, struct req_capsule *pill,
                if (size == sizeof(struct ost_lvb)) {
                        if (loc == RCL_CLIENT)
                                lvb = req_capsule_client_swab_get(pill,
-                                               &RMF_DLM_LVB,
-                                               lustre_swab_ost_lvb);
+                                                                 &RMF_DLM_LVB,
+                                                       lustre_swab_ost_lvb);
                        else
                                lvb = req_capsule_server_swab_get(pill,
-                                               &RMF_DLM_LVB,
-                                               lustre_swab_ost_lvb);
+                                                                 &RMF_DLM_LVB,
+                                                       lustre_swab_ost_lvb);
                        if (unlikely(!lvb)) {
                                LDLM_ERROR(lock, "no LVB");
                                return -EPROTO;
@@ -1380,8 +1393,8 @@ int ldlm_fill_lvb(struct ldlm_lock *lock, struct req_capsule *pill,
 
                        if (loc == RCL_CLIENT)
                                lvb = req_capsule_client_swab_get(pill,
-                                               &RMF_DLM_LVB,
-                                               lustre_swab_ost_lvb_v1);
+                                                                 &RMF_DLM_LVB,
+                                                       lustre_swab_ost_lvb_v1);
                        else
                                lvb = req_capsule_server_sized_swab_get(pill,
                                                &RMF_DLM_LVB, size,
@@ -1405,12 +1418,12 @@ int ldlm_fill_lvb(struct ldlm_lock *lock, struct req_capsule *pill,
                if (size == sizeof(struct lquota_lvb)) {
                        if (loc == RCL_CLIENT)
                                lvb = req_capsule_client_swab_get(pill,
-                                               &RMF_DLM_LVB,
-                                               lustre_swab_lquota_lvb);
+                                                                 &RMF_DLM_LVB,
+                                                       lustre_swab_lquota_lvb);
                        else
                                lvb = req_capsule_server_swab_get(pill,
-                                               &RMF_DLM_LVB,
-                                               lustre_swab_lquota_lvb);
+                                                                 &RMF_DLM_LVB,
+                                                       lustre_swab_lquota_lvb);
                        if (unlikely(!lvb)) {
                                LDLM_ERROR(lock, "no LVB");
                                return -EPROTO;
@@ -1462,15 +1475,15 @@ struct ldlm_lock *ldlm_lock_create(struct ldlm_namespace *ns,
 {
        struct ldlm_lock *lock;
        struct ldlm_resource *res;
+       int rc;
 
        res = ldlm_resource_get(ns, NULL, res_id, type, 1);
-       if (!res)
-               return NULL;
+       if (IS_ERR(res))
+               return ERR_CAST(res);
 
        lock = ldlm_lock_new(res);
-
        if (!lock)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        lock->l_req_mode = mode;
        lock->l_ast_data = data;
@@ -1484,27 +1497,33 @@ struct ldlm_lock *ldlm_lock_create(struct ldlm_namespace *ns,
        lock->l_tree_node = NULL;
        /* if this is the extent lock, allocate the interval tree node */
        if (type == LDLM_EXTENT) {
-               if (!ldlm_interval_alloc(lock))
+               if (!ldlm_interval_alloc(lock)) {
+                       rc = -ENOMEM;
                        goto out;
+               }
        }
 
        if (lvb_len) {
                lock->l_lvb_len = lvb_len;
                lock->l_lvb_data = kzalloc(lvb_len, GFP_NOFS);
-               if (!lock->l_lvb_data)
+               if (!lock->l_lvb_data) {
+                       rc = -ENOMEM;
                        goto out;
+               }
        }
 
        lock->l_lvb_type = lvb_type;
-       if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_NEW_LOCK))
+       if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_NEW_LOCK)) {
+               rc = -ENOENT;
                goto out;
+       }
 
        return lock;
 
 out:
        ldlm_lock_destroy(lock);
        LDLM_LOCK_RELEASE(lock);
-       return NULL;
+       return ERR_PTR(rc);
 }
 
 /**
@@ -1546,6 +1565,8 @@ enum ldlm_error ldlm_lock_enqueue(struct ldlm_namespace *ns,
         */
        if (*flags & LDLM_FL_AST_DISCARD_DATA)
                ldlm_set_ast_discard_data(lock);
+       if (*flags & LDLM_FL_TEST_LOCK)
+               ldlm_set_test_lock(lock);
 
        /*
         * This distinction between local lock trees is very important; a client
@@ -1688,7 +1709,7 @@ static int ldlm_work_gl_ast_lock(struct ptlrpc_request_set *rqset, void *opaq)
                return -ENOENT;
 
        gl_work = list_entry(arg->list->next, struct ldlm_glimpse_work,
-                                gl_list);
+                            gl_list);
        list_del_init(&gl_work->gl_list);
 
        lock = gl_work->gl_lock;
index 821939ff2e6bb6208cf25af1155d97636496e7af..b91b26d9dd531316a164159ba8e855e3bdd63a61 100644 (file)
@@ -706,12 +706,12 @@ static struct ldlm_bl_work_item *ldlm_bl_get_work(struct ldlm_bl_pool *blp)
        if (!list_empty(&blp->blp_list) &&
            (list_empty(&blp->blp_prio_list) || num_bl == 0))
                blwi = list_entry(blp->blp_list.next,
-                                     struct ldlm_bl_work_item, blwi_entry);
+                                 struct ldlm_bl_work_item, blwi_entry);
        else
                if (!list_empty(&blp->blp_prio_list))
                        blwi = list_entry(blp->blp_prio_list.next,
-                                             struct ldlm_bl_work_item,
-                                             blwi_entry);
+                                         struct ldlm_bl_work_item,
+                                         blwi_entry);
 
        if (blwi) {
                if (++num_bl >= atomic_read(&blp->blp_num_threads))
@@ -741,7 +741,7 @@ static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
        init_completion(&bltd.bltd_comp);
        bltd.bltd_num = atomic_read(&blp->blp_num_threads);
        snprintf(bltd.bltd_name, sizeof(bltd.bltd_name),
-               "ldlm_bl_%02d", bltd.bltd_num);
+                "ldlm_bl_%02d", bltd.bltd_num);
        task = kthread_run(ldlm_bl_thread_main, &bltd, "%s", bltd.bltd_name);
        if (IS_ERR(task)) {
                CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
@@ -786,8 +786,8 @@ static int ldlm_bl_thread_main(void *arg)
                if (!blwi) {
                        atomic_dec(&blp->blp_busy_threads);
                        l_wait_event_exclusive(blp->blp_waitq,
-                                        (blwi = ldlm_bl_get_work(blp)),
-                                        &lwi);
+                                              (blwi = ldlm_bl_get_work(blp)),
+                                              &lwi);
                        busy = atomic_inc_return(&blp->blp_busy_threads);
                } else {
                        busy = atomic_read(&blp->blp_busy_threads);
@@ -1094,16 +1094,17 @@ int ldlm_init(void)
                return -ENOMEM;
 
        ldlm_lock_slab = kmem_cache_create("ldlm_locks",
-                             sizeof(struct ldlm_lock), 0,
-                             SLAB_HWCACHE_ALIGN | SLAB_DESTROY_BY_RCU, NULL);
+                                          sizeof(struct ldlm_lock), 0,
+                                          SLAB_HWCACHE_ALIGN |
+                                          SLAB_DESTROY_BY_RCU, NULL);
        if (!ldlm_lock_slab) {
                kmem_cache_destroy(ldlm_resource_slab);
                return -ENOMEM;
        }
 
        ldlm_interval_slab = kmem_cache_create("interval_node",
-                                       sizeof(struct ldlm_interval),
-                                       0, SLAB_HWCACHE_ALIGN, NULL);
+                                              sizeof(struct ldlm_interval),
+                                              0, SLAB_HWCACHE_ALIGN, NULL);
        if (!ldlm_interval_slab) {
                kmem_cache_destroy(ldlm_resource_slab);
                kmem_cache_destroy(ldlm_lock_slab);
index 657ed4012776b0f6aa38f4dbb44350dae6238541..2fc319ef061c89a0cd4ef4b5d4cb5005060cf74b 100644 (file)
@@ -995,7 +995,7 @@ static int ldlm_pools_thread_main(void *arg)
        wake_up(&thread->t_ctl_waitq);
 
        CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
-               "ldlm_poold", current_pid());
+              "ldlm_poold", current_pid());
 
        while (1) {
                struct l_wait_info lwi;
@@ -1025,7 +1025,7 @@ static int ldlm_pools_thread_main(void *arg)
        wake_up(&thread->t_ctl_waitq);
 
        CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
-               "ldlm_poold", current_pid());
+              "ldlm_poold", current_pid());
 
        complete_and_exit(&ldlm_pools_comp, 0);
 }
index af487f9937f4636b060ecdeda0913fc3b08be21c..1dc8d21d1e20ced9f8346b2281e48b1e3aef6558 100644 (file)
@@ -309,8 +309,6 @@ static void failed_lock_cleanup(struct ldlm_namespace *ns,
        else
                LDLM_DEBUG(lock, "lock was granted or failed in race");
 
-       ldlm_lock_decref_internal(lock, mode);
-
        /* XXX - HACK because we shouldn't call ldlm_lock_destroy()
         *       from llite/file.c/ll_file_flock().
         */
@@ -321,9 +319,14 @@ static void failed_lock_cleanup(struct ldlm_namespace *ns,
         */
        if (lock->l_resource->lr_type == LDLM_FLOCK) {
                lock_res_and_lock(lock);
-               ldlm_resource_unlink_lock(lock);
-               ldlm_lock_destroy_nolock(lock);
+               if (!ldlm_is_destroyed(lock)) {
+                       ldlm_resource_unlink_lock(lock);
+                       ldlm_lock_decref_internal_nolock(lock, mode);
+                       ldlm_lock_destroy_nolock(lock);
+               }
                unlock_res_and_lock(lock);
+       } else {
+               ldlm_lock_decref_internal(lock, mode);
        }
 }
 
@@ -418,11 +421,6 @@ int ldlm_cli_enqueue_fini(struct obd_export *exp, struct ptlrpc_request *req,
        *flags = ldlm_flags_from_wire(reply->lock_flags);
        lock->l_flags |= ldlm_flags_from_wire(reply->lock_flags &
                                              LDLM_FL_INHERIT_MASK);
-       /* move NO_TIMEOUT flag to the lock to force ldlm_lock_match()
-        * to wait with no timeout as well
-        */
-       lock->l_flags |= ldlm_flags_from_wire(reply->lock_flags &
-                                             LDLM_FL_NO_TIMEOUT);
        unlock_res_and_lock(lock);
 
        CDEBUG(D_INFO, "local: %p, remote cookie: %#llx, flags: 0x%llx\n",
@@ -696,8 +694,8 @@ int ldlm_cli_enqueue(struct obd_export *exp, struct ptlrpc_request **reqp,
                lock = ldlm_lock_create(ns, res_id, einfo->ei_type,
                                        einfo->ei_mode, &cbs, einfo->ei_cbdata,
                                        lvb_len, lvb_type);
-               if (!lock)
-                       return -ENOMEM;
+               if (IS_ERR(lock))
+                       return PTR_ERR(lock);
                /* for the local lock, add the reference */
                ldlm_lock_addref_internal(lock, einfo->ei_mode);
                ldlm_lock2handle(lock, lockh);
@@ -819,7 +817,7 @@ static __u64 ldlm_cli_cancel_local(struct ldlm_lock *lock)
                lock_res_and_lock(lock);
                ldlm_set_cbpending(lock);
                local_only = !!(lock->l_flags &
-                               (LDLM_FL_LOCAL_ONLY|LDLM_FL_CANCEL_ON_BLOCK));
+                               (LDLM_FL_LOCAL_ONLY | LDLM_FL_CANCEL_ON_BLOCK));
                ldlm_cancel_callback(lock);
                rc = ldlm_is_bl_ast(lock) ? LDLM_FL_BL_AST : LDLM_FL_CANCELING;
                unlock_res_and_lock(lock);
@@ -1180,8 +1178,7 @@ static enum ldlm_policy_res ldlm_cancel_lrur_policy(struct ldlm_namespace *ns,
 
        slv = ldlm_pool_get_slv(pl);
        lvf = ldlm_pool_get_lvf(pl);
-       la = cfs_duration_sec(cfs_time_sub(cur,
-                             lock->l_last_used));
+       la = cfs_duration_sec(cfs_time_sub(cur, lock->l_last_used));
        lv = lvf * la * unused;
 
        /* Inform pool about current CLV to see it via debugfs. */
@@ -1374,7 +1371,7 @@ static int ldlm_prepare_lru_list(struct ldlm_namespace *ns,
                        break;
 
                list_for_each_entry_safe(lock, next, &ns->ns_unused_list,
-                                            l_lru) {
+                                        l_lru) {
                        /* No locks which got blocking requests. */
                        LASSERT(!ldlm_is_bl_ast(lock));
 
@@ -1610,8 +1607,7 @@ int ldlm_cli_cancel_list(struct list_head *cancels, int count,
         */
        while (count > 0) {
                LASSERT(!list_empty(cancels));
-               lock = list_entry(cancels->next, struct ldlm_lock,
-                                     l_bl_ast);
+               lock = list_entry(cancels->next, struct ldlm_lock, l_bl_ast);
                LASSERT(lock->l_conn_export);
 
                if (exp_connect_cancelset(lock->l_conn_export)) {
@@ -1660,7 +1656,7 @@ int ldlm_cli_cancel_unused_resource(struct ldlm_namespace *ns,
        int rc;
 
        res = ldlm_resource_get(ns, NULL, res_id, 0, 0);
-       if (!res) {
+       if (IS_ERR(res)) {
                /* This is not a problem. */
                CDEBUG(D_INFO, "No resource %llu\n", res_id->name[0]);
                return 0;
@@ -1811,13 +1807,10 @@ int ldlm_resource_iterate(struct ldlm_namespace *ns,
        struct ldlm_resource *res;
        int rc;
 
-       if (!ns) {
-               CERROR("must pass in namespace\n");
-               LBUG();
-       }
+       LASSERTF(ns, "must pass in namespace\n");
 
        res = ldlm_resource_get(ns, NULL, res_id, 0, 0);
-       if (!res)
+       if (IS_ERR(res))
                return 0;
 
        LDLM_RESOURCE_ADDREF(res);
@@ -1843,7 +1836,7 @@ static int ldlm_chain_lock_for_replay(struct ldlm_lock *lock, void *closure)
         * bug 17614: locks being actively cancelled. Get a reference
         * on a lock so that it does not disappear under us (e.g. due to cancel)
         */
-       if (!(lock->l_flags & (LDLM_FL_FAILED|LDLM_FL_CANCELING))) {
+       if (!(lock->l_flags & (LDLM_FL_FAILED | LDLM_FL_CANCELING))) {
                list_add(&lock->l_pending_chain, list);
                LDLM_LOCK_GET(lock);
        }
@@ -2013,7 +2006,7 @@ static void ldlm_cancel_unused_locks_for_replay(struct ldlm_namespace *ns)
                                         LCF_LOCAL, LDLM_CANCEL_NO_WAIT);
 
        CDEBUG(D_DLMTRACE, "Canceled %d unused locks from namespace %s\n",
-                          canceled, ldlm_ns_name(ns));
+              canceled, ldlm_ns_name(ns));
 }
 
 int ldlm_replay_locks(struct obd_import *imp)
index 51a28d96af39197109289f247450efb96d4d6a52..e2c25876c7cee01c7c5f9a05eaebd23143928570 100644 (file)
@@ -758,8 +758,7 @@ static void cleanup_resource(struct ldlm_resource *res, struct list_head *q,
                 */
                lock_res(res);
                list_for_each(tmp, q) {
-                       lock = list_entry(tmp, struct ldlm_lock,
-                                             l_res_link);
+                       lock = list_entry(tmp, struct ldlm_lock, l_res_link);
                        if (ldlm_is_cleaned(lock)) {
                                lock = NULL;
                                continue;
@@ -793,8 +792,14 @@ static void cleanup_resource(struct ldlm_resource *res, struct list_head *q,
                         */
                        unlock_res(res);
                        LDLM_DEBUG(lock, "setting FL_LOCAL_ONLY");
+                       if (lock->l_flags & LDLM_FL_FAIL_LOC) {
+                               set_current_state(TASK_UNINTERRUPTIBLE);
+                               schedule_timeout(cfs_time_seconds(4));
+                               set_current_state(TASK_RUNNING);
+                       }
                        if (lock->l_completion_ast)
-                               lock->l_completion_ast(lock, 0, NULL);
+                               lock->l_completion_ast(lock, LDLM_FL_FAILED,
+                                                      NULL);
                        LDLM_LOCK_RELEASE(lock);
                        continue;
                }
@@ -1082,7 +1087,7 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
                  int create)
 {
        struct hlist_node     *hnode;
-       struct ldlm_resource *res;
+       struct ldlm_resource *res = NULL;
        struct cfs_hash_bd       bd;
        __u64            version;
        int                   ns_refcount = 0;
@@ -1095,31 +1100,20 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
        hnode = cfs_hash_bd_lookup_locked(ns->ns_rs_hash, &bd, (void *)name);
        if (hnode) {
                cfs_hash_bd_unlock(ns->ns_rs_hash, &bd, 0);
-               res = hlist_entry(hnode, struct ldlm_resource, lr_hash);
-               /* Synchronize with regard to resource creation. */
-               if (ns->ns_lvbo && ns->ns_lvbo->lvbo_init) {
-                       mutex_lock(&res->lr_lvb_mutex);
-                       mutex_unlock(&res->lr_lvb_mutex);
-               }
-
-               if (unlikely(res->lr_lvb_len < 0)) {
-                       ldlm_resource_putref(res);
-                       res = NULL;
-               }
-               return res;
+               goto lvbo_init;
        }
 
        version = cfs_hash_bd_version_get(&bd);
        cfs_hash_bd_unlock(ns->ns_rs_hash, &bd, 0);
 
        if (create == 0)
-               return NULL;
+               return ERR_PTR(-ENOENT);
 
        LASSERTF(type >= LDLM_MIN_TYPE && type < LDLM_MAX_TYPE,
                 "type: %d\n", type);
        res = ldlm_resource_new();
        if (!res)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        res->lr_ns_bucket  = cfs_hash_bd_extra_get(ns->ns_rs_hash, &bd);
        res->lr_name       = *name;
@@ -1137,7 +1131,7 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
                /* We have taken lr_lvb_mutex. Drop it. */
                mutex_unlock(&res->lr_lvb_mutex);
                kmem_cache_free(ldlm_resource_slab, res);
-
+lvbo_init:
                res = hlist_entry(hnode, struct ldlm_resource, lr_hash);
                /* Synchronize with regard to resource creation. */
                if (ns->ns_lvbo && ns->ns_lvbo->lvbo_init) {
@@ -1147,7 +1141,7 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
 
                if (unlikely(res->lr_lvb_len < 0)) {
                        ldlm_resource_putref(res);
-                       res = NULL;
+                       res = ERR_PTR(res->lr_lvb_len);
                }
                return res;
        }
@@ -1169,7 +1163,7 @@ ldlm_resource_get(struct ldlm_namespace *ns, struct ldlm_resource *parent,
                        res->lr_lvb_len = rc;
                        mutex_unlock(&res->lr_lvb_mutex);
                        ldlm_resource_putref(res);
-                       return NULL;
+                       return ERR_PTR(rc);
                }
        }
 
@@ -1386,7 +1380,7 @@ void ldlm_resource_dump(int level, struct ldlm_resource *res)
        if (!list_empty(&res->lr_granted)) {
                CDEBUG(level, "Granted locks (in reverse order):\n");
                list_for_each_entry_reverse(lock, &res->lr_granted,
-                                               l_res_link) {
+                                           l_res_link) {
                        LDLM_DEBUG_LIMIT(level, lock, "###");
                        if (!(level & D_CANTMASK) &&
                            ++granted > ldlm_dump_granted_max) {
index 463b1a360733940d646766a82b03ef37056330df..f4b6f38246089174efd16a6254fa6121a9393b1e 100644 (file)
@@ -102,39 +102,6 @@ static int ll_dcompare(const struct dentry *dentry,
        return 0;
 }
 
-static inline int return_if_equal(struct ldlm_lock *lock, void *data)
-{
-       return (ldlm_is_canceling(lock) && ldlm_is_discard_data(lock)) ?
-               LDLM_ITER_CONTINUE : LDLM_ITER_STOP;
-}
-
-/* find any ldlm lock of the inode in mdc and lov
- * return 0    not find
- *     1    find one
- *      < 0    error
- */
-static int find_cbdata(struct inode *inode)
-{
-       struct ll_sb_info *sbi = ll_i2sbi(inode);
-       struct lov_stripe_md *lsm;
-       int rc = 0;
-
-       LASSERT(inode);
-       rc = md_find_cbdata(sbi->ll_md_exp, ll_inode2fid(inode),
-                           return_if_equal, NULL);
-       if (rc != 0)
-               return rc;
-
-       lsm = ccc_inode_lsm_get(inode);
-       if (!lsm)
-               return rc;
-
-       rc = obd_find_cbdata(sbi->ll_dt_exp, lsm, return_if_equal, NULL);
-       ccc_inode_lsm_put(inode, lsm);
-
-       return rc;
-}
-
 /**
  * Called when last reference to a dentry is dropped and dcache wants to know
  * whether or not it should cache it:
@@ -155,19 +122,6 @@ static int ll_ddelete(const struct dentry *de)
        /* kernel >= 2.6.38 last refcount is decreased after this function. */
        LASSERT(d_count(de) == 1);
 
-       /* Disable this piece of code temporarily because this is called
-        * inside dcache_lock so it's not appropriate to do lots of work
-        * here. ATTENTION: Before this piece of code enabling, LU-2487 must be
-        * resolved.
-        */
-#if 0
-       /* if not ldlm lock for this inode, set i_nlink to 0 so that
-        * this inode can be recycled later b=20433
-        */
-       if (d_really_is_positive(de) && !find_cbdata(d_inode(de)))
-               clear_nlink(d_inode(de));
-#endif
-
        if (d_lustre_invalid((struct dentry *)de))
                return 1;
        return 0;
@@ -347,18 +301,9 @@ static int ll_revalidate_nd(struct dentry *dentry, unsigned int flags)
        return ll_revalidate_dentry(dentry, flags);
 }
 
-static void ll_d_iput(struct dentry *de, struct inode *inode)
-{
-       LASSERT(inode);
-       if (!find_cbdata(inode))
-               clear_nlink(inode);
-       iput(inode);
-}
-
 const struct dentry_operations ll_d_ops = {
        .d_revalidate = ll_revalidate_nd,
        .d_release = ll_release,
        .d_delete  = ll_ddelete,
-       .d_iput    = ll_d_iput,
        .d_compare = ll_dcompare,
 };
index 5b381779c82725c52c5308b81fc0e227a9124756..532047b478d19c1299fcbe819cd5e1c9880fb594 100644 (file)
@@ -46,8 +46,8 @@
 
 #include "../include/obd_support.h"
 #include "../include/obd_class.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_lib.h"
-#include "../include/lustre/lustre_idl.h"
 #include "../include/lustre_lite.h"
 #include "../include/lustre_dlm.h"
 #include "../include/lustre_fid.h"
  * for this integrated page will be adjusted. See lmv_adjust_dirpages().
  *
  */
-
-/* returns the page unlocked, but with a reference */
-static int ll_dir_filler(void *_hash, struct page *page0)
+struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
+                            __u64 offset, struct ll_dir_chain *chain)
 {
-       struct inode *inode = page0->mapping->host;
-       int hash64 = ll_i2sbi(inode)->ll_flags & LL_SBI_64BIT_HASH;
-       struct obd_export *exp = ll_i2sbi(inode)->ll_md_exp;
-       struct ptlrpc_request *request;
-       struct mdt_body *body;
-       struct md_op_data *op_data;
-       __u64 hash = *((__u64 *)_hash);
-       struct page **page_pool;
+       struct md_callback cb_op;
        struct page *page;
-       struct lu_dirpage *dp;
-       int max_pages = ll_i2sbi(inode)->ll_md_brw_size >> PAGE_SHIFT;
-       int nrdpgs = 0; /* number of pages read actually */
-       int npages;
-       int i;
        int rc;
 
-       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) hash %llu\n",
-              PFID(ll_inode2fid(inode)), inode, hash);
-
-       LASSERT(max_pages > 0 && max_pages <= MD_MAX_BRW_PAGES);
-
-       op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
-                                    LUSTRE_OPC_ANY, NULL);
-       if (IS_ERR(op_data))
-               return PTR_ERR(op_data);
-
-       page_pool = kcalloc(max_pages, sizeof(page), GFP_NOFS);
-       if (page_pool) {
-               page_pool[0] = page0;
-       } else {
-               page_pool = &page0;
-               max_pages = 1;
-       }
-       for (npages = 1; npages < max_pages; npages++) {
-               page = page_cache_alloc_cold(inode->i_mapping);
-               if (!page)
-                       break;
-               page_pool[npages] = page;
-       }
-
-       op_data->op_npages = npages;
-       op_data->op_offset = hash;
-       rc = md_readpage(exp, op_data, page_pool, &request);
-       ll_finish_md_op_data(op_data);
-       if (rc < 0) {
-               /* page0 is special, which was added into page cache early */
-               delete_from_page_cache(page0);
-       } else if (rc == 0) {
-               body = req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY);
-               /* Checked by mdc_readpage() */
-               if (body->valid & OBD_MD_FLSIZE)
-                       i_size_write(inode, body->size);
-
-               nrdpgs = (request->rq_bulk->bd_nob_transferred+PAGE_SIZE-1)
-                        >> PAGE_SHIFT;
-               SetPageUptodate(page0);
-       }
-       unlock_page(page0);
-       ptlrpc_req_finished(request);
-
-       CDEBUG(D_VFSTRACE, "read %d/%d pages\n", nrdpgs, npages);
-
-       for (i = 1; i < npages; i++) {
-               unsigned long offset;
-               int ret;
-
-               page = page_pool[i];
-
-               if (rc < 0 || i >= nrdpgs) {
-                       put_page(page);
-                       continue;
-               }
-
-               SetPageUptodate(page);
-
-               dp = kmap(page);
-               hash = le64_to_cpu(dp->ldp_hash_start);
-               kunmap(page);
-
-               offset = hash_x_index(hash, hash64);
-
-               prefetchw(&page->flags);
-               ret = add_to_page_cache_lru(page, inode->i_mapping, offset,
-                                           GFP_NOFS);
-               if (ret == 0) {
-                       unlock_page(page);
-               } else {
-                       CDEBUG(D_VFSTRACE, "page %lu add to page cache failed: %d\n",
-                              offset, ret);
-               }
-               put_page(page);
-       }
+       cb_op.md_blocking_ast = ll_md_blocking_ast;
+       rc = md_read_page(ll_i2mdexp(dir), op_data, &cb_op, offset, &page);
+       if (rc)
+               return ERR_PTR(rc);
 
-       if (page_pool != &page0)
-               kfree(page_pool);
-       return rc;
+       return page;
 }
 
-void ll_release_page(struct page *page, int remove)
+void ll_release_page(struct inode *inode, struct page *page, bool remove)
 {
        kunmap(page);
+
+       /*
+        * Always remove the page for striped dir, because the page is
+        * built from temporarily in LMV layer
+        */
+       if (inode && S_ISDIR(inode->i_mode) &&
+           ll_i2info(inode)->lli_lsm_md) {
+               __free_page(page);
+               return;
+       }
+
        if (remove) {
                lock_page(page);
                if (likely(page->mapping))
@@ -248,225 +172,6 @@ void ll_release_page(struct page *page, int remove)
        put_page(page);
 }
 
-/*
- * Find, kmap and return page that contains given hash.
- */
-static struct page *ll_dir_page_locate(struct inode *dir, __u64 *hash,
-                                      __u64 *start, __u64 *end)
-{
-       int hash64 = ll_i2sbi(dir)->ll_flags & LL_SBI_64BIT_HASH;
-       struct address_space *mapping = dir->i_mapping;
-       /*
-        * Complement of hash is used as an index so that
-        * radix_tree_gang_lookup() can be used to find a page with starting
-        * hash _smaller_ than one we are looking for.
-        */
-       unsigned long offset = hash_x_index(*hash, hash64);
-       struct page *page;
-       int found;
-
-       spin_lock_irq(&mapping->tree_lock);
-       found = radix_tree_gang_lookup(&mapping->page_tree,
-                                      (void **)&page, offset, 1);
-       if (found > 0 && !radix_tree_exceptional_entry(page)) {
-               struct lu_dirpage *dp;
-
-               get_page(page);
-               spin_unlock_irq(&mapping->tree_lock);
-               /*
-                * In contrast to find_lock_page() we are sure that directory
-                * page cannot be truncated (while DLM lock is held) and,
-                * hence, can avoid restart.
-                *
-                * In fact, page cannot be locked here at all, because
-                * ll_dir_filler() does synchronous io.
-                */
-               wait_on_page_locked(page);
-               if (PageUptodate(page)) {
-                       dp = kmap(page);
-                       if (BITS_PER_LONG == 32 && hash64) {
-                               *start = le64_to_cpu(dp->ldp_hash_start) >> 32;
-                               *end   = le64_to_cpu(dp->ldp_hash_end) >> 32;
-                               *hash  = *hash >> 32;
-                       } else {
-                               *start = le64_to_cpu(dp->ldp_hash_start);
-                               *end   = le64_to_cpu(dp->ldp_hash_end);
-                       }
-                       LASSERTF(*start <= *hash, "start = %#llx,end = %#llx,hash = %#llx\n",
-                                *start, *end, *hash);
-                       CDEBUG(D_VFSTRACE, "page %lu [%llu %llu], hash %llu\n",
-                              offset, *start, *end, *hash);
-                       if (*hash > *end) {
-                               ll_release_page(page, 0);
-                               page = NULL;
-                       } else if (*end != *start && *hash == *end) {
-                               /*
-                                * upon hash collision, remove this page,
-                                * otherwise put page reference, and
-                                * ll_get_dir_page() will issue RPC to fetch
-                                * the page we want.
-                                */
-                               ll_release_page(page,
-                                   le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
-                               page = NULL;
-                       }
-               } else {
-                       put_page(page);
-                       page = ERR_PTR(-EIO);
-               }
-
-       } else {
-               spin_unlock_irq(&mapping->tree_lock);
-               page = NULL;
-       }
-       return page;
-}
-
-struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
-                            struct ll_dir_chain *chain)
-{
-       ldlm_policy_data_t policy = {.l_inodebits = {MDS_INODELOCK_UPDATE} };
-       struct address_space *mapping = dir->i_mapping;
-       struct lustre_handle lockh;
-       struct lu_dirpage *dp;
-       struct page *page;
-       enum ldlm_mode mode;
-       int rc;
-       __u64 start = 0;
-       __u64 end = 0;
-       __u64 lhash = hash;
-       struct ll_inode_info *lli = ll_i2info(dir);
-       int hash64 = ll_i2sbi(dir)->ll_flags & LL_SBI_64BIT_HASH;
-
-       mode = LCK_PR;
-       rc = md_lock_match(ll_i2sbi(dir)->ll_md_exp, LDLM_FL_BLOCK_GRANTED,
-                          ll_inode2fid(dir), LDLM_IBITS, &policy, mode, &lockh);
-       if (!rc) {
-               struct ldlm_enqueue_info einfo = {
-                       .ei_type = LDLM_IBITS,
-                       .ei_mode = mode,
-                       .ei_cb_bl = ll_md_blocking_ast,
-                       .ei_cb_cp = ldlm_completion_ast,
-               };
-               struct lookup_intent it = { .it_op = IT_READDIR };
-               struct ptlrpc_request *request;
-               struct md_op_data *op_data;
-
-               op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
-                                            LUSTRE_OPC_ANY, NULL);
-               if (IS_ERR(op_data))
-                       return (void *)op_data;
-
-               rc = md_enqueue(ll_i2sbi(dir)->ll_md_exp, &einfo, &it,
-                               op_data, &lockh, NULL, 0, NULL, 0);
-
-               ll_finish_md_op_data(op_data);
-
-               request = (struct ptlrpc_request *)it.it_request;
-               if (request)
-                       ptlrpc_req_finished(request);
-               if (rc < 0) {
-                       CERROR("lock enqueue: " DFID " at %llu: rc %d\n",
-                              PFID(ll_inode2fid(dir)), hash, rc);
-                       return ERR_PTR(rc);
-               }
-
-               CDEBUG(D_INODE, "setting lr_lvb_inode to inode "DFID"(%p)\n",
-                      PFID(ll_inode2fid(dir)), dir);
-               md_set_lock_data(ll_i2sbi(dir)->ll_md_exp,
-                                &it.it_lock_handle, dir, NULL);
-       } else {
-               /* for cross-ref object, l_ast_data of the lock may not be set,
-                * we reset it here
-                */
-               md_set_lock_data(ll_i2sbi(dir)->ll_md_exp, &lockh.cookie,
-                                dir, NULL);
-       }
-       ldlm_lock_dump_handle(D_OTHER, &lockh);
-
-       mutex_lock(&lli->lli_readdir_mutex);
-       page = ll_dir_page_locate(dir, &lhash, &start, &end);
-       if (IS_ERR(page)) {
-               CERROR("dir page locate: "DFID" at %llu: rc %ld\n",
-                      PFID(ll_inode2fid(dir)), lhash, PTR_ERR(page));
-               goto out_unlock;
-       } else if (page) {
-               /*
-                * XXX nikita: not entirely correct handling of a corner case:
-                * suppose hash chain of entries with hash value HASH crosses
-                * border between pages P0 and P1. First both P0 and P1 are
-                * cached, seekdir() is called for some entry from the P0 part
-                * of the chain. Later P0 goes out of cache. telldir(HASH)
-                * happens and finds P1, as it starts with matching hash
-                * value. Remaining entries from P0 part of the chain are
-                * skipped. (Is that really a bug?)
-                *
-                * Possible solutions: 0. don't cache P1 is such case, handle
-                * it as an "overflow" page. 1. invalidate all pages at
-                * once. 2. use HASH|1 as an index for P1.
-                */
-               goto hash_collision;
-       }
-
-       page = read_cache_page(mapping, hash_x_index(hash, hash64),
-                              ll_dir_filler, &lhash);
-       if (IS_ERR(page)) {
-               CERROR("read cache page: "DFID" at %llu: rc %ld\n",
-                      PFID(ll_inode2fid(dir)), hash, PTR_ERR(page));
-               goto out_unlock;
-       }
-
-       wait_on_page_locked(page);
-       (void)kmap(page);
-       if (!PageUptodate(page)) {
-               CERROR("page not updated: "DFID" at %llu: rc %d\n",
-                      PFID(ll_inode2fid(dir)), hash, -5);
-               goto fail;
-       }
-       if (!PageChecked(page))
-               /* XXX: check page format later */
-               SetPageChecked(page);
-       if (PageError(page)) {
-               CERROR("page error: "DFID" at %llu: rc %d\n",
-                      PFID(ll_inode2fid(dir)), hash, -5);
-               goto fail;
-       }
-hash_collision:
-       dp = page_address(page);
-       if (BITS_PER_LONG == 32 && hash64) {
-               start = le64_to_cpu(dp->ldp_hash_start) >> 32;
-               end   = le64_to_cpu(dp->ldp_hash_end) >> 32;
-               lhash = hash >> 32;
-       } else {
-               start = le64_to_cpu(dp->ldp_hash_start);
-               end   = le64_to_cpu(dp->ldp_hash_end);
-               lhash = hash;
-       }
-       if (end == start) {
-               LASSERT(start == lhash);
-               CWARN("Page-wide hash collision: %llu\n", end);
-               if (BITS_PER_LONG == 32 && hash64)
-                       CWARN("Real page-wide hash collision at [%llu %llu] with hash %llu\n",
-                             le64_to_cpu(dp->ldp_hash_start),
-                             le64_to_cpu(dp->ldp_hash_end), hash);
-               /*
-                * Fetch whole overflow chain...
-                *
-                * XXX not yet.
-                */
-               goto fail;
-       }
-out_unlock:
-       mutex_unlock(&lli->lli_readdir_mutex);
-       ldlm_lock_decref(&lockh, mode);
-       return page;
-
-fail:
-       ll_release_page(page, 1);
-       page = ERR_PTR(-EIO);
-       goto out_unlock;
-}
-
 /**
  * return IF_* type for given lu_dirent entry.
  * IF_* flag shld be converted to particular OS file type in
@@ -489,114 +194,100 @@ static __u16 ll_dirent_type_get(struct lu_dirent *ent)
        return type;
 }
 
-int ll_dir_read(struct inode *inode, struct dir_context *ctx)
+int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
+               struct dir_context *ctx)
 {
-       struct ll_inode_info *info       = ll_i2info(inode);
        struct ll_sb_info    *sbi       = ll_i2sbi(inode);
-       __u64              pos          = ctx->pos;
-       int                api32      = ll_need_32bit_api(sbi);
-       int                hash64     = sbi->ll_flags & LL_SBI_64BIT_HASH;
+       __u64              pos          = *ppos;
+       int                is_api32 = ll_need_32bit_api(sbi);
+       int                is_hash64 = sbi->ll_flags & LL_SBI_64BIT_HASH;
        struct page       *page;
        struct ll_dir_chain   chain;
-       int                done = 0;
+       bool               done = false;
        int                rc = 0;
 
        ll_dir_chain_init(&chain);
 
-       page = ll_get_dir_page(inode, pos, &chain);
+       page = ll_get_dir_page(inode, op_data, pos, &chain);
 
        while (rc == 0 && !done) {
                struct lu_dirpage *dp;
                struct lu_dirent  *ent;
+               __u64 hash;
+               __u64 next;
 
-               if (!IS_ERR(page)) {
-                       /*
-                        * If page is empty (end of directory is reached),
-                        * use this value.
-                        */
-                       __u64 hash = MDS_DIR_END_OFF;
-                       __u64 next;
-
-                       dp = page_address(page);
-                       for (ent = lu_dirent_start(dp); ent && !done;
-                            ent = lu_dirent_next(ent)) {
-                               __u16     type;
-                               int         namelen;
-                               struct lu_fid  fid;
-                               __u64     lhash;
-                               __u64     ino;
+               if (IS_ERR(page)) {
+                       rc = PTR_ERR(page);
+                       break;
+               }
 
+               hash = MDS_DIR_END_OFF;
+               dp = page_address(page);
+               for (ent = lu_dirent_start(dp); ent && !done;
+                    ent = lu_dirent_next(ent)) {
+                       __u16     type;
+                       int         namelen;
+                       struct lu_fid  fid;
+                       __u64     lhash;
+                       __u64     ino;
+
+                       hash = le64_to_cpu(ent->lde_hash);
+                       if (hash < pos)
                                /*
-                                * XXX: implement correct swabbing here.
+                                * Skip until we find target hash
+                                * value.
                                 */
+                               continue;
 
-                               hash = le64_to_cpu(ent->lde_hash);
-                               if (hash < pos)
-                                       /*
-                                        * Skip until we find target hash
-                                        * value.
-                                        */
-                                       continue;
-
-                               namelen = le16_to_cpu(ent->lde_namelen);
-                               if (namelen == 0)
-                                       /*
-                                        * Skip dummy record.
-                                        */
-                                       continue;
-
-                               if (api32 && hash64)
-                                       lhash = hash >> 32;
-                               else
-                                       lhash = hash;
-                               fid_le_to_cpu(&fid, &ent->lde_fid);
-                               ino = cl_fid_build_ino(&fid, api32);
-                               type = ll_dirent_type_get(ent);
-                               ctx->pos = lhash;
-                               /* For 'll_nfs_get_name_filldir()', it will try
-                                * to access the 'ent' through its 'lde_name',
-                                * so the parameter 'name' for 'ctx->actor()'
-                                * must be part of the 'ent'.
+                       namelen = le16_to_cpu(ent->lde_namelen);
+                       if (namelen == 0)
+                               /*
+                                * Skip dummy record.
                                 */
-                               done = !dir_emit(ctx, ent->lde_name,
-                                                namelen, ino, type);
-                       }
-                       next = le64_to_cpu(dp->ldp_hash_end);
-                       if (!done) {
-                               pos = next;
-                               if (pos == MDS_DIR_END_OFF) {
-                                       /*
-                                        * End of directory reached.
-                                        */
-                                       done = 1;
-                                       ll_release_page(page, 0);
-                               } else if (1 /* chain is exhausted*/) {
-                                       /*
-                                        * Normal case: continue to the next
-                                        * page.
-                                        */
-                                       ll_release_page(page,
-                                           le32_to_cpu(dp->ldp_flags) &
-                                                       LDF_COLLIDE);
-                                       next = pos;
-                                       page = ll_get_dir_page(inode, pos,
-                                                              &chain);
-                               } else {
-                                       /*
-                                        * go into overflow page.
-                                        */
-                                       LASSERT(le32_to_cpu(dp->ldp_flags) &
-                                               LDF_COLLIDE);
-                                       ll_release_page(page, 1);
-                               }
-                       } else {
-                               pos = hash;
-                               ll_release_page(page, 0);
-                       }
+                               continue;
+
+                       if (is_api32 && is_hash64)
+                               lhash = hash >> 32;
+                       else
+                               lhash = hash;
+                       fid_le_to_cpu(&fid, &ent->lde_fid);
+                       ino = cl_fid_build_ino(&fid, is_api32);
+                       type = ll_dirent_type_get(ent);
+                       ctx->pos = lhash;
+                       /* For 'll_nfs_get_name_filldir()', it will try
+                        * to access the 'ent' through its 'lde_name',
+                        * so the parameter 'name' for 'ctx->actor()'
+                        * must be part of the 'ent'.
+                        */
+                       done = !dir_emit(ctx, ent->lde_name,
+                                        namelen, ino, type);
+               }
+
+               if (done) {
+                       pos = hash;
+                       ll_release_page(inode, page, false);
+                       break;
+               }
+
+               next = le64_to_cpu(dp->ldp_hash_end);
+               pos = next;
+               if (pos == MDS_DIR_END_OFF) {
+                       /*
+                        * End of directory reached.
+                        */
+                       done = 1;
+                       ll_release_page(inode, page, false);
                } else {
-                       rc = PTR_ERR(page);
-                       CERROR("error reading dir "DFID" at %lu: rc %d\n",
-                              PFID(&info->lli_fid), (unsigned long)pos, rc);
+                       /*
+                        * Normal case: continue to the next
+                        * page.
+                        */
+                       ll_release_page(inode, page,
+                                       le32_to_cpu(dp->ldp_flags) &
+                                       LDF_COLLIDE);
+                       next = pos;
+                       page = ll_get_dir_page(inode, op_data, pos,
+                                              &chain);
                }
        }
 
@@ -613,9 +304,10 @@ static int ll_readdir(struct file *filp, struct dir_context *ctx)
        __u64 pos = lfd ? lfd->lfd_pos : 0;
        int                     hash64  = sbi->ll_flags & LL_SBI_64BIT_HASH;
        int                     api32   = ll_need_32bit_api(sbi);
+       struct md_op_data *op_data;
        int                     rc;
 
-       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) pos %lu/%llu 32bit_api %d\n",
+       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) pos/size %lu/%llu 32bit_api %d\n",
               PFID(ll_inode2fid(inode)), inode, (unsigned long)pos,
               i_size_read(inode), api32);
 
@@ -627,19 +319,58 @@ static int ll_readdir(struct file *filp, struct dir_context *ctx)
                goto out;
        }
 
+       op_data = ll_prep_md_op_data(NULL, inode, inode, NULL, 0, 0,
+                                    LUSTRE_OPC_ANY, inode);
+       if (IS_ERR(op_data)) {
+               rc = PTR_ERR(op_data);
+               goto out;
+       }
+
+       if (unlikely(op_data->op_mea1)) {
+               /*
+                * This is only needed for striped dir to fill ..,
+                * see lmv_read_page
+                */
+               if (file_dentry(filp)->d_parent &&
+                   file_dentry(filp)->d_parent->d_inode) {
+                       __u64 ibits = MDS_INODELOCK_UPDATE;
+                       struct inode *parent;
+
+                       parent = file_dentry(filp)->d_parent->d_inode;
+                       if (ll_have_md_lock(parent, &ibits, LCK_MINMODE))
+                               op_data->op_fid3 = *ll_inode2fid(parent);
+               }
+
+               /*
+                * If it can not find in cache, do lookup .. on the master
+                * object
+                */
+               if (fid_is_zero(&op_data->op_fid3)) {
+                       rc = ll_dir_get_parent_fid(inode, &op_data->op_fid3);
+                       if (rc) {
+                               ll_finish_md_op_data(op_data);
+                               return rc;
+                       }
+               }
+       }
+       op_data->op_max_pages = sbi->ll_md_brw_pages;
        ctx->pos = pos;
-       rc = ll_dir_read(inode, ctx);
+       rc = ll_dir_read(inode, &pos, op_data, ctx);
+       pos = ctx->pos;
        if (lfd)
-               lfd->lfd_pos = ctx->pos;
-       if (ctx->pos == MDS_DIR_END_OFF) {
+               lfd->lfd_pos = pos;
+
+       if (pos == MDS_DIR_END_OFF) {
                if (api32)
-                       ctx->pos = LL_DIR_END_OFF_32BIT;
+                       pos = LL_DIR_END_OFF_32BIT;
                else
-                       ctx->pos = LL_DIR_END_OFF;
+                       pos = LL_DIR_END_OFF;
        } else {
                if (api32 && hash64)
-                       ctx->pos >>= 32;
+                       pos >>= 32;
        }
+       ctx->pos = pos;
+       ll_finish_md_op_data(op_data);
        filp->f_version = inode->i_version;
 
 out:
@@ -668,18 +399,40 @@ static int ll_send_mgc_param(struct obd_export *mgc, char *string)
        return rc;
 }
 
-static int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump,
-                              char *filename)
+/**
+ * Create striped directory with specified stripe(@lump)
+ *
+ * param[in] parent    the parent of the directory.
+ * param[in] lump      the specified stripes.
+ * param[in] dirname   the name of the directory.
+ * param[in] mode      the specified mode of the directory.
+ *
+ * retval              =0 if striped directory is being created successfully.
+ *                     <0 if the creation is failed.
+ */
+static int ll_dir_setdirstripe(struct inode *parent, struct lmv_user_md *lump,
+                              const char *dirname, umode_t mode)
 {
        struct ptlrpc_request *request = NULL;
        struct md_op_data *op_data;
-       struct ll_sb_info *sbi = ll_i2sbi(dir);
-       int mode;
+       struct ll_sb_info *sbi = ll_i2sbi(parent);
        int err;
 
-       mode = (~current_umask() & 0755) | S_IFDIR;
-       op_data = ll_prep_md_op_data(NULL, dir, NULL, filename,
-                                    strlen(filename), mode, LUSTRE_OPC_MKDIR,
+       if (unlikely(lump->lum_magic != LMV_USER_MAGIC))
+               return -EINVAL;
+
+       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) name %s stripe_offset %d, stripe_count: %u\n",
+              PFID(ll_inode2fid(parent)), parent, dirname,
+              (int)lump->lum_stripe_offset, lump->lum_stripe_count);
+
+       if (lump->lum_magic != cpu_to_le32(LMV_USER_MAGIC))
+               lustre_swab_lmv_user_md(lump);
+
+       if (!IS_POSIXACL(parent) || !exp_connect_umask(ll_i2mdexp(parent)))
+               mode &= ~current_umask();
+       mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
+       op_data = ll_prep_md_op_data(NULL, parent, NULL, dirname,
+                                    strlen(dirname), mode, LUSTRE_OPC_MKDIR,
                                     lump);
        if (IS_ERR(op_data)) {
                err = PTR_ERR(op_data);
@@ -730,6 +483,13 @@ int ll_dir_setstripe(struct inode *inode, struct lov_user_md *lump,
                        lum_size = sizeof(struct lov_user_md_v3);
                        break;
                }
+               case LMV_USER_MAGIC: {
+                       if (lump->lmm_magic != cpu_to_le32(LMV_USER_MAGIC))
+                               lustre_swab_lmv_user_md(
+                                       (struct lmv_user_md *)lump);
+                       lum_size = sizeof(struct lmv_user_md);
+                       break;
+               }
                default: {
                        CDEBUG(D_IOCTL, "bad userland LOV MAGIC: %#08x != %#08x nor %#08x\n",
                               lump->lmm_magic, LOV_USER_MAGIC_V1,
@@ -746,9 +506,6 @@ int ll_dir_setstripe(struct inode *inode, struct lov_user_md *lump,
        if (IS_ERR(op_data))
                return PTR_ERR(op_data);
 
-       if (lump && lump->lmm_magic == cpu_to_le32(LMV_USER_MAGIC))
-               op_data->op_cli_flags |= CLI_SET_MEA;
-
        /* swabbing is done in lov_setstripe() on server side */
        rc = md_setattr(sbi->ll_md_exp, op_data, lump, lum_size,
                        NULL, 0, &req, NULL);
@@ -803,8 +560,16 @@ end:
        return rc;
 }
 
-int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
-                    int *lmm_size, struct ptlrpc_request **request)
+/**
+ * This function will be used to get default LOV/LMV/Default LMV
+ * @valid will be used to indicate which stripe it will retrieve
+ *     OBD_MD_MEA              LMV stripe EA
+ *     OBD_MD_DEFAULT_MEA      Default LMV stripe EA
+ *     otherwise               Default LOV EA.
+ * Each time, it can only retrieve 1 stripe EA
+ **/
+int ll_dir_getstripe(struct inode *inode, void **plmm, int *plmm_size,
+                    struct ptlrpc_request **request, u64 valid)
 {
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct mdt_body   *body;
@@ -813,7 +578,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
        int rc, lmmsize;
        struct md_op_data *op_data;
 
-       rc = ll_get_default_mdsize(sbi, &lmmsize);
+       rc = ll_get_max_mdsize(sbi, &lmmsize);
        if (rc)
                return rc;
 
@@ -834,9 +599,9 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
 
        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
 
-       lmmsize = body->eadatasize;
+       lmmsize = body->mbo_eadatasize;
 
-       if (!(body->valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) ||
+       if (!(body->mbo_valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) ||
            lmmsize == 0) {
                rc = -ENODATA;
                goto out;
@@ -844,6 +609,7 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
 
        lmm = req_capsule_server_sized_get(&req->rq_pill,
                                           &RMF_MDT_MD, lmmsize);
+       LASSERT(lmm);
 
        /*
         * This is coming from the MDS, so is probably in
@@ -860,40 +626,47 @@ int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
                if (cpu_to_le32(LOV_MAGIC) != LOV_MAGIC)
                        lustre_swab_lov_user_md_v3((struct lov_user_md_v3 *)lmm);
                break;
+       case LMV_USER_MAGIC:
+               if (cpu_to_le32(LMV_USER_MAGIC) != LMV_USER_MAGIC)
+                       lustre_swab_lmv_user_md((struct lmv_user_md *)lmm);
+               break;
        default:
                CERROR("unknown magic: %lX\n", (unsigned long)lmm->lmm_magic);
                rc = -EPROTO;
        }
 out:
-       *lmmp = lmm;
-       *lmm_size = lmmsize;
+       *plmm = lmm;
+       *plmm_size = lmmsize;
        *request = req;
        return rc;
 }
 
-/*
- *  Get MDT index for the inode.
- */
-int ll_get_mdt_idx(struct inode *inode)
+int ll_get_mdt_idx_by_fid(struct ll_sb_info *sbi, const struct lu_fid *fid)
 {
-       struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct md_op_data *op_data;
-       int rc, mdtidx;
+       int mdt_index, rc;
 
-       op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0,
-                                    0, LUSTRE_OPC_ANY, NULL);
-       if (IS_ERR(op_data))
-               return PTR_ERR(op_data);
+       op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
+       if (!op_data)
+               return -ENOMEM;
 
        op_data->op_flags |= MF_GET_MDT_IDX;
+       op_data->op_fid1 = *fid;
        rc = md_getattr(sbi->ll_md_exp, op_data, NULL);
-       mdtidx = op_data->op_mds;
-       ll_finish_md_op_data(op_data);
-       if (rc < 0) {
-               CDEBUG(D_INFO, "md_getattr_name: %d\n", rc);
+       mdt_index = op_data->op_mds;
+       kvfree(op_data);
+       if (rc < 0)
                return rc;
-       }
-       return mdtidx;
+
+       return mdt_index;
+}
+
+/*
+ *  Get MDT index for the inode.
+ */
+int ll_get_mdt_idx(struct inode *inode)
+{
+       return ll_get_mdt_idx_by_fid(ll_i2sbi(inode), ll_inode2fid(inode));
 }
 
 /**
@@ -1288,11 +1061,9 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                return 0;
        }
        case IOC_MDC_LOOKUP: {
-               struct ptlrpc_request *request = NULL;
                int namelen, len = 0;
                char *buf = NULL;
                char *filename;
-               struct md_op_data *op_data;
 
                rc = obd_ioctl_getdata(&buf, &len, (void __user *)arg);
                if (rc)
@@ -1308,21 +1079,13 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
                        goto out_free;
                }
 
-               op_data = ll_prep_md_op_data(NULL, inode, NULL, filename, namelen,
-                                            0, LUSTRE_OPC_ANY, NULL);
-               if (IS_ERR(op_data)) {
-                       rc = PTR_ERR(op_data);
-                       goto out_free;
-               }
-
-               op_data->op_valid = OBD_MD_FLID;
-               rc = md_getattr_name(sbi->ll_md_exp, op_data, &request);
-               ll_finish_md_op_data(op_data);
+               rc = ll_get_fid_by_name(inode, filename, namelen, NULL);
                if (rc < 0) {
-                       CDEBUG(D_INFO, "md_getattr_name: %d\n", rc);
+                       CERROR("%s: lookup %.*s failed: rc = %d\n",
+                              ll_get_fsname(inode->i_sb, NULL, 0), namelen,
+                              filename, rc);
                        goto out_free;
                }
-               ptlrpc_req_finished(request);
 out_free:
                obd_ioctl_freedata(buf, len);
                return rc;
@@ -1333,6 +1096,7 @@ out_free:
                char            *filename;
                int              namelen = 0;
                int              lumlen = 0;
+               umode_t mode;
                int              len;
                int              rc;
 
@@ -1366,15 +1130,32 @@ out_free:
                        goto lmv_out_free;
                }
 
-               /**
-                * ll_dir_setdirstripe will be used to set dir stripe
-                *  mdc_create--->mdt_reint_create (with dirstripe)
-                */
-               rc = ll_dir_setdirstripe(inode, lum, filename);
+#if OBD_OCD_VERSION(2, 9, 50, 0) > LUSTRE_VERSION_CODE
+               mode = data->ioc_type != 0 ? data->ioc_type : S_IRWXUGO;
+#else
+               mode = data->ioc_type;
+#endif
+               rc = ll_dir_setdirstripe(inode, lum, filename, mode);
 lmv_out_free:
                obd_ioctl_freedata(buf, len);
                return rc;
        }
+       case LL_IOC_LMV_SET_DEFAULT_STRIPE: {
+               struct lmv_user_md __user *ulump;
+               struct lmv_user_md lum;
+               int rc;
+
+               ulump = (struct lmv_user_md __user *)arg;
+               if (copy_from_user(&lum, ulump, sizeof(lum)))
+                       return -EFAULT;
+
+               if (lum.lum_magic != LMV_USER_MAGIC)
+                       return -EINVAL;
+
+               rc = ll_dir_setstripe(inode, (struct lov_user_md *)&lum, 0);
+
+               return rc;
+       }
        case LL_IOC_LOV_SETSTRIPE: {
                struct lov_user_md_v3 lumv3;
                struct lov_user_md_v1 *lumv1 = (struct lov_user_md_v1 *)&lumv3;
@@ -1404,50 +1185,100 @@ lmv_out_free:
                return rc;
        }
        case LL_IOC_LMV_GETSTRIPE: {
-               struct lmv_user_md __user *lump = (void __user *)arg;
+               struct lmv_user_md __user *ulmv;
                struct lmv_user_md lum;
-               struct lmv_user_md *tmp;
+               struct ptlrpc_request *request = NULL;
+               struct lmv_user_md *tmp = NULL;
+               union lmv_mds_md *lmm = NULL;
+               u64 valid = 0;
+               int stripe_count;
+               int mdt_index;
                int lum_size;
-               int rc = 0;
-               int mdtindex;
+               int lmmsize;
+               int rc;
+               int i;
 
-               if (copy_from_user(&lum, lump, sizeof(struct lmv_user_md)))
+               ulmv = (struct lmv_user_md __user *)arg;
+               if (copy_from_user(&lum, ulmv, sizeof(*ulmv)))
                        return -EFAULT;
 
-               if (lum.lum_magic != LMV_MAGIC_V1)
+               /*
+                * lum_magic will indicate which stripe the ioctl will like
+                * to get, LMV_MAGIC_V1 is for normal LMV stripe, LMV_USER_MAGIC
+                * is for default LMV stripe
+                */
+               if (lum.lum_magic == LMV_MAGIC_V1)
+                       valid |= OBD_MD_MEA;
+               else if (lum.lum_magic == LMV_USER_MAGIC)
+                       valid |= OBD_MD_DEFAULT_MEA;
+               else
                        return -EINVAL;
 
-               lum_size = lmv_user_md_size(1, LMV_MAGIC_V1);
+               rc = ll_dir_getstripe(inode, (void **)&lmm, &lmmsize, &request,
+                                     valid);
+               if (rc)
+                       goto finish_req;
+
+               /* Get default LMV EA */
+               if (lum.lum_magic == LMV_USER_MAGIC) {
+                       if (rc)
+                               goto finish_req;
+
+                       if (lmmsize > sizeof(*ulmv)) {
+                               rc = -EINVAL;
+                               goto finish_req;
+                       }
+
+                       if (copy_to_user(ulmv, lmm, lmmsize))
+                               rc = -EFAULT;
+
+                       goto finish_req;
+               }
+
+               stripe_count = lmv_mds_md_stripe_count_get(lmm);
+               lum_size = lmv_user_md_size(stripe_count, LMV_MAGIC_V1);
                tmp = kzalloc(lum_size, GFP_NOFS);
                if (!tmp) {
                        rc = -ENOMEM;
-                       goto free_lmv;
+                       goto finish_req;
                }
 
-               *tmp = lum;
-               tmp->lum_type = LMV_STRIPE_TYPE;
-               tmp->lum_stripe_count = 1;
-               mdtindex = ll_get_mdt_idx(inode);
-               if (mdtindex < 0) {
+               mdt_index = ll_get_mdt_idx(inode);
+               if (mdt_index < 0) {
                        rc = -ENOMEM;
-                       goto free_lmv;
+                       goto out_tmp;
+               }
+               tmp->lum_magic = LMV_MAGIC_V1;
+               tmp->lum_stripe_count = 0;
+               tmp->lum_stripe_offset = mdt_index;
+               for (i = 0; i < stripe_count; i++) {
+                       struct lu_fid   *fid;
+
+                       fid = &lmm->lmv_md_v1.lmv_stripe_fids[i];
+                       mdt_index = ll_get_mdt_idx_by_fid(sbi, fid);
+                       if (mdt_index < 0) {
+                               rc = mdt_index;
+                               goto out_tmp;
+                       }
+                       tmp->lum_objects[i].lum_mds = mdt_index;
+                       tmp->lum_objects[i].lum_fid = *fid;
+                       tmp->lum_stripe_count++;
                }
 
-               tmp->lum_stripe_offset = mdtindex;
-               tmp->lum_objects[0].lum_mds = mdtindex;
-               memcpy(&tmp->lum_objects[0].lum_fid, ll_inode2fid(inode),
-                      sizeof(struct lu_fid));
-               if (copy_to_user((void __user *)arg, tmp, lum_size)) {
+               if (copy_to_user(ulmv, tmp, lum_size)) {
                        rc = -EFAULT;
-                       goto free_lmv;
+                       goto out_tmp;
                }
-free_lmv:
+out_tmp:
                kfree(tmp);
+finish_req:
+               ptlrpc_req_finished(request);
                return rc;
        }
+
        case LL_IOC_LOV_SWAP_LAYOUTS:
                return -EPERM;
-       case LL_IOC_OBD_STATFS:
+       case IOC_OBD_STATFS:
                return ll_obd_statfs(inode, (void __user *)arg);
        case LL_IOC_LOV_GETSTRIPE:
        case LL_IOC_MDC_GETINFO:
@@ -1469,7 +1300,8 @@ free_lmv:
                        rc = ll_lov_getstripe_ea_info(inode, filename, &lmm,
                                                      &lmmsize, &request);
                } else {
-                       rc = ll_dir_getstripe(inode, &lmm, &lmmsize, &request);
+                       rc = ll_dir_getstripe(inode, (void **)&lmm, &lmmsize,
+                                             &request, 0);
                }
 
                if (request) {
@@ -1512,18 +1344,18 @@ skip_lmm:
                        lstat_t st = { 0 };
 
                        st.st_dev     = inode->i_sb->s_dev;
-                       st.st_mode    = body->mode;
-                       st.st_nlink   = body->nlink;
-                       st.st_uid     = body->uid;
-                       st.st_gid     = body->gid;
-                       st.st_rdev    = body->rdev;
-                       st.st_size    = body->size;
+                       st.st_mode    = body->mbo_mode;
+                       st.st_nlink   = body->mbo_nlink;
+                       st.st_uid     = body->mbo_uid;
+                       st.st_gid     = body->mbo_gid;
+                       st.st_rdev    = body->mbo_rdev;
+                       st.st_size    = body->mbo_size;
                        st.st_blksize = PAGE_SIZE;
-                       st.st_blocks  = body->blocks;
-                       st.st_atime   = body->atime;
-                       st.st_mtime   = body->mtime;
-                       st.st_ctime   = body->ctime;
-                       st.st_ino     = cl_fid_build_ino(&body->fid1,
+                       st.st_blocks  = body->mbo_blocks;
+                       st.st_atime   = body->mbo_atime;
+                       st.st_mtime   = body->mbo_mtime;
+                       st.st_ctime   = body->mbo_ctime;
+                       st.st_ino     = cl_fid_build_ino(&body->mbo_fid1,
                                                         sbi->ll_flags &
                                                         LL_SBI_32BIT_API);
 
@@ -1611,9 +1443,6 @@ free_lmm:
                kvfree(lmm);
                return rc;
        }
-       case OBD_IOC_LLOG_CATINFO: {
-               return -EOPNOTSUPP;
-       }
        case OBD_IOC_QUOTACHECK: {
                struct obd_quotactl *oqctl;
                int error = 0;
@@ -1671,7 +1500,7 @@ out_poll:
                kfree(check);
                return rc;
        }
-       case LL_IOC_QUOTACTL: {
+       case OBD_IOC_QUOTACTL: {
                struct if_quotactl *qctl;
 
                qctl = kzalloc(sizeof(*qctl), GFP_NOFS);
@@ -1853,6 +1682,45 @@ out_quotactl:
                kfree(copy);
                return rc;
        }
+       case LL_IOC_MIGRATE: {
+               char *buf = NULL;
+               const char *filename;
+               int namelen = 0;
+               int len;
+               int rc;
+               int mdtidx;
+
+               rc = obd_ioctl_getdata(&buf, &len, (void __user *)arg);
+               if (rc < 0)
+                       return rc;
+
+               data = (struct obd_ioctl_data *)buf;
+               if (!data->ioc_inlbuf1 || !data->ioc_inlbuf2 ||
+                   !data->ioc_inllen1 || !data->ioc_inllen2) {
+                       rc = -EINVAL;
+                       goto migrate_free;
+               }
+
+               filename = data->ioc_inlbuf1;
+               namelen = data->ioc_inllen1;
+               if (namelen < 1 || namelen != strlen(filename) + 1) {
+                       rc = -EINVAL;
+                       goto migrate_free;
+               }
+
+               if (data->ioc_inllen2 != sizeof(mdtidx)) {
+                       rc = -EINVAL;
+                       goto migrate_free;
+               }
+               mdtidx = *(int *)data->ioc_inlbuf2;
+
+               rc = ll_migrate(inode, file, mdtidx, filename, namelen - 1);
+migrate_free:
+               obd_ioctl_freedata(buf, len);
+
+               return rc;
+       }
+
        default:
                return obd_iocontrol(cmd, sbi->ll_dt_exp, 0, NULL,
                                     (void __user *)arg);
index 23249b3e6cad1443efb4d9dbfde574bf26495480..9fe733ad7b968528a981306c6ef96086ff15f925 100644 (file)
 #include "../include/lustre_lite.h"
 #include <linux/pagemap.h>
 #include <linux/file.h>
+#include <linux/sched.h>
 #include <linux/mount.h>
 #include "llite_internal.h"
 #include "../include/lustre/ll_fiemap.h"
+#include "../include/lustre/lustre_ioctl.h"
 
 #include "../include/cl_object.h"
 
@@ -198,7 +200,7 @@ static int ll_close_inode_openhandle(struct obd_export *md_exp,
                struct mdt_body *body;
 
                body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-               if (!(body->valid & OBD_MD_FLRELEASED))
+               if (!(body->mbo_valid & OBD_MD_FLRELEASED))
                        rc = -EBUSY;
        }
 
@@ -364,7 +366,8 @@ int ll_file_release(struct inode *inode, struct file *file)
        }
 
        if (!S_ISDIR(inode->i_mode)) {
-               lov_read_and_clear_async_rc(lli->lli_clob);
+               if (lli->lli_clob)
+                       lov_read_and_clear_async_rc(lli->lli_clob);
                lli->lli_async_rc = 0;
        }
 
@@ -376,55 +379,39 @@ int ll_file_release(struct inode *inode, struct file *file)
        return rc;
 }
 
-static int ll_intent_file_open(struct dentry *dentry, void *lmm,
-                              int lmmsize, struct lookup_intent *itp)
+static int ll_intent_file_open(struct dentry *de, void *lmm, int lmmsize,
+                              struct lookup_intent *itp)
 {
-       struct inode *inode = d_inode(dentry);
+       struct inode *inode = d_inode(de);
        struct ll_sb_info *sbi = ll_i2sbi(inode);
-       struct dentry *parent = dentry->d_parent;
-       const char *name = dentry->d_name.name;
-       const int len = dentry->d_name.len;
+       struct dentry *parent = de->d_parent;
+       const char *name = NULL;
        struct md_op_data *op_data;
-       struct ptlrpc_request *req;
-       __u32 opc = LUSTRE_OPC_ANY;
-       int rc;
+       struct ptlrpc_request *req = NULL;
+       int len = 0, rc;
 
-       /* Usually we come here only for NFSD, and we want open lock. */
-       /* We can also get here if there was cached open handle in revalidate_it
-        * but it disappeared while we were getting from there to ll_file_open.
-        * But this means this file was closed and immediately opened which
-        * makes a good candidate for using OPEN lock
-        */
-       /* If lmmsize & lmm are not 0, we are just setting stripe info
-        * parameters. No need for the open lock
+       LASSERT(parent);
+       LASSERT(itp->it_flags & MDS_OPEN_BY_FID);
+
+       /*
+        * if server supports open-by-fid, or file name is invalid, don't pack
+        * name in open request
         */
-       if (!lmm && lmmsize == 0) {
-               struct ll_dentry_data *ldd = ll_d2d(dentry);
-               /*
-                * If we came via ll_iget_for_nfs, then we need to request
-                * struct ll_dentry_data *ldd = ll_d2d(file->f_dentry);
-                *
-                * NB: when ldd is NULL, it must have come via normal
-                * lookup path only, since ll_iget_for_nfs always calls
-                * ll_d_init().
-                */
-               if (ldd && ldd->lld_nfs_dentry) {
-                       ldd->lld_nfs_dentry = 0;
-                       itp->it_flags |= MDS_OPEN_LOCK;
-               }
-               if (itp->it_flags & FMODE_WRITE)
-                       opc = LUSTRE_OPC_CREATE;
+       if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_OPEN_BY_FID) &&
+           lu_name_is_valid_2(de->d_name.name, de->d_name.len)) {
+               name = de->d_name.name;
+               len = de->d_name.len;
        }
 
-       op_data  = ll_prep_md_op_data(NULL, d_inode(parent),
-                                     inode, name, len,
-                                     O_RDWR, opc, NULL);
+       op_data  = ll_prep_md_op_data(NULL, d_inode(parent), inode, name, len,
+                                     O_RDWR, LUSTRE_OPC_ANY, NULL);
        if (IS_ERR(op_data))
                return PTR_ERR(op_data);
+       op_data->op_data = lmm;
+       op_data->op_data_size = lmmsize;
 
-       itp->it_flags |= MDS_OPEN_BY_FID;
-       rc = md_intent_lock(sbi->ll_md_exp, op_data, lmm, lmmsize, itp,
-                           0 /*unused */, &req, ll_md_blocking_ast, 0);
+       rc = md_intent_lock(sbi->ll_md_exp, op_data, itp, &req,
+                           &ll_md_blocking_ast, 0);
        ll_finish_md_op_data(op_data);
        if (rc == -ESTALE) {
                /* reason for keep own exit path - don`t flood log
@@ -479,8 +466,8 @@ static int ll_och_fill(struct obd_export *md_exp, struct lookup_intent *it,
        struct mdt_body *body;
 
        body = req_capsule_server_get(&it->it_request->rq_pill, &RMF_MDT_BODY);
-       och->och_fh = body->handle;
-       och->och_fid = body->fid1;
+       och->och_fh = body->mbo_handle;
+       och->och_fid = body->mbo_fid1;
        och->och_lease_handle.cookie = it->it_lock_handle;
        och->och_magic = OBD_CLIENT_HANDLE_MAGIC;
        och->och_flags = it->it_flags;
@@ -508,7 +495,7 @@ static int ll_local_open(struct file *file, struct lookup_intent *it,
 
                body = req_capsule_server_get(&it->it_request->rq_pill,
                                              &RMF_MDT_BODY);
-               ll_ioepoch_open(lli, body->ioepoch);
+               ll_ioepoch_open(lli, body->mbo_ioepoch);
        }
 
        LUSTRE_FPRIVATE(file) = fd;
@@ -652,9 +639,19 @@ restart:
                         * result in a deadlock
                         */
                        mutex_unlock(&lli->lli_och_mutex);
-                       it->it_create_mode |= M_CHECK_STALE;
+                       /*
+                        * Normally called under two situations:
+                        * 1. NFS export.
+                        * 2. revalidate with IT_OPEN (revalidate doesn't
+                        *    execute this intent any more).
+                        *
+                        * Always fetch MDS_OPEN_LOCK if this is not setstripe.
+                        *
+                        * Always specify MDS_OPEN_BY_FID because we don't want
+                        * to get file with different fid.
+                        */
+                       it->it_flags |= MDS_OPEN_LOCK | MDS_OPEN_BY_FID;
                        rc = ll_intent_file_open(file->f_path.dentry, NULL, 0, it);
-                       it->it_create_mode &= ~M_CHECK_STALE;
                        if (rc)
                                goto out_openerr;
 
@@ -764,7 +761,7 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
        struct lookup_intent it = { .it_op = IT_OPEN };
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct md_op_data *op_data;
-       struct ptlrpc_request *req;
+       struct ptlrpc_request *req = NULL;
        struct lustre_handle old_handle = { 0 };
        struct obd_client_handle *och = NULL;
        int rc;
@@ -831,8 +828,8 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
 
        it.it_flags = fmode | open_flags;
        it.it_flags |= MDS_OPEN_LOCK | MDS_OPEN_BY_FID | MDS_OPEN_LEASE;
-       rc = md_intent_lock(sbi->ll_md_exp, op_data, NULL, 0, &it, 0, &req,
-                           ll_md_blocking_lease_ast,
+       rc = md_intent_lock(sbi->ll_md_exp, op_data, &it, &req,
+                           &ll_md_blocking_lease_ast,
        /* LDLM_FL_NO_LRU: To not put the lease lock into LRU list, otherwise
         * it can be cancelled which may mislead applications that the lease is
         * broken;
@@ -840,7 +837,7 @@ ll_lease_open(struct inode *inode, struct file *file, fmode_t fmode,
         * open in ll_md_blocking_ast(). Otherwise as ll_md_blocking_lease_ast
         * doesn't deal with openhandle, so normal openhandle will be leaked.
         */
-                               LDLM_FL_NO_LRU | LDLM_FL_EXCL);
+                           LDLM_FL_NO_LRU | LDLM_FL_EXCL);
        ll_finish_md_op_data(op_data);
        ptlrpc_req_finished(req);
        if (rc < 0)
@@ -1396,6 +1393,7 @@ int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry,
        }
 
        ll_inode_size_lock(inode);
+       oit.it_flags |= MDS_OPEN_BY_FID;
        rc = ll_intent_file_open(dentry, lum, lum_size, &oit);
        if (rc)
                goto out_unlock;
@@ -1448,9 +1446,9 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
 
        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
 
-       lmmsize = body->eadatasize;
+       lmmsize = body->mbo_eadatasize;
 
-       if (!(body->valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) ||
+       if (!(body->mbo_valid & (OBD_MD_FLEASIZE | OBD_MD_FLDIREA)) ||
            lmmsize == 0) {
                rc = -ENODATA;
                goto out;
@@ -1481,13 +1479,13 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
                 */
                if (lmm->lmm_magic == cpu_to_le32(LOV_MAGIC_V1)) {
                        lustre_swab_lov_user_md_v1((struct lov_user_md_v1 *)lmm);
-                       if (S_ISREG(body->mode))
+                       if (S_ISREG(body->mbo_mode))
                                lustre_swab_lov_user_md_objects(
                                 ((struct lov_user_md_v1 *)lmm)->lmm_objects,
                                 stripe_count);
                } else if (lmm->lmm_magic == cpu_to_le32(LOV_MAGIC_V3)) {
                        lustre_swab_lov_user_md_v3((struct lov_user_md_v3 *)lmm);
-                       if (S_ISREG(body->mode))
+                       if (S_ISREG(body->mbo_mode))
                                lustre_swab_lov_user_md_objects(
                                 ((struct lov_user_md_v3 *)lmm)->lmm_objects,
                                 stripe_count);
@@ -2474,7 +2472,7 @@ ll_file_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
 
                        if (och) {
                                mode = och->och_flags &
-                                      (FMODE_READ|FMODE_WRITE);
+                                      (FMODE_READ | FMODE_WRITE);
                                rc = ll_lease_close(och, inode, &lease_broken);
                                if (rc == 0 && lease_broken)
                                        mode = 0;
@@ -2593,9 +2591,11 @@ static int ll_flush(struct file *file, fl_owner_t id)
         */
        rc = lli->lli_async_rc;
        lli->lli_async_rc = 0;
-       err = lov_read_and_clear_async_rc(lli->lli_clob);
-       if (rc == 0)
-               rc = err;
+       if (lli->lli_clob) {
+               err = lov_read_and_clear_async_rc(lli->lli_clob);
+               if (!rc)
+                       rc = err;
+       }
 
        /* The application has been told about write failure already.
         * Do not report failure again.
@@ -2714,6 +2714,7 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
        struct md_op_data *op_data;
        struct lustre_handle lockh = {0};
        ldlm_policy_data_t flock = { {0} };
+       int fl_type = file_lock->fl_type;
        __u64 flags = 0;
        int rc;
        int rc2 = 0;
@@ -2744,7 +2745,7 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
        if (file_lock->fl_lmops && file_lock->fl_lmops->lm_compare_owner)
                flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
 
-       switch (file_lock->fl_type) {
+       switch (fl_type) {
        case F_RDLCK:
                einfo.ei_mode = LCK_PR;
                break;
@@ -2764,8 +2765,7 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
                einfo.ei_mode = LCK_PW;
                break;
        default:
-               CDEBUG(D_INFO, "Unknown fcntl lock type: %d\n",
-                      file_lock->fl_type);
+               CDEBUG(D_INFO, "Unknown fcntl lock type: %d\n", fl_type);
                return -ENOTSUPP;
        }
 
@@ -2787,16 +2787,18 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
        case F_GETLK64:
 #endif
                flags = LDLM_FL_TEST_LOCK;
-               /* Save the old mode so that if the mode in the lock changes we
-                * can decrement the appropriate reader or writer refcount.
-                */
-               file_lock->fl_type = einfo.ei_mode;
                break;
        default:
                CERROR("unknown fcntl lock command: %d\n", cmd);
                return -EINVAL;
        }
 
+       /*
+        * Save the old mode so that if the mode in the lock changes we
+        * can decrement the appropriate reader or writer refcount.
+        */
+       file_lock->fl_type = einfo.ei_mode;
+
        op_data = ll_prep_md_op_data(NULL, inode, NULL, NULL, 0, 0,
                                     LUSTRE_OPC_ANY, NULL);
        if (IS_ERR(op_data))
@@ -2806,8 +2808,12 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
               PFID(ll_inode2fid(inode)), flock.l_flock.pid, flags,
               einfo.ei_mode, flock.l_flock.start, flock.l_flock.end);
 
-       rc = md_enqueue(sbi->ll_md_exp, &einfo, NULL,
-                       op_data, &lockh, &flock, 0, NULL /* req */, flags);
+       rc = md_enqueue(sbi->ll_md_exp, &einfo, &flock, NULL, op_data, &lockh,
+                       flags);
+
+       /* Restore the file lock type if not TEST lock. */
+       if (!(flags & LDLM_FL_TEST_LOCK))
+               file_lock->fl_type = fl_type;
 
        if ((rc == 0 || file_lock->fl_type == F_UNLCK) &&
            !(flags & LDLM_FL_TEST_LOCK))
@@ -2815,8 +2821,8 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
 
        if (rc2 && file_lock->fl_type != F_UNLCK) {
                einfo.ei_mode = LCK_NL;
-               md_enqueue(sbi->ll_md_exp, &einfo, NULL,
-                          op_data, &lockh, &flock, 0, NULL /* req */, flags);
+               md_enqueue(sbi->ll_md_exp, &einfo, &flock, NULL, op_data,
+                          &lockh, flags);
                rc = rc2;
        }
 
@@ -2825,6 +2831,112 @@ ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
        return rc;
 }
 
+int ll_get_fid_by_name(struct inode *parent, const char *name,
+                      int namelen, struct lu_fid *fid)
+{
+       struct md_op_data *op_data = NULL;
+       struct ptlrpc_request *req;
+       struct mdt_body *body;
+       int rc;
+
+       op_data = ll_prep_md_op_data(NULL, parent, NULL, name, namelen, 0,
+                                    LUSTRE_OPC_ANY, NULL);
+       if (IS_ERR(op_data))
+               return PTR_ERR(op_data);
+
+       op_data->op_valid = OBD_MD_FLID;
+       rc = md_getattr_name(ll_i2sbi(parent)->ll_md_exp, op_data, &req);
+       ll_finish_md_op_data(op_data);
+       if (rc < 0)
+               return rc;
+
+       body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
+       if (!body) {
+               rc = -EFAULT;
+               goto out_req;
+       }
+       if (fid)
+               *fid = body->mbo_fid1;
+out_req:
+       ptlrpc_req_finished(req);
+       return rc;
+}
+
+int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
+              const char *name, int namelen)
+{
+       struct ptlrpc_request *request = NULL;
+       struct inode *child_inode = NULL;
+       struct dentry *dchild = NULL;
+       struct md_op_data *op_data;
+       struct qstr qstr;
+       int rc;
+
+       CDEBUG(D_VFSTRACE, "migrate %s under "DFID" to MDT%d\n",
+              name, PFID(ll_inode2fid(parent)), mdtidx);
+
+       op_data = ll_prep_md_op_data(NULL, parent, NULL, name, namelen,
+                                    0, LUSTRE_OPC_ANY, NULL);
+       if (IS_ERR(op_data))
+               return PTR_ERR(op_data);
+
+       /* Get child FID first */
+       qstr.hash = full_name_hash(parent, name, namelen);
+       qstr.name = name;
+       qstr.len = namelen;
+       dchild = d_lookup(file_dentry(file), &qstr);
+       if (dchild && dchild->d_inode) {
+               op_data->op_fid3 = *ll_inode2fid(dchild->d_inode);
+               if (dchild->d_inode) {
+                       child_inode = igrab(dchild->d_inode);
+                       ll_invalidate_aliases(child_inode);
+               }
+               dput(dchild);
+       } else {
+               rc = ll_get_fid_by_name(parent, name, namelen,
+                                       &op_data->op_fid3);
+               if (rc)
+                       goto out_free;
+       }
+
+       if (!fid_is_sane(&op_data->op_fid3)) {
+               CERROR("%s: migrate %s, but fid "DFID" is insane\n",
+                      ll_get_fsname(parent->i_sb, NULL, 0), name,
+                      PFID(&op_data->op_fid3));
+               rc = -EINVAL;
+               goto out_free;
+       }
+
+       rc = ll_get_mdt_idx_by_fid(ll_i2sbi(parent), &op_data->op_fid3);
+       if (rc < 0)
+               goto out_free;
+
+       if (rc == mdtidx) {
+               CDEBUG(D_INFO, "%s:"DFID" is already on MDT%d.\n", name,
+                      PFID(&op_data->op_fid3), mdtidx);
+               rc = 0;
+               goto out_free;
+       }
+
+       op_data->op_mds = mdtidx;
+       op_data->op_cli_flags = CLI_MIGRATE;
+       rc = md_rename(ll_i2sbi(parent)->ll_md_exp, op_data, name,
+                      namelen, name, namelen, &request);
+       if (!rc)
+               ll_update_times(request, parent);
+
+       ptlrpc_req_finished(request);
+
+out_free:
+       if (child_inode) {
+               clear_nlink(child_inode);
+               iput(child_inode);
+       }
+
+       ll_finish_md_op_data(op_data);
+       return rc;
+}
+
 static int
 ll_file_noflock(struct file *file, int cmd, struct file_lock *file_lock)
 {
@@ -2847,7 +2959,7 @@ int ll_have_md_lock(struct inode *inode, __u64 *bits,
        struct lustre_handle lockh;
        ldlm_policy_data_t policy;
        enum ldlm_mode mode = (l_req_mode == LCK_MINMODE) ?
-                               (LCK_CR|LCK_CW|LCK_PR|LCK_PW) : l_req_mode;
+                             (LCK_CR | LCK_CW | LCK_PR | LCK_PW) : l_req_mode;
        struct lu_fid *fid;
        __u64 flags;
        int i;
@@ -2949,15 +3061,9 @@ static int __ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
                if (IS_ERR(op_data))
                        return PTR_ERR(op_data);
 
-               oit.it_create_mode |= M_CHECK_STALE;
-               rc = md_intent_lock(exp, op_data, NULL, 0,
-                                   /* we are not interested in name
-                                    * based lookup
-                                    */
-                                   &oit, 0, &req,
-                                   ll_md_blocking_ast, 0);
+               rc = md_intent_lock(exp, op_data, &oit, &req,
+                                   &ll_md_blocking_ast, 0);
                ll_finish_md_op_data(op_data);
-               oit.it_create_mode &= ~M_CHECK_STALE;
                if (rc < 0) {
                        rc = ll_inode_revalidate_fini(inode, rc);
                        goto out;
@@ -3015,6 +3121,27 @@ out:
        return rc;
 }
 
+static int ll_merge_md_attr(struct inode *inode)
+{
+       struct cl_attr attr = { 0 };
+       int rc;
+
+       LASSERT(ll_i2info(inode)->lli_lsm_md);
+       rc = md_merge_attr(ll_i2mdexp(inode), ll_i2info(inode)->lli_lsm_md,
+                          &attr);
+       if (rc)
+               return rc;
+
+       ll_i2info(inode)->lli_stripe_dir_size = attr.cat_size;
+       ll_i2info(inode)->lli_stripe_dir_nlink = attr.cat_nlink;
+
+       ll_i2info(inode)->lli_atime = attr.cat_atime;
+       ll_i2info(inode)->lli_mtime = attr.cat_mtime;
+       ll_i2info(inode)->lli_ctime = attr.cat_ctime;
+
+       return 0;
+}
+
 static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 {
        struct inode *inode = d_inode(dentry);
@@ -3026,6 +3153,13 @@ static int ll_inode_revalidate(struct dentry *dentry, __u64 ibits)
 
        /* if object isn't regular file, don't validate size */
        if (!S_ISREG(inode->i_mode)) {
+               if (S_ISDIR(inode->i_mode) &&
+                   ll_i2info(inode)->lli_lsm_md) {
+                       rc = ll_merge_md_attr(inode);
+                       if (rc)
+                               return rc;
+               }
+
                LTIME_S(inode->i_atime) = ll_i2info(inode)->lli_atime;
                LTIME_S(inode->i_mtime) = ll_i2info(inode)->lli_mtime;
                LTIME_S(inode->i_ctime) = ll_i2info(inode)->lli_ctime;
@@ -3057,13 +3191,14 @@ int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
        if (res)
                return res;
 
+       OBD_FAIL_TIMEOUT(OBD_FAIL_GETATTR_DELAY, 30);
+
        stat->dev = inode->i_sb->s_dev;
        if (ll_need_32bit_api(sbi))
                stat->ino = cl_fid_build_ino(&lli->lli_fid, 1);
        else
                stat->ino = inode->i_ino;
        stat->mode = inode->i_mode;
-       stat->nlink = inode->i_nlink;
        stat->uid = inode->i_uid;
        stat->gid = inode->i_gid;
        stat->rdev = inode->i_rdev;
@@ -3071,10 +3206,17 @@ int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat)
        stat->mtime = inode->i_mtime;
        stat->ctime = inode->i_ctime;
        stat->blksize = 1 << inode->i_blkbits;
-
-       stat->size = i_size_read(inode);
        stat->blocks = inode->i_blocks;
 
+       if (S_ISDIR(inode->i_mode) &&
+           ll_i2info(inode)->lli_lsm_md) {
+               stat->nlink = lli->lli_stripe_dir_nlink;
+               stat->size = lli->lli_stripe_dir_size;
+       } else {
+               stat->nlink = inode->i_nlink;
+               stat->size = i_size_read(inode);
+       }
+
        return 0;
 }
 
@@ -3139,6 +3281,12 @@ struct posix_acl *ll_get_acl(struct inode *inode, int type)
 
 int ll_inode_permission(struct inode *inode, int mask)
 {
+       struct ll_sb_info *sbi;
+       struct root_squash_info *squash;
+       const struct cred *old_cred = NULL;
+       struct cred *cred = NULL;
+       bool squash_id = false;
+       cfs_cap_t cap;
        int rc = 0;
 
        if (mask & MAY_NOT_BLOCK)
@@ -3158,9 +3306,46 @@ int ll_inode_permission(struct inode *inode, int mask)
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), inode mode %x mask %o\n",
               PFID(ll_inode2fid(inode)), inode, inode->i_mode, mask);
 
+       /* squash fsuid/fsgid if needed */
+       sbi = ll_i2sbi(inode);
+       squash = &sbi->ll_squash;
+       if (unlikely(squash->rsi_uid &&
+                    uid_eq(current_fsuid(), GLOBAL_ROOT_UID) &&
+                    !(sbi->ll_flags & LL_SBI_NOROOTSQUASH))) {
+               squash_id = true;
+       }
+
+       if (squash_id) {
+               CDEBUG(D_OTHER, "squash creds (%d:%d)=>(%d:%d)\n",
+                      __kuid_val(current_fsuid()), __kgid_val(current_fsgid()),
+                      squash->rsi_uid, squash->rsi_gid);
+
+               /*
+                * update current process's credentials
+                * and FS capability
+                */
+               cred = prepare_creds();
+               if (!cred)
+                       return -ENOMEM;
+
+               cred->fsuid = make_kuid(&init_user_ns, squash->rsi_uid);
+               cred->fsgid = make_kgid(&init_user_ns, squash->rsi_gid);
+               for (cap = 0; cap < sizeof(cfs_cap_t) * 8; cap++) {
+                       if ((1 << cap) & CFS_CAP_FS_MASK)
+                               cap_lower(cred->cap_effective, cap);
+               }
+               old_cred = override_creds(cred);
+       }
+
        ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_INODE_PERM, 1);
        rc = generic_permission(inode, mask);
 
+       /* restore current process's credentials and FS capability */
+       if (squash_id) {
+               revert_creds(old_cred);
+               put_cred(cred);
+       }
+
        return rc;
 }
 
@@ -3213,10 +3398,10 @@ const struct inode_operations ll_file_inode_operations = {
        .setattr        = ll_setattr,
        .getattr        = ll_getattr,
        .permission     = ll_inode_permission,
-       .setxattr       = ll_setxattr,
-       .getxattr       = ll_getxattr,
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
        .listxattr      = ll_listxattr,
-       .removexattr    = ll_removexattr,
+       .removexattr    = generic_removexattr,
        .fiemap         = ll_fiemap,
        .get_acl        = ll_get_acl,
 };
@@ -3251,7 +3436,6 @@ void *ll_iocontrol_register(llioc_callback_t cb, int count, unsigned int *cmd)
        if (!in_data)
                return NULL;
 
-       memset(in_data, 0, sizeof(*in_data));
        in_data->iocd_size = size;
        in_data->iocd_cb = cb;
        in_data->iocd_count = count;
@@ -3389,7 +3573,7 @@ static int ll_layout_fetch(struct inode *inode, struct ldlm_lock *lock)
                goto out;
        }
 
-       lmmsize = body->eadatasize;
+       lmmsize = body->mbo_eadatasize;
        if (lmmsize == 0) /* empty layout */ {
                rc = 0;
                goto out;
@@ -3447,7 +3631,7 @@ static int ll_layout_lock_set(struct lustre_handle *lockh, enum ldlm_mode mode,
                   PFID(&lli->lli_fid), inode, reconf);
 
        /* in case this is a caching lock and reinstate with new inode */
-       md_set_lock_data(sbi->ll_md_exp, &lockh->cookie, inode, NULL);
+       md_set_lock_data(sbi->ll_md_exp, lockh, inode, NULL);
 
        lock_res_and_lock(lock);
        lvb_ready = ldlm_is_lvb_ready(lock);
@@ -3557,8 +3741,8 @@ int ll_layout_refresh(struct inode *inode, __u32 *gen)
        struct ldlm_enqueue_info einfo = {
                .ei_type = LDLM_IBITS,
                .ei_mode = LCK_CR,
-               .ei_cb_bl = ll_md_blocking_ast,
-               .ei_cb_cp = ldlm_completion_ast,
+               .ei_cb_bl = &ll_md_blocking_ast,
+               .ei_cb_cp = &ldlm_completion_ast,
        };
        int rc;
 
@@ -3604,8 +3788,7 @@ again:
                          ll_get_fsname(inode->i_sb, NULL, 0),
                          PFID(&lli->lli_fid), inode);
 
-       rc = md_enqueue(sbi->ll_md_exp, &einfo, &it, op_data, &lockh,
-                       NULL, 0, NULL, 0);
+       rc = md_enqueue(sbi->ll_md_exp, &einfo, NULL, &it, op_data, &lockh, 0);
        ptlrpc_req_finished(it.it_request);
        it.it_request = NULL;
 
index 396e4e4f0715b61f142fa34743176e48631f6595..eed464b25385651f5ba5d12f72baae1cbce6acbf 100644 (file)
@@ -154,7 +154,7 @@ int cl_file_inode_init(struct inode *inode, struct lustre_md *md)
        int result = 0;
        int refcheck;
 
-       LASSERT(md->body->valid & OBD_MD_FLID);
+       LASSERT(md->body->mbo_valid & OBD_MD_FLID);
        LASSERT(S_ISREG(inode->i_mode));
 
        env = cl_env_get(&refcheck);
index 4d6d589a1677892ece653ab14aeeee920c8fec13..cbd5bc511b45b912fd24bd0232aa3f35f17ec5b8 100644 (file)
 
 /* for struct cl_lock_descr and struct cl_io */
 #include "../include/cl_object.h"
+#include "../include/lustre_lmv.h"
 #include "../include/lustre_mdc.h"
 #include "../include/lustre_intent.h"
 #include <linux/compat.h>
+#include <linux/xattr.h>
 #include <linux/posix_acl_xattr.h>
 #include "vvp_internal.h"
 
@@ -116,9 +118,7 @@ struct ll_inode_info {
 
        /* identifying fields for both metadata and data stacks. */
        struct lu_fid              lli_fid;
-       /* Parent fid for accessing default stripe data on parent directory
-        * for allocating OST objects after a mknod() and later open-by-FID.
-        */
+       /* master inode fid for stripe directory */
        struct lu_fid              lli_pfid;
 
        struct list_head              lli_close_list;
@@ -172,6 +172,12 @@ struct ll_inode_info {
                         * -- I am the owner of dir statahead.
                         */
                        pid_t                      d_opendir_pid;
+                       /* directory stripe information */
+                       struct lmv_stripe_md            *d_lsm_md;
+                       /* striped directory size */
+                       loff_t                          d_stripe_size;
+                       /* striped directory nlink */
+                       __u64                           d_stripe_nlink;
                } d;
 
 #define lli_readdir_mutex       u.d.d_readdir_mutex
@@ -179,6 +185,9 @@ struct ll_inode_info {
 #define lli_sai                 u.d.d_sai
 #define lli_sa_lock         u.d.d_sa_lock
 #define lli_opendir_pid         u.d.d_opendir_pid
+#define lli_lsm_md             u.d.d_lsm_md
+#define lli_stripe_dir_size    u.d.d_stripe_size
+#define lli_stripe_dir_nlink   u.d.d_stripe_nlink
 
                /* for non-directory */
                struct {
@@ -401,6 +410,7 @@ enum stats_track_type {
 #define LL_SBI_LAYOUT_LOCK    0x20000 /* layout lock support */
 #define LL_SBI_USER_FID2PATH  0x40000 /* allow fid2path by unprivileged users */
 #define LL_SBI_XATTR_CACHE    0x80000 /* support for xattr cache */
+#define LL_SBI_NOROOTSQUASH    0x100000 /* do not apply root squash */
 
 #define LL_SBI_FLAGS { \
        "nolck",        \
@@ -423,6 +433,7 @@ enum stats_track_type {
        "layout",       \
        "user_fid2path",\
        "xattr",        \
+       "norootsquash", \
 }
 
 struct ll_sb_info {
@@ -461,7 +472,7 @@ struct ll_sb_info {
        unsigned int          ll_namelen;
        struct file_operations   *ll_fop;
 
-       unsigned int          ll_md_brw_size; /* used by readdir */
+       unsigned int              ll_md_brw_pages; /* readdir pages per RPC */
 
        struct lu_site     *ll_site;
        struct cl_device         *ll_cl;
@@ -489,6 +500,9 @@ struct ll_sb_info {
        dev_t                     ll_sdev_orig; /* save s_dev before assign for
                                                 * clustered nfs
                                                 */
+       /* root squash */
+       struct root_squash_info   ll_squash;
+
        __kernel_fsid_t           ll_fsid;
        struct kobject           ll_kobj; /* sysfs object */
        struct super_block      *ll_sb; /* struct super_block (for sysfs code)*/
@@ -644,14 +658,16 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid,
                       size_t count, int rw);
 
 /* llite/dir.c */
-void ll_release_page(struct page *page, int remove);
 extern const struct file_operations ll_dir_operations;
 extern const struct inode_operations ll_dir_inode_operations;
-struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
-                            struct ll_dir_chain *chain);
-int ll_dir_read(struct inode *inode, struct dir_context *ctx);
-
+int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
+               struct dir_context *ctx);
 int ll_get_mdt_idx(struct inode *inode);
+int ll_get_mdt_idx_by_fid(struct ll_sb_info *sbi, const struct lu_fid *fid);
+struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
+                            __u64 offset, struct ll_dir_chain *chain);
+void ll_release_page(struct inode *inode, struct page *page, bool remove);
+
 /* llite/namei.c */
 extern const struct inode_operations ll_special_inode_operations;
 
@@ -659,9 +675,11 @@ int ll_objects_destroy(struct ptlrpc_request *request,
                       struct inode *dir);
 struct inode *ll_iget(struct super_block *sb, ino_t hash,
                      struct lustre_md *lic);
+int ll_test_inode_by_fid(struct inode *inode, void *opaque);
 int ll_md_blocking_ast(struct ldlm_lock *, struct ldlm_lock_desc *,
                       void *data, int flag);
 struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de);
+void ll_update_times(struct ptlrpc_request *request, struct inode *inode);
 
 /* llite/rw.c */
 int ll_writepage(struct page *page, struct writeback_control *wbc);
@@ -704,7 +722,10 @@ void ll_pack_inode2opdata(struct inode *inode, struct md_op_data *op_data,
                          struct lustre_handle *fh);
 int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat);
 struct posix_acl *ll_get_acl(struct inode *inode, int type);
-
+int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
+              const char *name, int namelen);
+int ll_get_fid_by_name(struct inode *parent, const char *name,
+                      int namelen, struct lu_fid *fid);
 int ll_inode_permission(struct inode *inode, int mask);
 
 int ll_lov_setstripe_ea_info(struct inode *inode, struct dentry *dentry,
@@ -715,8 +736,8 @@ int ll_lov_getstripe_ea_info(struct inode *inode, const char *filename,
                             struct ptlrpc_request **request);
 int ll_dir_setstripe(struct inode *inode, struct lov_user_md *lump,
                     int set_default);
-int ll_dir_getstripe(struct inode *inode, struct lov_mds_md **lmmp,
-                    int *lmm_size, struct ptlrpc_request **request);
+int ll_dir_getstripe(struct inode *inode, void **lmmp, int *lmm_size,
+                    struct ptlrpc_request **request, u64 valid);
 int ll_fsync(struct file *file, loff_t start, loff_t end, int data);
 int ll_merge_attr(const struct lu_env *env, struct inode *inode);
 int ll_fid2path(struct inode *inode, void __user *arg);
@@ -748,8 +769,8 @@ int ll_setattr(struct dentry *de, struct iattr *attr);
 int ll_statfs(struct dentry *de, struct kstatfs *sfs);
 int ll_statfs_internal(struct super_block *sb, struct obd_statfs *osfs,
                       __u64 max_age, __u32 flags);
-void ll_update_inode(struct inode *inode, struct lustre_md *md);
-void ll_read_inode2(struct inode *inode, void *opaque);
+int ll_update_inode(struct inode *inode, struct lustre_md *md);
+int ll_read_inode2(struct inode *inode, void *opaque);
 void ll_delete_inode(struct inode *inode);
 int ll_iocontrol(struct inode *inode, struct file *file,
                 unsigned int cmd, unsigned long arg);
@@ -764,6 +785,15 @@ int ll_obd_statfs(struct inode *inode, void __user *arg);
 int ll_get_max_mdsize(struct ll_sb_info *sbi, int *max_mdsize);
 int ll_get_default_mdsize(struct ll_sb_info *sbi, int *default_mdsize);
 int ll_process_config(struct lustre_cfg *lcfg);
+
+enum {
+       LUSTRE_OPC_MKDIR        = 0,
+       LUSTRE_OPC_SYMLINK      = 1,
+       LUSTRE_OPC_MKNOD        = 2,
+       LUSTRE_OPC_CREATE       = 3,
+       LUSTRE_OPC_ANY          = 5,
+};
+
 struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
                                      struct inode *i1, struct inode *i2,
                                      const char *name, int namelen,
@@ -771,6 +801,7 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
 void ll_finish_md_op_data(struct md_op_data *op_data);
 int ll_get_obd_name(struct inode *inode, unsigned int cmd, unsigned long arg);
 char *ll_get_fsname(struct super_block *sb, char *buf, int buflen);
+void ll_compute_rootsquash_state(struct ll_sb_info *sbi);
 void ll_open_cleanup(struct super_block *sb, struct ptlrpc_request *open_req);
 
 /* llite/llite_nfs.c */
@@ -779,6 +810,7 @@ __u32 get_uuid2int(const char *name, int len);
 void get_uuid2fsid(const char *name, int len, __kernel_fsid_t *fsid);
 struct inode *search_inode_for_lustre(struct super_block *sb,
                                      const struct lu_fid *fid);
+int ll_dir_get_parent_fid(struct inode *dir, struct lu_fid *parent_fid);
 
 /* llite/symlink.c */
 extern const struct inode_operations ll_fast_symlink_inode_operations;
@@ -933,12 +965,9 @@ static inline __u64 ll_file_maxbytes(struct inode *inode)
 }
 
 /* llite/xattr.c */
-int ll_setxattr(struct dentry *dentry, struct inode *inode,
-               const char *name, const void *value, size_t size, int flags);
-ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
-                   const char *name, void *buffer, size_t size);
+extern const struct xattr_handler *ll_xattr_handlers[];
+
 ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size);
-int ll_removexattr(struct dentry *dentry, const char *name);
 
 /**
  * Common IO arguments for various VFS I/O interfaces.
@@ -995,7 +1024,8 @@ struct ll_statahead_info {
        unsigned int        sai_ls_all:1,   /* "ls -al", do stat-ahead for
                                             * hidden entries
                                             */
-                               sai_agl_valid:1;/* AGL is valid for the dir */
+                               sai_agl_valid:1,/* AGL is valid for the dir */
+                               sai_in_readpage:1;/* statahead is in readdir() */
        wait_queue_head_t       sai_waitq;      /* stat-ahead wait queue */
        struct ptlrpc_thread    sai_thread;     /* stat-ahead thread */
        struct ptlrpc_thread    sai_agl_thread; /* AGL thread */
@@ -1213,7 +1243,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode,
                        CDEBUG(D_DLMTRACE, "setting l_data to inode "DFID"%p for remote lock %#llx\n",
                               PFID(ll_inode2fid(inode)), inode,
                               handle.cookie);
-                       md_set_lock_data(exp, &handle.cookie, inode, NULL);
+                       md_set_lock_data(exp, &handle, inode, NULL);
                }
 
                handle.cookie = it->it_lock_handle;
@@ -1221,8 +1251,7 @@ static inline void ll_set_lock_data(struct obd_export *exp, struct inode *inode,
                CDEBUG(D_DLMTRACE, "setting l_data to inode "DFID"%p for lock %#llx\n",
                       PFID(ll_inode2fid(inode)), inode, handle.cookie);
 
-               md_set_lock_data(exp, &handle.cookie, inode,
-                                &it->it_lock_bits);
+               md_set_lock_data(exp, &handle, inode, &it->it_lock_bits);
                it->it_lock_set = 1;
        }
 
index 546063e728db1cd9e3bb20c9d9276d7d399a7d49..1ff788ed5b528fe3fecba40907dab40232ec6661 100644 (file)
@@ -41,6 +41,7 @@
 #include <linux/types.h>
 #include <linux/mm.h>
 
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_lite.h"
 #include "../include/lustre_ha.h"
 #include "../include/lustre_dlm.h"
@@ -118,6 +119,12 @@ static struct ll_sb_info *ll_init_sbi(struct super_block *sb)
        atomic_set(&sbi->ll_agl_total, 0);
        sbi->ll_flags |= LL_SBI_AGL_ENABLED;
 
+       /* root squash */
+       sbi->ll_squash.rsi_uid = 0;
+       sbi->ll_squash.rsi_gid = 0;
+       INIT_LIST_HEAD(&sbi->ll_squash.rsi_nosquash_nids);
+       init_rwsem(&sbi->ll_squash.rsi_sem);
+
        sbi->ll_sb = sb;
 
        return sbi;
@@ -128,6 +135,8 @@ static void ll_free_sbi(struct super_block *sb)
        struct ll_sb_info *sbi = ll_s2sbi(sb);
 
        if (sbi->ll_cache) {
+               if (!list_empty(&sbi->ll_squash.rsi_nosquash_nids))
+                       cfs_free_nidlist(&sbi->ll_squash.rsi_nosquash_nids);
                cl_cache_decref(sbi->ll_cache);
                sbi->ll_cache = NULL;
        }
@@ -180,7 +189,9 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
                                  OBD_CONNECT_PINGLESS |
                                  OBD_CONNECT_MAX_EASIZE |
                                  OBD_CONNECT_FLOCK_DEAD |
-                                 OBD_CONNECT_DISP_STRIPE;
+                                 OBD_CONNECT_DISP_STRIPE | OBD_CONNECT_LFSCK |
+                                 OBD_CONNECT_OPEN_BY_FID |
+                                 OBD_CONNECT_DIR_STRIPE;
 
        if (sbi->ll_flags & LL_SBI_SOM_PREVIEW)
                data->ocd_connect_flags |= OBD_CONNECT_SOM;
@@ -310,9 +321,9 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
                sbi->ll_flags |= LL_SBI_64BIT_HASH;
 
        if (data->ocd_connect_flags & OBD_CONNECT_BRW_SIZE)
-               sbi->ll_md_brw_size = data->ocd_brw_size;
+               sbi->ll_md_brw_pages = data->ocd_brw_size >> PAGE_SHIFT;
        else
-               sbi->ll_md_brw_size = PAGE_SIZE;
+               sbi->ll_md_brw_pages = 1;
 
        if (data->ocd_connect_flags & OBD_CONNECT_LAYOUTLOCK)
                sbi->ll_flags |= LL_SBI_LAYOUT_LOCK;
@@ -418,6 +429,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
        CDEBUG(D_SUPER, "rootfid "DFID"\n", PFID(&sbi->ll_root_fid));
 
        sb->s_op = &lustre_super_operations;
+       sb->s_xattr = ll_xattr_handlers;
 #if THREAD_SIZE >= 8192 /*b=17630*/
        sb->s_export_op = &lustre_export_operations;
 #endif
@@ -462,7 +474,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
        md_free_lustre_md(sbi->ll_md_exp, &lmd);
        ptlrpc_req_finished(request);
 
-       if (!(root)) {
+       if (IS_ERR(root)) {
                if (lmd.lsm)
                        obd_free_memmd(sbi->ll_dt_exp, &lmd.lsm);
 #ifdef CONFIG_FS_POSIX_ACL
@@ -486,11 +498,21 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
        err = obd_set_info_async(NULL, sbi->ll_dt_exp, sizeof(KEY_CHECKSUM),
                                 KEY_CHECKSUM, sizeof(checksum), &checksum,
                                 NULL);
+       if (err) {
+               CERROR("%s: Set checksum failed: rc = %d\n",
+                      sbi->ll_dt_exp->exp_obd->obd_name, err);
+               goto out_root;
+       }
        cl_sb_init(sb);
 
        err = obd_set_info_async(NULL, sbi->ll_dt_exp, sizeof(KEY_CACHE_SET),
                                 KEY_CACHE_SET, sizeof(*sbi->ll_cache),
                                 sbi->ll_cache, NULL);
+       if (err) {
+               CERROR("%s: Set cache_set failed: rc = %d\n",
+                      sbi->ll_dt_exp->exp_obd->obd_name, err);
+               goto out_root;
+       }
 
        sb->s_root = d_make_root(root);
        if (!sb->s_root) {
@@ -647,7 +669,8 @@ static int ll_options(char *options, int *flags)
                        *flags |= tmp;
                        goto next;
                }
-               tmp = ll_set_opt("noflock", s1, LL_SBI_FLOCK|LL_SBI_LOCALFLOCK);
+               tmp = ll_set_opt("noflock", s1,
+                                LL_SBI_FLOCK | LL_SBI_LOCALFLOCK);
                if (tmp) {
                        *flags &= ~tmp;
                        goto next;
@@ -991,6 +1014,211 @@ struct inode *ll_inode_from_resource_lock(struct ldlm_lock *lock)
        return inode;
 }
 
+static void ll_dir_clear_lsm_md(struct inode *inode)
+{
+       struct ll_inode_info *lli = ll_i2info(inode);
+
+       LASSERT(S_ISDIR(inode->i_mode));
+
+       if (lli->lli_lsm_md) {
+               lmv_free_memmd(lli->lli_lsm_md);
+               lli->lli_lsm_md = NULL;
+       }
+}
+
+static struct inode *ll_iget_anon_dir(struct super_block *sb,
+                                     const struct lu_fid *fid,
+                                     struct lustre_md *md)
+{
+       struct ll_sb_info *sbi = ll_s2sbi(sb);
+       struct mdt_body *body = md->body;
+       struct inode *inode;
+       ino_t ino;
+
+       ino = cl_fid_build_ino(fid, sbi->ll_flags & LL_SBI_32BIT_API);
+       inode = iget_locked(sb, ino);
+       if (!inode) {
+               CERROR("%s: failed get simple inode "DFID": rc = -ENOENT\n",
+                      ll_get_fsname(sb, NULL, 0), PFID(fid));
+               return ERR_PTR(-ENOENT);
+       }
+
+       if (inode->i_state & I_NEW) {
+               struct ll_inode_info *lli = ll_i2info(inode);
+               struct lmv_stripe_md *lsm = md->lmv;
+
+               inode->i_mode = (inode->i_mode & ~S_IFMT) |
+                               (body->mbo_mode & S_IFMT);
+               LASSERTF(S_ISDIR(inode->i_mode), "Not slave inode "DFID"\n",
+                        PFID(fid));
+
+               LTIME_S(inode->i_mtime) = 0;
+               LTIME_S(inode->i_atime) = 0;
+               LTIME_S(inode->i_ctime) = 0;
+               inode->i_rdev = 0;
+
+               inode->i_op = &ll_dir_inode_operations;
+               inode->i_fop = &ll_dir_operations;
+               lli->lli_fid = *fid;
+               ll_lli_init(lli);
+
+               LASSERT(lsm);
+               /* master object FID */
+               lli->lli_pfid = body->mbo_fid1;
+               CDEBUG(D_INODE, "lli %p slave "DFID" master "DFID"\n",
+                      lli, PFID(fid), PFID(&lli->lli_pfid));
+               unlock_new_inode(inode);
+       }
+
+       return inode;
+}
+
+static int ll_init_lsm_md(struct inode *inode, struct lustre_md *md)
+{
+       struct lmv_stripe_md *lsm = md->lmv;
+       struct lu_fid *fid;
+       int i;
+
+       LASSERT(lsm);
+       /*
+        * XXX sigh, this lsm_root initialization should be in
+        * LMV layer, but it needs ll_iget right now, so we
+        * put this here right now.
+        */
+       for (i = 0; i < lsm->lsm_md_stripe_count; i++) {
+               fid = &lsm->lsm_md_oinfo[i].lmo_fid;
+               LASSERT(!lsm->lsm_md_oinfo[i].lmo_root);
+               /* Unfortunately ll_iget will call ll_update_inode,
+                * where the initialization of slave inode is slightly
+                * different, so it reset lsm_md to NULL to avoid
+                * initializing lsm for slave inode.
+                */
+               /* For migrating inode, master stripe and master object will
+                * be same, so we only need assign this inode
+                */
+               if (lsm->lsm_md_hash_type & LMV_HASH_FLAG_MIGRATION && !i)
+                       lsm->lsm_md_oinfo[i].lmo_root = inode;
+               else
+                       lsm->lsm_md_oinfo[i].lmo_root =
+                               ll_iget_anon_dir(inode->i_sb, fid, md);
+               if (IS_ERR(lsm->lsm_md_oinfo[i].lmo_root)) {
+                       int rc = PTR_ERR(lsm->lsm_md_oinfo[i].lmo_root);
+
+                       lsm->lsm_md_oinfo[i].lmo_root = NULL;
+                       return rc;
+               }
+       }
+
+       /*
+        * Here is where the lsm is being initialized(fill lmo_info) after
+        * client retrieve MD stripe information from MDT.
+        */
+       return md_update_lsm_md(ll_i2mdexp(inode), lsm, md->body,
+                               ll_md_blocking_ast);
+}
+
+static inline int lli_lsm_md_eq(const struct lmv_stripe_md *lsm_md1,
+                               const struct lmv_stripe_md *lsm_md2)
+{
+       return lsm_md1->lsm_md_magic == lsm_md2->lsm_md_magic &&
+              lsm_md1->lsm_md_stripe_count == lsm_md2->lsm_md_stripe_count &&
+              lsm_md1->lsm_md_master_mdt_index ==
+                       lsm_md2->lsm_md_master_mdt_index &&
+              lsm_md1->lsm_md_hash_type == lsm_md2->lsm_md_hash_type &&
+              lsm_md1->lsm_md_layout_version ==
+                       lsm_md2->lsm_md_layout_version &&
+              !strcmp(lsm_md1->lsm_md_pool_name,
+                      lsm_md2->lsm_md_pool_name);
+}
+
+static int ll_update_lsm_md(struct inode *inode, struct lustre_md *md)
+{
+       struct ll_inode_info *lli = ll_i2info(inode);
+       struct lmv_stripe_md *lsm = md->lmv;
+       int rc;
+
+       LASSERT(S_ISDIR(inode->i_mode));
+       CDEBUG(D_INODE, "update lsm %p of "DFID"\n", lli->lli_lsm_md,
+              PFID(ll_inode2fid(inode)));
+
+       /* no striped information from request. */
+       if (!lsm) {
+               if (!lli->lli_lsm_md) {
+                       return 0;
+               } else if (lli->lli_lsm_md->lsm_md_hash_type &
+                          LMV_HASH_FLAG_MIGRATION) {
+                       /*
+                        * migration is done, the temporay MIGRATE layout has
+                        * been removed
+                        */
+                       CDEBUG(D_INODE, DFID" finish migration.\n",
+                              PFID(ll_inode2fid(inode)));
+                       lmv_free_memmd(lli->lli_lsm_md);
+                       lli->lli_lsm_md = NULL;
+                       return 0;
+               } else {
+                       /*
+                        * The lustre_md from req does not include stripeEA,
+                        * see ll_md_setattr
+                        */
+                       return 0;
+               }
+       }
+
+       /* set the directory layout */
+       if (!lli->lli_lsm_md) {
+               rc = ll_init_lsm_md(inode, md);
+               if (rc)
+                       return rc;
+
+               lli->lli_lsm_md = lsm;
+               /*
+                * set lsm_md to NULL, so the following free lustre_md
+                * will not free this lsm
+                */
+               md->lmv = NULL;
+               CDEBUG(D_INODE, "Set lsm %p magic %x to "DFID"\n", lsm,
+                      lsm->lsm_md_magic, PFID(ll_inode2fid(inode)));
+               return 0;
+       }
+
+       /* Compare the old and new stripe information */
+       if (!lsm_md_eq(lli->lli_lsm_md, lsm)) {
+               struct lmv_stripe_md *old_lsm = lli->lli_lsm_md;
+               int idx;
+
+               CERROR("%s: inode "DFID"(%p)'s lmv layout mismatch (%p)/(%p) magic:0x%x/0x%x stripe count: %d/%d master_mdt: %d/%d hash_type:0x%x/0x%x layout: 0x%x/0x%x pool:%s/%s\n",
+                      ll_get_fsname(inode->i_sb, NULL, 0), PFID(&lli->lli_fid),
+                      inode, lsm, old_lsm,
+                      lsm->lsm_md_magic, old_lsm->lsm_md_magic,
+                      lsm->lsm_md_stripe_count,
+                      old_lsm->lsm_md_stripe_count,
+                      lsm->lsm_md_master_mdt_index,
+                      old_lsm->lsm_md_master_mdt_index,
+                      lsm->lsm_md_hash_type, old_lsm->lsm_md_hash_type,
+                      lsm->lsm_md_layout_version,
+                      old_lsm->lsm_md_layout_version,
+                      lsm->lsm_md_pool_name,
+                      old_lsm->lsm_md_pool_name);
+
+               for (idx = 0; idx < old_lsm->lsm_md_stripe_count; idx++) {
+                       CERROR("%s: sub FIDs in old lsm idx %d, old: "DFID"\n",
+                              ll_get_fsname(inode->i_sb, NULL, 0), idx,
+                              PFID(&old_lsm->lsm_md_oinfo[idx].lmo_fid));
+               }
+
+               for (idx = 0; idx < lsm->lsm_md_stripe_count; idx++) {
+                       CERROR("%s: sub FIDs in new lsm idx %d, new: "DFID"\n",
+                              ll_get_fsname(inode->i_sb, NULL, 0), idx,
+                              PFID(&lsm->lsm_md_oinfo[idx].lmo_fid));
+               }
+
+               return -EIO;
+       }
+
+       return 0;
+}
+
 void ll_clear_inode(struct inode *inode)
 {
        struct ll_inode_info *lli = ll_i2info(inode);
@@ -1031,14 +1259,15 @@ void ll_clear_inode(struct inode *inode)
 
 #ifdef CONFIG_FS_POSIX_ACL
        if (lli->lli_posix_acl) {
-               LASSERT(atomic_read(&lli->lli_posix_acl->a_refcount) == 1);
                posix_acl_release(lli->lli_posix_acl);
                lli->lli_posix_acl = NULL;
        }
 #endif
        lli->lli_inode_magic = LLI_INODE_DEAD;
 
-       if (!S_ISDIR(inode->i_mode))
+       if (S_ISDIR(inode->i_mode))
+               ll_dir_clear_lsm_md(inode);
+       if (S_ISREG(inode->i_mode) && !is_bad_inode(inode))
                LASSERT(list_empty(&lli->lli_agl_list));
 
        /*
@@ -1103,10 +1332,10 @@ static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data,
        op_data->op_attr.ia_valid = ia_valid;
 
        /* Extract epoch data if obtained. */
-       op_data->op_handle = md.body->handle;
-       op_data->op_ioepoch = md.body->ioepoch;
+       op_data->op_handle = md.body->mbo_handle;
+       op_data->op_ioepoch = md.body->mbo_ioepoch;
 
-       ll_update_inode(inode, &md);
+       rc = ll_update_inode(inode, &md);
        ptlrpc_req_finished(request);
 
        return rc;
@@ -1138,8 +1367,8 @@ static int ll_setattr_done_writing(struct inode *inode,
                rc = ll_som_update(inode, op_data);
        else if (rc) {
                CERROR("%s: inode "DFID" mdc truncate failed: rc = %d\n",
-                     ll_i2sbi(inode)->ll_md_exp->exp_obd->obd_name,
-                     PFID(ll_inode2fid(inode)), rc);
+                      ll_i2sbi(inode)->ll_md_exp->exp_obd->obd_name,
+                      PFID(ll_inode2fid(inode)), rc);
        }
        return rc;
 }
@@ -1331,14 +1560,14 @@ int ll_setattr(struct dentry *de, struct iattr *attr)
 {
        int mode = d_inode(de)->i_mode;
 
-       if ((attr->ia_valid & (ATTR_CTIME|ATTR_SIZE|ATTR_MODE)) ==
-                             (ATTR_CTIME|ATTR_SIZE|ATTR_MODE))
+       if ((attr->ia_valid & (ATTR_CTIME | ATTR_SIZE | ATTR_MODE)) ==
+                             (ATTR_CTIME | ATTR_SIZE | ATTR_MODE))
                attr->ia_valid |= MDS_OPEN_OWNEROVERRIDE;
 
-       if (((attr->ia_valid & (ATTR_MODE|ATTR_FORCE|ATTR_SIZE)) ==
-                              (ATTR_SIZE|ATTR_MODE)) &&
+       if (((attr->ia_valid & (ATTR_MODE | ATTR_FORCE | ATTR_SIZE)) ==
+                              (ATTR_SIZE | ATTR_MODE)) &&
            (((mode & S_ISUID) && !(attr->ia_mode & S_ISUID)) ||
-            (((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) &&
+            (((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) &&
              !(attr->ia_mode & S_ISGID))))
                attr->ia_valid |= ATTR_FORCE;
 
@@ -1349,7 +1578,7 @@ int ll_setattr(struct dentry *de, struct iattr *attr)
                attr->ia_valid |= ATTR_KILL_SUID;
 
        if ((attr->ia_valid & ATTR_MODE) &&
-           ((mode & (S_ISGID|S_IXGRP)) == (S_ISGID|S_IXGRP)) &&
+           ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) &&
            !(attr->ia_mode & S_ISGID) &&
            !(attr->ia_valid & ATTR_KILL_SGID))
                attr->ia_valid |= ATTR_KILL_SGID;
@@ -1465,14 +1694,14 @@ void ll_inode_size_unlock(struct inode *inode)
        mutex_unlock(&lli->lli_size_mutex);
 }
 
-void ll_update_inode(struct inode *inode, struct lustre_md *md)
+int ll_update_inode(struct inode *inode, struct lustre_md *md)
 {
        struct ll_inode_info *lli = ll_i2info(inode);
        struct mdt_body *body = md->body;
        struct lov_stripe_md *lsm = md->lsm;
        struct ll_sb_info *sbi = ll_i2sbi(inode);
 
-       LASSERT((lsm != NULL) == ((body->valid & OBD_MD_FLEASIZE) != 0));
+       LASSERT((lsm != NULL) == ((body->mbo_valid & OBD_MD_FLEASIZE) != 0));
        if (lsm) {
                if (!lli->lli_has_smd &&
                    !(sbi->ll_flags & LL_SBI_LAYOUT_LOCK))
@@ -1483,8 +1712,16 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
                        lli->lli_maxbytes = MAX_LFS_FILESIZE;
        }
 
+       if (S_ISDIR(inode->i_mode)) {
+               int rc;
+
+               rc = ll_update_lsm_md(inode, md);
+               if (rc)
+                       return rc;
+       }
+
 #ifdef CONFIG_FS_POSIX_ACL
-       if (body->valid & OBD_MD_FLACL) {
+       if (body->mbo_valid & OBD_MD_FLACL) {
                spin_lock(&lli->lli_lock);
                if (lli->lli_posix_acl)
                        posix_acl_release(lli->lli_posix_acl);
@@ -1492,65 +1729,67 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
                spin_unlock(&lli->lli_lock);
        }
 #endif
-       inode->i_ino = cl_fid_build_ino(&body->fid1,
+       inode->i_ino = cl_fid_build_ino(&body->mbo_fid1,
                                        sbi->ll_flags & LL_SBI_32BIT_API);
-       inode->i_generation = cl_fid_build_gen(&body->fid1);
+       inode->i_generation = cl_fid_build_gen(&body->mbo_fid1);
 
-       if (body->valid & OBD_MD_FLATIME) {
-               if (body->atime > LTIME_S(inode->i_atime))
-                       LTIME_S(inode->i_atime) = body->atime;
-               lli->lli_atime = body->atime;
+       if (body->mbo_valid & OBD_MD_FLATIME) {
+               if (body->mbo_atime > LTIME_S(inode->i_atime))
+                       LTIME_S(inode->i_atime) = body->mbo_atime;
+               lli->lli_atime = body->mbo_atime;
        }
-       if (body->valid & OBD_MD_FLMTIME) {
-               if (body->mtime > LTIME_S(inode->i_mtime)) {
+       if (body->mbo_valid & OBD_MD_FLMTIME) {
+               if (body->mbo_mtime > LTIME_S(inode->i_mtime)) {
                        CDEBUG(D_INODE, "setting ino %lu mtime from %lu to %llu\n",
                               inode->i_ino, LTIME_S(inode->i_mtime),
-                              body->mtime);
-                       LTIME_S(inode->i_mtime) = body->mtime;
+                              body->mbo_mtime);
+                       LTIME_S(inode->i_mtime) = body->mbo_mtime;
                }
-               lli->lli_mtime = body->mtime;
-       }
-       if (body->valid & OBD_MD_FLCTIME) {
-               if (body->ctime > LTIME_S(inode->i_ctime))
-                       LTIME_S(inode->i_ctime) = body->ctime;
-               lli->lli_ctime = body->ctime;
-       }
-       if (body->valid & OBD_MD_FLMODE)
-               inode->i_mode = (inode->i_mode & S_IFMT)|(body->mode & ~S_IFMT);
-       if (body->valid & OBD_MD_FLTYPE)
-               inode->i_mode = (inode->i_mode & ~S_IFMT)|(body->mode & S_IFMT);
+               lli->lli_mtime = body->mbo_mtime;
+       }
+       if (body->mbo_valid & OBD_MD_FLCTIME) {
+               if (body->mbo_ctime > LTIME_S(inode->i_ctime))
+                       LTIME_S(inode->i_ctime) = body->mbo_ctime;
+               lli->lli_ctime = body->mbo_ctime;
+       }
+       if (body->mbo_valid & OBD_MD_FLMODE)
+               inode->i_mode = (inode->i_mode & S_IFMT) |
+                               (body->mbo_mode & ~S_IFMT);
+       if (body->mbo_valid & OBD_MD_FLTYPE)
+               inode->i_mode = (inode->i_mode & ~S_IFMT) |
+                               (body->mbo_mode & S_IFMT);
        LASSERT(inode->i_mode != 0);
        if (S_ISREG(inode->i_mode))
                inode->i_blkbits = min(PTLRPC_MAX_BRW_BITS + 1,
                                       LL_MAX_BLKSIZE_BITS);
        else
                inode->i_blkbits = inode->i_sb->s_blocksize_bits;
-       if (body->valid & OBD_MD_FLUID)
-               inode->i_uid = make_kuid(&init_user_ns, body->uid);
-       if (body->valid & OBD_MD_FLGID)
-               inode->i_gid = make_kgid(&init_user_ns, body->gid);
-       if (body->valid & OBD_MD_FLFLAGS)
-               inode->i_flags = ll_ext_to_inode_flags(body->flags);
-       if (body->valid & OBD_MD_FLNLINK)
-               set_nlink(inode, body->nlink);
-       if (body->valid & OBD_MD_FLRDEV)
-               inode->i_rdev = old_decode_dev(body->rdev);
-
-       if (body->valid & OBD_MD_FLID) {
+       if (body->mbo_valid & OBD_MD_FLUID)
+               inode->i_uid = make_kuid(&init_user_ns, body->mbo_uid);
+       if (body->mbo_valid & OBD_MD_FLGID)
+               inode->i_gid = make_kgid(&init_user_ns, body->mbo_gid);
+       if (body->mbo_valid & OBD_MD_FLFLAGS)
+               inode->i_flags = ll_ext_to_inode_flags(body->mbo_flags);
+       if (body->mbo_valid & OBD_MD_FLNLINK)
+               set_nlink(inode, body->mbo_nlink);
+       if (body->mbo_valid & OBD_MD_FLRDEV)
+               inode->i_rdev = old_decode_dev(body->mbo_rdev);
+
+       if (body->mbo_valid & OBD_MD_FLID) {
                /* FID shouldn't be changed! */
                if (fid_is_sane(&lli->lli_fid)) {
-                       LASSERTF(lu_fid_eq(&lli->lli_fid, &body->fid1),
+                       LASSERTF(lu_fid_eq(&lli->lli_fid, &body->mbo_fid1),
                                 "Trying to change FID "DFID" to the "DFID", inode "DFID"(%p)\n",
-                                PFID(&lli->lli_fid), PFID(&body->fid1),
+                                PFID(&lli->lli_fid), PFID(&body->mbo_fid1),
                                 PFID(ll_inode2fid(inode)), inode);
                } else {
-                       lli->lli_fid = body->fid1;
+                       lli->lli_fid = body->mbo_fid1;
                }
        }
 
        LASSERT(fid_seq(&lli->lli_fid) != 0);
 
-       if (body->valid & OBD_MD_FLSIZE) {
+       if (body->mbo_valid & OBD_MD_FLSIZE) {
                if (exp_connect_som(ll_i2mdexp(inode)) &&
                    S_ISREG(inode->i_mode)) {
                        struct lustre_handle lockh;
@@ -1577,7 +1816,7 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
                                        /* Use old size assignment to avoid
                                         * deadlock bz14138 & bz14326
                                         */
-                                       i_size_write(inode, body->size);
+                                       i_size_write(inode, body->mbo_size);
                                        spin_lock(&lli->lli_lock);
                                        lli->lli_flags |= LLIF_MDS_SIZE_LOCK;
                                        spin_unlock(&lli->lli_lock);
@@ -1588,26 +1827,29 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
                        /* Use old size assignment to avoid
                         * deadlock bz14138 & bz14326
                         */
-                       i_size_write(inode, body->size);
+                       i_size_write(inode, body->mbo_size);
 
                        CDEBUG(D_VFSTRACE, "inode=%lu, updating i_size %llu\n",
-                              inode->i_ino, (unsigned long long)body->size);
+                              inode->i_ino, (unsigned long long)body->mbo_size);
                }
 
-               if (body->valid & OBD_MD_FLBLOCKS)
-                       inode->i_blocks = body->blocks;
+               if (body->mbo_valid & OBD_MD_FLBLOCKS)
+                       inode->i_blocks = body->mbo_blocks;
        }
 
-       if (body->valid & OBD_MD_TSTATE) {
-               if (body->t_state & MS_RESTORE)
+       if (body->mbo_valid & OBD_MD_TSTATE) {
+               if (body->mbo_t_state & MS_RESTORE)
                        lli->lli_flags |= LLIF_FILE_RESTORING;
        }
+
+       return 0;
 }
 
-void ll_read_inode2(struct inode *inode, void *opaque)
+int ll_read_inode2(struct inode *inode, void *opaque)
 {
        struct lustre_md *md = opaque;
        struct ll_inode_info *lli = ll_i2info(inode);
+       int rc;
 
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
               PFID(&lli->lli_fid), inode);
@@ -1623,7 +1865,9 @@ void ll_read_inode2(struct inode *inode, void *opaque)
        LTIME_S(inode->i_atime) = 0;
        LTIME_S(inode->i_ctime) = 0;
        inode->i_rdev = 0;
-       ll_update_inode(inode, md);
+       rc = ll_update_inode(inode, md);
+       if (rc)
+               return rc;
 
        /* OIDEBUG(inode); */
 
@@ -1644,6 +1888,8 @@ void ll_read_inode2(struct inode *inode, void *opaque)
                init_special_inode(inode, inode->i_mode,
                                   inode->i_rdev);
        }
+
+       return 0;
 }
 
 void ll_delete_inode(struct inode *inode)
@@ -1704,7 +1950,7 @@ int ll_iocontrol(struct inode *inode, struct file *file,
 
                body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
 
-               flags = body->flags;
+               flags = body->mbo_flags;
 
                ptlrpc_req_finished(req);
 
@@ -1886,9 +2132,9 @@ void ll_open_cleanup(struct super_block *sb, struct ptlrpc_request *open_req)
        if (!op_data)
                return;
 
-       op_data->op_fid1 = body->fid1;
-       op_data->op_ioepoch = body->ioepoch;
-       op_data->op_handle = body->handle;
+       op_data->op_fid1 = body->mbo_fid1;
+       op_data->op_ioepoch = body->mbo_ioepoch;
+       op_data->op_handle = body->mbo_handle;
        op_data->op_mod_time = get_seconds();
        md_close(exp, op_data, NULL, &close_req);
        ptlrpc_req_finished(close_req);
@@ -1910,7 +2156,9 @@ int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
                goto cleanup;
 
        if (*inode) {
-               ll_update_inode(*inode, &md);
+               rc = ll_update_inode(*inode, &md);
+               if (rc)
+                       goto out;
        } else {
                LASSERT(sb);
 
@@ -1918,18 +2166,18 @@ int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
                 * At this point server returns to client's same fid as client
                 * generated for creating. So using ->fid1 is okay here.
                 */
-               if (!fid_is_sane(&md.body->fid1)) {
+               if (!fid_is_sane(&md.body->mbo_fid1)) {
                        CERROR("%s: Fid is insane " DFID "\n",
                               ll_get_fsname(sb, NULL, 0),
-                              PFID(&md.body->fid1));
+                              PFID(&md.body->mbo_fid1));
                        rc = -EINVAL;
                        goto out;
                }
 
-               *inode = ll_iget(sb, cl_fid_build_ino(&md.body->fid1,
+               *inode = ll_iget(sb, cl_fid_build_ino(&md.body->mbo_fid1,
                                             sbi->ll_flags & LL_SBI_32BIT_API),
                                 &md);
-               if (!*inode) {
+               if (IS_ERR(*inode)) {
 #ifdef CONFIG_FS_POSIX_ACL
                        if (md.posix_acl) {
                                posix_acl_release(md.posix_acl);
@@ -2078,8 +2326,17 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
                                      const char *name, int namelen,
                                      int mode, __u32 opc, void *data)
 {
-       if (namelen > ll_i2sbi(i1)->ll_namelen)
-               return ERR_PTR(-ENAMETOOLONG);
+       if (!name) {
+               /* Do not reuse namelen for something else. */
+               if (namelen)
+                       return ERR_PTR(-EINVAL);
+       } else {
+               if (namelen > ll_i2sbi(i1)->ll_namelen)
+                       return ERR_PTR(-ENAMETOOLONG);
+
+               if (!lu_name_is_valid_2(name, namelen))
+                       return ERR_PTR(-EINVAL);
+       }
 
        if (!op_data)
                op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
@@ -2089,11 +2346,22 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
 
        ll_i2gids(op_data->op_suppgids, i1, i2);
        op_data->op_fid1 = *ll_inode2fid(i1);
+       if (S_ISDIR(i1->i_mode))
+               op_data->op_mea1 = ll_i2info(i1)->lli_lsm_md;
 
-       if (i2)
+       if (i2) {
                op_data->op_fid2 = *ll_inode2fid(i2);
-       else
+               if (S_ISDIR(i2->i_mode))
+                       op_data->op_mea2 = ll_i2info(i2)->lli_lsm_md;
+       } else {
                fid_zero(&op_data->op_fid2);
+       }
+
+       if (ll_i2sbi(i1)->ll_flags & LL_SBI_64BIT_HASH)
+               op_data->op_cli_flags |= CLI_HASH64;
+
+       if (ll_need_32bit_api(ll_i2sbi(i1)))
+               op_data->op_cli_flags |= CLI_API32;
 
        op_data->op_name = name;
        op_data->op_namelen = namelen;
@@ -2107,24 +2375,9 @@ struct md_op_data *ll_prep_md_op_data(struct md_op_data *op_data,
        if ((opc == LUSTRE_OPC_CREATE) && name &&
            filename_is_volatile(name, namelen, NULL))
                op_data->op_bias |= MDS_CREATE_VOLATILE;
-       op_data->op_opc = opc;
        op_data->op_mds = 0;
        op_data->op_data = data;
 
-       /* If the file is being opened after mknod() (normally due to NFS)
-        * try to use the default stripe data from parent directory for
-        * allocating OST objects.  Try to pass the parent FID to MDS.
-        */
-       if (opc == LUSTRE_OPC_CREATE && i1 == i2 && S_ISREG(i2->i_mode) &&
-           !ll_i2info(i2)->lli_has_smd) {
-               struct ll_inode_info *lli = ll_i2info(i2);
-
-               spin_lock(&lli->lli_lock);
-               if (likely(!lli->lli_has_smd && !fid_is_zero(&lli->lli_pfid)))
-                       op_data->op_fid1 = lli->lli_pfid;
-               spin_unlock(&lli->lli_lock);
-       }
-
        /* When called by ll_setattr_raw, file is i1. */
        if (ll_i2info(i1)->lli_flags & LLIF_DATA_MODIFIED)
                op_data->op_bias |= MDS_DATA_MODIFIED;
@@ -2251,3 +2504,42 @@ void ll_dirty_page_discard_warn(struct page *page, int ioret)
        if (buf)
                free_page((unsigned long)buf);
 }
+
+/*
+ * Compute llite root squash state after a change of root squash
+ * configuration setting or add/remove of a lnet nid
+ */
+void ll_compute_rootsquash_state(struct ll_sb_info *sbi)
+{
+       struct root_squash_info *squash = &sbi->ll_squash;
+       lnet_process_id_t id;
+       bool matched;
+       int i;
+
+       /* Update norootsquash flag */
+       down_write(&squash->rsi_sem);
+       if (list_empty(&squash->rsi_nosquash_nids)) {
+               sbi->ll_flags &= ~LL_SBI_NOROOTSQUASH;
+       } else {
+               /*
+                * Do not apply root squash as soon as one of our NIDs is
+                * in the nosquash_nids list
+                */
+               matched = false;
+               i = 0;
+
+               while (LNetGetId(i++, &id) != -ENOENT) {
+                       if (LNET_NETTYP(LNET_NIDNET(id.nid)) == LOLND)
+                               continue;
+                       if (cfs_match_nid(id.nid, &squash->rsi_nosquash_nids)) {
+                               matched = true;
+                               break;
+                       }
+               }
+               if (matched)
+                       sbi->ll_flags |= LL_SBI_NOROOTSQUASH;
+               else
+                       sbi->ll_flags &= ~LL_SBI_NOROOTSQUASH;
+       }
+       up_write(&squash->rsi_sem);
+}
index 66ee5db5fce847f1bf0509df4ff9a3adaca886df..37f82ed228646a3bd878a38d8e576d437370864a 100644 (file)
@@ -126,7 +126,7 @@ restart:
 
        fio = &io->u.ci_fault;
        fio->ft_index      = index;
-       fio->ft_executable = vma->vm_flags&VM_EXEC;
+       fio->ft_executable = vma->vm_flags & VM_EXEC;
 
        /*
         * disable VM_SEQ_READ and use VM_RAND_READ to make sure that
@@ -134,7 +134,7 @@ restart:
         * filemap_nopage. we do our readahead in ll_readpage.
         */
        if (ra_flags)
-               *ra_flags = vma->vm_flags & (VM_RAND_READ|VM_SEQ_READ);
+               *ra_flags = vma->vm_flags & (VM_RAND_READ | VM_SEQ_READ);
        vma->vm_flags &= ~VM_SEQ_READ;
        vma->vm_flags |= VM_RAND_READ;
 
@@ -429,7 +429,6 @@ static void ll_vm_open(struct vm_area_struct *vma)
        struct inode *inode    = file_inode(vma->vm_file);
        struct vvp_object *vob = cl_inode2vvp(inode);
 
-       LASSERT(vma->vm_file);
        LASSERT(atomic_read(&vob->vob_mmap_cnt) >= 0);
        atomic_inc(&vob->vob_mmap_cnt);
 }
@@ -442,7 +441,6 @@ static void ll_vm_close(struct vm_area_struct *vma)
        struct inode      *inode = file_inode(vma->vm_file);
        struct vvp_object *vob   = cl_inode2vvp(inode);
 
-       LASSERT(vma->vm_file);
        atomic_dec(&vob->vob_mmap_cnt);
        LASSERT(atomic_read(&vob->vob_mmap_cnt) >= 0);
 }
index 65972c892731498a76330beeac6c700da7026e39..1e156dcf77c217820625a7c090ae8b3488e01979 100644 (file)
@@ -73,11 +73,6 @@ void get_uuid2fsid(const char *name, int len, __kernel_fsid_t *fsid)
        fsid->val[1] = key >> 32;
 }
 
-static int ll_nfs_test_inode(struct inode *inode, void *opaque)
-{
-       return lu_fid_eq(&ll_i2info(inode)->lli_fid, opaque);
-}
-
 struct inode *search_inode_for_lustre(struct super_block *sb,
                                      const struct lu_fid *fid)
 {
@@ -92,7 +87,7 @@ struct inode *search_inode_for_lustre(struct super_block *sb,
 
        CDEBUG(D_INFO, "searching inode for:(%lu,"DFID")\n", hash, PFID(fid));
 
-       inode = ilookup5(sb, hash, ll_nfs_test_inode, (void *)fid);
+       inode = ilookup5(sb, hash, ll_test_inode_by_fid, (void *)fid);
        if (inode)
                return inode;
 
@@ -153,12 +148,18 @@ ll_iget_for_nfs(struct super_block *sb, struct lu_fid *fid, struct lu_fid *paren
                return ERR_PTR(-ESTALE);
        }
 
+       result = d_obtain_alias(inode);
+       if (IS_ERR(result)) {
+               iput(inode);
+               return result;
+       }
+
        /**
-        * It is an anonymous dentry without OST objects created yet.
-        * We have to find the parent to tell MDS how to init lov objects.
+        * In case d_obtain_alias() found a disconnected dentry, always update
+        * lli_pfid to allow later operation (normally open) have parent fid,
+        * which may be used by MDS to create data.
         */
-       if (S_ISREG(inode->i_mode) && !ll_i2info(inode)->lli_has_smd &&
-           parent && !fid_is_zero(parent)) {
+       if (parent) {
                struct ll_inode_info *lli = ll_i2info(inode);
 
                spin_lock(&lli->lli_lock);
@@ -255,6 +256,8 @@ static int ll_get_name(struct dentry *dentry, char *name,
                .lgd_fid = ll_i2info(d_inode(child))->lli_fid,
                .ctx.actor = ll_nfs_get_name_filldir,
        };
+       struct md_op_data *op_data;
+       __u64 pos = 0;
 
        if (!dir || !S_ISDIR(dir->i_mode)) {
                rc = -ENOTDIR;
@@ -266,9 +269,18 @@ static int ll_get_name(struct dentry *dentry, char *name,
                goto out;
        }
 
+       op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
+                                    LUSTRE_OPC_ANY, dir);
+       if (IS_ERR(op_data)) {
+               rc = PTR_ERR(op_data);
+               goto out;
+       }
+
+       op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
        inode_lock(dir);
-       rc = ll_dir_read(dir, &lgd.ctx);
+       rc = ll_dir_read(dir, &pos, op_data, &lgd.ctx);
        inode_unlock(dir);
+       ll_finish_md_op_data(op_data);
        if (!rc && !lgd.lgd_found)
                rc = -ENOENT;
 out:
@@ -297,14 +309,12 @@ static struct dentry *ll_fh_to_parent(struct super_block *sb, struct fid *fid,
        return ll_iget_for_nfs(sb, &nfs_fid->lnf_parent, NULL);
 }
 
-static struct dentry *ll_get_parent(struct dentry *dchild)
+int ll_dir_get_parent_fid(struct inode *dir, struct lu_fid *parent_fid)
 {
        struct ptlrpc_request *req = NULL;
-       struct inode      *dir = d_inode(dchild);
        struct ll_sb_info     *sbi;
-       struct dentry    *result = NULL;
        struct mdt_body       *body;
-       static char        dotdot[] = "..";
+       static const char dotdot[] = "..";
        struct md_op_data     *op_data;
        int                rc;
        int                   lmmsize;
@@ -319,13 +329,13 @@ static struct dentry *ll_get_parent(struct dentry *dchild)
 
        rc = ll_get_default_mdsize(sbi, &lmmsize);
        if (rc != 0)
-               return ERR_PTR(rc);
+               return rc;
 
        op_data = ll_prep_md_op_data(NULL, dir, NULL, dotdot,
                                     strlen(dotdot), lmmsize,
                                     LUSTRE_OPC_ANY, NULL);
        if (IS_ERR(op_data))
-               return (void *)op_data;
+               return PTR_ERR(op_data);
 
        rc = md_getattr_name(sbi->ll_md_exp, op_data, &req);
        ll_finish_md_op_data(op_data);
@@ -333,21 +343,36 @@ static struct dentry *ll_get_parent(struct dentry *dchild)
                CERROR("%s: failure inode "DFID" get parent: rc = %d\n",
                       ll_get_fsname(dir->i_sb, NULL, 0),
                       PFID(ll_inode2fid(dir)), rc);
-               return ERR_PTR(rc);
+               return rc;
        }
        body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
        /*
         * LU-3952: MDT may lost the FID of its parent, we should not crash
         * the NFS server, ll_iget_for_nfs() will handle the error.
         */
-       if (body->valid & OBD_MD_FLID) {
+       if (body->mbo_valid & OBD_MD_FLID) {
                CDEBUG(D_INFO, "parent for " DFID " is " DFID "\n",
-                      PFID(ll_inode2fid(dir)), PFID(&body->fid1));
+                      PFID(ll_inode2fid(dir)), PFID(&body->mbo_fid1));
+               *parent_fid = body->mbo_fid1;
        }
-       result = ll_iget_for_nfs(dir->i_sb, &body->fid1, NULL);
 
        ptlrpc_req_finished(req);
-       return result;
+       return 0;
+}
+
+static struct dentry *ll_get_parent(struct dentry *dchild)
+{
+       struct lu_fid parent_fid = { 0 };
+       struct dentry *dentry;
+       int rc;
+
+       rc = ll_dir_get_parent_fid(dchild->d_inode, &parent_fid);
+       if (rc)
+               return ERR_PTR(rc);
+
+       dentry = ll_iget_for_nfs(dchild->d_inode->i_sb, &parent_fid, NULL);
+
+       return dentry;
 }
 
 const struct export_operations lustre_export_operations = {
index e86bf3c53be3722e076a67c9314994902e280456..4e82db873d863db959ba4ef61a7e32d8d4c9ff31 100644 (file)
@@ -828,10 +828,110 @@ static ssize_t unstable_stats_show(struct kobject *kobj,
        pages = atomic_read(&cache->ccc_unstable_nr);
        mb = (pages * PAGE_SIZE) >> 20;
 
-       return sprintf(buf, "unstable_pages: %8d\n"
-                           "unstable_mb:    %8d\n", pages, mb);
+       return sprintf(buf, "unstable_check: %8d\n"
+                           "unstable_pages: %8d\n"
+                           "unstable_mb:    %8d\n",
+                           cache->ccc_unstable_check, pages, mb);
 }
-LUSTRE_RO_ATTR(unstable_stats);
+
+static ssize_t unstable_stats_store(struct kobject *kobj,
+                                   struct attribute *attr,
+                                   const char *buffer,
+                                   size_t count)
+{
+       struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info,
+                                             ll_kobj);
+       char kernbuf[128];
+       int val, rc;
+
+       if (!count)
+               return 0;
+       if (count < 0 || count >= sizeof(kernbuf))
+               return -EINVAL;
+
+       if (copy_from_user(kernbuf, buffer, count))
+               return -EFAULT;
+       kernbuf[count] = 0;
+
+       buffer += lprocfs_find_named_value(kernbuf, "unstable_check:", &count) -
+                 kernbuf;
+       rc = lprocfs_write_helper(buffer, count, &val);
+       if (rc < 0)
+               return rc;
+
+       /* borrow lru lock to set the value */
+       spin_lock(&sbi->ll_cache->ccc_lru_lock);
+       sbi->ll_cache->ccc_unstable_check = !!val;
+       spin_unlock(&sbi->ll_cache->ccc_lru_lock);
+
+       return count;
+}
+LUSTRE_RW_ATTR(unstable_stats);
+
+static ssize_t root_squash_show(struct kobject *kobj, struct attribute *attr,
+                               char *buf)
+{
+       struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info,
+                                             ll_kobj);
+       struct root_squash_info *squash = &sbi->ll_squash;
+
+       return sprintf(buf, "%u:%u\n", squash->rsi_uid, squash->rsi_gid);
+}
+
+static ssize_t root_squash_store(struct kobject *kobj, struct attribute *attr,
+                                const char *buffer, size_t count)
+{
+       struct ll_sb_info *sbi = container_of(kobj, struct ll_sb_info,
+                                             ll_kobj);
+       struct root_squash_info *squash = &sbi->ll_squash;
+
+       return lprocfs_wr_root_squash(buffer, count, squash,
+                                     ll_get_fsname(sbi->ll_sb, NULL, 0));
+}
+LUSTRE_RW_ATTR(root_squash);
+
+static int ll_nosquash_nids_seq_show(struct seq_file *m, void *v)
+{
+       struct super_block *sb = m->private;
+       struct ll_sb_info *sbi = ll_s2sbi(sb);
+       struct root_squash_info *squash = &sbi->ll_squash;
+       int len;
+
+       down_read(&squash->rsi_sem);
+       if (!list_empty(&squash->rsi_nosquash_nids)) {
+               len = cfs_print_nidlist(m->buf + m->count, m->size - m->count,
+                                       &squash->rsi_nosquash_nids);
+               m->count += len;
+               seq_puts(m, "\n");
+       } else {
+               seq_puts(m, "NONE\n");
+       }
+       up_read(&squash->rsi_sem);
+
+       return 0;
+}
+
+static ssize_t ll_nosquash_nids_seq_write(struct file *file,
+                                         const char __user *buffer,
+                                         size_t count, loff_t *off)
+{
+       struct seq_file *m = file->private_data;
+       struct super_block *sb = m->private;
+       struct ll_sb_info *sbi = ll_s2sbi(sb);
+       struct root_squash_info *squash = &sbi->ll_squash;
+       int rc;
+
+       rc = lprocfs_wr_nosquash_nids(buffer, count, squash,
+                                     ll_get_fsname(sb, NULL, 0));
+       if (rc < 0)
+               return rc;
+
+       ll_compute_rootsquash_state(sbi);
+
+       return rc;
+}
+
+LPROC_SEQ_FOPS(ll_nosquash_nids);
 
 static struct lprocfs_vars lprocfs_llite_obd_vars[] = {
        /* { "mntpt_path",   ll_rd_path,             0, 0 }, */
@@ -840,6 +940,8 @@ static struct lprocfs_vars lprocfs_llite_obd_vars[] = {
        { "max_cached_mb",    &ll_max_cached_mb_fops, NULL },
        { "statahead_stats",  &ll_statahead_stats_fops, NULL, 0 },
        { "sbi_flags",        &ll_sbi_flags_fops, NULL, 0 },
+       { .name =               "nosquash_nids",
+         .fops =               &ll_nosquash_nids_fops          },
        { NULL }
 };
 
@@ -869,6 +971,7 @@ static struct attribute *llite_attrs[] = {
        &lustre_attr_default_easize.attr,
        &lustre_attr_xattr_cache.attr,
        &lustre_attr_unstable_stats.attr,
+       &lustre_attr_root_squash.attr,
        NULL,
 };
 
@@ -893,17 +996,17 @@ static const struct llite_file_opcode {
        /* file operation */
        { LPROC_LL_DIRTY_HITS,     LPROCFS_TYPE_REGS, "dirty_pages_hits" },
        { LPROC_LL_DIRTY_MISSES,   LPROCFS_TYPE_REGS, "dirty_pages_misses" },
-       { LPROC_LL_READ_BYTES,     LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,
+       { LPROC_LL_READ_BYTES,     LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_BYTES,
                                   "read_bytes" },
-       { LPROC_LL_WRITE_BYTES,    LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,
+       { LPROC_LL_WRITE_BYTES,    LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_BYTES,
                                   "write_bytes" },
-       { LPROC_LL_BRW_READ,       LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,
+       { LPROC_LL_BRW_READ,       LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_PAGES,
                                   "brw_read" },
-       { LPROC_LL_BRW_WRITE,      LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_PAGES,
+       { LPROC_LL_BRW_WRITE,      LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_PAGES,
                                   "brw_write" },
-       { LPROC_LL_OSC_READ,       LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,
+       { LPROC_LL_OSC_READ,       LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_BYTES,
                                   "osc_read" },
-       { LPROC_LL_OSC_WRITE,      LPROCFS_CNTR_AVGMINMAX|LPROCFS_TYPE_BYTES,
+       { LPROC_LL_OSC_WRITE,      LPROCFS_CNTR_AVGMINMAX | LPROCFS_TYPE_BYTES,
                                   "osc_write" },
        { LPROC_LL_IOCTL,         LPROCFS_TYPE_REGS, "ioctl" },
        { LPROC_LL_OPEN,           LPROCFS_TYPE_REGS, "open" },
@@ -1150,7 +1253,7 @@ static void ll_display_extents_info(struct ll_rw_extents_info *io_extents,
                           r, pct(r, read_tot), pct(read_cum, read_tot),
                           w, pct(w, write_tot), pct(write_cum, write_tot));
                start = end;
-               if (start == 1<<10) {
+               if (start == 1 << 10) {
                        start = 1;
                        units += 10;
                        unitp++;
index a603f29349f96b5b6f295f5dbfc78d22c05e91ae..a28a40c4ccbf635004668732109a53ade7fd49d9 100644 (file)
@@ -56,12 +56,12 @@ static int ll_test_inode(struct inode *inode, void *opaque)
        struct ll_inode_info *lli = ll_i2info(inode);
        struct lustre_md     *md = opaque;
 
-       if (unlikely(!(md->body->valid & OBD_MD_FLID))) {
+       if (unlikely(!(md->body->mbo_valid & OBD_MD_FLID))) {
                CERROR("MDS body missing FID\n");
                return 0;
        }
 
-       if (!lu_fid_eq(&lli->lli_fid, &md->body->fid1))
+       if (!lu_fid_eq(&lli->lli_fid, &md->body->mbo_fid1))
                return 0;
 
        return 1;
@@ -72,20 +72,20 @@ static int ll_set_inode(struct inode *inode, void *opaque)
        struct ll_inode_info *lli = ll_i2info(inode);
        struct mdt_body *body = ((struct lustre_md *)opaque)->body;
 
-       if (unlikely(!(body->valid & OBD_MD_FLID))) {
+       if (unlikely(!(body->mbo_valid & OBD_MD_FLID))) {
                CERROR("MDS body missing FID\n");
                return -EINVAL;
        }
 
-       lli->lli_fid = body->fid1;
-       if (unlikely(!(body->valid & OBD_MD_FLTYPE))) {
+       lli->lli_fid = body->mbo_fid1;
+       if (unlikely(!(body->mbo_valid & OBD_MD_FLTYPE))) {
                CERROR("Can not initialize inode " DFID
                       " without object type: valid = %#llx\n",
-                      PFID(&lli->lli_fid), body->valid);
+                      PFID(&lli->lli_fid), body->mbo_valid);
                return -EINVAL;
        }
 
-       inode->i_mode = (inode->i_mode & ~S_IFMT) | (body->mode & S_IFMT);
+       inode->i_mode = (inode->i_mode & ~S_IFMT) | (body->mbo_mode & S_IFMT);
        if (unlikely(inode->i_mode == 0)) {
                CERROR("Invalid inode "DFID" type\n", PFID(&lli->lli_fid));
                return -EINVAL;
@@ -96,41 +96,46 @@ static int ll_set_inode(struct inode *inode, void *opaque)
        return 0;
 }
 
-/*
- * Get an inode by inode number (already instantiated by the intent lookup).
- * Returns inode or NULL
+/**
+ * Get an inode by inode number(@hash), which is already instantiated by
+ * the intent lookup).
  */
 struct inode *ll_iget(struct super_block *sb, ino_t hash,
                      struct lustre_md *md)
 {
        struct inode     *inode;
+       int rc = 0;
 
        LASSERT(hash != 0);
        inode = iget5_locked(sb, hash, ll_test_inode, ll_set_inode, md);
-
-       if (inode) {
-               if (inode->i_state & I_NEW) {
-                       int rc = 0;
-
-                       ll_read_inode2(inode, md);
-                       if (S_ISREG(inode->i_mode) &&
-                           !ll_i2info(inode)->lli_clob) {
-                               CDEBUG(D_INODE,
-                                      "%s: apply lsm %p to inode " DFID ".\n",
-                                      ll_get_fsname(sb, NULL, 0), md->lsm,
-                                      PFID(ll_inode2fid(inode)));
-                               rc = cl_file_inode_init(inode, md);
-                       }
-                       if (rc != 0) {
-                               iget_failed(inode);
-                               inode = NULL;
-                       } else {
-                               unlock_new_inode(inode);
-                       }
-               } else if (!(inode->i_state & (I_FREEING | I_CLEAR))) {
-                       ll_update_inode(inode, md);
-                       CDEBUG(D_VFSTRACE, "got inode: "DFID"(%p)\n",
-                              PFID(&md->body->fid1), inode);
+       if (!inode)
+               return ERR_PTR(-ENOMEM);
+
+       if (inode->i_state & I_NEW) {
+               rc = ll_read_inode2(inode, md);
+               if (!rc && S_ISREG(inode->i_mode) &&
+                   !ll_i2info(inode)->lli_clob) {
+                       CDEBUG(D_INODE, "%s: apply lsm %p to inode "DFID"\n",
+                              ll_get_fsname(sb, NULL, 0), md->lsm,
+                              PFID(ll_inode2fid(inode)));
+                       rc = cl_file_inode_init(inode, md);
+               }
+               if (rc) {
+                       make_bad_inode(inode);
+                       unlock_new_inode(inode);
+                       iput(inode);
+                       inode = ERR_PTR(rc);
+               } else {
+                       unlock_new_inode(inode);
+               }
+       } else if (!(inode->i_state & (I_FREEING | I_CLEAR))) {
+               rc = ll_update_inode(inode, md);
+               CDEBUG(D_VFSTRACE, "got inode: "DFID"(%p): rc = %d\n",
+                      PFID(&md->body->mbo_fid1), inode, rc);
+               if (rc) {
+                       make_bad_inode(inode);
+                       iput(inode);
+                       inode = ERR_PTR(rc);
                }
        }
        return inode;
@@ -158,6 +163,11 @@ static void ll_invalidate_negative_children(struct inode *dir)
        spin_unlock(&dir->i_lock);
 }
 
+int ll_test_inode_by_fid(struct inode *inode, void *opaque)
+{
+       return lu_fid_eq(&ll_i2info(inode)->lli_fid, opaque);
+}
+
 int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
                       void *data, int flag)
 {
@@ -253,10 +263,41 @@ int ll_md_blocking_ast(struct ldlm_lock *lock, struct ldlm_lock_desc *desc,
                }
 
                if ((bits & MDS_INODELOCK_UPDATE) && S_ISDIR(inode->i_mode)) {
-                       CDEBUG(D_INODE, "invalidating inode "DFID"\n",
-                              PFID(ll_inode2fid(inode)));
+                       struct ll_inode_info *lli = ll_i2info(inode);
+
+                       CDEBUG(D_INODE, "invalidating inode "DFID" lli = %p, pfid  = "DFID"\n",
+                              PFID(ll_inode2fid(inode)), lli,
+                              PFID(&lli->lli_pfid));
+
                        truncate_inode_pages(inode->i_mapping, 0);
-                       ll_invalidate_negative_children(inode);
+
+                       if (unlikely(!fid_is_zero(&lli->lli_pfid))) {
+                               struct inode *master_inode = NULL;
+                               unsigned long hash;
+
+                               /*
+                                * This is slave inode, since all of the child
+                                * dentry is connected on the master inode, so
+                                * we have to invalidate the negative children
+                                * on master inode
+                                */
+                               CDEBUG(D_INODE, "Invalidate s"DFID" m"DFID"\n",
+                                      PFID(ll_inode2fid(inode)),
+                                      PFID(&lli->lli_pfid));
+
+                               hash = cl_fid_build_ino(&lli->lli_pfid,
+                                                       ll_need_32bit_api(ll_i2sbi(inode)));
+
+                               master_inode = ilookup5(inode->i_sb, hash,
+                                                       ll_test_inode_by_fid,
+                                                       (void *)&lli->lli_pfid);
+                               if (master_inode && !IS_ERR(master_inode)) {
+                                       ll_invalidate_negative_children(master_inode);
+                                       iput(master_inode);
+                               }
+                       } else {
+                               ll_invalidate_negative_children(inode);
+                       }
                }
 
                if ((bits & (MDS_INODELOCK_LOOKUP | MDS_INODELOCK_PERM)) &&
@@ -322,7 +363,8 @@ static struct dentry *ll_find_alias(struct inode *inode, struct dentry *dentry)
                LASSERT(alias != dentry);
 
                spin_lock(&alias->d_lock);
-               if (alias->d_flags & DCACHE_DISCONNECTED)
+               if ((alias->d_flags & DCACHE_DISCONNECTED) &&
+                   S_ISDIR(inode->i_mode))
                        /* LASSERT(last_discon == NULL); LU-405, bz 20055 */
                        discon_alias = alias;
                else if (alias->d_parent == dentry->d_parent         &&
@@ -433,9 +475,20 @@ static int ll_lookup_it_finish(struct ptlrpc_request *request,
                struct lookup_intent parent_it = {
                                        .it_op = IT_GETATTR,
                                        .it_lock_handle = 0 };
+               struct lu_fid fid = ll_i2info(parent)->lli_fid;
+
+               /* If it is striped directory, get the real stripe parent */
+               if (unlikely(ll_i2info(parent)->lli_lsm_md)) {
+                       rc = md_get_fid_from_lsm(ll_i2mdexp(parent),
+                                                ll_i2info(parent)->lli_lsm_md,
+                                                (*de)->d_name.name,
+                                                (*de)->d_name.len, &fid);
+                       if (rc)
+                               return rc;
+               }
 
-               if (md_revalidate_lock(ll_i2mdexp(parent), &parent_it,
-                                      &ll_i2info(parent)->lli_fid, NULL)) {
+               if (md_revalidate_lock(ll_i2mdexp(parent), &parent_it, &fid,
+                                      NULL)) {
                        d_lustre_revalidate(*de);
                        ll_intent_release(&parent_it);
                }
@@ -497,8 +550,8 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
        if (!IS_POSIXACL(parent) || !exp_connect_umask(ll_i2mdexp(parent)))
                it->it_create_mode &= ~current_umask();
 
-       rc = md_intent_lock(ll_i2mdexp(parent), op_data, NULL, 0, it,
-                           lookup_flags, &req, ll_md_blocking_ast, 0);
+       rc = md_intent_lock(ll_i2mdexp(parent), op_data, it, &req,
+                           &ll_md_blocking_ast, 0);
        ll_finish_md_op_data(op_data);
        if (rc < 0) {
                retval = ERR_PTR(rc);
@@ -541,11 +594,15 @@ static struct dentry *ll_lookup_nd(struct inode *parent, struct dentry *dentry,
        CDEBUG(D_VFSTRACE, "VFS Op:name=%pd, dir="DFID"(%p),flags=%u\n",
               dentry, PFID(ll_inode2fid(parent)), parent, flags);
 
-       /* Optimize away (CREATE && !OPEN). Let .create handle the race. */
-       if ((flags & LOOKUP_CREATE) && !(flags & LOOKUP_OPEN))
+       /* Optimize away (CREATE && !OPEN). Let .create handle the race.
+        * but only if we have write permissions there, otherwise we need
+        * to proceed with lookup. LU-4185
+        */
+       if ((flags & LOOKUP_CREATE) && !(flags & LOOKUP_OPEN) &&
+           (inode_permission(parent, MAY_WRITE | MAY_EXEC) == 0))
                return NULL;
 
-       if (flags & (LOOKUP_PARENT|LOOKUP_OPEN|LOOKUP_CREATE))
+       if (flags & (LOOKUP_PARENT | LOOKUP_OPEN | LOOKUP_CREATE))
                itp = NULL;
        else
                itp = &it;
@@ -603,6 +660,7 @@ static int ll_atomic_open(struct inode *dir, struct dentry *dentry,
        }
        it->it_create_mode = (mode & S_IALLUGO) | S_IFREG;
        it->it_flags = (open_flags & ~O_ACCMODE) | OPEN_FMODE(open_flags);
+       it->it_flags &= ~MDS_OPEN_FL_INTERNAL;
 
        /* Dentry added to dcache tree in ll_lookup_it */
        de = ll_lookup_it(dir, dentry, it, lookup_flags);
@@ -721,23 +779,22 @@ static int ll_create_it(struct inode *dir, struct dentry *dentry, int mode,
        return 0;
 }
 
-static void ll_update_times(struct ptlrpc_request *request,
-                           struct inode *inode)
+void ll_update_times(struct ptlrpc_request *request, struct inode *inode)
 {
        struct mdt_body *body = req_capsule_server_get(&request->rq_pill,
                                                       &RMF_MDT_BODY);
 
        LASSERT(body);
-       if (body->valid & OBD_MD_FLMTIME &&
-           body->mtime > LTIME_S(inode->i_mtime)) {
+       if (body->mbo_valid & OBD_MD_FLMTIME &&
+           body->mbo_mtime > LTIME_S(inode->i_mtime)) {
                CDEBUG(D_INODE, "setting fid "DFID" mtime from %lu to %llu\n",
                       PFID(ll_inode2fid(inode)), LTIME_S(inode->i_mtime),
-                      body->mtime);
-               LTIME_S(inode->i_mtime) = body->mtime;
+                      body->mbo_mtime);
+               LTIME_S(inode->i_mtime) = body->mbo_mtime;
        }
-       if (body->valid & OBD_MD_FLCTIME &&
-           body->ctime > LTIME_S(inode->i_ctime))
-               LTIME_S(inode->i_ctime) = body->ctime;
+       if (body->mbo_valid & OBD_MD_FLCTIME &&
+           body->mbo_ctime > LTIME_S(inode->i_ctime))
+               LTIME_S(inode->i_ctime) = body->mbo_ctime;
 }
 
 static int ll_new_node(struct inode *dir, struct dentry *dentry,
@@ -853,10 +910,10 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir)
 
        /* req is swabbed so this is safe */
        body = req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY);
-       if (!(body->valid & OBD_MD_FLEASIZE))
+       if (!(body->mbo_valid & OBD_MD_FLEASIZE))
                return 0;
 
-       if (body->eadatasize == 0) {
+       if (body->mbo_eadatasize == 0) {
                CERROR("OBD_MD_FLEASIZE set but eadatasize zero\n");
                rc = -EPROTO;
                goto out;
@@ -868,10 +925,10 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir)
         * check it is complete and sensible.
         */
        eadata = req_capsule_server_sized_get(&request->rq_pill, &RMF_MDT_MD,
-                                             body->eadatasize);
+                                             body->mbo_eadatasize);
        LASSERT(eadata);
 
-       rc = obd_unpackmd(ll_i2dtexp(dir), &lsm, eadata, body->eadatasize);
+       rc = obd_unpackmd(ll_i2dtexp(dir), &lsm, eadata, body->mbo_eadatasize);
        if (rc < 0) {
                CERROR("obd_unpackmd: %d\n", rc);
                goto out;
@@ -885,10 +942,10 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir)
        }
 
        oa->o_oi = lsm->lsm_oi;
-       oa->o_mode = body->mode & S_IFMT;
+       oa->o_mode = body->mbo_mode & S_IFMT;
        oa->o_valid = OBD_MD_FLID | OBD_MD_FLTYPE | OBD_MD_FLGROUP;
 
-       if (body->valid & OBD_MD_FLCOOKIE) {
+       if (body->mbo_valid & OBD_MD_FLCOOKIE) {
                oa->o_valid |= OBD_MD_FLCOOKIE;
                oti.oti_logcookies =
                        req_capsule_server_sized_get(&request->rq_pill,
@@ -897,7 +954,7 @@ int ll_objects_destroy(struct ptlrpc_request *request, struct inode *dir)
                                                     lsm->lsm_stripe_count);
                if (!oti.oti_logcookies) {
                        oa->o_valid &= ~OBD_MD_FLCOOKIE;
-                       body->valid &= ~OBD_MD_FLCOOKIE;
+                       body->mbo_valid &= ~OBD_MD_FLCOOKIE;
                }
        }
 
@@ -961,7 +1018,7 @@ static int ll_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
 
        if (!IS_POSIXACL(dir) || !exp_connect_umask(ll_i2mdexp(dir)))
                mode &= ~current_umask();
-       mode = (mode & (S_IRWXUGO|S_ISVTX)) | S_IFDIR;
+       mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
        err = ll_new_node(dir, dentry, NULL, mode, 0, LUSTRE_OPC_MKDIR);
 
        if (!err)
@@ -1110,10 +1167,10 @@ const struct inode_operations ll_dir_inode_operations = {
        .setattr            = ll_setattr,
        .getattr            = ll_getattr,
        .permission      = ll_inode_permission,
-       .setxattr          = ll_setxattr,
-       .getxattr          = ll_getxattr,
+       .setxattr          = generic_setxattr,
+       .getxattr          = generic_getxattr,
        .listxattr        = ll_listxattr,
-       .removexattr    = ll_removexattr,
+       .removexattr    = generic_removexattr,
        .get_acl            = ll_get_acl,
 };
 
@@ -1121,9 +1178,9 @@ const struct inode_operations ll_special_inode_operations = {
        .setattr        = ll_setattr,
        .getattr        = ll_getattr,
        .permission     = ll_inode_permission,
-       .setxattr       = ll_setxattr,
-       .getxattr       = ll_getxattr,
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
        .listxattr      = ll_listxattr,
-       .removexattr    = ll_removexattr,
+       .removexattr    = generic_removexattr,
        .get_acl            = ll_get_acl,
 };
index 87393c4bd51e2a033aec7cf9d022c57831f92ee0..bb85d161d1aafa860231a9876d73db87dbe63f4f 100644 (file)
@@ -648,10 +648,11 @@ static void ras_update_stride_detector(struct ll_readahead_state *ras,
 {
        unsigned long stride_gap = index - ras->ras_last_readpage - 1;
 
-       if (!stride_io_mode(ras) && (stride_gap != 0 ||
-           ras->ras_consecutive_stride_requests == 0)) {
+       if ((stride_gap != 0 || ras->ras_consecutive_stride_requests == 0) &&
+           !stride_io_mode(ras)) {
                ras->ras_stride_pages = ras->ras_consecutive_pages;
-               ras->ras_stride_length = stride_gap+ras->ras_consecutive_pages;
+               ras->ras_stride_length = ras->ras_consecutive_pages +
+                                        stride_gap;
        }
        LASSERT(ras->ras_request_index == 0);
        LASSERT(ras->ras_consecutive_stride_requests == 0);
@@ -663,7 +664,7 @@ static void ras_update_stride_detector(struct ll_readahead_state *ras,
        }
 
        ras->ras_stride_pages = ras->ras_consecutive_pages;
-       ras->ras_stride_length = stride_gap+ras->ras_consecutive_pages;
+       ras->ras_stride_length = stride_gap + ras->ras_consecutive_pages;
 
        RAS_CDEBUG(ras);
        return;
@@ -1015,6 +1016,10 @@ int ll_writepages(struct address_space *mapping, struct writeback_control *wbc)
                 * is called later on.
                 */
                ignore_layout = 1;
+
+       if (!ll_i2info(inode)->lli_clob)
+               return 0;
+
        result = cl_sync_file_range(inode, start, end, mode, ignore_layout);
        if (result > 0) {
                wbc->nr_to_write -= result;
index d98c7acc0832518287a3bccee2b5c36482ed55b7..2f8ef545a39d97554ce0b51531cc75494fe3325c 100644 (file)
@@ -161,7 +161,7 @@ static int ll_releasepage(struct page *vmpage, gfp_t gfp_mask)
        return result;
 }
 
-#define MAX_DIRECTIO_SIZE (2*1024*1024*1024UL)
+#define MAX_DIRECTIO_SIZE (2 * 1024 * 1024 * 1024UL)
 
 static inline int ll_get_user_pages(int rw, unsigned long user_addr,
                                    size_t size, struct page ***pages,
@@ -616,6 +616,13 @@ static int ll_write_end(struct file *file, struct address_space *mapping,
                        LASSERT(from == 0);
                vio->u.write.vui_to = from + copied;
 
+               /*
+                * To address the deadlock in balance_dirty_pages() where
+                * this dirty page may be written back in the same thread.
+                */
+               if (PageDirty(vmpage))
+                       unplug = true;
+
                /* We may have one full RPC, commit it soon */
                if (plist->pl_nr >= PTLRPC_MAX_BRW_PAGES)
                        unplug = true;
index c1cb6b19e724d23cdc98451996e5585c32693cf3..4ac0d6a4ea21aba0f8f46831b63a0790b3becba4 100644 (file)
@@ -632,7 +632,7 @@ static void ll_post_statahead(struct ll_statahead_info *sai)
                /* XXX: No fid in reply, this is probably cross-ref case.
                 * SA can't handle it yet.
                 */
-               if (body->valid & OBD_MD_MDS) {
+               if (body->mbo_valid & OBD_MD_MDS) {
                        rc = -EAGAIN;
                        goto out;
                }
@@ -641,7 +641,7 @@ static void ll_post_statahead(struct ll_statahead_info *sai)
                 * revalidate.
                 */
                /* unlinked and re-created with the same name */
-               if (unlikely(!lu_fid_eq(&minfo->mi_data.op_fid2, &body->fid1))) {
+               if (unlikely(!lu_fid_eq(&minfo->mi_data.op_fid2, &body->mbo_fid1))) {
                        entry->se_inode = NULL;
                        iput(child);
                        child = NULL;
@@ -918,7 +918,8 @@ static void ll_statahead_one(struct dentry *parent, const char *entry_name,
 
        if (rc) {
                rc1 = ll_sa_entry_to_stated(sai, entry,
-                                       rc < 0 ? SA_ENTRY_INVA : SA_ENTRY_SUCC);
+                                           rc < 0 ? SA_ENTRY_INVA :
+                                           SA_ENTRY_SUCC);
                if (rc1 == 0 && entry->se_index == sai->sai_index_wait)
                        wake_up(&sai->sai_waitq);
        } else {
@@ -1035,10 +1036,11 @@ static int ll_statahead_thread(void *arg)
        struct ll_statahead_info *sai    = ll_sai_get(plli->lli_sai);
        struct ptlrpc_thread     *thread = &sai->sai_thread;
        struct ptlrpc_thread *agl_thread = &sai->sai_agl_thread;
-       struct page           *page;
+       struct page           *page = NULL;
        __u64                pos    = 0;
        int                    first  = 0;
        int                    rc     = 0;
+       struct md_op_data *op_data;
        struct ll_dir_chain       chain;
        struct l_wait_info      lwi    = { 0 };
 
@@ -1046,6 +1048,13 @@ static int ll_statahead_thread(void *arg)
        CDEBUG(D_READA, "statahead thread starting: sai %p, parent %pd\n",
               sai, parent);
 
+       op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
+                                    LUSTRE_OPC_ANY, dir);
+       if (IS_ERR(op_data))
+               return PTR_ERR(op_data);
+
+       op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
+
        if (sbi->ll_flags & LL_SBI_AGL_ENABLED)
                ll_start_agl(parent, sai);
 
@@ -1061,7 +1070,7 @@ static int ll_statahead_thread(void *arg)
        wake_up(&thread->t_ctl_waitq);
 
        ll_dir_chain_init(&chain);
-       page = ll_get_dir_page(dir, pos, &chain);
+       page = ll_get_dir_page(dir, op_data, pos, &chain);
 
        while (1) {
                struct lu_dirpage *dp;
@@ -1069,9 +1078,9 @@ static int ll_statahead_thread(void *arg)
 
                if (IS_ERR(page)) {
                        rc = PTR_ERR(page);
-                       CDEBUG(D_READA, "error reading dir "DFID" at %llu/%llu: [rc %d] [parent %u]\n",
+                       CDEBUG(D_READA, "error reading dir "DFID" at %llu/%llu: opendir_pid = %u: rc = %d\n",
                               PFID(ll_inode2fid(dir)), pos, sai->sai_index,
-                              rc, plli->lli_opendir_pid);
+                              plli->lli_opendir_pid, rc);
                        goto out;
                }
 
@@ -1136,7 +1145,7 @@ interpret_it:
                                ll_post_statahead(sai);
 
                        if (unlikely(!thread_is_running(thread))) {
-                               ll_release_page(page, 0);
+                               ll_release_page(dir, page, false);
                                rc = 0;
                                goto out;
                        }
@@ -1158,9 +1167,8 @@ interpret_it:
                                        if (!list_empty(&sai->sai_entries_received))
                                                goto interpret_it;
 
-                                       if (unlikely(
-                                               !thread_is_running(thread))) {
-                                               ll_release_page(page, 0);
+                                       if (unlikely(!thread_is_running(thread))) {
+                                               ll_release_page(dir, page, false);
                                                rc = 0;
                                                goto out;
                                        }
@@ -1174,16 +1182,16 @@ interpret_it:
 
                                goto keep_it;
                        }
-
 do_it:
                        ll_statahead_one(parent, name, namelen);
                }
+
                pos = le64_to_cpu(dp->ldp_hash_end);
                if (pos == MDS_DIR_END_OFF) {
                        /*
                         * End of directory reached.
                         */
-                       ll_release_page(page, 0);
+                       ll_release_page(dir, page, false);
                        while (1) {
                                l_wait_event(thread->t_ctl_waitq,
                                             !list_empty(&sai->sai_entries_received) ||
@@ -1218,24 +1226,20 @@ do_it:
 
                        rc = 0;
                        goto out;
-               } else if (1) {
+               } else {
                        /*
                         * chain is exhausted.
                         * Normal case: continue to the next page.
                         */
-                       ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
-                                             LDF_COLLIDE);
-                       page = ll_get_dir_page(dir, pos, &chain);
-               } else {
-                       LASSERT(le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
-                       ll_release_page(page, 1);
-                       /*
-                        * go into overflow page.
-                        */
+                       ll_release_page(dir, page,
+                                       le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
+                       sai->sai_in_readpage = 1;
+                       page = ll_get_dir_page(dir, op_data, pos, &chain);
+                       sai->sai_in_readpage = 0;
                }
        }
-
 out:
+       ll_finish_md_op_data(op_data);
        if (sai->sai_agl_valid) {
                spin_lock(&plli->lli_agl_lock);
                thread_set_flags(agl_thread, SVC_STOPPING);
@@ -1341,13 +1345,23 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
 {
        struct ll_dir_chain   chain;
        const struct qstr  *target = &dentry->d_name;
+       struct md_op_data *op_data;
        struct page       *page;
        __u64            pos    = 0;
        int                dot_de;
        int                rc     = LS_NONE_FIRST_DE;
 
+       op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
+                                    LUSTRE_OPC_ANY, dir);
+       if (IS_ERR(op_data))
+               return PTR_ERR(op_data);
+       /**
+        * FIXME choose the start offset of the readdir
+        */
+       op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
+
        ll_dir_chain_init(&chain);
-       page = ll_get_dir_page(dir, pos, &chain);
+       page = ll_get_dir_page(dir, op_data, pos, &chain);
 
        while (1) {
                struct lu_dirpage *dp;
@@ -1357,9 +1371,10 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
                        struct ll_inode_info *lli = ll_i2info(dir);
 
                        rc = PTR_ERR(page);
-                       CERROR("error reading dir "DFID" at %llu: [rc %d] [parent %u]\n",
+                       CERROR("%s: error reading dir "DFID" at %llu: opendir_pid = %u : rc = %d\n",
+                              ll_get_fsname(dir->i_sb, NULL, 0),
                               PFID(ll_inode2fid(dir)), pos,
-                              rc, lli->lli_opendir_pid);
+                              lli->lli_opendir_pid, rc);
                        break;
                }
 
@@ -1417,7 +1432,7 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
                        else
                                rc = LS_FIRST_DOT_DE;
 
-                       ll_release_page(page, 0);
+                       ll_release_page(dir, page, false);
                        goto out;
                }
                pos = le64_to_cpu(dp->ldp_hash_end);
@@ -1425,27 +1440,22 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
                        /*
                         * End of directory reached.
                         */
-                       ll_release_page(page, 0);
-                       break;
-               } else if (1) {
+                       ll_release_page(dir, page, false);
+                       goto out;
+               } else {
                        /*
                         * chain is exhausted
                         * Normal case: continue to the next page.
                         */
-                       ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
-                                             LDF_COLLIDE);
-                       page = ll_get_dir_page(dir, pos, &chain);
-               } else {
-                       /*
-                        * go into overflow page.
-                        */
-                       LASSERT(le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
-                       ll_release_page(page, 1);
+                       ll_release_page(dir, page,
+                                       le32_to_cpu(dp->ldp_flags) &
+                                       LDF_COLLIDE);
+                       page = ll_get_dir_page(dir, op_data, pos, &chain);
                }
        }
-
 out:
        ll_dir_chain_fini(&chain);
+       ll_finish_md_op_data(op_data);
        return rc;
 }
 
@@ -1554,6 +1564,11 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
                        return entry ? 1 : -EAGAIN;
                }
 
+               /* if statahead is busy in readdir, help it do post-work */
+               while (!ll_sa_entry_stated(entry) && sai->sai_in_readpage &&
+                      !sa_received_empty(sai))
+                       ll_post_statahead(sai);
+
                if (!ll_sa_entry_stated(entry)) {
                        sai->sai_index_wait = entry->se_index;
                        lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(30), NULL,
@@ -1595,6 +1610,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
                                               *dentryp,
                                               PFID(ll_inode2fid(d_inode(*dentryp))),
                                               PFID(ll_inode2fid(inode)));
+                                       ll_intent_release(&it);
                                        ll_sai_unplug(sai, entry);
                                        return -ESTALE;
                                } else {
index 3dd7e0eb0b54a1e8de55ab256d921c1ee8745549..883084e9a315086a55365472bd1dcf98d9a492c1 100644 (file)
@@ -102,8 +102,8 @@ static int __init lustre_init(void)
 
        rc = -ENOMEM;
        ll_inode_cachep = kmem_cache_create("lustre_inode_cache",
-                                           sizeof(struct ll_inode_info),
-                                           0, SLAB_HWCACHE_ALIGN|SLAB_ACCOUNT,
+                                           sizeof(struct ll_inode_info), 0,
+                                           SLAB_HWCACHE_ALIGN | SLAB_ACCOUNT,
                                            NULL);
        if (!ll_inode_cachep)
                goto out_cache;
index 8c8bdfe1ad71c1257e01d1e15bdaff748823b554..47fb7991701942a9230029c8f176b8d03172cd77 100644 (file)
@@ -80,17 +80,17 @@ static int ll_readlink_internal(struct inode *inode,
        }
 
        body = req_capsule_server_get(&(*request)->rq_pill, &RMF_MDT_BODY);
-       if ((body->valid & OBD_MD_LINKNAME) == 0) {
+       if ((body->mbo_valid & OBD_MD_LINKNAME) == 0) {
                CERROR("OBD_MD_LINKNAME not set on reply\n");
                rc = -EPROTO;
                goto failed;
        }
 
        LASSERT(symlen != 0);
-       if (body->eadatasize != symlen) {
+       if (body->mbo_eadatasize != symlen) {
                CERROR("%s: inode "DFID": symlink length %d not expected %d\n",
                       ll_get_fsname(inode->i_sb, NULL, 0),
-                      PFID(ll_inode2fid(inode)), body->eadatasize - 1,
+                      PFID(ll_inode2fid(inode)), body->mbo_eadatasize - 1,
                       symlen - 1);
                rc = -EPROTO;
                goto failed;
@@ -155,8 +155,8 @@ const struct inode_operations ll_fast_symlink_inode_operations = {
        .get_link       = ll_get_link,
        .getattr        = ll_getattr,
        .permission     = ll_inode_permission,
-       .setxattr       = ll_setxattr,
-       .getxattr       = ll_getxattr,
+       .setxattr       = generic_setxattr,
+       .getxattr       = generic_getxattr,
        .listxattr      = ll_listxattr,
-       .removexattr    = ll_removexattr,
+       .removexattr    = generic_removexattr,
 };
index e623216e962dd2a5035928013904a455894168f9..771c0bd190a535e2af4040f382672878fc5b879b 100644 (file)
@@ -368,12 +368,6 @@ int cl_sb_fini(struct super_block *sb)
                CERROR("Cannot cleanup cl-stack due to memory shortage.\n");
                result = PTR_ERR(env);
        }
-       /*
-        * If mount failed (sbi->ll_cl == NULL), and this there are no other
-        * mounts, stop device types manually (this usually happens
-        * automatically when last device is destroyed).
-        */
-       lu_types_stop();
        return result;
 }
 
index 79fc428461ededdb0669d8c7c6ddcc3bcc43869c..99437b826fe9592450578735840252d068151b1c 100644 (file)
@@ -247,9 +247,9 @@ struct vvp_object {
  */
 struct vvp_page {
        struct cl_page_slice vpg_cl;
-       int               vpg_defer_uptodate;
-       int               vpg_ra_used;
-       int               vpg_write_queued;
+       unsigned int    vpg_defer_uptodate:1,
+                       vpg_ra_used:1,
+                       vpg_write_queued:1;
        /**
         * Non-empty iff this page is already counted in
         * vvp_object::vob_pending_list. This list is only used as a flag,
index 2c520b0bf6caa9df6477a850ca3f109b8c4409d4..e4080ba73bf3da8aa02d3796c0cff0a87f19a3be 100644 (file)
@@ -120,7 +120,7 @@ static int vvp_attr_set(const struct lu_env *env, struct cl_object *obj,
        if (0 && valid & CAT_SIZE)
                i_size_write(inode, attr->cat_size);
        /* not currently necessary */
-       if (0 && valid & (CAT_UID|CAT_GID|CAT_SIZE))
+       if (0 && valid & (CAT_UID | CAT_GID | CAT_SIZE))
                mark_inode_dirty(inode);
        return 0;
 }
index 2e566d90bb94d53f2b121f275e6cbe57acafd122..2818a68012bdbd149967ed1781056393cef4c6f0 100644 (file)
@@ -249,7 +249,7 @@ static void vvp_vmpage_error(struct inode *inode, struct page *vmpage, int ioret
                        set_bit(AS_EIO, &inode->i_mapping->flags);
 
                if ((ioret == -ESHUTDOWN || ioret == -EINTR) &&
-                    obj->vob_discard_page_warned == 0) {
+                   obj->vob_discard_page_warned == 0) {
                        obj->vob_discard_page_warned = 1;
                        ll_dirty_page_discard_warn(vmpage, ioret);
                }
@@ -549,7 +549,7 @@ static const struct cl_page_operations vvp_transient_page_ops = {
 };
 
 int vvp_page_init(const struct lu_env *env, struct cl_object *obj,
-               struct cl_page *page, pgoff_t index)
+                 struct cl_page *page, pgoff_t index)
 {
        struct vvp_page *vpg = cl_object_page_slice(obj, page);
        struct page     *vmpage = page->cp_vmpage;
index 9fe9d6c0a7d1499de1ba063a727b84c7663c0e44..0567a152ab6250f746e9f4422421324038d625e1 100644 (file)
@@ -83,6 +83,8 @@ static void vvp_req_attr_set(const struct lu_env *env,
        }
        obdo_from_inode(oa, inode, valid_flags & flags);
        obdo_set_parent_fid(oa, &ll_i2info(inode)->lli_fid);
+       if (OBD_FAIL_CHECK(OBD_FAIL_LFSCK_INVALID_PFID))
+               oa->o_parent_oid++;
        memcpy(attr->cra_jobid, ll_i2info(inode)->lli_jobid,
               JOBSTATS_JOBID_SIZE);
 }
index 98303cf8581555e0c553dc025c5cbafea5bd7220..7b8d4699a71a8d7fe183b41953abf257f0927552 100644 (file)
@@ -99,46 +99,57 @@ int xattr_type_filter(struct ll_sb_info *sbi, int xattr_type)
        return 0;
 }
 
-static
-int ll_setxattr_common(struct inode *inode, const char *name,
-                      const void *value, size_t size,
-                      int flags, __u64 valid)
+static int
+ll_xattr_set_common(const struct xattr_handler *handler,
+                   struct dentry *dentry, struct inode *inode,
+                   const char *name, const void *value, size_t size,
+                   int flags)
 {
+       char fullname[strlen(handler->prefix) + strlen(name) + 1];
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ptlrpc_request *req = NULL;
-       int xattr_type, rc;
        const char *pv = value;
+       __u64 valid;
+       int rc;
+
+       if (flags == XATTR_REPLACE) {
+               ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1);
+               valid = OBD_MD_FLXATTRRM;
+       } else {
+               ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_SETXATTR, 1);
+               valid = OBD_MD_FLXATTR;
+       }
 
-       xattr_type = get_xattr_type(name);
-       rc = xattr_type_filter(sbi, xattr_type);
+       rc = xattr_type_filter(sbi, handler->flags);
        if (rc)
                return rc;
 
-       if ((xattr_type == XATTR_ACL_ACCESS_T ||
-            xattr_type == XATTR_ACL_DEFAULT_T) &&
+       if ((handler->flags == XATTR_ACL_ACCESS_T ||
+            handler->flags == XATTR_ACL_DEFAULT_T) &&
            !inode_owner_or_capable(inode))
                return -EPERM;
 
        /* b10667: ignore lustre special xattr for now */
-       if ((xattr_type == XATTR_TRUSTED_T && strcmp(name, "trusted.lov") == 0) ||
-           (xattr_type == XATTR_LUSTRE_T && strcmp(name, "lustre.lov") == 0))
+       if ((handler->flags == XATTR_TRUSTED_T && !strcmp(name, "lov")) ||
+           (handler->flags == XATTR_LUSTRE_T && !strcmp(name, "lov")))
                return 0;
 
        /* b15587: ignore security.capability xattr for now */
-       if ((xattr_type == XATTR_SECURITY_T &&
-            strcmp(name, "security.capability") == 0))
+       if ((handler->flags == XATTR_SECURITY_T &&
+            !strcmp(name, "capability")))
                return 0;
 
        /* LU-549:  Disable security.selinux when selinux is disabled */
-       if (xattr_type == XATTR_SECURITY_T && !selinux_is_enabled() &&
-           strcmp(name, "security.selinux") == 0)
+       if (handler->flags == XATTR_SECURITY_T && !selinux_is_enabled() &&
+           strcmp(name, "selinux") == 0)
                return -EOPNOTSUPP;
 
+       sprintf(fullname, "%s%s\n", handler->prefix, name);
        rc = md_setxattr(sbi->ll_md_exp, ll_inode2fid(inode),
-                        valid, name, pv, size, 0, flags,
+                        valid, fullname, pv, size, 0, flags,
                         ll_i2suppgid(inode), &req);
        if (rc) {
-               if (rc == -EOPNOTSUPP && xattr_type == XATTR_USER_T) {
+               if (rc == -EOPNOTSUPP && handler->flags == XATTR_USER_T) {
                        LCONSOLE_INFO("Disabling user_xattr feature because it is not supported on the server\n");
                        sbi->ll_flags &= ~LL_SBI_USER_XATTR;
                }
@@ -149,8 +160,10 @@ int ll_setxattr_common(struct inode *inode, const char *name,
        return 0;
 }
 
-int ll_setxattr(struct dentry *dentry, struct inode *inode,
-               const char *name, const void *value, size_t size, int flags)
+static int ll_xattr_set(const struct xattr_handler *handler,
+                       struct dentry *dentry, struct inode *inode,
+                       const char *name, const void *value, size_t size,
+                       int flags)
 {
        LASSERT(inode);
        LASSERT(name);
@@ -158,20 +171,24 @@ int ll_setxattr(struct dentry *dentry, struct inode *inode,
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), xattr %s\n",
               PFID(ll_inode2fid(inode)), inode, name);
 
-       ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_SETXATTR, 1);
-
-       if ((strncmp(name, XATTR_TRUSTED_PREFIX,
-                    sizeof(XATTR_TRUSTED_PREFIX) - 1) == 0 &&
-            strcmp(name + sizeof(XATTR_TRUSTED_PREFIX) - 1, "lov") == 0) ||
-           (strncmp(name, XATTR_LUSTRE_PREFIX,
-                    sizeof(XATTR_LUSTRE_PREFIX) - 1) == 0 &&
-            strcmp(name + sizeof(XATTR_LUSTRE_PREFIX) - 1, "lov") == 0)) {
+       if (!strcmp(name, "lov")) {
                struct lov_user_md *lump = (struct lov_user_md *)value;
+               int op_type = flags == XATTR_REPLACE ? LPROC_LL_REMOVEXATTR :
+                                                      LPROC_LL_SETXATTR;
                int rc = 0;
 
+               ll_stats_ops_tally(ll_i2sbi(inode), op_type, 1);
+
                if (size != 0 && size < sizeof(struct lov_user_md))
                        return -EINVAL;
 
+               /*
+                * It is possible to set an xattr to a "" value of zero size.
+                * For this case we are going to treat it as a removal.
+                */
+               if (!size && lump)
+                       lump = NULL;
+
                /* Attributes that are saved via getxattr will always have
                 * the stripe_offset as 0.  Instead, the MDS should be
                 * allowed to pick the starting OST index.   b=17846
@@ -194,92 +211,27 @@ int ll_setxattr(struct dentry *dentry, struct inode *inode,
 
                return rc;
 
-       } else if (strcmp(name, XATTR_NAME_LMA) == 0 ||
-                  strcmp(name, XATTR_NAME_LINK) == 0)
+       } else if (!strcmp(name, "lma") || !strcmp(name, "link")) {
+               ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_SETXATTR, 1);
                return 0;
+       }
 
-       return ll_setxattr_common(inode, name, value, size, flags,
-                                 OBD_MD_FLXATTR);
-}
-
-int ll_removexattr(struct dentry *dentry, const char *name)
-{
-       struct inode *inode = d_inode(dentry);
-
-       LASSERT(inode);
-       LASSERT(name);
-
-       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), xattr %s\n",
-              PFID(ll_inode2fid(inode)), inode, name);
-
-       ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_REMOVEXATTR, 1);
-       return ll_setxattr_common(inode, name, NULL, 0, 0,
-                                 OBD_MD_FLXATTRRM);
+       return ll_xattr_set_common(handler, dentry, inode, name, value, size,
+                                  flags);
 }
 
-static
-int ll_getxattr_common(struct inode *inode, const char *name,
-                      void *buffer, size_t size, __u64 valid)
+static int
+ll_xattr_list(struct inode *inode, const char *name, int type, void *buffer,
+             size_t size, __u64 valid)
 {
+       struct ll_inode_info *lli = ll_i2info(inode);
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct ptlrpc_request *req = NULL;
        struct mdt_body *body;
-       int xattr_type, rc;
        void *xdata;
-       struct ll_inode_info *lli = ll_i2info(inode);
+       int rc;
 
-       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
-              PFID(ll_inode2fid(inode)), inode);
-
-       /* listxattr have slightly different behavior from of ext3:
-        * without 'user_xattr' ext3 will list all xattr names but
-        * filtered out "^user..*"; we list them all for simplicity.
-        */
-       if (!name) {
-               xattr_type = XATTR_OTHER_T;
-               goto do_getxattr;
-       }
-
-       xattr_type = get_xattr_type(name);
-       rc = xattr_type_filter(sbi, xattr_type);
-       if (rc)
-               return rc;
-
-       /* b15587: ignore security.capability xattr for now */
-       if ((xattr_type == XATTR_SECURITY_T &&
-            strcmp(name, "security.capability") == 0))
-               return -ENODATA;
-
-       /* LU-549:  Disable security.selinux when selinux is disabled */
-       if (xattr_type == XATTR_SECURITY_T && !selinux_is_enabled() &&
-           strcmp(name, "security.selinux") == 0)
-               return -EOPNOTSUPP;
-
-#ifdef CONFIG_FS_POSIX_ACL
-       /* posix acl is under protection of LOOKUP lock. when calling to this,
-        * we just have path resolution to the target inode, so we have great
-        * chance that cached ACL is uptodate.
-        */
-       if (xattr_type == XATTR_ACL_ACCESS_T) {
-               struct posix_acl *acl;
-
-               spin_lock(&lli->lli_lock);
-               acl = posix_acl_dup(lli->lli_posix_acl);
-               spin_unlock(&lli->lli_lock);
-
-               if (!acl)
-                       return -ENODATA;
-
-               rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
-               posix_acl_release(acl);
-               return rc;
-       }
-       if (xattr_type == XATTR_ACL_DEFAULT_T && !S_ISDIR(inode->i_mode))
-               return -ENODATA;
-#endif
-
-do_getxattr:
-       if (sbi->ll_xattr_cache_enabled && xattr_type != XATTR_ACL_ACCESS_T) {
+       if (sbi->ll_xattr_cache_enabled && type != XATTR_ACL_ACCESS_T) {
                rc = ll_xattr_cache_get(inode, name, buffer, size, valid);
                if (rc == -EAGAIN)
                        goto getxattr_nocache;
@@ -311,36 +263,36 @@ getxattr_nocache:
 
                /* only detect the xattr size */
                if (size == 0) {
-                       rc = body->eadatasize;
+                       rc = body->mbo_eadatasize;
                        goto out;
                }
 
-               if (size < body->eadatasize) {
+               if (size < body->mbo_eadatasize) {
                        CERROR("server bug: replied size %u > %u\n",
-                              body->eadatasize, (int)size);
+                              body->mbo_eadatasize, (int)size);
                        rc = -ERANGE;
                        goto out;
                }
 
-               if (body->eadatasize == 0) {
+               if (body->mbo_eadatasize == 0) {
                        rc = -ENODATA;
                        goto out;
                }
 
                /* do not need swab xattr data */
                xdata = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA,
-                                                    body->eadatasize);
+                                                    body->mbo_eadatasize);
                if (!xdata) {
                        rc = -EFAULT;
                        goto out;
                }
 
-               memcpy(buffer, xdata, body->eadatasize);
-               rc = body->eadatasize;
+               memcpy(buffer, xdata, body->mbo_eadatasize);
+               rc = body->mbo_eadatasize;
        }
 
 out_xattr:
-       if (rc == -EOPNOTSUPP && xattr_type == XATTR_USER_T) {
+       if (rc == -EOPNOTSUPP && type == XATTR_USER_T) {
                LCONSOLE_INFO(
                        "%s: disabling user_xattr feature because it is not supported on the server: rc = %d\n",
                        ll_get_fsname(inode->i_sb, NULL, 0), rc);
@@ -351,8 +303,65 @@ out:
        return rc;
 }
 
-ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
-                   const char *name, void *buffer, size_t size)
+static int ll_xattr_get_common(const struct xattr_handler *handler,
+                              struct dentry *dentry, struct inode *inode,
+                              const char *name, void *buffer, size_t size)
+{
+       char fullname[strlen(handler->prefix) + strlen(name) + 1];
+       struct ll_sb_info *sbi = ll_i2sbi(inode);
+#ifdef CONFIG_FS_POSIX_ACL
+       struct ll_inode_info *lli = ll_i2info(inode);
+#endif
+       int rc;
+
+       CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p)\n",
+              PFID(ll_inode2fid(inode)), inode);
+
+       ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_GETXATTR, 1);
+
+       rc = xattr_type_filter(sbi, handler->flags);
+       if (rc)
+               return rc;
+
+       /* b15587: ignore security.capability xattr for now */
+       if ((handler->flags == XATTR_SECURITY_T && !strcmp(name, "capability")))
+               return -ENODATA;
+
+       /* LU-549:  Disable security.selinux when selinux is disabled */
+       if (handler->flags == XATTR_SECURITY_T && !selinux_is_enabled() &&
+           !strcmp(name, "selinux"))
+               return -EOPNOTSUPP;
+
+#ifdef CONFIG_FS_POSIX_ACL
+       /* posix acl is under protection of LOOKUP lock. when calling to this,
+        * we just have path resolution to the target inode, so we have great
+        * chance that cached ACL is uptodate.
+        */
+       if (handler->flags == XATTR_ACL_ACCESS_T) {
+               struct posix_acl *acl;
+
+               spin_lock(&lli->lli_lock);
+               acl = posix_acl_dup(lli->lli_posix_acl);
+               spin_unlock(&lli->lli_lock);
+
+               if (!acl)
+                       return -ENODATA;
+
+               rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
+               posix_acl_release(acl);
+               return rc;
+       }
+       if (handler->flags == XATTR_ACL_DEFAULT_T && !S_ISDIR(inode->i_mode))
+               return -ENODATA;
+#endif
+       sprintf(fullname, "%s%s\n", handler->prefix, name);
+       return ll_xattr_list(inode, fullname, handler->flags, buffer, size,
+                            OBD_MD_FLXATTR);
+}
+
+static int ll_xattr_get(const struct xattr_handler *handler,
+                       struct dentry *dentry, struct inode *inode,
+                       const char *name, void *buffer, size_t size)
 {
        LASSERT(inode);
        LASSERT(name);
@@ -360,36 +369,23 @@ ssize_t ll_getxattr(struct dentry *dentry, struct inode *inode,
        CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p), xattr %s\n",
               PFID(ll_inode2fid(inode)), inode, name);
 
-       ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_GETXATTR, 1);
-
-       if ((strncmp(name, XATTR_TRUSTED_PREFIX,
-                    sizeof(XATTR_TRUSTED_PREFIX) - 1) == 0 &&
-            strcmp(name + sizeof(XATTR_TRUSTED_PREFIX) - 1, "lov") == 0) ||
-           (strncmp(name, XATTR_LUSTRE_PREFIX,
-                    sizeof(XATTR_LUSTRE_PREFIX) - 1) == 0 &&
-            strcmp(name + sizeof(XATTR_LUSTRE_PREFIX) - 1, "lov") == 0)) {
+       if (!strcmp(name, "lov")) {
                struct lov_stripe_md *lsm;
                struct lov_user_md *lump;
                struct lov_mds_md *lmm = NULL;
                struct ptlrpc_request *request = NULL;
                int rc = 0, lmmsize = 0;
 
+               ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_GETXATTR, 1);
+
                if (!S_ISREG(inode->i_mode) && !S_ISDIR(inode->i_mode))
                        return -ENODATA;
 
-               if (size == 0 && S_ISDIR(inode->i_mode)) {
-                       /* XXX directory EA is fix for now, optimize to save
-                        * RPC transfer
-                        */
-                       rc = sizeof(struct lov_user_md);
-                       goto out;
-               }
-
                lsm = ccc_inode_lsm_get(inode);
                if (!lsm) {
                        if (S_ISDIR(inode->i_mode)) {
-                               rc = ll_dir_getstripe(inode, &lmm,
-                                                     &lmmsize, &request);
+                               rc = ll_dir_getstripe(inode, (void **)&lmm,
+                                                     &lmmsize, &request, 0);
                        } else {
                                rc = -ENODATA;
                        }
@@ -439,7 +435,7 @@ out:
                return rc;
        }
 
-       return ll_getxattr_common(inode, name, buffer, size, OBD_MD_FLXATTR);
+       return ll_xattr_get_common(handler, dentry, inode, name, buffer, size);
 }
 
 ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
@@ -457,7 +453,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
 
        ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_LISTXATTR, 1);
 
-       rc = ll_getxattr_common(inode, NULL, buffer, size, OBD_MD_FLXATTRLS);
+       rc = ll_xattr_list(inode, NULL, XATTR_OTHER_T, buffer, size,
+                          OBD_MD_FLXATTRLS);
        if (rc < 0)
                goto out;
 
@@ -488,7 +485,8 @@ ssize_t ll_listxattr(struct dentry *dentry, char *buffer, size_t size)
                if (!ll_i2info(inode)->lli_has_smd)
                        rc2 = -1;
        } else if (S_ISDIR(inode->i_mode)) {
-               rc2 = ll_dir_getstripe(inode, &lmm, &lmmsize, &request);
+               rc2 = ll_dir_getstripe(inode, (void **)&lmm, &lmmsize,
+                                      &request, 0);
        }
 
        if (rc2 < 0) {
@@ -518,3 +516,57 @@ out:
 
        return rc;
 }
+
+static const struct xattr_handler ll_user_xattr_handler = {
+       .prefix = XATTR_USER_PREFIX,
+       .flags = XATTR_USER_T,
+       .get = ll_xattr_get_common,
+       .set = ll_xattr_set_common,
+};
+
+static const struct xattr_handler ll_trusted_xattr_handler = {
+       .prefix = XATTR_TRUSTED_PREFIX,
+       .flags = XATTR_TRUSTED_T,
+       .get = ll_xattr_get,
+       .set = ll_xattr_set,
+};
+
+static const struct xattr_handler ll_security_xattr_handler = {
+       .prefix = XATTR_SECURITY_PREFIX,
+       .flags = XATTR_SECURITY_T,
+       .get = ll_xattr_get_common,
+       .set = ll_xattr_set_common,
+};
+
+static const struct xattr_handler ll_acl_access_xattr_handler = {
+       .prefix = XATTR_NAME_POSIX_ACL_ACCESS,
+       .flags = XATTR_ACL_ACCESS_T,
+       .get = ll_xattr_get_common,
+       .set = ll_xattr_set_common,
+};
+
+static const struct xattr_handler ll_acl_default_xattr_handler = {
+       .prefix = XATTR_NAME_POSIX_ACL_DEFAULT,
+       .flags = XATTR_ACL_DEFAULT_T,
+       .get = ll_xattr_get_common,
+       .set = ll_xattr_set_common,
+};
+
+static const struct xattr_handler ll_lustre_xattr_handler = {
+       .prefix = XATTR_LUSTRE_PREFIX,
+       .flags = XATTR_LUSTRE_T,
+       .get = ll_xattr_get,
+       .set = ll_xattr_set,
+};
+
+const struct xattr_handler *ll_xattr_handlers[] = {
+       &ll_user_xattr_handler,
+       &ll_trusted_xattr_handler,
+       &ll_security_xattr_handler,
+#ifdef CONFIG_FS_POSIX_ACL
+       &ll_acl_access_xattr_handler,
+       &ll_acl_default_xattr_handler,
+#endif
+       &ll_lustre_xattr_handler,
+       NULL,
+};
index 8089da8143d9c6d2643b63b3e2c8da6a85c418ac..0330d1a4735143db863cc26a3aa5676b8cbe2736 100644 (file)
@@ -270,10 +270,12 @@ static int ll_xattr_find_get_lock(struct inode *inode,
        struct lustre_handle lockh = { 0 };
        struct md_op_data *op_data;
        struct ll_inode_info *lli = ll_i2info(inode);
-       struct ldlm_enqueue_info einfo = { .ei_type = LDLM_IBITS,
-                                          .ei_mode = it_to_lock_mode(oit),
-                                          .ei_cb_bl = ll_md_blocking_ast,
-                                          .ei_cb_cp = ldlm_completion_ast };
+       struct ldlm_enqueue_info einfo = {
+               .ei_type = LDLM_IBITS,
+               .ei_mode = it_to_lock_mode(oit),
+               .ei_cb_bl = &ll_md_blocking_ast,
+               .ei_cb_cp = &ldlm_completion_ast,
+       };
        struct ll_sb_info *sbi = ll_i2sbi(inode);
        struct obd_export *exp = sbi->ll_md_exp;
        int rc;
@@ -304,7 +306,7 @@ static int ll_xattr_find_get_lock(struct inode *inode,
 
        op_data->op_valid = OBD_MD_FLXATTR | OBD_MD_FLXATTRLS;
 
-       rc = md_enqueue(exp, &einfo, oit, op_data, &lockh, NULL, 0, NULL, 0);
+       rc = md_enqueue(exp, &einfo, NULL, oit, op_data, &lockh, 0);
        ll_finish_md_op_data(op_data);
 
        if (rc < 0) {
@@ -380,25 +382,25 @@ static int ll_xattr_cache_refill(struct inode *inode, struct lookup_intent *oit)
        }
        /* do not need swab xattr data */
        xdata = req_capsule_server_sized_get(&req->rq_pill, &RMF_EADATA,
-                                            body->eadatasize);
+                                            body->mbo_eadatasize);
        xval = req_capsule_server_sized_get(&req->rq_pill, &RMF_EAVALS,
-                                           body->aclsize);
+                                           body->mbo_aclsize);
        xsizes = req_capsule_server_sized_get(&req->rq_pill, &RMF_EAVALS_LENS,
-                                             body->max_mdsize * sizeof(__u32));
+                                             body->mbo_max_mdsize * sizeof(__u32));
        if (!xdata || !xval || !xsizes) {
                CERROR("wrong setxattr reply\n");
                rc = -EPROTO;
                goto out_destroy;
        }
 
-       xtail = xdata + body->eadatasize;
-       xvtail = xval + body->aclsize;
+       xtail = xdata + body->mbo_eadatasize;
+       xvtail = xval + body->mbo_aclsize;
 
        CDEBUG(D_CACHE, "caching: xdata=%p xtail=%p\n", xdata, xtail);
 
        ll_xattr_cache_init(lli);
 
-       for (i = 0; i < body->max_mdsize; i++) {
+       for (i = 0; i < body->mbo_max_mdsize; i++) {
                CDEBUG(D_CACHE, "caching [%s]=%.*s\n", xdata, *xsizes, xval);
                /* Perform consistency checks: attr names and vals in pill */
                if (!memchr(xdata, 0, xtail - xdata)) {
index 2f58fdab8d1e33845ef55ea3d0485a7a608a1735..85cc5cb89dafab17f5b7a3107fa55a067be7ebae 100644 (file)
 #include "../include/lustre_lib.h"
 #include "../include/lustre_net.h"
 #include "../include/lustre_dlm.h"
+#include "../include/lustre_mdc.h"
 #include "../include/obd_class.h"
 #include "../include/lprocfs_status.h"
 #include "lmv_internal.h"
 
-static int lmv_intent_remote(struct obd_export *exp, void *lmm,
-                            int lmmsize, struct lookup_intent *it,
-                            const struct lu_fid *parent_fid, int flags,
+static int lmv_intent_remote(struct obd_export *exp, struct lookup_intent *it,
+                            const struct lu_fid *parent_fid,
                             struct ptlrpc_request **reqp,
                             ldlm_blocking_callback cb_blocking,
                             __u64 extra_lock_flags)
@@ -68,7 +68,7 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
        if (!body)
                return -EPROTO;
 
-       LASSERT((body->valid & OBD_MD_MDS));
+       LASSERT((body->mbo_valid & OBD_MD_MDS));
 
        /*
         * Unfortunately, we have to lie to MDC/MDS to retrieve
@@ -87,9 +87,9 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
                it->it_request = NULL;
        }
 
-       LASSERT(fid_is_sane(&body->fid1));
+       LASSERT(fid_is_sane(&body->mbo_fid1));
 
-       tgt = lmv_find_target(lmv, &body->fid1);
+       tgt = lmv_find_target(lmv, &body->mbo_fid1);
        if (IS_ERR(tgt)) {
                rc = PTR_ERR(tgt);
                goto out;
@@ -101,7 +101,7 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
                goto out;
        }
 
-       op_data->op_fid1 = body->fid1;
+       op_data->op_fid1 = body->mbo_fid1;
        /* Sent the parent FID to the remote MDT */
        if (parent_fid) {
                /* The parent fid is only for remote open to
@@ -110,18 +110,14 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
                 */
                LASSERT(it->it_op & IT_OPEN);
                op_data->op_fid2 = *parent_fid;
-               /* Add object FID to op_fid3, in case it needs to check stale
-                * (M_CHECK_STALE), see mdc_finish_intent_lock
-                */
-               op_data->op_fid3 = body->fid1;
        }
 
        op_data->op_bias = MDS_CROSS_REF;
        CDEBUG(D_INODE, "REMOTE_INTENT with fid="DFID" -> mds #%d\n",
-              PFID(&body->fid1), tgt->ltd_idx);
+              PFID(&body->mbo_fid1), tgt->ltd_idx);
 
-       rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it,
-                           flags, &req, cb_blocking, extra_lock_flags);
+       rc = md_intent_lock(tgt->ltd_exp, op_data, it, &req, cb_blocking,
+                           extra_lock_flags);
        if (rc)
                goto out_free_op_data;
 
@@ -136,8 +132,10 @@ static int lmv_intent_remote(struct obd_export *exp, void *lmm,
                it->it_remote_lock_mode = it->it_lock_mode;
        }
 
-       it->it_lock_handle = plock.cookie;
-       it->it_lock_mode = pmode;
+       if (pmode) {
+               it->it_lock_handle = plock.cookie;
+               it->it_lock_mode = pmode;
+       }
 
 out_free_op_data:
        kfree(op_data);
@@ -150,13 +148,157 @@ out:
        return rc;
 }
 
+int lmv_revalidate_slaves(struct obd_export *exp, struct mdt_body *mbody,
+                         struct lmv_stripe_md *lsm,
+                         ldlm_blocking_callback cb_blocking,
+                         int extra_lock_flags)
+{
+       struct obd_device *obd = exp->exp_obd;
+       struct lmv_obd *lmv = &obd->u.lmv;
+       struct mdt_body *body;
+       struct md_op_data *op_data;
+       unsigned long size = 0;
+       unsigned long nlink = 0;
+       __s64 atime = 0;
+       __s64 ctime = 0;
+       __s64 mtime = 0;
+       int rc = 0, i;
+
+       /**
+        * revalidate slaves has some problems, temporarily return,
+        * we may not need that
+        */
+       op_data = kzalloc(sizeof(*op_data), GFP_NOFS);
+       if (!op_data)
+               return -ENOMEM;
+
+       /**
+        * Loop over the stripe information, check validity and update them
+        * from MDS if needed.
+        */
+       for (i = 0; i < lsm->lsm_md_stripe_count; i++) {
+               struct lookup_intent it = { .it_op = IT_GETATTR };
+               struct ptlrpc_request *req = NULL;
+               struct lustre_handle *lockh = NULL;
+               struct lmv_tgt_desc *tgt = NULL;
+               struct inode *inode;
+               struct lu_fid fid;
+
+               fid = lsm->lsm_md_oinfo[i].lmo_fid;
+               inode = lsm->lsm_md_oinfo[i].lmo_root;
+
+               /*
+                * Prepare op_data for revalidating. Note that @fid2 shluld be
+                * defined otherwise it will go to server and take new lock
+                * which is not needed here.
+                */
+               memset(op_data, 0, sizeof(*op_data));
+               op_data->op_fid1 = fid;
+               op_data->op_fid2 = fid;
+
+               tgt = lmv_locate_mds(lmv, op_data, &fid);
+               if (IS_ERR(tgt)) {
+                       rc = PTR_ERR(tgt);
+                       goto cleanup;
+               }
+
+               CDEBUG(D_INODE, "Revalidate slave "DFID" -> mds #%d\n",
+                      PFID(&fid), tgt->ltd_idx);
+
+               rc = md_intent_lock(tgt->ltd_exp, op_data, &it, &req,
+                                   cb_blocking, extra_lock_flags);
+               if (rc < 0)
+                       goto cleanup;
+
+               lockh = (struct lustre_handle *)&it.it_lock_handle;
+               if (rc > 0 && !req) {
+                       /* slave inode is still valid */
+                       CDEBUG(D_INODE, "slave "DFID" is still valid.\n",
+                              PFID(&fid));
+                       rc = 0;
+               } else {
+                       /* refresh slave from server */
+                       body = req_capsule_server_get(&req->rq_pill,
+                                                     &RMF_MDT_BODY);
+                       LASSERT(body);
+
+                       if (unlikely(body->mbo_nlink < 2)) {
+                               CERROR("%s: nlink %d < 2 corrupt stripe %d "DFID":" DFID"\n",
+                                      obd->obd_name, body->mbo_nlink, i,
+                                      PFID(&lsm->lsm_md_oinfo[i].lmo_fid),
+                                      PFID(&lsm->lsm_md_oinfo[0].lmo_fid));
+
+                               if (req)
+                                       ptlrpc_req_finished(req);
+
+                               if (it.it_lock_mode && lockh) {
+                                       ldlm_lock_decref(lockh, it.it_lock_mode);
+                                       it.it_lock_mode = 0;
+                               }
+
+                               rc = -EIO;
+                               goto cleanup;
+                       }
+
+                       i_size_write(inode, body->mbo_size);
+                       set_nlink(inode, body->mbo_nlink);
+                       LTIME_S(inode->i_atime) = body->mbo_atime;
+                       LTIME_S(inode->i_ctime) = body->mbo_ctime;
+                       LTIME_S(inode->i_mtime) = body->mbo_mtime;
+
+                       if (req)
+                               ptlrpc_req_finished(req);
+               }
+
+               md_set_lock_data(tgt->ltd_exp, lockh, inode, NULL);
+
+               if (i != 0)
+                       nlink += inode->i_nlink - 2;
+               else
+                       nlink += inode->i_nlink;
+
+               atime = LTIME_S(inode->i_atime) > atime ?
+                               LTIME_S(inode->i_atime) : atime;
+               ctime = LTIME_S(inode->i_ctime) > ctime ?
+                               LTIME_S(inode->i_ctime) : ctime;
+               mtime = LTIME_S(inode->i_mtime) > mtime ?
+                               LTIME_S(inode->i_mtime) : mtime;
+
+               if (it.it_lock_mode && lockh) {
+                       ldlm_lock_decref(lockh, it.it_lock_mode);
+                       it.it_lock_mode = 0;
+               }
+
+               CDEBUG(D_INODE, "i %d "DFID" size %llu, nlink %u, atime %lu, mtime %lu, ctime %lu.\n",
+                      i, PFID(&fid), i_size_read(inode), inode->i_nlink,
+                      LTIME_S(inode->i_atime), LTIME_S(inode->i_mtime),
+                      LTIME_S(inode->i_ctime));
+       }
+
+       /*
+        * update attr of master request.
+        */
+       CDEBUG(D_INODE, "Return refreshed attrs: size = %lu nlink %lu atime %llu ctime %llu mtime %llu for " DFID"\n",
+              size, nlink, atime, ctime, mtime,
+              PFID(&lsm->lsm_md_oinfo[0].lmo_fid));
+
+       if (mbody) {
+               mbody->mbo_atime = atime;
+               mbody->mbo_ctime = ctime;
+               mbody->mbo_mtime = mtime;
+       }
+cleanup:
+       kfree(op_data);
+       return rc;
+}
+
 /*
  * IT_OPEN is intended to open (and create, possible) an object. Parent (pid)
  * may be split dir.
  */
 static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data,
-                          void *lmm, int lmmsize, struct lookup_intent *it,
-                          int flags, struct ptlrpc_request **reqp,
+                          struct lookup_intent *it,
+                          struct ptlrpc_request **reqp,
                           ldlm_blocking_callback cb_blocking,
                           __u64 extra_lock_flags)
 {
@@ -166,21 +308,41 @@ static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data,
        struct mdt_body         *body;
        int                     rc;
 
-       tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
-       if (IS_ERR(tgt))
-               return PTR_ERR(tgt);
+       if (it->it_flags & MDS_OPEN_BY_FID) {
+               LASSERT(fid_is_sane(&op_data->op_fid2));
+
+               /*
+                * for striped directory, we can't know parent stripe fid
+                * without name, but we can set it to child fid, and MDT
+                * will obtain it from linkea in open in such case.
+                */
+               if (op_data->op_mea1)
+                       op_data->op_fid1 = op_data->op_fid2;
+
+               tgt = lmv_find_target(lmv, &op_data->op_fid2);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
+
+               op_data->op_mds = tgt->ltd_idx;
+       } else {
+               LASSERT(fid_is_sane(&op_data->op_fid1));
+               LASSERT(fid_is_zero(&op_data->op_fid2));
+               LASSERT(op_data->op_name);
+
+               tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
+       }
 
        /* If it is ready to open the file by FID, do not need
         * allocate FID at all, otherwise it will confuse MDT
         */
-       if ((it->it_op & IT_CREAT) &&
-           !(it->it_flags & MDS_OPEN_BY_FID)) {
+       if ((it->it_op & IT_CREAT) && !(it->it_flags & MDS_OPEN_BY_FID)) {
                /*
-                * For open with IT_CREATE and for IT_CREATE cases allocate new
-                * fid and setup FLD for it.
+                * For lookup(IT_CREATE) cases allocate new fid and setup FLD
+                * for it.
                 */
-               op_data->op_fid3 = op_data->op_fid2;
-               rc = lmv_fid_alloc(exp, &op_data->op_fid2, op_data);
+               rc = lmv_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
                if (rc != 0)
                        return rc;
        }
@@ -189,12 +351,12 @@ static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data,
               PFID(&op_data->op_fid1),
               PFID(&op_data->op_fid2), op_data->op_name, tgt->ltd_idx);
 
-       rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it, flags,
-                           reqp, cb_blocking, extra_lock_flags);
+       rc = md_intent_lock(tgt->ltd_exp, op_data, it, reqp, cb_blocking,
+                           extra_lock_flags);
        if (rc != 0)
                return rc;
        /*
-        * Nothing is found, do not access body->fid1 as it is zero and thus
+        * Nothing is found, do not access body->mbo_fid1 as it is zero and thus
         * pointless.
         */
        if ((it->it_disposition & DISP_LOOKUP_NEG) &&
@@ -205,31 +367,17 @@ static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data,
        body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY);
        if (!body)
                return -EPROTO;
-       /*
-        * Not cross-ref case, just get out of here.
-        */
-       if (likely(!(body->valid & OBD_MD_MDS)))
-               return 0;
 
-       /*
-        * Okay, MDS has returned success. Probably name has been resolved in
-        * remote inode.
-        */
-       rc = lmv_intent_remote(exp, lmm, lmmsize, it, &op_data->op_fid1, flags,
-                              reqp, cb_blocking, extra_lock_flags);
-       if (rc != 0) {
-               LASSERT(rc < 0);
-               /*
-                * This is possible, that some userspace application will try to
-                * open file as directory and we will have -ENOTDIR here. As
-                * this is normal situation, we should not print error here,
-                * only debug info.
-                */
-               CDEBUG(D_INODE, "Can't handle remote %s: dir " DFID "(" DFID "):%*s: %d\n",
-                      LL_IT2STR(it), PFID(&op_data->op_fid2),
-                      PFID(&op_data->op_fid1), op_data->op_namelen,
-                      op_data->op_name, rc);
-               return rc;
+       /* Not cross-ref case, just get out of here. */
+       if (unlikely((body->mbo_valid & OBD_MD_MDS))) {
+               rc = lmv_intent_remote(exp, it, &op_data->op_fid1, reqp,
+                                      cb_blocking, extra_lock_flags);
+               if (rc != 0)
+                       return rc;
+
+               body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY);
+               if (!body)
+                       return -EPROTO;
        }
 
        return rc;
@@ -240,37 +388,102 @@ static int lmv_intent_open(struct obd_export *exp, struct md_op_data *op_data,
  */
 static int lmv_intent_lookup(struct obd_export *exp,
                             struct md_op_data *op_data,
-                            void *lmm, int lmmsize, struct lookup_intent *it,
-                            int flags, struct ptlrpc_request **reqp,
+                            struct lookup_intent *it,
+                            struct ptlrpc_request **reqp,
                             ldlm_blocking_callback cb_blocking,
                             __u64 extra_lock_flags)
 {
+       struct lmv_stripe_md *lsm = op_data->op_mea1;
        struct obd_device      *obd = exp->exp_obd;
        struct lmv_obd   *lmv = &obd->u.lmv;
        struct lmv_tgt_desc    *tgt = NULL;
        struct mdt_body *body;
        int                  rc = 0;
 
+       /*
+        * If it returns ERR_PTR(-EBADFD) then it is an unknown hash type
+        * it will try all stripes to locate the object
+        */
        tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
-       if (IS_ERR(tgt))
+       if (IS_ERR(tgt) && (PTR_ERR(tgt) != -EBADFD))
                return PTR_ERR(tgt);
 
+       /*
+        * Both migrating dir and unknown hash dir need to try
+        * all of sub-stripes
+        */
+       if (lsm && !lmv_is_known_hash_type(lsm)) {
+               struct lmv_oinfo *oinfo = &lsm->lsm_md_oinfo[0];
+
+               op_data->op_fid1 = oinfo->lmo_fid;
+               op_data->op_mds = oinfo->lmo_mds;
+               tgt = lmv_get_target(lmv, oinfo->lmo_mds, NULL);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
+       }
+
        if (!fid_is_sane(&op_data->op_fid2))
                fid_zero(&op_data->op_fid2);
 
-       CDEBUG(D_INODE, "LOOKUP_INTENT with fid1="DFID", fid2="DFID
-              ", name='%s' -> mds #%d\n", PFID(&op_data->op_fid1),
-              PFID(&op_data->op_fid2),
+       CDEBUG(D_INODE, "LOOKUP_INTENT with fid1="DFID", fid2="DFID", name='%s' -> mds #%d lsm=%p lsm_magic=%x\n",
+              PFID(&op_data->op_fid1), PFID(&op_data->op_fid2),
               op_data->op_name ? op_data->op_name : "<NULL>",
-              tgt->ltd_idx);
+              tgt->ltd_idx, lsm, !lsm ? -1 : lsm->lsm_md_magic);
 
        op_data->op_bias &= ~MDS_CROSS_REF;
 
-       rc = md_intent_lock(tgt->ltd_exp, op_data, lmm, lmmsize, it,
-                           flags, reqp, cb_blocking, extra_lock_flags);
+       rc = md_intent_lock(tgt->ltd_exp, op_data, it, reqp, cb_blocking,
+                           extra_lock_flags);
+       if (rc < 0)
+               return rc;
 
-       if (rc < 0 || !*reqp)
+       if (!*reqp) {
+               /*
+                * If RPC happens, lsm information will be revalidated
+                * during update_inode process (see ll_update_lsm_md)
+                */
+               if (op_data->op_mea2) {
+                       rc = lmv_revalidate_slaves(exp, NULL, op_data->op_mea2,
+                                                  cb_blocking,
+                                                  extra_lock_flags);
+                       if (rc != 0)
+                               return rc;
+               }
                return rc;
+       } else if (it_disposition(it, DISP_LOOKUP_NEG) && lsm &&
+                  lmv_need_try_all_stripes(lsm)) {
+               /*
+                * For migrating and unknown hash type directory, it will
+                * try to target the entry on other stripes
+                */
+               int stripe_index;
+
+               for (stripe_index = 1;
+                    stripe_index < lsm->lsm_md_stripe_count &&
+                    it_disposition(it, DISP_LOOKUP_NEG); stripe_index++) {
+                       struct lmv_oinfo *oinfo;
+
+                       /* release the previous request */
+                       ptlrpc_req_finished(*reqp);
+                       it->it_request = NULL;
+                       *reqp = NULL;
+
+                       oinfo = &lsm->lsm_md_oinfo[stripe_index];
+                       tgt = lmv_find_target(lmv, &oinfo->lmo_fid);
+                       if (IS_ERR(tgt))
+                               return PTR_ERR(tgt);
+
+                       CDEBUG(D_INODE, "Try other stripes " DFID"\n",
+                              PFID(&oinfo->lmo_fid));
+
+                       op_data->op_fid1 = oinfo->lmo_fid;
+                       it->it_disposition &= ~DISP_ENQ_COMPLETE;
+                       rc = md_intent_lock(tgt->ltd_exp, op_data, it, reqp,
+                                           cb_blocking, extra_lock_flags);
+                       if (rc)
+                               return rc;
+               }
+       }
 
        /*
         * MDS has returned success. Probably name has been resolved in
@@ -279,19 +492,23 @@ static int lmv_intent_lookup(struct obd_export *exp,
        body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY);
        if (!body)
                return -EPROTO;
-       /* Not cross-ref case, just get out of here. */
-       if (likely(!(body->valid & OBD_MD_MDS)))
-               return 0;
 
-       rc = lmv_intent_remote(exp, lmm, lmmsize, it, NULL, flags, reqp,
-                              cb_blocking, extra_lock_flags);
+       /* Not cross-ref case, just get out of here. */
+       if (unlikely((body->mbo_valid & OBD_MD_MDS))) {
+               rc = lmv_intent_remote(exp, it, NULL, reqp, cb_blocking,
+                                      extra_lock_flags);
+               if (rc != 0)
+                       return rc;
+               body = req_capsule_server_get(&(*reqp)->rq_pill, &RMF_MDT_BODY);
+               if (!body)
+                       return -EPROTO;
+       }
 
        return rc;
 }
 
 int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
-                   void *lmm, int lmmsize, struct lookup_intent *it,
-                   int flags, struct ptlrpc_request **reqp,
+                   struct lookup_intent *it, struct ptlrpc_request **reqp,
                    ldlm_blocking_callback cb_blocking,
                    __u64 extra_lock_flags)
 {
@@ -300,21 +517,19 @@ int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
 
        LASSERT(fid_is_sane(&op_data->op_fid1));
 
-       CDEBUG(D_INODE, "INTENT LOCK '%s' for '%*s' on "DFID"\n",
-              LL_IT2STR(it), op_data->op_namelen, op_data->op_name,
-              PFID(&op_data->op_fid1));
+       CDEBUG(D_INODE, "INTENT LOCK '%s' for "DFID" '%*s' on "DFID"\n",
+              LL_IT2STR(it), PFID(&op_data->op_fid2), op_data->op_namelen,
+              op_data->op_name, PFID(&op_data->op_fid1));
 
        rc = lmv_check_connect(obd);
        if (rc)
                return rc;
 
        if (it->it_op & (IT_LOOKUP | IT_GETATTR | IT_LAYOUT))
-               rc = lmv_intent_lookup(exp, op_data, lmm, lmmsize, it,
-                                      flags, reqp, cb_blocking,
+               rc = lmv_intent_lookup(exp, op_data, it, reqp, cb_blocking,
                                       extra_lock_flags);
        else if (it->it_op & IT_OPEN)
-               rc = lmv_intent_open(exp, op_data, lmm, lmmsize, it,
-                                    flags, reqp, cb_blocking,
+               rc = lmv_intent_open(exp, op_data, it, reqp, cb_blocking,
                                     extra_lock_flags);
        else
                LBUG();
index 0beafc49b8d2c9a3a8d6777f1dc3caf1f6f969b7..c4961d9950f5b33f67f6f02efc0fbb18fd7cfb53 100644 (file)
@@ -35,6 +35,7 @@
 
 #include "../include/lustre/lustre_idl.h"
 #include "../include/obd.h"
+#include "../include/lustre_lmv.h"
 
 #define LMV_MAX_TGT_COUNT 128
 
 int lmv_check_connect(struct obd_device *obd);
 
 int lmv_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
-                   void *lmm, int lmmsize, struct lookup_intent *it,
-                   int flags, struct ptlrpc_request **reqp,
+                   struct lookup_intent *it, struct ptlrpc_request **reqp,
                    ldlm_blocking_callback cb_blocking,
                    __u64 extra_lock_flags);
 
 int lmv_fld_lookup(struct lmv_obd *lmv, const struct lu_fid *fid, u32 *mds);
 int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, u32 mds);
-int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
-                 struct md_op_data *op_data);
+int lmv_fid_alloc(const struct lu_env *env, struct obd_export *exp,
+                 struct lu_fid *fid, struct md_op_data *op_data);
 
-static inline struct lmv_stripe_md *lmv_get_mea(struct ptlrpc_request *req)
-{
-       struct mdt_body  *body;
-       struct lmv_stripe_md    *mea;
-
-       LASSERT(req);
-
-       body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-
-       if (!body || !S_ISDIR(body->mode) || !body->eadatasize)
-               return NULL;
-
-       mea = req_capsule_server_sized_get(&req->rq_pill, &RMF_MDT_MD,
-                                          body->eadatasize);
-       if (mea->mea_count == 0)
-               return NULL;
-       if (mea->mea_magic != MEA_MAGIC_LAST_CHAR &&
-           mea->mea_magic != MEA_MAGIC_ALL_CHARS &&
-           mea->mea_magic != MEA_MAGIC_HASH_SEGMENT)
-               return NULL;
+int lmv_unpack_md(struct obd_export *exp, struct lmv_stripe_md **lsmp,
+                 const union lmv_mds_md *lmm, int stripe_count);
 
-       return mea;
-}
-
-static inline int lmv_get_easize(struct lmv_obd *lmv)
-{
-       return sizeof(struct lmv_stripe_md) +
-               lmv->desc.ld_tgt_count *
-               sizeof(struct lu_fid);
-}
+int lmv_revalidate_slaves(struct obd_export *exp, struct mdt_body *mbody,
+                         struct lmv_stripe_md *lsm,
+                         ldlm_blocking_callback cb_blocking,
+                         int extra_lock_flags);
 
 static inline struct lmv_tgt_desc *
-lmv_get_target(struct lmv_obd *lmv, u32 mds)
+lmv_get_target(struct lmv_obd *lmv, u32 mdt_idx, int *index)
 {
-       int count = lmv->desc.ld_tgt_count;
        int i;
 
-       for (i = 0; i < count; i++) {
+       for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
                if (!lmv->tgts[i])
                        continue;
 
-               if (lmv->tgts[i]->ltd_idx == mds)
+               if (lmv->tgts[i]->ltd_idx == mdt_idx) {
+                       if (index)
+                               *index = i;
                        return lmv->tgts[i];
+               }
        }
 
        return ERR_PTR(-ENODEV);
 }
 
-static inline struct lmv_tgt_desc *
-lmv_find_target(struct lmv_obd *lmv, const struct lu_fid *fid)
+static inline int
+lmv_find_target_index(struct lmv_obd *lmv, const struct lu_fid *fid)
 {
-       u32 mds = 0;
-       int rc;
+       struct lmv_tgt_desc *ltd;
+       u32 mdt_idx = 0;
+       int index = 0;
 
        if (lmv->desc.ld_tgt_count > 1) {
-               rc = lmv_fld_lookup(lmv, fid, &mds);
-               if (rc)
-                       return ERR_PTR(rc);
+               int rc;
+
+               rc = lmv_fld_lookup(lmv, fid, &mdt_idx);
+               if (rc < 0)
+                       return rc;
        }
 
-       return lmv_get_target(lmv, mds);
+       ltd = lmv_get_target(lmv, mdt_idx, &index);
+       if (IS_ERR(ltd))
+               return PTR_ERR(ltd);
+
+       return index;
+}
+
+static inline struct lmv_tgt_desc *
+lmv_find_target(struct lmv_obd *lmv, const struct lu_fid *fid)
+{
+       int index;
+
+       index = lmv_find_target_index(lmv, fid);
+       if (index < 0)
+               return ERR_PTR(index);
+
+       return lmv->tgts[index];
+}
+
+static inline int lmv_stripe_md_size(int stripe_count)
+{
+       struct lmv_stripe_md *lsm;
+
+       return sizeof(*lsm) + stripe_count * sizeof(lsm->lsm_md_oinfo[0]);
+}
+
+int lmv_name_to_stripe_index(enum lmv_hash_type hashtype,
+                            unsigned int max_mdt_index,
+                            const char *name, int namelen);
+
+static inline const struct lmv_oinfo *
+lsm_name_to_stripe_info(const struct lmv_stripe_md *lsm, const char *name,
+                       int namelen)
+{
+       int stripe_index;
+
+       stripe_index = lmv_name_to_stripe_index(lsm->lsm_md_hash_type,
+                                               lsm->lsm_md_stripe_count,
+                                               name, namelen);
+       if (stripe_index < 0)
+               return ERR_PTR(stripe_index);
+
+       LASSERTF(stripe_index < lsm->lsm_md_stripe_count,
+                "stripe_index = %d, stripe_count = %d hash_type = %x name = %.*s\n",
+                stripe_index, lsm->lsm_md_stripe_count,
+                lsm->lsm_md_hash_type, namelen, name);
+
+       return &lsm->lsm_md_oinfo[stripe_index];
+}
+
+static inline bool lmv_is_known_hash_type(const struct lmv_stripe_md *lsm)
+{
+       return lsm->lsm_md_hash_type == LMV_HASH_TYPE_FNV_1A_64 ||
+              lsm->lsm_md_hash_type == LMV_HASH_TYPE_ALL_CHARS;
+}
+
+static inline bool lmv_need_try_all_stripes(const struct lmv_stripe_md *lsm)
+{
+       return !lmv_is_known_hash_type(lsm) ||
+              lsm->lsm_md_hash_type & LMV_HASH_FLAG_MIGRATION;
 }
 
 struct lmv_tgt_desc
@@ -123,6 +164,6 @@ struct lmv_tgt_desc
 /* lproc_lmv.c */
 void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars);
 
-extern struct file_operations lmv_proc_target_fops;
+extern const struct file_operations lmv_proc_target_fops;
 
 #endif
index 0e1588a43187ac8207f1d7fd3b8ab53e15158ab7..dc752d528dac0a5c70fe84cb8fb12ab8c59c0388 100644 (file)
 #include "../include/lustre_lib.h"
 #include "../include/lustre_net.h"
 #include "../include/obd_class.h"
+#include "../include/lustre_lmv.h"
 #include "../include/lprocfs_status.h"
+#include "../include/cl_object.h"
 #include "../include/lustre_lite.h"
 #include "../include/lustre_fid.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_kernelcomm.h"
 #include "lmv_internal.h"
 
+/* This hash is only for testing purpose */
+static inline unsigned int
+lmv_hash_all_chars(unsigned int count, const char *name, int namelen)
+{
+       const unsigned char *p = (const unsigned char *)name;
+       unsigned int c = 0;
+
+       while (--namelen >= 0)
+               c += p[namelen];
+
+       c = c % count;
+
+       return c;
+}
+
+static inline unsigned int
+lmv_hash_fnv1a(unsigned int count, const char *name, int namelen)
+{
+       __u64 hash;
+
+       hash = lustre_hash_fnv_1a_64(name, namelen);
+
+       return do_div(hash, count);
+}
+
+int lmv_name_to_stripe_index(__u32 lmv_hash_type, unsigned int stripe_count,
+                            const char *name, int namelen)
+{
+       __u32 hash_type = lmv_hash_type & LMV_HASH_TYPE_MASK;
+       int idx;
+
+       LASSERT(namelen > 0);
+       if (stripe_count <= 1)
+               return 0;
+
+       /* for migrating object, always start from 0 stripe */
+       if (lmv_hash_type & LMV_HASH_FLAG_MIGRATION)
+               return 0;
+
+       switch (hash_type) {
+       case LMV_HASH_TYPE_ALL_CHARS:
+               idx = lmv_hash_all_chars(stripe_count, name, namelen);
+               break;
+       case LMV_HASH_TYPE_FNV_1A_64:
+               idx = lmv_hash_fnv1a(stripe_count, name, namelen);
+               break;
+       default:
+               idx = -EBADFD;
+               break;
+       }
+
+       CDEBUG(D_INFO, "name %.*s hash_type %d idx %d\n", namelen, name,
+              hash_type, idx);
+
+       return idx;
+}
+
 static void lmv_activate_target(struct lmv_obd *lmv,
                                struct lmv_tgt_desc *tgt,
                                int activate)
@@ -70,12 +130,12 @@ static void lmv_activate_target(struct lmv_obd *lmv,
  *  -ENOTCONN: The UUID is found, but the target connection is bad (!)
  *  -EBADF   : The UUID is found, but the OBD of the wrong type (!)
  */
-static int lmv_set_mdc_active(struct lmv_obd *lmv, struct obd_uuid *uuid,
+static int lmv_set_mdc_active(struct lmv_obd *lmv, const struct obd_uuid *uuid,
                              int activate)
 {
        struct lmv_tgt_desc    *uninitialized_var(tgt);
        struct obd_device      *obd;
-       int                  i;
+       u32                  i;
        int                  rc = 0;
 
        CDEBUG(D_INFO, "Searching in lmv %p for uuid %s (activate=%d)\n",
@@ -247,7 +307,7 @@ static int lmv_connect(const struct lu_env *env,
 static void lmv_set_timeouts(struct obd_device *obd)
 {
        struct lmv_obd  *lmv;
-       int                 i;
+       u32 i;
 
        lmv = &obd->u.lmv;
        if (lmv->server_timeout == 0)
@@ -273,7 +333,7 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
 {
        struct obd_device   *obd = exp->exp_obd;
        struct lmv_obd      *lmv = &obd->u.lmv;
-       int               i;
+       u32 i;
        int               rc = 0;
        int               change = 0;
 
@@ -420,6 +480,7 @@ static int lmv_add_target(struct obd_device *obd, struct obd_uuid *uuidp,
 {
        struct lmv_obd      *lmv = &obd->u.lmv;
        struct lmv_tgt_desc *tgt;
+       int orig_tgt_count = 0;
        int               rc = 0;
 
        CDEBUG(D_CONFIG, "Target uuid: %s. index %d\n", uuidp->uuid, index);
@@ -489,14 +550,17 @@ static int lmv_add_target(struct obd_device *obd, struct obd_uuid *uuidp,
        tgt->ltd_uuid = *uuidp;
        tgt->ltd_active = 0;
        lmv->tgts[index] = tgt;
-       if (index >= lmv->desc.ld_tgt_count)
+       if (index >= lmv->desc.ld_tgt_count) {
+               orig_tgt_count = lmv->desc.ld_tgt_count;
                lmv->desc.ld_tgt_count = index + 1;
+       }
 
        if (lmv->connected) {
                rc = lmv_connect_mdc(obd, tgt);
                if (rc) {
                        spin_lock(&lmv->lmv_lock);
-                       lmv->desc.ld_tgt_count--;
+                       if (lmv->desc.ld_tgt_count == index + 1)
+                               lmv->desc.ld_tgt_count = orig_tgt_count;
                        memset(tgt, 0, sizeof(*tgt));
                        spin_unlock(&lmv->lmv_lock);
                } else {
@@ -514,7 +578,7 @@ int lmv_check_connect(struct obd_device *obd)
 {
        struct lmv_obd       *lmv = &obd->u.lmv;
        struct lmv_tgt_desc  *tgt;
-       int                i;
+       u32 i;
        int                rc;
        int                easize;
 
@@ -557,7 +621,7 @@ int lmv_check_connect(struct obd_device *obd)
        lmv_set_timeouts(obd);
        class_export_put(lmv->exp);
        lmv->connected = 1;
-       easize = lmv_get_easize(lmv);
+       easize = lmv_mds_md_size(lmv->desc.ld_tgt_count, LMV_MAGIC);
        lmv_init_ea_size(obd->obd_self_export, easize, 0, 0, 0);
        mutex_unlock(&lmv->lmv_init_mutex);
        return 0;
@@ -629,7 +693,7 @@ static int lmv_disconnect(struct obd_export *exp)
        struct obd_device     *obd = class_exp2obd(exp);
        struct lmv_obd  *lmv = &obd->u.lmv;
        int                 rc;
-       int                 i;
+       u32 i;
 
        if (!lmv->tgts)
                goto out_local;
@@ -758,7 +822,7 @@ static int lmv_hsm_req_count(struct lmv_obd *lmv,
                             const struct hsm_user_request *hur,
                             const struct lmv_tgt_desc *tgt_mds)
 {
-       int                     i, nr = 0;
+       u32 i, nr = 0;
        struct lmv_tgt_desc    *curr_tgt;
 
        /* count how many requests must be sent to the given target */
@@ -899,10 +963,10 @@ static int lmv_iocontrol(unsigned int cmd, struct obd_export *exp,
        struct obd_device    *obddev = class_exp2obd(exp);
        struct lmv_obd       *lmv = &obddev->u.lmv;
        struct lmv_tgt_desc *tgt = NULL;
-       int                i = 0;
+       u32 i = 0;
        int                rc = 0;
        int                set = 0;
-       int                count = lmv->desc.ld_tgt_count;
+       u32 count = lmv->desc.ld_tgt_count;
 
        if (count == 0)
                return -ENOTTY;
@@ -1173,28 +1237,28 @@ static int lmv_placement_policy(struct obd_device *obd,
         * If stripe_offset is provided during setdirstripe
         * (setdirstripe -i xx), xx MDS will be chosen.
         */
-       if (op_data->op_cli_flags & CLI_SET_MEA) {
+       if (op_data->op_cli_flags & CLI_SET_MEA && op_data->op_data) {
                struct lmv_user_md *lum;
 
-               lum = (struct lmv_user_md *)op_data->op_data;
-               if (lum->lum_type == LMV_STRIPE_TYPE &&
-                   lum->lum_stripe_offset != -1) {
-                       if (lum->lum_stripe_offset >= lmv->desc.ld_tgt_count) {
-                               CERROR("%s: Stripe_offset %d > MDT count %d: rc = %d\n",
-                                      obd->obd_name,
-                                      lum->lum_stripe_offset,
-                                      lmv->desc.ld_tgt_count, -ERANGE);
-                               return -ERANGE;
-                       }
-                       *mds = lum->lum_stripe_offset;
-                       return 0;
+               lum = op_data->op_data;
+               if (le32_to_cpu(lum->lum_stripe_offset) != (__u32)-1) {
+                       *mds = le32_to_cpu(lum->lum_stripe_offset);
+               } else {
+                       /*
+                        * -1 means default, which will be in the same MDT with
+                        * the stripe
+                        */
+                       *mds = op_data->op_mds;
+                       lum->lum_stripe_offset = cpu_to_le32(op_data->op_mds);
                }
+       } else {
+               /*
+                * Allocate new fid on target according to operation type and
+                * parent home mds.
+                */
+               *mds = op_data->op_mds;
        }
 
-       /* Allocate new fid on target according to operation type and parent
-        * home mds.
-        */
-       *mds = op_data->op_mds;
        return 0;
 }
 
@@ -1203,7 +1267,7 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, u32 mds)
        struct lmv_tgt_desc     *tgt;
        int                      rc;
 
-       tgt = lmv_get_target(lmv, mds);
+       tgt = lmv_get_target(lmv, mds, NULL);
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
@@ -1221,7 +1285,7 @@ int __lmv_fid_alloc(struct lmv_obd *lmv, struct lu_fid *fid, u32 mds)
        /*
         * Asking underlaying tgt layer to allocate new fid.
         */
-       rc = obd_fid_alloc(tgt->ltd_exp, fid, NULL);
+       rc = obd_fid_alloc(NULL, tgt->ltd_exp, fid, NULL);
        if (rc > 0) {
                LASSERT(fid_is_sane(fid));
                rc = 0;
@@ -1232,8 +1296,8 @@ out:
        return rc;
 }
 
-int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
-                 struct md_op_data *op_data)
+int lmv_fid_alloc(const struct lu_env *env, struct obd_export *exp,
+                 struct lu_fid *fid, struct md_op_data *op_data)
 {
        struct obd_device     *obd = class_exp2obd(exp);
        struct lmv_obd  *lmv = &obd->u.lmv;
@@ -1354,7 +1418,7 @@ static int lmv_process_config(struct obd_device *obd, u32 len, void *buf)
 
                obd_str2uuid(&obd_uuid,  lustre_cfg_buf(lcfg, 1));
 
-               if (sscanf(lustre_cfg_buf(lcfg, 2), "%d", &index) != 1) {
+               if (sscanf(lustre_cfg_buf(lcfg, 2), "%u", &index) != 1) {
                        rc = -EINVAL;
                        goto out;
                }
@@ -1380,7 +1444,7 @@ static int lmv_statfs(const struct lu_env *env, struct obd_export *exp,
        struct lmv_obd  *lmv = &obd->u.lmv;
        struct obd_statfs     *temp;
        int                 rc = 0;
-       int                 i;
+       u32 i;
 
        rc = lmv_check_connect(obd);
        if (rc)
@@ -1522,7 +1586,7 @@ static int lmv_null_inode(struct obd_export *exp, const struct lu_fid *fid)
 {
        struct obd_device   *obd = exp->exp_obd;
        struct lmv_obd      *lmv = &obd->u.lmv;
-       int               i;
+       u32 i;
        int               rc;
 
        rc = lmv_check_connect(obd);
@@ -1545,36 +1609,6 @@ static int lmv_null_inode(struct obd_export *exp, const struct lu_fid *fid)
        return 0;
 }
 
-static int lmv_find_cbdata(struct obd_export *exp, const struct lu_fid *fid,
-                          ldlm_iterator_t it, void *data)
-{
-       struct obd_device   *obd = exp->exp_obd;
-       struct lmv_obd      *lmv = &obd->u.lmv;
-       int               i;
-       int               rc;
-
-       rc = lmv_check_connect(obd);
-       if (rc)
-               return rc;
-
-       CDEBUG(D_INODE, "CBDATA for "DFID"\n", PFID(fid));
-
-       /*
-        * With DNE every object can have two locks in different namespaces:
-        * lookup lock in space of MDT storing direntry and update/open lock in
-        * space of MDT storing inode.
-        */
-       for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
-               if (!lmv->tgts[i] || !lmv->tgts[i]->ltd_exp)
-                       continue;
-               rc = md_find_cbdata(lmv->tgts[i]->ltd_exp, fid, it, data);
-               if (rc)
-                       return rc;
-       }
-
-       return rc;
-}
-
 static int lmv_close(struct obd_export *exp, struct md_op_data *op_data,
                     struct md_open_data *mod, struct ptlrpc_request **request)
 {
@@ -1596,19 +1630,69 @@ static int lmv_close(struct obd_export *exp, struct md_op_data *op_data,
        return rc;
 }
 
+/**
+ * Choosing the MDT by name or FID in @op_data.
+ * For non-striped directory, it will locate MDT by fid.
+ * For striped-directory, it will locate MDT by name. And also
+ * it will reset op_fid1 with the FID of the chosen stripe.
+ **/
+struct lmv_tgt_desc *
+lmv_locate_target_for_name(struct lmv_obd *lmv, struct lmv_stripe_md *lsm,
+                          const char *name, int namelen, struct lu_fid *fid,
+                          u32 *mds)
+{
+       const struct lmv_oinfo *oinfo;
+       struct lmv_tgt_desc *tgt;
+
+       oinfo = lsm_name_to_stripe_info(lsm, name, namelen);
+       if (IS_ERR(oinfo))
+               return ERR_CAST(oinfo);
+
+       *fid = oinfo->lmo_fid;
+       *mds = oinfo->lmo_mds;
+       tgt = lmv_get_target(lmv, *mds, NULL);
+
+       CDEBUG(D_INFO, "locate on mds %u "DFID"\n", *mds, PFID(fid));
+       return tgt;
+}
+
+/**
+ * Locate mds by fid or name
+ *
+ * For striped directory (lsm != NULL), it will locate the stripe
+ * by name hash (see lsm_name_to_stripe_info()). Note: if the hash_type
+ * is unknown, it will return -EBADFD, and lmv_intent_lookup might need
+ * walk through all of stripes to locate the entry.
+ *
+ * For normal direcotry, it will locate MDS by FID directly.
+ * \param[in] lmv      LMV device
+ * \param[in] op_data  client MD stack parameters, name, namelen
+ *                     mds_num etc.
+ * \param[in] fid      object FID used to locate MDS.
+ *
+ * retval              pointer to the lmv_tgt_desc if succeed.
+ *                     ERR_PTR(errno) if failed.
+ */
 struct lmv_tgt_desc
 *lmv_locate_mds(struct lmv_obd *lmv, struct md_op_data *op_data,
                struct lu_fid *fid)
 {
+       struct lmv_stripe_md *lsm = op_data->op_mea1;
        struct lmv_tgt_desc *tgt;
 
-       tgt = lmv_find_target(lmv, fid);
-       if (IS_ERR(tgt))
-               return tgt;
+       if (!lsm || !op_data->op_namelen) {
+               tgt = lmv_find_target(lmv, fid);
+               if (IS_ERR(tgt))
+                       return tgt;
 
-       op_data->op_mds = tgt->ltd_idx;
+               op_data->op_mds = tgt->ltd_idx;
 
-       return tgt;
+               return tgt;
+       }
+
+       return lmv_locate_target_for_name(lmv, lsm, op_data->op_name,
+                                         op_data->op_namelen, fid,
+                                         &op_data->op_mds);
 }
 
 static int lmv_create(struct obd_export *exp, struct md_op_data *op_data,
@@ -1632,13 +1716,26 @@ static int lmv_create(struct obd_export *exp, struct md_op_data *op_data,
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = lmv_fid_alloc(exp, &op_data->op_fid2, op_data);
+       CDEBUG(D_INODE, "CREATE name '%.*s' on "DFID" -> mds #%x\n",
+              op_data->op_namelen, op_data->op_name, PFID(&op_data->op_fid1),
+              op_data->op_mds);
+
+       rc = lmv_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
        if (rc)
                return rc;
 
-       CDEBUG(D_INODE, "CREATE '%*s' on "DFID" -> mds #%x\n",
-              op_data->op_namelen, op_data->op_name, PFID(&op_data->op_fid1),
-              op_data->op_mds);
+       /*
+        * Send the create request to the MDT where the object
+        * will be located
+        */
+       tgt = lmv_find_target(lmv, &op_data->op_fid2);
+       if (IS_ERR(tgt))
+               return PTR_ERR(tgt);
+
+       op_data->op_mds = tgt->ltd_idx;
+
+       CDEBUG(D_INODE, "CREATE obj "DFID" -> mds #%x\n",
+              PFID(&op_data->op_fid1), op_data->op_mds);
 
        op_data->op_flags |= MF_MDC_CANCEL_FID1;
        rc = md_create(tgt->ltd_exp, op_data, data, datalen, mode, uid, gid,
@@ -1673,71 +1770,11 @@ static int lmv_done_writing(struct obd_export *exp,
        return rc;
 }
 
-static int
-lmv_enqueue_remote(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
-                  struct lookup_intent *it, struct md_op_data *op_data,
-                  struct lustre_handle *lockh, void *lmm, int lmmsize,
-                  __u64 extra_lock_flags)
-{
-       struct ptlrpc_request      *req = it->it_request;
-       struct obd_device         *obd = exp->exp_obd;
-       struct lmv_obd       *lmv = &obd->u.lmv;
-       struct lustre_handle    plock;
-       struct lmv_tgt_desc     *tgt;
-       struct md_op_data         *rdata;
-       struct lu_fid          fid1;
-       struct mdt_body     *body;
-       int                      rc = 0;
-       int                      pmode;
-
-       body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-
-       if (!(body->valid & OBD_MD_MDS))
-               return 0;
-
-       CDEBUG(D_INODE, "REMOTE_ENQUEUE '%s' on "DFID" -> "DFID"\n",
-              LL_IT2STR(it), PFID(&op_data->op_fid1), PFID(&body->fid1));
-
-       /*
-        * We got LOOKUP lock, but we really need attrs.
-        */
-       pmode = it->it_lock_mode;
-       LASSERT(pmode != 0);
-       memcpy(&plock, lockh, sizeof(plock));
-       it->it_lock_mode = 0;
-       it->it_request = NULL;
-       fid1 = body->fid1;
-
-       ptlrpc_req_finished(req);
-
-       tgt = lmv_find_target(lmv, &fid1);
-       if (IS_ERR(tgt)) {
-               rc = PTR_ERR(tgt);
-               goto out;
-       }
-
-       rdata = kzalloc(sizeof(*rdata), GFP_NOFS);
-       if (!rdata) {
-               rc = -ENOMEM;
-               goto out;
-       }
-
-       rdata->op_fid1 = fid1;
-       rdata->op_bias = MDS_CROSS_REF;
-
-       rc = md_enqueue(tgt->ltd_exp, einfo, it, rdata, lockh,
-                       lmm, lmmsize, NULL, extra_lock_flags);
-       kfree(rdata);
-out:
-       ldlm_lock_decref(&plock, pmode);
-       return rc;
-}
-
 static int
 lmv_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
+           const ldlm_policy_data_t *policy,
            struct lookup_intent *it, struct md_op_data *op_data,
-           struct lustre_handle *lockh, void *lmm, int lmmsize,
-           struct ptlrpc_request **req, __u64 extra_lock_flags)
+           struct lustre_handle *lockh, __u64 extra_lock_flags)
 {
        struct obd_device       *obd = exp->exp_obd;
        struct lmv_obd     *lmv = &obd->u.lmv;
@@ -1758,19 +1795,15 @@ lmv_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
        CDEBUG(D_INODE, "ENQUEUE '%s' on "DFID" -> mds #%d\n",
               LL_IT2STR(it), PFID(&op_data->op_fid1), tgt->ltd_idx);
 
-       rc = md_enqueue(tgt->ltd_exp, einfo, it, op_data, lockh,
-                       lmm, lmmsize, req, extra_lock_flags);
+       rc = md_enqueue(tgt->ltd_exp, einfo, policy, it, op_data, lockh,
+                       extra_lock_flags);
 
-       if (rc == 0 && it && it->it_op == IT_OPEN) {
-               rc = lmv_enqueue_remote(exp, einfo, it, op_data, lockh,
-                                       lmm, lmmsize, extra_lock_flags);
-       }
        return rc;
 }
 
 static int
 lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
-                struct ptlrpc_request **request)
+                struct ptlrpc_request **preq)
 {
        struct ptlrpc_request   *req = NULL;
        struct obd_device       *obd = exp->exp_obd;
@@ -1791,22 +1824,21 @@ lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
               op_data->op_namelen, op_data->op_name, PFID(&op_data->op_fid1),
               tgt->ltd_idx);
 
-       rc = md_getattr_name(tgt->ltd_exp, op_data, request);
+       rc = md_getattr_name(tgt->ltd_exp, op_data, preq);
        if (rc != 0)
                return rc;
 
-       body = req_capsule_server_get(&(*request)->rq_pill,
-                                     &RMF_MDT_BODY);
-
-       if (body->valid & OBD_MD_MDS) {
-               struct lu_fid rid = body->fid1;
+       body = req_capsule_server_get(&(*preq)->rq_pill, &RMF_MDT_BODY);
+       if (body->mbo_valid & OBD_MD_MDS) {
+               struct lu_fid rid = body->mbo_fid1;
 
                CDEBUG(D_INODE, "Request attrs for "DFID"\n",
                       PFID(&rid));
 
                tgt = lmv_find_target(lmv, &rid);
                if (IS_ERR(tgt)) {
-                       ptlrpc_req_finished(*request);
+                       ptlrpc_req_finished(*preq);
+                       *preq = NULL;
                        return PTR_ERR(tgt);
                }
 
@@ -1815,8 +1847,8 @@ lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
                op_data->op_namelen = 0;
                op_data->op_name = NULL;
                rc = md_getattr_name(tgt->ltd_exp, op_data, &req);
-               ptlrpc_req_finished(*request);
-               *request = req;
+               ptlrpc_req_finished(*preq);
+               *preq = req;
        }
 
        return rc;
@@ -1829,23 +1861,24 @@ lmv_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
         fl == MF_MDC_CANCEL_FID4 ? &op_data->op_fid4 : \
         NULL)
 
-static int lmv_early_cancel(struct obd_export *exp, struct md_op_data *op_data,
-                           int op_tgt, enum ldlm_mode mode, int bits,
-                           int flag)
+static int lmv_early_cancel(struct obd_export *exp, struct lmv_tgt_desc *tgt,
+                           struct md_op_data *op_data, int op_tgt,
+                           enum ldlm_mode mode, int bits, int flag)
 {
        struct lu_fid     *fid = md_op_data_fid(op_data, flag);
        struct obd_device      *obd = exp->exp_obd;
        struct lmv_obd   *lmv = &obd->u.lmv;
-       struct lmv_tgt_desc    *tgt;
        ldlm_policy_data_t      policy = { {0} };
        int                  rc = 0;
 
        if (!fid_is_sane(fid))
                return 0;
 
-       tgt = lmv_find_target(lmv, fid);
-       if (IS_ERR(tgt))
-               return PTR_ERR(tgt);
+       if (!tgt) {
+               tgt = lmv_find_target(lmv, fid);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
+       }
 
        if (tgt->ltd_idx != op_tgt) {
                CDEBUG(D_INODE, "EARLY_CANCEL on "DFID"\n", PFID(fid));
@@ -1888,6 +1921,18 @@ static int lmv_link(struct obd_export *exp, struct md_op_data *op_data,
        op_data->op_fsuid = from_kuid(&init_user_ns, current_fsuid());
        op_data->op_fsgid = from_kgid(&init_user_ns, current_fsgid());
        op_data->op_cap = cfs_curproc_cap_pack();
+       if (op_data->op_mea2) {
+               struct lmv_stripe_md *lsm = op_data->op_mea2;
+               const struct lmv_oinfo *oinfo;
+
+               oinfo = lsm_name_to_stripe_info(lsm, op_data->op_name,
+                                               op_data->op_namelen);
+               if (IS_ERR(oinfo))
+                       return PTR_ERR(oinfo);
+
+               op_data->op_fid2 = oinfo->lmo_fid;
+       }
+
        tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid2);
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
@@ -1896,7 +1941,7 @@ static int lmv_link(struct obd_export *exp, struct md_op_data *op_data,
         * Cancel UPDATE lock on child (fid1).
         */
        op_data->op_flags |= MF_MDC_CANCEL_FID2;
-       rc = lmv_early_cancel(exp, op_data, tgt->ltd_idx, LCK_EX,
+       rc = lmv_early_cancel(exp, NULL, op_data, tgt->ltd_idx, LCK_EX,
                              MDS_INODELOCK_UPDATE, MF_MDC_CANCEL_FID1);
        if (rc != 0)
                return rc;
@@ -1913,14 +1958,15 @@ static int lmv_rename(struct obd_export *exp, struct md_op_data *op_data,
        struct obd_device       *obd = exp->exp_obd;
        struct lmv_obd    *lmv = &obd->u.lmv;
        struct lmv_tgt_desc     *src_tgt;
-       struct lmv_tgt_desc     *tgt_tgt;
        int                     rc;
 
        LASSERT(oldlen != 0);
 
-       CDEBUG(D_INODE, "RENAME %*s in "DFID" to %*s in "DFID"\n",
+       CDEBUG(D_INODE, "RENAME %.*s in "DFID":%d to %.*s in "DFID":%d\n",
               oldlen, old, PFID(&op_data->op_fid1),
-              newlen, new, PFID(&op_data->op_fid2));
+              op_data->op_mea1 ? op_data->op_mea1->lsm_md_stripe_count : 0,
+              newlen, new, PFID(&op_data->op_fid2),
+              op_data->op_mea2 ? op_data->op_mea2->lsm_md_stripe_count : 0);
 
        rc = lmv_check_connect(obd);
        if (rc)
@@ -1929,13 +1975,46 @@ static int lmv_rename(struct obd_export *exp, struct md_op_data *op_data,
        op_data->op_fsuid = from_kuid(&init_user_ns, current_fsuid());
        op_data->op_fsgid = from_kgid(&init_user_ns, current_fsgid());
        op_data->op_cap = cfs_curproc_cap_pack();
-       src_tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
+
+       if (op_data->op_cli_flags & CLI_MIGRATE) {
+               LASSERTF(fid_is_sane(&op_data->op_fid3), "invalid FID "DFID"\n",
+                        PFID(&op_data->op_fid3));
+               rc = lmv_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
+               if (rc)
+                       return rc;
+               src_tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid3);
+       } else {
+               if (op_data->op_mea1) {
+                       struct lmv_stripe_md *lsm = op_data->op_mea1;
+
+                       src_tgt = lmv_locate_target_for_name(lmv, lsm, old,
+                                                            oldlen,
+                                                            &op_data->op_fid1,
+                                                            &op_data->op_mds);
+                       if (IS_ERR(src_tgt))
+                               return PTR_ERR(src_tgt);
+               } else {
+                       src_tgt = lmv_find_target(lmv, &op_data->op_fid1);
+                       if (IS_ERR(src_tgt))
+                               return PTR_ERR(src_tgt);
+
+                       op_data->op_mds = src_tgt->ltd_idx;
+               }
+
+               if (op_data->op_mea2) {
+                       struct lmv_stripe_md *lsm = op_data->op_mea2;
+                       const struct lmv_oinfo *oinfo;
+
+                       oinfo = lsm_name_to_stripe_info(lsm, new, newlen);
+                       if (IS_ERR(oinfo))
+                               return PTR_ERR(oinfo);
+
+                       op_data->op_fid2 = oinfo->lmo_fid;
+               }
+       }
        if (IS_ERR(src_tgt))
                return PTR_ERR(src_tgt);
 
-       tgt_tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid2);
-       if (IS_ERR(tgt_tgt))
-               return PTR_ERR(tgt_tgt);
        /*
         * LOOKUP lock on src child (fid3) should also be cancelled for
         * src_tgt in mdc_rename.
@@ -1946,30 +2025,48 @@ static int lmv_rename(struct obd_export *exp, struct md_op_data *op_data,
         * Cancel UPDATE locks on tgt parent (fid2), tgt_tgt is its
         * own target.
         */
-       rc = lmv_early_cancel(exp, op_data, src_tgt->ltd_idx,
+       rc = lmv_early_cancel(exp, NULL, op_data, src_tgt->ltd_idx,
                              LCK_EX, MDS_INODELOCK_UPDATE,
                              MF_MDC_CANCEL_FID2);
-
+       if (rc)
+               return rc;
        /*
-        * Cancel LOOKUP locks on tgt child (fid4) for parent tgt_tgt.
+        * Cancel LOOKUP locks on source child (fid3) for parent tgt_tgt.
         */
-       if (rc == 0) {
-               rc = lmv_early_cancel(exp, op_data, src_tgt->ltd_idx,
+       if (fid_is_sane(&op_data->op_fid3)) {
+               struct lmv_tgt_desc *tgt;
+
+               tgt = lmv_find_target(lmv, &op_data->op_fid1);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
+
+               /* Cancel LOOKUP lock on its parent */
+               rc = lmv_early_cancel(exp, tgt, op_data, src_tgt->ltd_idx,
                                      LCK_EX, MDS_INODELOCK_LOOKUP,
-                                     MF_MDC_CANCEL_FID4);
+                                     MF_MDC_CANCEL_FID3);
+               if (rc)
+                       return rc;
+
+               rc = lmv_early_cancel(exp, NULL, op_data, src_tgt->ltd_idx,
+                                     LCK_EX, MDS_INODELOCK_FULL,
+                                     MF_MDC_CANCEL_FID3);
+               if (rc)
+                       return rc;
        }
 
        /*
         * Cancel all the locks on tgt child (fid4).
         */
-       if (rc == 0)
-               rc = lmv_early_cancel(exp, op_data, src_tgt->ltd_idx,
+       if (fid_is_sane(&op_data->op_fid4))
+               rc = lmv_early_cancel(exp, NULL, op_data, src_tgt->ltd_idx,
                                      LCK_EX, MDS_INODELOCK_FULL,
                                      MF_MDC_CANCEL_FID4);
 
-       if (rc == 0)
-               rc = md_rename(src_tgt->ltd_exp, op_data, old, oldlen,
-                              new, newlen, request);
+       CDEBUG(D_INODE, DFID":m%d to "DFID"\n", PFID(&op_data->op_fid1),
+              op_data->op_mds, PFID(&op_data->op_fid2));
+
+       rc = md_rename(src_tgt->ltd_exp, op_data, old, oldlen,
+                      new, newlen, request);
        return rc;
 }
 
@@ -2021,169 +2118,419 @@ static int lmv_sync(struct obd_export *exp, const struct lu_fid *fid,
        return rc;
 }
 
-/*
- * Adjust a set of pages, each page containing an array of lu_dirpages,
- * so that each page can be used as a single logical lu_dirpage.
+/**
+ * Get current minimum entry from striped directory
  *
- * A lu_dirpage is laid out as follows, where s = ldp_hash_start,
- * e = ldp_hash_end, f = ldp_flags, p = padding, and each "ent" is a
- * struct lu_dirent.  It has size up to LU_PAGE_SIZE. The ldp_hash_end
- * value is used as a cookie to request the next lu_dirpage in a
- * directory listing that spans multiple pages (two in this example):
- *   ________
- *  |  |
- * .|--------v-------   -----.
- * |s|e|f|p|ent|ent| ... |ent|
- * '--|--------------   -----'   Each CFS_PAGE contains a single
- *    '------.            lu_dirpage.
- * .---------v-------   -----.
- * |s|e|f|p|ent| 0 | ... | 0 |
- * '-----------------   -----'
+ * This function will search the dir entry, whose hash value is the
+ * closest(>=) to @hash_offset, from all of sub-stripes, and it is
+ * only being called for striped directory.
  *
- * However, on hosts where the native VM page size (PAGE_SIZE) is
- * larger than LU_PAGE_SIZE, a single host page may contain multiple
- * lu_dirpages. After reading the lu_dirpages from the MDS, the
- * ldp_hash_end of the first lu_dirpage refers to the one immediately
- * after it in the same CFS_PAGE (arrows simplified for brevity, but
- * in general e0==s1, e1==s2, etc.):
+ * \param[in] exp              export of LMV
+ * \param[in] op_data          parameters transferred beween client MD stack
+ *                             stripe_information will be included in this
+ *                             parameter
+ * \param[in] cb_op            ldlm callback being used in enqueue in
+ *                             mdc_read_page
+ * \param[in] hash_offset      the hash value, which is used to locate
+ *                             minum(closet) dir entry
+ * \param[in|out] stripe_offset        the caller use this to indicate the stripe
+ *                             index of last entry, so to avoid hash conflict
+ *                             between stripes. It will also be used to
+ *                             return the stripe index of current dir entry.
+ * \param[in|out] entp         the minum entry and it also is being used
+ *                             to input the last dir entry to resolve the
+ *                             hash conflict
  *
- * .--------------------   -----.
- * |s0|e0|f0|p|ent|ent| ... |ent|
- * |---v----------------   -----|
- * |s1|e1|f1|p|ent|ent| ... |ent|
- * |---v----------------   -----|  Here, each CFS_PAGE contains
- *          ...                 multiple lu_dirpages.
- * |---v----------------   -----|
- * |s'|e'|f'|p|ent|ent| ... |ent|
- * '---|----------------   -----'
- *     v
- * .----------------------------.
- * |   next CFS_PAGE       |
+ * \param[out] ppage           the page which holds the minum entry
  *
- * This structure is transformed into a single logical lu_dirpage as follows:
+ * \retval                     = 0 get the entry successfully
+ *                             negative errno (< 0) does not get the entry
+ */
+static int lmv_get_min_striped_entry(struct obd_export *exp,
+                                    struct md_op_data *op_data,
+                                    struct md_callback *cb_op,
+                                    __u64 hash_offset, int *stripe_offset,
+                                    struct lu_dirent **entp,
+                                    struct page **ppage)
+{
+       struct lmv_stripe_md *lsm = op_data->op_mea1;
+       struct obd_device *obd = exp->exp_obd;
+       struct lmv_obd *lmv = &obd->u.lmv;
+       struct lu_dirent *min_ent = NULL;
+       struct page *min_page = NULL;
+       struct lmv_tgt_desc *tgt;
+       int stripe_count;
+       int min_idx = 0;
+       int rc = 0;
+       int i;
+
+       stripe_count = lsm->lsm_md_stripe_count;
+       for (i = 0; i < stripe_count; i++) {
+               __u64 stripe_hash = hash_offset;
+               struct lu_dirent *ent = NULL;
+               struct page *page = NULL;
+               struct lu_dirpage *dp;
+
+               tgt = lmv_get_target(lmv, lsm->lsm_md_oinfo[i].lmo_mds, NULL);
+               if (IS_ERR(tgt)) {
+                       rc = PTR_ERR(tgt);
+                       goto out;
+               }
+
+               /*
+                * op_data will be shared by each stripe, so we need
+                * reset these value for each stripe
+                */
+               op_data->op_fid1 = lsm->lsm_md_oinfo[i].lmo_fid;
+               op_data->op_fid2 = lsm->lsm_md_oinfo[i].lmo_fid;
+               op_data->op_data = lsm->lsm_md_oinfo[i].lmo_root;
+next:
+               rc = md_read_page(tgt->ltd_exp, op_data, cb_op, stripe_hash,
+                                 &page);
+               if (rc)
+                       goto out;
+
+               dp = page_address(page);
+               for (ent = lu_dirent_start(dp); ent;
+                    ent = lu_dirent_next(ent)) {
+                       /* Skip dummy entry */
+                       if (!le16_to_cpu(ent->lde_namelen))
+                               continue;
+
+                       if (le64_to_cpu(ent->lde_hash) < hash_offset)
+                               continue;
+
+                       if (le64_to_cpu(ent->lde_hash) == hash_offset &&
+                           (*entp == ent || i < *stripe_offset))
+                               continue;
+
+                       /* skip . and .. for other stripes */
+                       if (i && (!strncmp(ent->lde_name, ".",
+                                          le16_to_cpu(ent->lde_namelen)) ||
+                                 !strncmp(ent->lde_name, "..",
+                                          le16_to_cpu(ent->lde_namelen))))
+                               continue;
+                       break;
+               }
+
+               if (!ent) {
+                       stripe_hash = le64_to_cpu(dp->ldp_hash_end);
+
+                       kunmap(page);
+                       put_page(page);
+                       page = NULL;
+
+                       /*
+                        * reach the end of current stripe, go to next stripe
+                        */
+                       if (stripe_hash == MDS_DIR_END_OFF)
+                               continue;
+                       else
+                               goto next;
+               }
+
+               if (min_ent) {
+                       if (le64_to_cpu(min_ent->lde_hash) >
+                           le64_to_cpu(ent->lde_hash)) {
+                               min_ent = ent;
+                               kunmap(min_page);
+                               put_page(min_page);
+                               min_idx = i;
+                               min_page = page;
+                       } else {
+                               kunmap(page);
+                               put_page(page);
+                               page = NULL;
+                       }
+               } else {
+                       min_ent = ent;
+                       min_page = page;
+                       min_idx = i;
+               }
+       }
+
+out:
+       if (*ppage) {
+               kunmap(*ppage);
+               put_page(*ppage);
+       }
+       *stripe_offset = min_idx;
+       *entp = min_ent;
+       *ppage = min_page;
+       return rc;
+}
+
+/**
+ * Build dir entry page from a striped directory
  *
- * - Replace e0 with e' so the request for the next lu_dirpage gets the page
- *   labeled 'next CFS_PAGE'.
+ * This function gets one entry by @offset from a striped directory. It will
+ * read entries from all of stripes, and choose one closest to the required
+ * offset(&offset). A few notes
+ * 1. skip . and .. for non-zero stripes, because there can only have one .
+ * and .. in a directory.
+ * 2. op_data will be shared by all of stripes, instead of allocating new
+ * one, so need to restore before reusing.
+ * 3. release the entry page if that is not being chosen.
  *
- * - Copy the LDF_COLLIDE flag from f' to f0 to correctly reflect whether
- *   a hash collision with the next page exists.
+ * \param[in] exp      obd export refer to LMV
+ * \param[in] op_data  hold those MD parameters of read_entry
+ * \param[in] cb_op    ldlm callback being used in enqueue in mdc_read_entry
+ * \param[out] ldp     the entry being read
+ * \param[out] ppage   the page holding the entry. Note: because the entry
+ *                     will be accessed in upper layer, so we need hold the
+ *                     page until the usages of entry is finished, see
+ *                     ll_dir_entry_next.
  *
- * - Adjust the lde_reclen of the ending entry of each lu_dirpage to span
- *   to the first entry of the next lu_dirpage.
+ * retval              =0 if get entry successfully
+ *                     <0 cannot get entry
  */
-#if PAGE_SIZE > LU_PAGE_SIZE
-static void lmv_adjust_dirpages(struct page **pages, int ncfspgs, int nlupgs)
-{
-       int i;
+static int lmv_read_striped_page(struct obd_export *exp,
+                                struct md_op_data *op_data,
+                                struct md_callback *cb_op,
+                                __u64 offset, struct page **ppage)
+{
+       struct inode *master_inode = op_data->op_data;
+       struct lu_fid master_fid = op_data->op_fid1;
+       struct obd_device *obd = exp->exp_obd;
+       __u64 hash_offset = offset;
+       struct page *min_ent_page = NULL;
+       struct page *ent_page = NULL;
+       struct lu_dirent *min_ent = NULL;
+       struct lu_dirent *last_ent;
+       struct lu_dirent *ent;
+       struct lu_dirpage *dp;
+       size_t left_bytes;
+       int ent_idx = 0;
+       void *area;
+       int rc;
 
-       for (i = 0; i < ncfspgs; i++) {
-               struct lu_dirpage       *dp = kmap(pages[i]);
-               struct lu_dirpage       *first = dp;
-               struct lu_dirent        *end_dirent = NULL;
-               struct lu_dirent        *ent;
-               __u64                   hash_end = dp->ldp_hash_end;
-               __u32                   flags = dp->ldp_flags;
-
-               while (--nlupgs > 0) {
-                       ent = lu_dirent_start(dp);
-                       for (end_dirent = ent; ent;
-                            end_dirent = ent, ent = lu_dirent_next(ent))
-                               ;
-
-                       /* Advance dp to next lu_dirpage. */
-                       dp = (struct lu_dirpage *)((char *)dp + LU_PAGE_SIZE);
-
-                       /* Check if we've reached the end of the CFS_PAGE. */
-                       if (!((unsigned long)dp & ~PAGE_MASK))
-                               break;
+       rc = lmv_check_connect(obd);
+       if (rc)
+               return rc;
 
-                       /* Save the hash and flags of this lu_dirpage. */
-                       hash_end = dp->ldp_hash_end;
-                       flags = dp->ldp_flags;
+       /*
+        * Allocate a page and read entries from all of stripes and fill
+        * the page by hash order
+        */
+       ent_page = alloc_page(GFP_KERNEL);
+       if (!ent_page)
+               return -ENOMEM;
 
-                       /* Check if lu_dirpage contains no entries. */
-                       if (!end_dirent)
-                               break;
+       /* Initialize the entry page */
+       dp = kmap(ent_page);
+       memset(dp, 0, sizeof(*dp));
+       dp->ldp_hash_start = cpu_to_le64(offset);
+       dp->ldp_flags |= LDF_COLLIDE;
+
+       area = dp + 1;
+       left_bytes = PAGE_SIZE - sizeof(*dp);
+       ent = area;
+       last_ent = ent;
+       do {
+               __u16 ent_size;
+
+               /* Find the minum entry from all sub-stripes */
+               rc = lmv_get_min_striped_entry(exp, op_data, cb_op, hash_offset,
+                                              &ent_idx, &min_ent,
+                                              &min_ent_page);
+               if (rc)
+                       goto out;
 
-                       /* Enlarge the end entry lde_reclen from 0 to
-                        * first entry of next lu_dirpage.
-                        */
-                       LASSERT(le16_to_cpu(end_dirent->lde_reclen) == 0);
-                       end_dirent->lde_reclen =
-                               cpu_to_le16((char *)(dp->ldp_entries) -
-                                           (char *)end_dirent);
+               /*
+                * If it can not get minum entry, it means it already reaches
+                * the end of this directory
+                */
+               if (!min_ent) {
+                       last_ent->lde_reclen = 0;
+                       hash_offset = MDS_DIR_END_OFF;
+                       goto out;
                }
 
-               first->ldp_hash_end = hash_end;
-               first->ldp_flags &= ~cpu_to_le32(LDF_COLLIDE);
-               first->ldp_flags |= flags & cpu_to_le32(LDF_COLLIDE);
+               ent_size = le16_to_cpu(min_ent->lde_reclen);
 
-               kunmap(pages[i]);
+               /*
+                * the last entry lde_reclen is 0, but it might not
+                * the end of this entry of this temporay entry
+                */
+               if (!ent_size)
+                       ent_size = lu_dirent_calc_size(
+                                       le16_to_cpu(min_ent->lde_namelen),
+                                       le32_to_cpu(min_ent->lde_attrs));
+               if (ent_size > left_bytes) {
+                       last_ent->lde_reclen = cpu_to_le16(0);
+                       hash_offset = le64_to_cpu(min_ent->lde_hash);
+                       goto out;
+               }
+
+               memcpy(ent, min_ent, ent_size);
+
+               /*
+                * Replace . with master FID and Replace .. with the parent FID
+                * of master object
+                */
+               if (!strncmp(ent->lde_name, ".",
+                            le16_to_cpu(ent->lde_namelen)) &&
+                   le16_to_cpu(ent->lde_namelen) == 1)
+                       fid_cpu_to_le(&ent->lde_fid, &master_fid);
+               else if (!strncmp(ent->lde_name, "..",
+                                 le16_to_cpu(ent->lde_namelen)) &&
+                        le16_to_cpu(ent->lde_namelen) == 2)
+                       fid_cpu_to_le(&ent->lde_fid, &op_data->op_fid3);
+
+               left_bytes -= ent_size;
+               ent->lde_reclen = cpu_to_le16(ent_size);
+               last_ent = ent;
+               ent = (void *)ent + ent_size;
+               hash_offset = le64_to_cpu(min_ent->lde_hash);
+               if (hash_offset == MDS_DIR_END_OFF) {
+                       last_ent->lde_reclen = 0;
+                       break;
+               }
+       } while (1);
+out:
+       if (min_ent_page) {
+               kunmap(min_ent_page);
+               put_page(min_ent_page);
+       }
+
+       if (unlikely(rc)) {
+               __free_page(ent_page);
+               ent_page = NULL;
+       } else {
+               if (ent == area)
+                       dp->ldp_flags |= LDF_EMPTY;
+               dp->ldp_flags = cpu_to_le32(dp->ldp_flags);
+               dp->ldp_hash_end = cpu_to_le64(hash_offset);
        }
-       LASSERTF(nlupgs == 0, "left = %d", nlupgs);
+
+       /*
+        * We do not want to allocate md_op_data during each
+        * dir entry reading, so op_data will be shared by every stripe,
+        * then we need to restore it back to original value before
+        * return to the upper layer
+        */
+       op_data->op_fid1 = master_fid;
+       op_data->op_fid2 = master_fid;
+       op_data->op_data = master_inode;
+
+       *ppage = ent_page;
+
+       return rc;
 }
-#else
-#define lmv_adjust_dirpages(pages, ncfspgs, nlupgs) do {} while (0)
-#endif /* PAGE_SIZE > LU_PAGE_SIZE */
 
-static int lmv_readpage(struct obd_export *exp, struct md_op_data *op_data,
-                       struct page **pages, struct ptlrpc_request **request)
+int lmv_read_page(struct obd_export *exp, struct md_op_data *op_data,
+                 struct md_callback *cb_op, __u64 offset,
+                 struct page **ppage)
 {
-       struct obd_device       *obd = exp->exp_obd;
-       struct lmv_obd          *lmv = &obd->u.lmv;
-       __u64                   offset = op_data->op_offset;
-       int                     rc;
-       int                     ncfspgs; /* pages read in PAGE_SIZE */
-       int                     nlupgs; /* pages read in LU_PAGE_SIZE */
-       struct lmv_tgt_desc     *tgt;
+       struct lmv_stripe_md *lsm = op_data->op_mea1;
+       struct obd_device *obd = exp->exp_obd;
+       struct lmv_obd *lmv = &obd->u.lmv;
+       struct lmv_tgt_desc *tgt;
+       int rc;
 
        rc = lmv_check_connect(obd);
        if (rc)
                return rc;
 
-       CDEBUG(D_INODE, "READPAGE at %#llx from "DFID"\n",
-              offset, PFID(&op_data->op_fid1));
+       if (unlikely(lsm)) {
+               rc = lmv_read_striped_page(exp, op_data, cb_op, offset, ppage);
+               return rc;
+       }
 
        tgt = lmv_find_target(lmv, &op_data->op_fid1);
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
-       rc = md_readpage(tgt->ltd_exp, op_data, pages, request);
-       if (rc != 0)
-               return rc;
-
-       ncfspgs = ((*request)->rq_bulk->bd_nob_transferred + PAGE_SIZE - 1)
-                >> PAGE_SHIFT;
-       nlupgs = (*request)->rq_bulk->bd_nob_transferred >> LU_PAGE_SHIFT;
-       LASSERT(!((*request)->rq_bulk->bd_nob_transferred & ~LU_PAGE_MASK));
-       LASSERT(ncfspgs > 0 && ncfspgs <= op_data->op_npages);
-
-       CDEBUG(D_INODE, "read %d(%d)/%d pages\n", ncfspgs, nlupgs,
-              op_data->op_npages);
-
-       lmv_adjust_dirpages(pages, ncfspgs, nlupgs);
+       rc = md_read_page(tgt->ltd_exp, op_data, cb_op, offset, ppage);
 
        return rc;
 }
 
+/**
+ * Unlink a file/directory
+ *
+ * Unlink a file or directory under the parent dir. The unlink request
+ * usually will be sent to the MDT where the child is located, but if
+ * the client does not have the child FID then request will be sent to the
+ * MDT where the parent is located.
+ *
+ * If the parent is a striped directory then it also needs to locate which
+ * stripe the name of the child is located, and replace the parent FID
+ * (@op->op_fid1) with the stripe FID. Note: if the stripe is unknown,
+ * it will walk through all of sub-stripes until the child is being
+ * unlinked finally.
+ *
+ * \param[in] exp      export refer to LMV
+ * \param[in] op_data  different parameters transferred beween client
+ *                     MD stacks, name, namelen, FIDs etc.
+ *                     op_fid1 is the parent FID, op_fid2 is the child
+ *                     FID.
+ * \param[out] request point to the request of unlink.
+ *
+ * retval              0 if succeed
+ *                     negative errno if failed.
+ */
 static int lmv_unlink(struct obd_export *exp, struct md_op_data *op_data,
                      struct ptlrpc_request **request)
 {
-       struct obd_device       *obd = exp->exp_obd;
+       struct lmv_stripe_md *lsm = op_data->op_mea1;
+       struct obd_device    *obd = exp->exp_obd;
        struct lmv_obd    *lmv = &obd->u.lmv;
+       struct lmv_tgt_desc *parent_tgt = NULL;
        struct lmv_tgt_desc     *tgt = NULL;
        struct mdt_body         *body;
+       int stripe_index = 0;
        int                  rc;
 
        rc = lmv_check_connect(obd);
        if (rc)
                return rc;
-retry:
+retry_unlink:
+       /* For striped dir, we need to locate the parent as well */
+       if (lsm) {
+               struct lmv_tgt_desc *tmp;
+
+               LASSERT(op_data->op_name && op_data->op_namelen);
+
+               tmp = lmv_locate_target_for_name(lmv, lsm,
+                                                op_data->op_name,
+                                                op_data->op_namelen,
+                                                &op_data->op_fid1,
+                                                &op_data->op_mds);
+
+               /*
+                * return -EBADFD means unknown hash type, might
+                * need try all sub-stripe here
+                */
+               if (IS_ERR(tmp) && PTR_ERR(tmp) != -EBADFD)
+                       return PTR_ERR(tmp);
+
+               /*
+                * Note: both migrating dir and unknown hash dir need to
+                * try all of sub-stripes, so we need start search the
+                * name from stripe 0, but migrating dir is already handled
+                * inside lmv_locate_target_for_name(), so we only check
+                * unknown hash type directory here
+                */
+               if (!lmv_is_known_hash_type(lsm)) {
+                       struct lmv_oinfo *oinfo;
+
+                       oinfo = &lsm->lsm_md_oinfo[stripe_index];
+
+                       op_data->op_fid1 = oinfo->lmo_fid;
+                       op_data->op_mds = oinfo->lmo_mds;
+               }
+       }
+
+try_next_stripe:
        /* Send unlink requests to the MDT where the child is located */
        if (likely(!fid_is_zero(&op_data->op_fid2)))
-               tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid2);
+               tgt = lmv_find_target(lmv, &op_data->op_fid2);
+       else if (lsm)
+               tgt = lmv_get_target(lmv, op_data->op_mds, NULL);
        else
                tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
+
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
@@ -2203,9 +2550,18 @@ retry:
        /*
         * Cancel FULL locks on child (fid3).
         */
-       rc = lmv_early_cancel(exp, op_data, tgt->ltd_idx, LCK_EX,
-                             MDS_INODELOCK_FULL, MF_MDC_CANCEL_FID3);
+       parent_tgt = lmv_find_target(lmv, &op_data->op_fid1);
+       if (IS_ERR(parent_tgt))
+               return PTR_ERR(parent_tgt);
+
+       if (parent_tgt != tgt) {
+               rc = lmv_early_cancel(exp, parent_tgt, op_data, tgt->ltd_idx,
+                                     LCK_EX, MDS_INODELOCK_LOOKUP,
+                                     MF_MDC_CANCEL_FID3);
+       }
 
+       rc = lmv_early_cancel(exp, NULL, op_data, tgt->ltd_idx, LCK_EX,
+                             MDS_INODELOCK_FULL, MF_MDC_CANCEL_FID3);
        if (rc != 0)
                return rc;
 
@@ -2213,19 +2569,38 @@ retry:
               PFID(&op_data->op_fid1), PFID(&op_data->op_fid2), tgt->ltd_idx);
 
        rc = md_unlink(tgt->ltd_exp, op_data, request);
-       if (rc != 0 && rc != -EREMOTE)
+       if (rc != 0 && rc != -EREMOTE  && rc != -ENOENT)
                return rc;
 
+       /* Try next stripe if it is needed. */
+       if (rc == -ENOENT && lsm && lmv_need_try_all_stripes(lsm)) {
+               struct lmv_oinfo *oinfo;
+
+               stripe_index++;
+               if (stripe_index >= lsm->lsm_md_stripe_count)
+                       return rc;
+
+               oinfo = &lsm->lsm_md_oinfo[stripe_index];
+
+               op_data->op_fid1 = oinfo->lmo_fid;
+               op_data->op_mds = oinfo->lmo_mds;
+
+               ptlrpc_req_finished(*request);
+               *request = NULL;
+
+               goto try_next_stripe;
+       }
+
        body = req_capsule_server_get(&(*request)->rq_pill, &RMF_MDT_BODY);
        if (!body)
                return -EPROTO;
 
        /* Not cross-ref case, just get out of here. */
-       if (likely(!(body->valid & OBD_MD_MDS)))
+       if (likely(!(body->mbo_valid & OBD_MD_MDS)))
                return 0;
 
        CDEBUG(D_INODE, "%s: try unlink to another MDT for "DFID"\n",
-              exp->exp_obd->obd_name, PFID(&body->fid1));
+              exp->exp_obd->obd_name, PFID(&body->mbo_fid1));
 
        /* This is a remote object, try remote MDT, Note: it may
         * try more than 1 time here, Considering following case
@@ -2247,11 +2622,11 @@ retry:
         * In theory, it might try unlimited time here, but it should
         * be very rare case.
         */
-       op_data->op_fid2 = body->fid1;
+       op_data->op_fid2 = body->mbo_fid1;
        ptlrpc_req_finished(*request);
        *request = NULL;
 
-       goto retry;
+       goto retry_unlink;
 }
 
 static int lmv_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
@@ -2375,105 +2750,247 @@ static int lmv_set_info_async(const struct lu_env *env, struct obd_export *exp,
        return -EINVAL;
 }
 
-static int lmv_packmd(struct obd_export *exp, struct lov_mds_md **lmmp,
-                     struct lov_stripe_md *lsm)
+static int lmv_pack_md_v1(const struct lmv_stripe_md *lsm,
+                         struct lmv_mds_md_v1 *lmm1)
 {
-       struct obd_device        *obd = class_exp2obd(exp);
-       struct lmv_obd      *lmv = &obd->u.lmv;
-       struct lmv_stripe_md      *meap;
-       struct lmv_stripe_md      *lsmp;
-       int                     mea_size;
-       int                     i;
+       int cplen;
+       int i;
 
-       mea_size = lmv_get_easize(lmv);
-       if (!lmmp)
-               return mea_size;
+       lmm1->lmv_magic = cpu_to_le32(lsm->lsm_md_magic);
+       lmm1->lmv_stripe_count = cpu_to_le32(lsm->lsm_md_stripe_count);
+       lmm1->lmv_master_mdt_index = cpu_to_le32(lsm->lsm_md_master_mdt_index);
+       lmm1->lmv_hash_type = cpu_to_le32(lsm->lsm_md_hash_type);
+       cplen = strlcpy(lmm1->lmv_pool_name, lsm->lsm_md_pool_name,
+                       sizeof(lmm1->lmv_pool_name));
+       if (cplen >= sizeof(lmm1->lmv_pool_name))
+               return -E2BIG;
+
+       for (i = 0; i < lsm->lsm_md_stripe_count; i++)
+               fid_cpu_to_le(&lmm1->lmv_stripe_fids[i],
+                             &lsm->lsm_md_oinfo[i].lmo_fid);
+       return 0;
+}
+
+int lmv_pack_md(union lmv_mds_md **lmmp, const struct lmv_stripe_md *lsm,
+               int stripe_count)
+{
+       int lmm_size = 0, rc = 0;
+       bool allocated = false;
 
+       LASSERT(lmmp);
+
+       /* Free lmm */
        if (*lmmp && !lsm) {
+               int stripe_cnt;
+
+               stripe_cnt = lmv_mds_md_stripe_count_get(*lmmp);
+               lmm_size = lmv_mds_md_size(stripe_cnt,
+                                          le32_to_cpu((*lmmp)->lmv_magic));
+               if (!lmm_size)
+                       return -EINVAL;
                kvfree(*lmmp);
                *lmmp = NULL;
                return 0;
        }
 
+       /* Alloc lmm */
+       if (!*lmmp && !lsm) {
+               lmm_size = lmv_mds_md_size(stripe_count, LMV_MAGIC);
+               LASSERT(lmm_size > 0);
+               *lmmp = libcfs_kvzalloc(lmm_size, GFP_NOFS);
+               if (!*lmmp)
+                       return -ENOMEM;
+               lmv_mds_md_stripe_count_set(*lmmp, stripe_count);
+               (*lmmp)->lmv_magic = cpu_to_le32(LMV_MAGIC);
+               return lmm_size;
+       }
+
+       /* pack lmm */
+       LASSERT(lsm);
+       lmm_size = lmv_mds_md_size(lsm->lsm_md_stripe_count,
+                                  lsm->lsm_md_magic);
        if (!*lmmp) {
-               *lmmp = libcfs_kvzalloc(mea_size, GFP_NOFS);
+               *lmmp = libcfs_kvzalloc(lmm_size, GFP_NOFS);
                if (!*lmmp)
                        return -ENOMEM;
+               allocated = true;
        }
 
-       if (!lsm)
-               return mea_size;
+       switch (lsm->lsm_md_magic) {
+       case LMV_MAGIC_V1:
+               rc = lmv_pack_md_v1(lsm, &(*lmmp)->lmv_md_v1);
+               break;
+       default:
+               rc = -EINVAL;
+               break;
+       }
 
-       lsmp = (struct lmv_stripe_md *)lsm;
-       meap = (struct lmv_stripe_md *)*lmmp;
+       if (rc && allocated) {
+               kvfree(*lmmp);
+               *lmmp = NULL;
+       }
 
-       if (lsmp->mea_magic != MEA_MAGIC_LAST_CHAR &&
-           lsmp->mea_magic != MEA_MAGIC_ALL_CHARS)
-               return -EINVAL;
+       return lmm_size;
+}
+EXPORT_SYMBOL(lmv_pack_md);
 
-       meap->mea_magic = cpu_to_le32(lsmp->mea_magic);
-       meap->mea_count = cpu_to_le32(lsmp->mea_count);
-       meap->mea_master = cpu_to_le32(lsmp->mea_master);
+static int lmv_unpack_md_v1(struct obd_export *exp, struct lmv_stripe_md *lsm,
+                           const struct lmv_mds_md_v1 *lmm1)
+{
+       struct lmv_obd *lmv = &exp->exp_obd->u.lmv;
+       int stripe_count;
+       int rc = 0;
+       int cplen;
+       int i;
 
-       for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
-               meap->mea_ids[i] = lsmp->mea_ids[i];
-               fid_cpu_to_le(&meap->mea_ids[i], &lsmp->mea_ids[i]);
+       lsm->lsm_md_magic = le32_to_cpu(lmm1->lmv_magic);
+       lsm->lsm_md_stripe_count = le32_to_cpu(lmm1->lmv_stripe_count);
+       lsm->lsm_md_master_mdt_index = le32_to_cpu(lmm1->lmv_master_mdt_index);
+       if (OBD_FAIL_CHECK(OBD_FAIL_UNKNOWN_LMV_STRIPE))
+               lsm->lsm_md_hash_type = LMV_HASH_TYPE_UNKNOWN;
+       else
+               lsm->lsm_md_hash_type = le32_to_cpu(lmm1->lmv_hash_type);
+       lsm->lsm_md_layout_version = le32_to_cpu(lmm1->lmv_layout_version);
+       cplen = strlcpy(lsm->lsm_md_pool_name, lmm1->lmv_pool_name,
+                       sizeof(lsm->lsm_md_pool_name));
+
+       if (cplen >= sizeof(lsm->lsm_md_pool_name))
+               return -E2BIG;
+
+       CDEBUG(D_INFO, "unpack lsm count %d, master %d hash_type %d layout_version %d\n",
+              lsm->lsm_md_stripe_count, lsm->lsm_md_master_mdt_index,
+              lsm->lsm_md_hash_type, lsm->lsm_md_layout_version);
+
+       stripe_count = le32_to_cpu(lmm1->lmv_stripe_count);
+       for (i = 0; i < le32_to_cpu(stripe_count); i++) {
+               fid_le_to_cpu(&lsm->lsm_md_oinfo[i].lmo_fid,
+                             &lmm1->lmv_stripe_fids[i]);
+               rc = lmv_fld_lookup(lmv, &lsm->lsm_md_oinfo[i].lmo_fid,
+                                   &lsm->lsm_md_oinfo[i].lmo_mds);
+               if (rc)
+                       return rc;
+               CDEBUG(D_INFO, "unpack fid #%d "DFID"\n", i,
+                      PFID(&lsm->lsm_md_oinfo[i].lmo_fid));
        }
 
-       return mea_size;
+       return rc;
 }
 
-static int lmv_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp,
-                       struct lov_mds_md *lmm, int lmm_size)
+int lmv_unpack_md(struct obd_export *exp, struct lmv_stripe_md **lsmp,
+                 const union lmv_mds_md *lmm, int stripe_count)
 {
-       struct obd_device         *obd = class_exp2obd(exp);
-       struct lmv_stripe_md      **tmea = (struct lmv_stripe_md **)lsmp;
-       struct lmv_stripe_md       *mea = (struct lmv_stripe_md *)lmm;
-       struct lmv_obd       *lmv = &obd->u.lmv;
-       int                      mea_size;
-       int                      i;
-       __u32                  magic;
+       struct lmv_stripe_md *lsm;
+       bool allocated = false;
+       int lsm_size, rc;
 
-       mea_size = lmv_get_easize(lmv);
-       if (!lsmp)
-               return mea_size;
+       LASSERT(lsmp);
 
-       if (*lsmp && !lmm) {
-               kvfree(*tmea);
+       lsm = *lsmp;
+       /* Free memmd */
+       if (lsm && !lmm) {
+               int i;
+
+               for (i = 1; i < lsm->lsm_md_stripe_count; i++) {
+                       /*
+                        * For migrating inode, the master stripe and master
+                        * object will be the same, so do not need iput, see
+                        * ll_update_lsm_md
+                        */
+                       if (!(lsm->lsm_md_hash_type & LMV_HASH_FLAG_MIGRATION &&
+                             !i) && lsm->lsm_md_oinfo[i].lmo_root)
+                               iput(lsm->lsm_md_oinfo[i].lmo_root);
+               }
+
+               kvfree(lsm);
                *lsmp = NULL;
                return 0;
        }
 
-       LASSERT(mea_size == lmm_size);
+       /* Alloc memmd */
+       if (!lsm && !lmm) {
+               lsm_size = lmv_stripe_md_size(stripe_count);
+               lsm = libcfs_kvzalloc(lsm_size, GFP_NOFS);
+               if (!lsm)
+                       return -ENOMEM;
+               lsm->lsm_md_stripe_count = stripe_count;
+               *lsmp = lsm;
+               return 0;
+       }
 
-       *tmea = libcfs_kvzalloc(mea_size, GFP_NOFS);
-       if (!*tmea)
-               return -ENOMEM;
+       if (le32_to_cpu(lmm->lmv_magic) == LMV_MAGIC_STRIPE)
+               return -EPERM;
 
-       if (!lmm)
-               return mea_size;
+       /* Unpack memmd */
+       if (le32_to_cpu(lmm->lmv_magic) != LMV_MAGIC_V1 &&
+           le32_to_cpu(lmm->lmv_magic) != LMV_USER_MAGIC) {
+               CERROR("%s: invalid lmv magic %x: rc = %d\n",
+                      exp->exp_obd->obd_name, le32_to_cpu(lmm->lmv_magic),
+                      -EIO);
+               return -EIO;
+       }
 
-       if (mea->mea_magic == MEA_MAGIC_LAST_CHAR ||
-           mea->mea_magic == MEA_MAGIC_ALL_CHARS ||
-           mea->mea_magic == MEA_MAGIC_HASH_SEGMENT) {
-               magic = le32_to_cpu(mea->mea_magic);
-       } else {
-               /*
-                * Old mea is not handled here.
+       if (le32_to_cpu(lmm->lmv_magic) == LMV_MAGIC_V1)
+               lsm_size = lmv_stripe_md_size(lmv_mds_md_stripe_count_get(lmm));
+       else
+               /**
+                * Unpack default dirstripe(lmv_user_md) to lmv_stripe_md,
+                * stripecount should be 0 then.
                 */
-               CERROR("Old not supportable EA is found\n");
-               LBUG();
+               lsm_size = lmv_stripe_md_size(0);
+
+       if (!lsm) {
+               lsm = libcfs_kvzalloc(lsm_size, GFP_NOFS);
+               if (!lsm)
+                       return -ENOMEM;
+               allocated = true;
+               *lsmp = lsm;
+       }
+
+       switch (le32_to_cpu(lmm->lmv_magic)) {
+       case LMV_MAGIC_V1:
+               rc = lmv_unpack_md_v1(exp, lsm, &lmm->lmv_md_v1);
+               break;
+       default:
+               CERROR("%s: unrecognized magic %x\n", exp->exp_obd->obd_name,
+                      le32_to_cpu(lmm->lmv_magic));
+               rc = -EINVAL;
+               break;
        }
 
-       (*tmea)->mea_magic = magic;
-       (*tmea)->mea_count = le32_to_cpu(mea->mea_count);
-       (*tmea)->mea_master = le32_to_cpu(mea->mea_master);
+       if (rc && allocated) {
+               kvfree(lsm);
+               *lsmp = NULL;
+               lsm_size = rc;
+       }
+       return lsm_size;
+}
+EXPORT_SYMBOL(lmv_unpack_md);
 
-       for (i = 0; i < (*tmea)->mea_count; i++) {
-               (*tmea)->mea_ids[i] = mea->mea_ids[i];
-               fid_le_to_cpu(&(*tmea)->mea_ids[i], &(*tmea)->mea_ids[i]);
+int lmv_unpackmd(struct obd_export *exp, struct lov_stripe_md **lsmp,
+                struct lov_mds_md *lmm, int disk_len)
+{
+       return lmv_unpack_md(exp, (struct lmv_stripe_md **)lsmp,
+                            (union lmv_mds_md *)lmm, disk_len);
+}
+
+int lmv_packmd(struct obd_export *exp, struct lov_mds_md **lmmp,
+              struct lov_stripe_md *lsm)
+{
+       const struct lmv_stripe_md *lmv = (struct lmv_stripe_md *)lsm;
+       struct obd_device *obd = exp->exp_obd;
+       struct lmv_obd *lmv_obd = &obd->u.lmv;
+       int stripe_count;
+
+       if (!lmmp) {
+               if (lsm)
+                       stripe_count = lmv->lsm_md_stripe_count;
+               else
+                       stripe_count = lmv_obd->desc.ld_tgt_count;
+
+               return lmv_mds_md_size(stripe_count, LMV_MAGIC_V1);
        }
-       return mea_size;
+
+       return lmv_pack_md((union lmv_mds_md **)lmmp, lmv, 0);
 }
 
 static int lmv_cancel_unused(struct obd_export *exp, const struct lu_fid *fid,
@@ -2484,7 +3001,7 @@ static int lmv_cancel_unused(struct obd_export *exp, const struct lu_fid *fid,
        struct lmv_obd    *lmv = &obd->u.lmv;
        int                   rc = 0;
        int                   err;
-       int                   i;
+       u32 i;
 
        LASSERT(fid);
 
@@ -2502,8 +3019,9 @@ static int lmv_cancel_unused(struct obd_export *exp, const struct lu_fid *fid,
        return rc;
 }
 
-static int lmv_set_lock_data(struct obd_export *exp, __u64 *lockh, void *data,
-                            __u64 *bits)
+static int lmv_set_lock_data(struct obd_export *exp,
+                            const struct lustre_handle *lockh,
+                            void *data, __u64 *bits)
 {
        struct lmv_obd    *lmv = &exp->exp_obd->u.lmv;
        struct lmv_tgt_desc *tgt = lmv->tgts[0];
@@ -2526,24 +3044,32 @@ static enum ldlm_mode lmv_lock_match(struct obd_export *exp, __u64 flags,
        struct obd_device       *obd = exp->exp_obd;
        struct lmv_obd    *lmv = &obd->u.lmv;
        enum ldlm_mode        rc;
-       int                   i;
+       int tgt;
+       u32 i;
 
        CDEBUG(D_INODE, "Lock match for "DFID"\n", PFID(fid));
 
        /*
-        * With CMD every object can have two locks in different namespaces:
-        * lookup lock in space of mds storing direntry and update/open lock in
-        * space of mds storing inode. Thus we check all targets, not only that
-        * one fid was created in.
+        * With DNE every object can have two locks in different namespaces:
+        * lookup lock in space of MDT storing direntry and update/open lock in
+        * space of MDT storing inode.  Try the MDT that the FID maps to first,
+        * since this can be easily found, and only try others if that fails.
         */
-       for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
-               struct lmv_tgt_desc *tgt = lmv->tgts[i];
+       for (i = 0, tgt = lmv_find_target_index(lmv, fid);
+            i < lmv->desc.ld_tgt_count;
+            i++, tgt = (tgt + 1) % lmv->desc.ld_tgt_count) {
+               if (tgt < 0) {
+                       CDEBUG(D_HA, "%s: "DFID" is inaccessible: rc = %d\n",
+                              obd->obd_name, PFID(fid), tgt);
+                       tgt = 0;
+               }
 
-               if (!tgt || !tgt->ltd_exp || !tgt->ltd_active)
+               if (!lmv->tgts[tgt] || !lmv->tgts[tgt]->ltd_exp ||
+                   !lmv->tgts[tgt]->ltd_active)
                        continue;
 
-               rc = md_lock_match(tgt->ltd_exp, flags, fid, type, policy, mode,
-                                  lockh);
+               rc = md_lock_match(lmv->tgts[tgt]->ltd_exp, flags, fid,
+                                  type, policy, mode, lockh);
                if (rc)
                        return rc;
        }
@@ -2571,8 +3097,10 @@ static int lmv_free_lustre_md(struct obd_export *exp, struct lustre_md *md)
        struct lmv_obd    *lmv = &obd->u.lmv;
        struct lmv_tgt_desc *tgt = lmv->tgts[0];
 
-       if (md->mea)
-               obd_free_memmd(exp, (void *)&md->mea);
+       if (md->lmv) {
+               lmv_free_memmd(md->lmv);
+               md->lmv = NULL;
+       }
        if (!tgt || !tgt->ltd_exp)
                return -EINVAL;
        return md_free_lustre_md(tgt->ltd_exp, md);
@@ -2621,7 +3149,7 @@ static int lmv_intent_getattr_async(struct obd_export *exp,
        if (rc)
                return rc;
 
-       tgt = lmv_find_target(lmv, &op_data->op_fid1);
+       tgt = lmv_locate_mds(lmv, op_data, &op_data->op_fid1);
        if (IS_ERR(tgt))
                return PTR_ERR(tgt);
 
@@ -2649,6 +3177,22 @@ static int lmv_revalidate_lock(struct obd_export *exp, struct lookup_intent *it,
        return rc;
 }
 
+int lmv_get_fid_from_lsm(struct obd_export *exp,
+                        const struct lmv_stripe_md *lsm,
+                        const char *name, int namelen, struct lu_fid *fid)
+{
+       const struct lmv_oinfo *oinfo;
+
+       LASSERT(lsm);
+       oinfo = lsm_name_to_stripe_info(lsm, name, namelen);
+       if (IS_ERR(oinfo))
+               return PTR_ERR(oinfo);
+
+       *fid = oinfo->lmo_fid;
+
+       return 0;
+}
+
 /**
  * For lmv, only need to send request to master MDT, and the master MDT will
  * process with other slave MDTs. The only exception is Q_GETOQUOTA for which
@@ -2660,8 +3204,9 @@ static int lmv_quotactl(struct obd_device *unused, struct obd_export *exp,
        struct obd_device   *obd = class_exp2obd(exp);
        struct lmv_obd      *lmv = &obd->u.lmv;
        struct lmv_tgt_desc *tgt = lmv->tgts[0];
-       int               rc = 0, i;
+       int rc = 0;
        __u64 curspace = 0, curinodes = 0;
+       u32 i;
 
        if (!tgt || !tgt->ltd_exp || !tgt->ltd_active ||
            !lmv->desc.ld_tgt_count) {
@@ -2704,7 +3249,8 @@ static int lmv_quotacheck(struct obd_device *unused, struct obd_export *exp,
        struct obd_device   *obd = class_exp2obd(exp);
        struct lmv_obd      *lmv = &obd->u.lmv;
        struct lmv_tgt_desc *tgt;
-       int               i, rc = 0;
+       int rc = 0;
+       u32 i;
 
        for (i = 0; i < lmv->desc.ld_tgt_count; i++) {
                int err;
@@ -2723,6 +3269,46 @@ static int lmv_quotacheck(struct obd_device *unused, struct obd_export *exp,
        return rc;
 }
 
+int lmv_update_lsm_md(struct obd_export *exp, struct lmv_stripe_md *lsm,
+                     struct mdt_body *body, ldlm_blocking_callback cb_blocking)
+{
+       return lmv_revalidate_slaves(exp, body, lsm, cb_blocking, 0);
+}
+
+int lmv_merge_attr(struct obd_export *exp, const struct lmv_stripe_md *lsm,
+                  struct cl_attr *attr)
+{
+       int i;
+
+       for (i = 0; i < lsm->lsm_md_stripe_count; i++) {
+               struct inode *inode = lsm->lsm_md_oinfo[i].lmo_root;
+
+               CDEBUG(D_INFO, ""DFID" size %llu, nlink %u, atime %lu ctime %lu, mtime %lu.\n",
+                      PFID(&lsm->lsm_md_oinfo[i].lmo_fid),
+                      i_size_read(inode), inode->i_nlink,
+                      LTIME_S(inode->i_atime), LTIME_S(inode->i_ctime),
+                      LTIME_S(inode->i_mtime));
+
+               /* for slave stripe, it needs to subtract nlink for . and .. */
+               if (i)
+                       attr->cat_nlink += inode->i_nlink - 2;
+               else
+                       attr->cat_nlink = inode->i_nlink;
+
+               attr->cat_size += i_size_read(inode);
+
+               if (attr->cat_atime < LTIME_S(inode->i_atime))
+                       attr->cat_atime = LTIME_S(inode->i_atime);
+
+               if (attr->cat_ctime < LTIME_S(inode->i_ctime))
+                       attr->cat_ctime = LTIME_S(inode->i_ctime);
+
+               if (attr->cat_mtime < LTIME_S(inode->i_mtime))
+                       attr->cat_mtime = LTIME_S(inode->i_mtime);
+       }
+       return 0;
+}
+
 static struct obd_ops lmv_obd_ops = {
        .owner          = THIS_MODULE,
        .setup          = lmv_setup,
@@ -2746,7 +3332,6 @@ static struct obd_ops lmv_obd_ops = {
 static struct md_ops lmv_md_ops = {
        .getstatus              = lmv_getstatus,
        .null_inode             = lmv_null_inode,
-       .find_cbdata            = lmv_find_cbdata,
        .close                  = lmv_close,
        .create                 = lmv_create,
        .done_writing           = lmv_done_writing,
@@ -2760,7 +3345,7 @@ static struct md_ops lmv_md_ops = {
        .setattr                = lmv_setattr,
        .setxattr               = lmv_setxattr,
        .sync                   = lmv_sync,
-       .readpage               = lmv_readpage,
+       .read_page              = lmv_read_page,
        .unlink                 = lmv_unlink,
        .init_ea_size           = lmv_init_ea_size,
        .cancel_unused          = lmv_cancel_unused,
@@ -2768,10 +3353,13 @@ static struct md_ops lmv_md_ops = {
        .lock_match             = lmv_lock_match,
        .get_lustre_md          = lmv_get_lustre_md,
        .free_lustre_md         = lmv_free_lustre_md,
+       .update_lsm_md          = lmv_update_lsm_md,
+       .merge_attr             = lmv_merge_attr,
        .set_open_replay_data   = lmv_set_open_replay_data,
        .clear_open_replay_data = lmv_clear_open_replay_data,
        .intent_getattr_async   = lmv_intent_getattr_async,
-       .revalidate_lock        = lmv_revalidate_lock
+       .revalidate_lock        = lmv_revalidate_lock,
+       .get_fid_from_lsm       = lmv_get_fid_from_lsm,
 };
 
 static int __init lmv_init(void)
index c29c361eb0cc3da702f26987bcc138d5ad0c8ea2..d2316c0a96514904c0f09ac0afc265b9ec523707 100644 (file)
@@ -202,7 +202,7 @@ static struct lprocfs_vars lprocfs_lmv_obd_vars[] = {
        { NULL }
 };
 
-struct file_operations lmv_proc_target_fops = {
+const struct file_operations lmv_proc_target_fops = {
        .owner          = THIS_MODULE,
        .open            = lmv_target_seq_open,
        .read            = seq_read,
index 9740568d9521dc97b370e3f218ca461f61092a64..43d1a3ff878e808c33e6bb3cd2b7d46360a8f2c2 100644 (file)
@@ -289,8 +289,8 @@ struct lov_lock {
 };
 
 struct lov_page {
-       struct cl_page_slice lps_cl;
-       int               lps_invalid;
+       struct cl_page_slice    lps_cl;
+       unsigned int            lps_stripe; /* stripe index */
 };
 
 /*
index 5053dead17bb5da8d0f81d00259f90c248bbd75b..d88b81daf692cdd92f294d1ea2c6021b31d4c227 100644 (file)
@@ -66,7 +66,8 @@ static int lsm_lmm_verify_common(struct lov_mds_md *lmm, int lmm_bytes,
        }
 
        if (lmm->lmm_stripe_size == 0 ||
-           (le32_to_cpu(lmm->lmm_stripe_size)&(LOV_MIN_STRIPE_SIZE-1)) != 0) {
+           (le32_to_cpu(lmm->lmm_stripe_size) &
+            (LOV_MIN_STRIPE_SIZE - 1)) != 0) {
                CERROR("bad stripe size %u\n",
                       le32_to_cpu(lmm->lmm_stripe_size));
                lov_dump_lmm_common(D_WARNING, lmm);
index 84032a51025423aa78ee2786e307b2e3c183ea49..5d47a5ab97f7042e9057846f8709d03fb9b12075 100644 (file)
@@ -244,14 +244,12 @@ void lov_sub_put(struct lov_io_sub *sub)
 
 int lov_page_stripe(const struct cl_page *page)
 {
-       struct lovsub_object *subobj;
        const struct cl_page_slice *slice;
 
-       slice = cl_page_at(page, &lovsub_device_type);
+       slice = cl_page_at(page, &lov_device_type);
        LASSERT(slice->cpl_obj);
 
-       subobj = cl2lovsub(slice->cpl_obj);
-       return subobj->lso_index;
+       return cl2lov_page(slice)->lps_stripe;
 }
 
 struct lov_io_sub *lov_page_subio(const struct lu_env *env, struct lov_io *lio,
@@ -298,8 +296,8 @@ static int lov_io_subio_init(const struct lu_env *env, struct lov_io *lio,
        return result;
 }
 
-static void lov_io_slice_init(struct lov_io *lio,
-                             struct lov_object *obj, struct cl_io *io)
+static int lov_io_slice_init(struct lov_io *lio, struct lov_object *obj,
+                            struct cl_io *io)
 {
        io->ci_result = 0;
        lio->lis_object = obj;
@@ -314,6 +312,15 @@ static void lov_io_slice_init(struct lov_io *lio,
                lio->lis_io_endpos = lio->lis_endpos;
                if (cl_io_is_append(io)) {
                        LASSERT(io->ci_type == CIT_WRITE);
+
+                       /*
+                        * If there is LOV EA hole, then we may cannot locate
+                        * the current file-tail exactly.
+                        */
+                       if (unlikely(obj->lo_lsm->lsm_pattern &
+                                    LOV_PATTERN_F_HOLE))
+                               return -EIO;
+
                        lio->lis_pos = 0;
                        lio->lis_endpos = OBD_OBJECT_EOF;
                }
@@ -349,6 +356,7 @@ static void lov_io_slice_init(struct lov_io *lio,
        default:
                LBUG();
        }
+       return 0;
 }
 
 static void lov_io_fini(const struct lu_env *env, const struct cl_io_slice *ios)
@@ -870,7 +878,7 @@ int lov_io_init_raid0(const struct lu_env *env, struct cl_object *obj,
        struct lov_object   *lov = cl2lov(obj);
 
        INIT_LIST_HEAD(&lio->lis_active);
-       lov_io_slice_init(lio, lov, io);
+       io->ci_result = lov_io_slice_init(lio, lov, io);
        if (io->ci_result == 0) {
                io->ci_result = lov_io_subio_init(env, lio, io);
                if (io->ci_result == 0) {
index 9b92d5522edb6b5e32af0e8b91810942f309f840..265be0893b9b20489500305ca42b8ea3ccdf861a 100644 (file)
@@ -41,6 +41,7 @@
 #include "../../include/linux/libcfs/libcfs.h"
 
 #include "../include/obd_support.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_lib.h"
 #include "../include/lustre_net.h"
 #include "../include/lustre/lustre_idl.h"
@@ -940,7 +941,7 @@ int lov_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg,
        }
        case LCFG_PARAM: {
                struct lprocfs_static_vars lvars = { NULL };
-               struct lov_desc *desc = &(obd->u.lov.desc);
+               struct lov_desc *desc = &obd->u.lov.desc;
 
                if (!desc) {
                        rc = -EINVAL;
@@ -1267,46 +1268,6 @@ static int lov_setattr_async(struct obd_export *exp, struct obd_info *oinfo,
        return 0;
 }
 
-/* find any ldlm lock of the inode in lov
- * return 0    not find
- *     1    find one
- *      < 0    error
- */
-static int lov_find_cbdata(struct obd_export *exp,
-                          struct lov_stripe_md *lsm, ldlm_iterator_t it,
-                          void *data)
-{
-       struct lov_obd *lov;
-       int rc = 0, i;
-
-       ASSERT_LSM_MAGIC(lsm);
-
-       if (!exp || !exp->exp_obd)
-               return -ENODEV;
-
-       lov = &exp->exp_obd->u.lov;
-       for (i = 0; i < lsm->lsm_stripe_count; i++) {
-               struct lov_stripe_md submd;
-               struct lov_oinfo *loi = lsm->lsm_oinfo[i];
-
-               if (lov_oinfo_is_dummy(loi))
-                       continue;
-
-               if (!lov->lov_tgts[loi->loi_ost_idx]) {
-                       CDEBUG(D_HA, "lov idx %d NULL\n", loi->loi_ost_idx);
-                       continue;
-               }
-
-               submd.lsm_oi = loi->loi_oi;
-               submd.lsm_stripe_count = 0;
-               rc = obd_find_cbdata(lov->lov_tgts[loi->loi_ost_idx]->ltd_exp,
-                                    &submd, it, data);
-               if (rc != 0)
-                       return rc;
-       }
-       return rc;
-}
-
 int lov_statfs_interpret(struct ptlrpc_request_set *rqset, void *data, int rc)
 {
        struct lov_request_set *lovset = (struct lov_request_set *)data;
@@ -1460,7 +1421,7 @@ static int lov_iocontrol(unsigned int cmd, struct obd_export *exp, int len,
                }
 
                desc = (struct lov_desc *)data->ioc_inlbuf1;
-               memcpy(desc, &(lov->desc), sizeof(*desc));
+               memcpy(desc, &lov->desc, sizeof(*desc));
 
                uuidp = (struct obd_uuid *)data->ioc_inlbuf2;
                genp = (__u32 *)data->ioc_inlbuf3;
@@ -1916,8 +1877,9 @@ inactive_tgt:
                                break;
                        }
 
-                       len_mapped_single_call = lcl_fm_ext[ext_count-1].fe_logical -
-                                 lun_start + lcl_fm_ext[ext_count - 1].fe_length;
+                       len_mapped_single_call =
+                               lcl_fm_ext[ext_count - 1].fe_logical -
+                               lun_start + lcl_fm_ext[ext_count - 1].fe_length;
 
                        /* Have we finished mapping on this device? */
                        if (req_fm_len <= len_mapped_single_call)
@@ -1926,14 +1888,15 @@ inactive_tgt:
                        /* Clear the EXTENT_LAST flag which can be present on
                         * last extent
                         */
-                       if (lcl_fm_ext[ext_count-1].fe_flags & FIEMAP_EXTENT_LAST)
+                       if (lcl_fm_ext[ext_count - 1].fe_flags &
+                           FIEMAP_EXTENT_LAST)
                                lcl_fm_ext[ext_count - 1].fe_flags &=
                                                            ~FIEMAP_EXTENT_LAST;
 
                        curr_loc = lov_stripe_size(lsm,
-                                          lcl_fm_ext[ext_count - 1].fe_logical+
-                                          lcl_fm_ext[ext_count - 1].fe_length,
-                                          cur_stripe);
+                                       lcl_fm_ext[ext_count - 1].fe_logical +
+                                       lcl_fm_ext[ext_count - 1].fe_length,
+                                       cur_stripe);
                        if (curr_loc >= fm_key->oa.o_size)
                                ost_eof = 1;
 
@@ -2159,8 +2122,8 @@ static int lov_set_info_async(const struct lu_env *env, struct obd_export *exp,
                                                 &mgi->group, set);
                } else if (next_id) {
                        err = obd_set_info_async(env, tgt->ltd_exp,
-                                        keylen, key, vallen,
-                                        ((struct obd_id_info *)val)->data, set);
+                                                keylen, key, vallen,
+                                       ((struct obd_id_info *)val)->data, set);
                } else {
                        /* Only want a specific OSC */
                        if (check_uuid &&
@@ -2323,7 +2286,6 @@ static struct obd_ops lov_obd_ops = {
        .getattr_async  = lov_getattr_async,
        .setattr_async  = lov_setattr_async,
        .adjust_kms     = lov_adjust_kms,
-       .find_cbdata    = lov_find_cbdata,
        .iocontrol      = lov_iocontrol,
        .get_info       = lov_get_info,
        .set_info_async = lov_set_info_async,
index f9621b0fd469ea2d9a13642eada7618d406d33f2..2a52d0c527990925d724e8074fda65a2ad822621 100644 (file)
@@ -224,6 +224,7 @@ static int lov_init_raid0(const struct lu_env *env,
 
        LASSERT(!lov->lo_lsm);
        lov->lo_lsm = lsm_addref(lsm);
+       lov->lo_layout_invalid = true;
        r0->lo_nr  = lsm->lsm_stripe_count;
        LASSERT(r0->lo_nr <= lov_targets_nr(dev));
 
index c17026f14896ba5438951ab2429958123b978b67..00bfabad78eb42e41d2b4569268a74ecb33d5e5b 100644 (file)
@@ -65,7 +65,9 @@ static int lov_raid0_page_is_under_lock(const struct lu_env *env,
        pgoff_t index = *max_index;
        unsigned int pps; /* pages per stripe */
 
-       CDEBUG(D_READA, "*max_index = %lu, nr = %d\n", index, r0->lo_nr);
+       CDEBUG(D_READA, DFID "*max_index = %lu, nr = %d\n",
+              PFID(lu_object_fid(lov2lu(loo))), index, r0->lo_nr);
+
        if (index == 0) /* the page is not covered by any lock */
                return 0;
 
@@ -80,7 +82,12 @@ static int lov_raid0_page_is_under_lock(const struct lu_env *env,
 
        /* calculate the end of current stripe */
        pps = loo->lo_lsm->lsm_stripe_size >> PAGE_SHIFT;
-       index = ((slice->cpl_index + pps) & ~(pps - 1)) - 1;
+       index = slice->cpl_index + pps - slice->cpl_index % pps - 1;
+
+       CDEBUG(D_READA, DFID "*max_index = %lu, index = %lu, pps = %u, stripe_size = %u, stripe no = %u, page index = %lu\n",
+              PFID(lu_object_fid(lov2lu(loo))), *max_index, index, pps,
+              loo->lo_lsm->lsm_stripe_size, lov_page_stripe(slice->cpl_page),
+              slice->cpl_index);
 
        /* never exceed the end of the stripe */
        *max_index = min_t(pgoff_t, *max_index, index);
@@ -122,6 +129,7 @@ int lov_page_init_raid0(const struct lu_env *env, struct cl_object *obj,
        rc = lov_stripe_offset(loo->lo_lsm, offset, stripe, &suboff);
        LASSERT(rc == 0);
 
+       lpg->lps_stripe = stripe;
        cl_page_slice_add(page, &lpg->lps_cl, obj, index, &lov_raid0_page_ops);
 
        sub = lov_sub_get(env, lio, stripe);
index 4c2d21729589c323263d892530d5b93948b4c179..f8c8a361ef79280f9ba94c5ba5eef56417a08ff2 100644 (file)
@@ -61,7 +61,7 @@ void lov_pool_putref(struct pool_desc *pool)
                LASSERT(hlist_unhashed(&pool->pool_hash));
                LASSERT(list_empty(&pool->pool_list));
                LASSERT(!pool->pool_debugfs_entry);
-               lov_ost_pool_free(&(pool->pool_obds));
+               lov_ost_pool_free(&pool->pool_obds);
                kfree(pool);
        }
 }
@@ -92,7 +92,7 @@ static __u32 pool_hashfn(struct cfs_hash *hash_body, const void *key, unsigned m
        for (i = 0; i < LOV_MAXPOOLNAME; i++) {
                if (poolname[i] == '\0')
                        break;
-               result = (result << 4)^(result >> 28) ^  poolname[i];
+               result = (result << 4) ^ (result >> 28) ^  poolname[i];
        }
        return (result % mask);
 }
@@ -260,7 +260,7 @@ static int pool_proc_show(struct seq_file *s, void *v)
        tgt = pool_tgt(iter->pool, iter->idx);
        up_read(&pool_tgt_rw_sem(iter->pool));
        if (tgt)
-               seq_printf(s, "%s\n", obd_uuid2str(&(tgt->ltd_uuid)));
+               seq_printf(s, "%s\n", obd_uuid2str(&tgt->ltd_uuid));
 
        return 0;
 }
@@ -400,7 +400,7 @@ int lov_pool_new(struct obd_device *obd, char *poolname)
        struct pool_desc *new_pool;
        int rc;
 
-       lov = &(obd->u.lov);
+       lov = &obd->u.lov;
 
        if (strlen(poolname) > LOV_MAXPOOLNAME)
                return -ENAMETOOLONG;
@@ -471,7 +471,7 @@ int lov_pool_del(struct obd_device *obd, char *poolname)
        struct lov_obd *lov;
        struct pool_desc *pool;
 
-       lov = &(obd->u.lov);
+       lov = &obd->u.lov;
 
        /* lookup and kill hash reference */
        pool = cfs_hash_del_key(lov->lov_pools_hash_body, poolname);
@@ -503,7 +503,7 @@ int lov_pool_add(struct obd_device *obd, char *poolname, char *ostname)
        unsigned int lov_idx;
        int rc;
 
-       lov = &(obd->u.lov);
+       lov = &obd->u.lov;
 
        pool = cfs_hash_lookup(lov->lov_pools_hash_body, poolname);
        if (!pool)
@@ -517,7 +517,7 @@ int lov_pool_add(struct obd_device *obd, char *poolname, char *ostname)
                if (!lov->lov_tgts[lov_idx])
                        continue;
                if (obd_uuid_equals(&ost_uuid,
-                                   &(lov->lov_tgts[lov_idx]->ltd_uuid)))
+                                   &lov->lov_tgts[lov_idx]->ltd_uuid))
                        break;
        }
        /* test if ost found in lov */
@@ -547,7 +547,7 @@ int lov_pool_remove(struct obd_device *obd, char *poolname, char *ostname)
        unsigned int lov_idx;
        int rc = 0;
 
-       lov = &(obd->u.lov);
+       lov = &obd->u.lov;
 
        pool = cfs_hash_lookup(lov->lov_pools_hash_body, poolname);
        if (!pool)
@@ -562,7 +562,7 @@ int lov_pool_remove(struct obd_device *obd, char *poolname, char *ostname)
                        continue;
 
                if (obd_uuid_equals(&ost_uuid,
-                                   &(lov->lov_tgts[lov_idx]->ltd_uuid)))
+                                   &lov->lov_tgts[lov_idx]->ltd_uuid))
                        break;
        }
 
index 98d15fb247bc48748d3391aa2b0da8dba696a1a2..fca9450de57c2a8db61520b463374d621aab3633 100644 (file)
@@ -43,11 +43,10 @@ static ssize_t max_rpcs_in_flight_show(struct kobject *kobj,
        int len;
        struct obd_device *dev = container_of(kobj, struct obd_device,
                                              obd_kobj);
-       struct client_obd *cli = &dev->u.cli;
+       __u32 max;
 
-       spin_lock(&cli->cl_loi_list_lock);
-       len = sprintf(buf, "%u\n", cli->cl_max_rpcs_in_flight);
-       spin_unlock(&cli->cl_loi_list_lock);
+       max = obd_get_max_rpcs_in_flight(&dev->u.cli);
+       len = sprintf(buf, "%u\n", max);
 
        return len;
 }
@@ -59,7 +58,6 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj,
 {
        struct obd_device *dev = container_of(kobj, struct obd_device,
                                              obd_kobj);
-       struct client_obd *cli = &dev->u.cli;
        int rc;
        unsigned long val;
 
@@ -67,12 +65,9 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj,
        if (rc)
                return rc;
 
-       if (val < 1 || val > MDC_MAX_RIF_MAX)
-               return -ERANGE;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       cli->cl_max_rpcs_in_flight = val;
-       spin_unlock(&cli->cl_loi_list_lock);
+       rc = obd_set_max_rpcs_in_flight(&dev->u.cli, val);
+       if (rc)
+               count = rc;
 
        return count;
 }
index 58f2841cabe4c5ff75ba15d53c727056927a7ea5..c10441d1eae8c5355117cfa8f2249fb4cca8807f 100644 (file)
 #define _MDC_INTERNAL_H
 
 #include "../include/lustre_mdc.h"
-#include "../include/lustre_mds.h"
 
 void lprocfs_mdc_init_vars(struct lprocfs_static_vars *lvars);
 
 void mdc_pack_body(struct ptlrpc_request *req, const struct lu_fid *fid,
                   __u64 valid, int ea_size, __u32 suppgid, int flags);
-void mdc_is_subdir_pack(struct ptlrpc_request *req, const struct lu_fid *pfid,
-                       const struct lu_fid *cfid, int flags);
 void mdc_swap_layouts_pack(struct ptlrpc_request *req,
                           struct md_op_data *op_data);
 void mdc_readdir_pack(struct ptlrpc_request *req, __u64 pgoff, __u32 size,
@@ -61,36 +58,32 @@ void mdc_link_pack(struct ptlrpc_request *req, struct md_op_data *op_data);
 void mdc_rename_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
                     const char *old, int oldlen, const char *new, int newlen);
 void mdc_close_pack(struct ptlrpc_request *req, struct md_op_data *op_data);
-int mdc_enter_request(struct client_obd *cli);
-void mdc_exit_request(struct client_obd *cli);
 
 /* mdc/mdc_locks.c */
 int mdc_set_lock_data(struct obd_export *exp,
-                     __u64 *lockh, void *data, __u64 *bits);
+                     const struct lustre_handle *lockh,
+                     void *data, __u64 *bits);
 
 int mdc_null_inode(struct obd_export *exp, const struct lu_fid *fid);
 
-int mdc_find_cbdata(struct obd_export *exp, const struct lu_fid *fid,
-                   ldlm_iterator_t it, void *data);
-
 int mdc_intent_lock(struct obd_export *exp,
-                   struct md_op_data *,
-                   void *lmm, int lmmsize,
-                   struct lookup_intent *, int,
+                   struct md_op_data *op_data,
+                   struct lookup_intent *it,
                    struct ptlrpc_request **reqp,
                    ldlm_blocking_callback cb_blocking,
                    __u64 extra_lock_flags);
+
 int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
+               const ldlm_policy_data_t *policy,
                struct lookup_intent *it, struct md_op_data *op_data,
-               struct lustre_handle *lockh, void *lmm, int lmmsize,
-               struct ptlrpc_request **req, __u64 extra_lock_flags);
+               struct lustre_handle *lockh, __u64 extra_lock_flags);
 
 int mdc_resource_get_unused(struct obd_export *exp, const struct lu_fid *fid,
                            struct list_head *cancels, enum ldlm_mode  mode,
                            __u64 bits);
 /* mdc/mdc_request.c */
-int mdc_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
-                 struct md_op_data *op_data);
+int mdc_fid_alloc(const struct lu_env *env, struct obd_export *exp,
+                 struct lu_fid *fid, struct md_op_data *op_data);
 struct obd_client_handle;
 
 int mdc_set_open_replay_data(struct obd_export *exp,
@@ -138,4 +131,12 @@ static inline int mdc_prep_elc_req(struct obd_export *exp,
                                 count);
 }
 
+static inline unsigned long hash_x_index(__u64 hash, int hash64)
+{
+       if (BITS_PER_LONG == 32 && hash64)
+               hash >>= 32;
+       /* save hash 0 with hash 1 */
+       return ~0UL - (hash + !hash);
+}
+
 #endif
index 143bd7628572f87a0a6c62589bdd1188b1a7fef3..ecfe13eec5330fb9502d789705a7353a27012178 100644 (file)
 
 static void __mdc_pack_body(struct mdt_body *b, __u32 suppgid)
 {
-       b->suppgid = suppgid;
-       b->uid = from_kuid(&init_user_ns, current_uid());
-       b->gid = from_kgid(&init_user_ns, current_gid());
-       b->fsuid = from_kuid(&init_user_ns, current_fsuid());
-       b->fsgid = from_kgid(&init_user_ns, current_fsgid());
-       b->capability = cfs_curproc_cap_pack();
-}
-
-void mdc_is_subdir_pack(struct ptlrpc_request *req, const struct lu_fid *pfid,
-                       const struct lu_fid *cfid, int flags)
-{
-       struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
-                                                   &RMF_MDT_BODY);
-
-       if (pfid) {
-               b->fid1 = *pfid;
-               b->valid = OBD_MD_FLID;
-       }
-       if (cfid)
-               b->fid2 = *cfid;
-       b->flags = flags;
+       b->mbo_suppgid = suppgid;
+       b->mbo_uid = from_kuid(&init_user_ns, current_uid());
+       b->mbo_gid = from_kgid(&init_user_ns, current_gid());
+       b->mbo_fsuid = from_kuid(&init_user_ns, current_fsuid());
+       b->mbo_fsgid = from_kgid(&init_user_ns, current_fsgid());
+       b->mbo_capability = cfs_curproc_cap_pack();
 }
 
 void mdc_swap_layouts_pack(struct ptlrpc_request *req,
@@ -67,9 +52,9 @@ void mdc_swap_layouts_pack(struct ptlrpc_request *req,
                                                    &RMF_MDT_BODY);
 
        __mdc_pack_body(b, op_data->op_suppgids[0]);
-       b->fid1 = op_data->op_fid1;
-       b->fid2 = op_data->op_fid2;
-       b->valid |= OBD_MD_FLID;
+       b->mbo_fid1 = op_data->op_fid1;
+       b->mbo_fid2 = op_data->op_fid2;
+       b->mbo_valid |= OBD_MD_FLID;
 }
 
 void mdc_pack_body(struct ptlrpc_request *req, const struct lu_fid *fid,
@@ -77,27 +62,58 @@ void mdc_pack_body(struct ptlrpc_request *req, const struct lu_fid *fid,
 {
        struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
                                                    &RMF_MDT_BODY);
-       b->valid = valid;
-       b->eadatasize = ea_size;
-       b->flags = flags;
+       b->mbo_valid = valid;
+       b->mbo_eadatasize = ea_size;
+       b->mbo_flags = flags;
        __mdc_pack_body(b, suppgid);
        if (fid) {
-               b->fid1 = *fid;
-               b->valid |= OBD_MD_FLID;
+               b->mbo_fid1 = *fid;
+               b->mbo_valid |= OBD_MD_FLID;
        }
 }
 
+/**
+ * Pack a name (path component) into a request
+ *
+ * \param[in] req      request
+ * \param[in] field    request field (usually RMF_NAME)
+ * \param[in] name     path component
+ * \param[in] name_len length of path component
+ *
+ * \a field must be present in \a req and of size \a name_len + 1.
+ *
+ * \a name must be '\0' terminated of length \a name_len and represent
+ * a single path component (not contain '/').
+ */
+static void mdc_pack_name(struct ptlrpc_request *req,
+                         const struct req_msg_field *field,
+                         const char *name, size_t name_len)
+{
+       size_t buf_size;
+       size_t cpy_len;
+       char *buf;
+
+       buf = req_capsule_client_get(&req->rq_pill, field);
+       buf_size = req_capsule_get_size(&req->rq_pill, field, RCL_CLIENT);
+
+       LASSERT(name && name_len && buf && buf_size == name_len + 1);
+
+       cpy_len = strlcpy(buf, name, buf_size);
+
+       LASSERT(cpy_len == name_len && lu_name_is_valid_2(buf, cpy_len));
+}
+
 void mdc_readdir_pack(struct ptlrpc_request *req, __u64 pgoff,
                      __u32 size, const struct lu_fid *fid)
 {
        struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
                                                    &RMF_MDT_BODY);
-       b->fid1 = *fid;
-       b->valid |= OBD_MD_FLID;
-       b->size = pgoff;                       /* !! */
-       b->nlink = size;                        /* !! */
+       b->mbo_fid1 = *fid;
+       b->mbo_valid |= OBD_MD_FLID;
+       b->mbo_size = pgoff;                   /* !! */
+       b->mbo_nlink = size;                    /* !! */
        __mdc_pack_body(b, -1);
-       b->mode = LUDA_FID | LUDA_TYPE;
+       b->mbo_mode = LUDA_FID | LUDA_TYPE;
 }
 
 /* packing of MDS records */
@@ -130,9 +146,7 @@ void mdc_create_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
        rec->cr_bias     = op_data->op_bias;
        rec->cr_umask    = current_umask();
 
-       tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
-       LOGL0(op_data->op_name, op_data->op_namelen, tmp);
-
+       mdc_pack_name(req, &RMF_NAME, op_data->op_name, op_data->op_namelen);
        if (data) {
                tmp = req_capsule_client_get(&req->rq_pill, &RMF_EADATA);
                memcpy(tmp, data, datalen);
@@ -142,10 +156,7 @@ void mdc_create_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
 static __u64 mds_pack_open_flags(__u64 flags, __u32 mode)
 {
        __u64 cr_flags = (flags & (FMODE_READ | FMODE_WRITE |
-                                  MDS_OPEN_HAS_EA | MDS_OPEN_HAS_OBJS |
-                                  MDS_OPEN_OWNEROVERRIDE | MDS_OPEN_LOCK |
-                                  MDS_OPEN_BY_FID | MDS_OPEN_LEASE |
-                                  MDS_OPEN_RELEASE));
+                                  MDS_OPEN_FL_INTERNAL));
        if (flags & O_CREAT)
                cr_flags |= MDS_OPEN_CREAT;
        if (flags & O_EXCL)
@@ -200,8 +211,9 @@ void mdc_open_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
        rec->cr_old_handle = op_data->op_handle;
 
        if (op_data->op_name) {
-               tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
-               LOGL0(op_data->op_name, op_data->op_namelen, tmp);
+               mdc_pack_name(req, &RMF_NAME, op_data->op_name,
+                             op_data->op_namelen);
+
                if (op_data->op_bias & MDS_CREATE_VOLATILE)
                        cr_flags |= MDS_OPEN_VOLATILE;
        }
@@ -334,7 +346,6 @@ void mdc_setattr_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
 void mdc_unlink_pack(struct ptlrpc_request *req, struct md_op_data *op_data)
 {
        struct mdt_rec_unlink *rec;
-       char *tmp;
 
        CLASSERT(sizeof(struct mdt_rec_reint) == sizeof(struct mdt_rec_unlink));
        rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT);
@@ -352,15 +363,12 @@ void mdc_unlink_pack(struct ptlrpc_request *req, struct md_op_data *op_data)
        rec->ul_time     = op_data->op_mod_time;
        rec->ul_bias     = op_data->op_bias;
 
-       tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
-       LASSERT(tmp);
-       LOGL0(op_data->op_name, op_data->op_namelen, tmp);
+       mdc_pack_name(req, &RMF_NAME, op_data->op_name, op_data->op_namelen);
 }
 
 void mdc_link_pack(struct ptlrpc_request *req, struct md_op_data *op_data)
 {
        struct mdt_rec_link *rec;
-       char *tmp;
 
        CLASSERT(sizeof(struct mdt_rec_reint) == sizeof(struct mdt_rec_link));
        rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT);
@@ -376,20 +384,20 @@ void mdc_link_pack(struct ptlrpc_request *req, struct md_op_data *op_data)
        rec->lk_time     = op_data->op_mod_time;
        rec->lk_bias     = op_data->op_bias;
 
-       tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
-       LOGL0(op_data->op_name, op_data->op_namelen, tmp);
+       mdc_pack_name(req, &RMF_NAME, op_data->op_name, op_data->op_namelen);
 }
 
 void mdc_rename_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
                     const char *old, int oldlen, const char *new, int newlen)
 {
        struct mdt_rec_rename *rec;
-       char *tmp;
 
        CLASSERT(sizeof(struct mdt_rec_reint) == sizeof(struct mdt_rec_rename));
        rec = req_capsule_client_get(&req->rq_pill, &RMF_REC_REINT);
 
        /* XXX do something about time, uid, gid */
+       rec->rn_opcode   = op_data->op_cli_flags & CLI_MIGRATE ?
+                               REINT_MIGRATE : REINT_RENAME;
        rec->rn_opcode   = REINT_RENAME;
        rec->rn_fsuid    = op_data->op_fsuid;
        rec->rn_fsgid    = op_data->op_fsgid;
@@ -402,13 +410,10 @@ void mdc_rename_pack(struct ptlrpc_request *req, struct md_op_data *op_data,
        rec->rn_mode     = op_data->op_mode;
        rec->rn_bias     = op_data->op_bias;
 
-       tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
-       LOGL0(old, oldlen, tmp);
+       mdc_pack_name(req, &RMF_NAME, old, oldlen);
 
-       if (new) {
-               tmp = req_capsule_client_get(&req->rq_pill, &RMF_SYMTGT);
-               LOGL0(new, newlen, tmp);
-       }
+       if (new)
+               mdc_pack_name(req, &RMF_SYMTGT, new, newlen);
 }
 
 void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags,
@@ -417,24 +422,22 @@ void mdc_getattr_pack(struct ptlrpc_request *req, __u64 valid, int flags,
        struct mdt_body *b = req_capsule_client_get(&req->rq_pill,
                                                    &RMF_MDT_BODY);
 
-       b->valid = valid;
+       b->mbo_valid = valid;
        if (op_data->op_bias & MDS_CHECK_SPLIT)
-               b->valid |= OBD_MD_FLCKSPLIT;
+               b->mbo_valid |= OBD_MD_FLCKSPLIT;
        if (op_data->op_bias & MDS_CROSS_REF)
-               b->valid |= OBD_MD_FLCROSSREF;
-       b->eadatasize = ea_size;
-       b->flags = flags;
+               b->mbo_valid |= OBD_MD_FLCROSSREF;
+       b->mbo_eadatasize = ea_size;
+       b->mbo_flags = flags;
        __mdc_pack_body(b, op_data->op_suppgids[0]);
 
-       b->fid1 = op_data->op_fid1;
-       b->fid2 = op_data->op_fid2;
-       b->valid |= OBD_MD_FLID;
-
-       if (op_data->op_name) {
-               char *tmp = req_capsule_client_get(&req->rq_pill, &RMF_NAME);
+       b->mbo_fid1 = op_data->op_fid1;
+       b->mbo_fid2 = op_data->op_fid2;
+       b->mbo_valid |= OBD_MD_FLID;
 
-               LOGL0(op_data->op_name, op_data->op_namelen, tmp);
-       }
+       if (op_data->op_name)
+               mdc_pack_name(req, &RMF_NAME, op_data->op_name,
+                             op_data->op_namelen);
 }
 
 static void mdc_hsm_release_pack(struct ptlrpc_request *req,
@@ -482,67 +485,3 @@ void mdc_close_pack(struct ptlrpc_request *req, struct md_op_data *op_data)
        mdc_ioepoch_pack(epoch, op_data);
        mdc_hsm_release_pack(req, op_data);
 }
-
-static int mdc_req_avail(struct client_obd *cli, struct mdc_cache_waiter *mcw)
-{
-       int rc;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       rc = list_empty(&mcw->mcw_entry);
-       spin_unlock(&cli->cl_loi_list_lock);
-       return rc;
-};
-
-/* We record requests in flight in cli->cl_r_in_flight here.
- * There is only one write rpc possible in mdc anyway. If this to change
- * in the future - the code may need to be revisited.
- */
-int mdc_enter_request(struct client_obd *cli)
-{
-       int rc = 0;
-       struct mdc_cache_waiter mcw;
-       struct l_wait_info lwi = LWI_INTR(LWI_ON_SIGNAL_NOOP, NULL);
-
-       spin_lock(&cli->cl_loi_list_lock);
-       if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-               list_add_tail(&mcw.mcw_entry, &cli->cl_cache_waiters);
-               init_waitqueue_head(&mcw.mcw_waitq);
-               spin_unlock(&cli->cl_loi_list_lock);
-               rc = l_wait_event(mcw.mcw_waitq, mdc_req_avail(cli, &mcw),
-                                 &lwi);
-               if (rc) {
-                       spin_lock(&cli->cl_loi_list_lock);
-                       if (list_empty(&mcw.mcw_entry))
-                               cli->cl_r_in_flight--;
-                       list_del_init(&mcw.mcw_entry);
-                       spin_unlock(&cli->cl_loi_list_lock);
-               }
-       } else {
-               cli->cl_r_in_flight++;
-               spin_unlock(&cli->cl_loi_list_lock);
-       }
-       return rc;
-}
-
-void mdc_exit_request(struct client_obd *cli)
-{
-       struct list_head *l, *tmp;
-       struct mdc_cache_waiter *mcw;
-
-       spin_lock(&cli->cl_loi_list_lock);
-       cli->cl_r_in_flight--;
-       list_for_each_safe(l, tmp, &cli->cl_cache_waiters) {
-               if (cli->cl_r_in_flight >= cli->cl_max_rpcs_in_flight) {
-                       /* No free request slots anymore */
-                       break;
-               }
-
-               mcw = list_entry(l, struct mdc_cache_waiter, mcw_entry);
-               list_del_init(&mcw->mcw_entry);
-               cli->cl_r_in_flight++;
-               wake_up(&mcw->mcw_waitq);
-       }
-       /* Empty waiting list? Decrease reqs in-flight number */
-
-       spin_unlock(&cli->cl_loi_list_lock);
-}
index f48b584233071bc17d282ab9bc5d6afeb8bc7087..54de46bee885aced446af315203cb9adaadc0c43 100644 (file)
@@ -93,8 +93,8 @@ int it_open_error(int phase, struct lookup_intent *it)
 EXPORT_SYMBOL(it_open_error);
 
 /* this must be called on a lockh that is known to have a referenced lock */
-int mdc_set_lock_data(struct obd_export *exp, __u64 *lockh, void *data,
-                     __u64 *bits)
+int mdc_set_lock_data(struct obd_export *exp, const struct lustre_handle *lockh,
+                     void *data, __u64 *bits)
 {
        struct ldlm_lock *lock;
        struct inode *new_inode = data;
@@ -102,10 +102,10 @@ int mdc_set_lock_data(struct obd_export *exp, __u64 *lockh, void *data,
        if (bits)
                *bits = 0;
 
-       if (!*lockh)
+       if (!lustre_handle_is_used(lockh))
                return 0;
 
-       lock = ldlm_handle2lock((struct lustre_handle *)lockh);
+       lock = ldlm_handle2lock(lockh);
 
        LASSERT(lock);
        lock_res_and_lock(lock);
@@ -174,7 +174,7 @@ int mdc_null_inode(struct obd_export *exp,
        fid_build_reg_res_name(fid, &res_id);
 
        res = ldlm_resource_get(ns, NULL, &res_id, 0, 0);
-       if (!res)
+       if (IS_ERR(res))
                return 0;
 
        lock_res(res);
@@ -185,28 +185,6 @@ int mdc_null_inode(struct obd_export *exp,
        return 0;
 }
 
-/* find any ldlm lock of the inode in mdc
- * return 0    not find
- *     1    find one
- *      < 0    error
- */
-int mdc_find_cbdata(struct obd_export *exp,
-                   const struct lu_fid *fid,
-                   ldlm_iterator_t it, void *data)
-{
-       struct ldlm_res_id res_id;
-       int rc = 0;
-
-       fid_build_reg_res_name((struct lu_fid *)fid, &res_id);
-       rc = ldlm_resource_iterate(class_exp2obd(exp)->obd_namespace, &res_id,
-                                  it, data);
-       if (rc == LDLM_ITER_STOP)
-               return 1;
-       else if (rc == LDLM_ITER_CONTINUE)
-               return 0;
-       return rc;
-}
-
 static inline void mdc_clear_replay_flag(struct ptlrpc_request *req, int rc)
 {
        /* Don't hold error requests for replay. */
@@ -240,24 +218,24 @@ static void mdc_realloc_openmsg(struct ptlrpc_request *req,
 
        /* FIXME: remove this explicit offset. */
        rc = sptlrpc_cli_enlarge_reqbuf(req, DLM_INTENT_REC_OFF + 4,
-                                       body->eadatasize);
+                                       body->mbo_eadatasize);
        if (rc) {
                CERROR("Can't enlarge segment %d size to %d\n",
-                      DLM_INTENT_REC_OFF + 4, body->eadatasize);
-               body->valid &= ~OBD_MD_FLEASIZE;
-               body->eadatasize = 0;
+                      DLM_INTENT_REC_OFF + 4, body->mbo_eadatasize);
+               body->mbo_valid &= ~OBD_MD_FLEASIZE;
+               body->mbo_eadatasize = 0;
        }
 }
 
-static struct ptlrpc_request *mdc_intent_open_pack(struct obd_export *exp,
-                                                  struct lookup_intent *it,
-                                                  struct md_op_data *op_data,
-                                                  void *lmm, int lmmsize,
-                                                  void *cb_data)
+static struct ptlrpc_request *
+mdc_intent_open_pack(struct obd_export *exp, struct lookup_intent *it,
+                    struct md_op_data *op_data)
 {
        struct ptlrpc_request *req;
        struct obd_device     *obddev = class_exp2obd(exp);
        struct ldlm_intent    *lit;
+       const void *lmm = op_data->op_data;
+       int lmmsize = op_data->op_data_size;
        LIST_HEAD(cancels);
        int                 count = 0;
        int                 mode;
@@ -274,7 +252,7 @@ static struct ptlrpc_request *mdc_intent_open_pack(struct obd_export *exp,
                        else
                                mode = LCK_PR;
                } else {
-                       if (it->it_flags & (FMODE_WRITE|MDS_OPEN_TRUNC))
+                       if (it->it_flags & (FMODE_WRITE | MDS_OPEN_TRUNC))
                                mode = LCK_CW;
                        else if (it->it_flags & __FMODE_EXEC)
                                mode = LCK_PR;
@@ -325,6 +303,9 @@ static struct ptlrpc_request *mdc_intent_open_pack(struct obd_export *exp,
        mdc_open_pack(req, op_data, it->it_create_mode, 0, it->it_flags, lmm,
                      lmmsize);
 
+       req_capsule_set_size(&req->rq_pill, &RMF_MDT_MD, RCL_SERVER,
+                            obddev->u.cli.cl_max_mds_easize);
+
        ptlrpc_request_set_replen(req);
        return req;
 }
@@ -605,7 +586,7 @@ static int mdc_finish_enqueue(struct obd_export *exp,
                        mdc_set_open_replay_data(NULL, NULL, it);
                }
 
-               if ((body->valid & (OBD_MD_FLDIREA | OBD_MD_FLEASIZE)) != 0) {
+               if ((body->mbo_valid & (OBD_MD_FLDIREA | OBD_MD_FLEASIZE)) != 0) {
                        void *eadata;
 
                        mdc_update_max_ea_from_body(exp, body);
@@ -615,7 +596,7 @@ static int mdc_finish_enqueue(struct obd_export *exp,
                         * Eventually, obd_unpackmd() will check the contents.
                         */
                        eadata = req_capsule_server_sized_get(pill, &RMF_MDT_MD,
-                                                             body->eadatasize);
+                                                             body->mbo_eadatasize);
                        if (!eadata)
                                return -EPROTO;
 
@@ -623,7 +604,7 @@ static int mdc_finish_enqueue(struct obd_export *exp,
                         * lock
                         */
                        lvb_data = eadata;
-                       lvb_len = body->eadatasize;
+                       lvb_len = body->mbo_eadatasize;
 
                        /*
                         * We save the reply LOV EA in case we have to replay a
@@ -639,20 +620,20 @@ static int mdc_finish_enqueue(struct obd_export *exp,
 
                                if (req_capsule_get_size(pill, &RMF_EADATA,
                                                         RCL_CLIENT) <
-                                   body->eadatasize)
+                                   body->mbo_eadatasize)
                                        mdc_realloc_openmsg(req, body);
                                else
                                        req_capsule_shrink(pill, &RMF_EADATA,
-                                                          body->eadatasize,
+                                                          body->mbo_eadatasize,
                                                           RCL_CLIENT);
 
                                req_capsule_set_size(pill, &RMF_EADATA,
                                                     RCL_CLIENT,
-                                                    body->eadatasize);
+                                                    body->mbo_eadatasize);
 
                                lmm = req_capsule_client_get(pill, &RMF_EADATA);
                                if (lmm)
-                                       memcpy(lmm, eadata, body->eadatasize);
+                                       memcpy(lmm, eadata, body->mbo_eadatasize);
                        }
                }
        } else if (it->it_op & IT_LAYOUT) {
@@ -662,7 +643,8 @@ static int mdc_finish_enqueue(struct obd_export *exp,
                lvb_len = req_capsule_get_size(pill, &RMF_DLM_LVB, RCL_SERVER);
                if (lvb_len > 0) {
                        lvb_data = req_capsule_server_sized_get(pill,
-                                                       &RMF_DLM_LVB, lvb_len);
+                                                               &RMF_DLM_LVB,
+                                                               lvb_len);
                        if (!lvb_data)
                                return -EPROTO;
                }
@@ -705,9 +687,9 @@ static int mdc_finish_enqueue(struct obd_export *exp,
  * we don't know in advance the file type.
  */
 int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
+               const ldlm_policy_data_t *policy,
                struct lookup_intent *it, struct md_op_data *op_data,
-               struct lustre_handle *lockh, void *lmm, int lmmsize,
-               struct ptlrpc_request **reqp, u64 extra_lock_flags)
+               struct lustre_handle *lockh, u64 extra_lock_flags)
 {
        static const ldlm_policy_data_t lookup_policy = {
                .l_inodebits = { MDS_INODELOCK_LOOKUP }
@@ -721,9 +703,8 @@ int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
        static const ldlm_policy_data_t getxattr_policy = {
                .l_inodebits = { MDS_INODELOCK_XATTR }
        };
-       ldlm_policy_data_t const *policy = &lookup_policy;
        struct obd_device *obddev = class_exp2obd(exp);
-       struct ptlrpc_request *req;
+       struct ptlrpc_request *req = NULL;
        u64 flags, saved_flags = extra_lock_flags;
        struct ldlm_res_id res_id;
        int generation, resends = 0;
@@ -733,40 +714,32 @@ int mdc_enqueue(struct obd_export *exp, struct ldlm_enqueue_info *einfo,
 
        LASSERTF(!it || einfo->ei_type == LDLM_IBITS, "lock type %d\n",
                 einfo->ei_type);
-
        fid_build_reg_res_name(&op_data->op_fid1, &res_id);
 
        if (it) {
+               LASSERT(!policy);
+
                saved_flags |= LDLM_FL_HAS_INTENT;
-               if (it->it_op & (IT_UNLINK | IT_GETATTR | IT_READDIR))
+               if (it->it_op & (IT_OPEN | IT_UNLINK | IT_GETATTR | IT_READDIR))
                        policy = &update_policy;
                else if (it->it_op & IT_LAYOUT)
                        policy = &layout_policy;
                else if (it->it_op & (IT_GETXATTR | IT_SETXATTR))
                        policy = &getxattr_policy;
+               else
+                       policy = &lookup_policy;
        }
 
-       LASSERT(!reqp);
-
        generation = obddev->u.cli.cl_import->imp_generation;
 resend:
        flags = saved_flags;
        if (!it) {
-               /* The only way right now is FLOCK, in this case we hide flock
-                * policy as lmm, but lmmsize is 0
-                */
-               LASSERT(lmm && lmmsize == 0);
+               /* The only way right now is FLOCK. */
                LASSERTF(einfo->ei_type == LDLM_FLOCK, "lock type %d\n",
                         einfo->ei_type);
-               policy = lmm;
                res_id.name[3] = LDLM_FLOCK;
-               req = NULL;
        } else if (it->it_op & IT_OPEN) {
-               req = mdc_intent_open_pack(exp, it, op_data, lmm, lmmsize,
-                                          einfo->ei_cbdata);
-               policy = &update_policy;
-               einfo->ei_cbdata = NULL;
-               lmm = NULL;
+               req = mdc_intent_open_pack(exp, it, op_data);
        } else if (it->it_op & IT_UNLINK) {
                req = mdc_intent_unlink_pack(exp, it, op_data);
        } else if (it->it_op & (IT_GETATTR | IT_LOOKUP)) {
@@ -806,7 +779,7 @@ resend:
         */
        if (it) {
                mdc_get_rpc_lock(obddev->u.cli.cl_rpc_lock, it);
-               rc = mdc_enter_request(&obddev->u.cli);
+               rc = obd_get_request_slot(&obddev->u.cli);
                if (rc != 0) {
                        mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it);
                        mdc_clear_replay_flag(req, 0);
@@ -834,13 +807,12 @@ resend:
                return rc;
        }
 
-       mdc_exit_request(&obddev->u.cli);
+       obd_put_request_slot(&obddev->u.cli);
        mdc_put_rpc_lock(obddev->u.cli.cl_rpc_lock, it);
 
        if (rc < 0) {
-               CDEBUG_LIMIT((rc == -EACCES || rc == -EIDRM) ? D_INFO : D_ERROR,
-                            "%s: ldlm_cli_enqueue failed: rc = %d\n",
-                            obddev->obd_name, rc);
+               CDEBUG(D_INFO, "%s: ldlm_cli_enqueue failed: rc = %d\n",
+                      obddev->obd_name, rc);
 
                mdc_clear_replay_flag(req, rc);
                ptlrpc_req_finished(req);
@@ -903,6 +875,9 @@ static int mdc_finish_intent_lock(struct obd_export *exp,
        LASSERT(request != LP_POISON);
        LASSERT(request->rq_repmsg != LP_POISON);
 
+       if (it->it_op & IT_READDIR)
+               return 0;
+
        if (!it_disposition(it, DISP_IT_EXECD)) {
                /* The server failed before it even started executing the
                 * intent, i.e. because it couldn't unpack the request.
@@ -917,27 +892,6 @@ static int mdc_finish_intent_lock(struct obd_export *exp,
        mdt_body = req_capsule_server_get(&request->rq_pill, &RMF_MDT_BODY);
        LASSERT(mdt_body);      /* mdc_enqueue checked */
 
-       /* If we were revalidating a fid/name pair, mark the intent in
-        * case we fail and get called again from lookup
-        */
-       if (fid_is_sane(&op_data->op_fid2) &&
-           it->it_create_mode & M_CHECK_STALE &&
-           it->it_op != IT_GETATTR) {
-               /* Also: did we find the same inode? */
-               /* sever can return one of two fids:
-                * op_fid2 - new allocated fid - if file is created.
-                * op_fid3 - existent fid - if file only open.
-                * op_fid3 is saved in lmv_intent_open
-                */
-               if ((!lu_fid_eq(&op_data->op_fid2, &mdt_body->fid1)) &&
-                   (!lu_fid_eq(&op_data->op_fid3, &mdt_body->fid1))) {
-                       CDEBUG(D_DENTRY, "Found stale data "DFID"("DFID")/"DFID
-                              "\n", PFID(&op_data->op_fid2),
-                              PFID(&op_data->op_fid2), PFID(&mdt_body->fid1));
-                       return -ESTALE;
-               }
-       }
-
        rc = it_open_error(DISP_LOOKUP_EXECD, it);
        if (rc)
                return rc;
@@ -980,10 +934,10 @@ static int mdc_finish_intent_lock(struct obd_export *exp,
 
                LDLM_DEBUG(lock, "matching against this");
 
-               LASSERTF(fid_res_name_eq(&mdt_body->fid1,
+               LASSERTF(fid_res_name_eq(&mdt_body->mbo_fid1,
                                         &lock->l_resource->lr_name),
                         "Lock res_id: "DLDLMRES", fid: "DFID"\n",
-                        PLDLMRES(lock->l_resource), PFID(&mdt_body->fid1));
+                        PLDLMRES(lock->l_resource), PFID(&mdt_body->mbo_fid1));
                LDLM_LOCK_PUT(lock);
 
                memcpy(&old_lock, lockh, sizeof(*lockh));
@@ -1042,6 +996,9 @@ int mdc_revalidate_lock(struct obd_export *exp, struct lookup_intent *it,
                                                  MDS_INODELOCK_LOOKUP |
                                                  MDS_INODELOCK_PERM;
                        break;
+               case IT_READDIR:
+                       policy.l_inodebits.bits = MDS_INODELOCK_UPDATE;
+                       break;
                case IT_LAYOUT:
                        policy.l_inodebits.bits = MDS_INODELOCK_LAYOUT;
                        break;
@@ -1095,10 +1052,8 @@ int mdc_revalidate_lock(struct obd_export *exp, struct lookup_intent *it,
  * child lookup.
  */
 int mdc_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
-                   void *lmm, int lmmsize, struct lookup_intent *it,
-                   int lookup_flags, struct ptlrpc_request **reqp,
-                   ldlm_blocking_callback cb_blocking,
-                   __u64 extra_lock_flags)
+                   struct lookup_intent *it, struct ptlrpc_request **reqp,
+                   ldlm_blocking_callback cb_blocking, __u64 extra_lock_flags)
 {
        struct ldlm_enqueue_info einfo = {
                .ei_type        = LDLM_IBITS,
@@ -1119,7 +1074,7 @@ int mdc_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
 
        lockh.cookie = 0;
        if (fid_is_sane(&op_data->op_fid2) &&
-           (it->it_op & (IT_LOOKUP | IT_GETATTR))) {
+           (it->it_op & (IT_LOOKUP | IT_GETATTR | IT_READDIR))) {
                /* We could just return 1 immediately, but since we should only
                 * be called in revalidate_it if we already have a lock, let's
                 * verify that.
@@ -1135,13 +1090,13 @@ int mdc_intent_lock(struct obd_export *exp, struct md_op_data *op_data,
 
        /* For case if upper layer did not alloc fid, do it now. */
        if (!fid_is_sane(&op_data->op_fid2) && it->it_op & IT_CREAT) {
-               rc = mdc_fid_alloc(exp, &op_data->op_fid2, op_data);
+               rc = mdc_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
                if (rc < 0) {
                        CERROR("Can't alloc new fid, rc %d\n", rc);
                        return rc;
                }
        }
-       rc = mdc_enqueue(exp, &einfo, it, op_data, &lockh, lmm, lmmsize, NULL,
+       rc = mdc_enqueue(exp, &einfo, NULL, it, op_data, &lockh,
                         extra_lock_flags);
        if (rc < 0)
                return rc;
@@ -1170,7 +1125,7 @@ static int mdc_intent_getattr_async_interpret(const struct lu_env *env,
 
        obddev = class_exp2obd(exp);
 
-       mdc_exit_request(&obddev->u.cli);
+       obd_put_request_slot(&obddev->u.cli);
        if (OBD_FAIL_CHECK(OBD_FAIL_MDC_GETATTR_ENQUEUE))
                rc = -ETIMEDOUT;
 
@@ -1230,7 +1185,7 @@ int mdc_intent_getattr_async(struct obd_export *exp,
        if (IS_ERR(req))
                return PTR_ERR(req);
 
-       rc = mdc_enter_request(&obddev->u.cli);
+       rc = obd_get_request_slot(&obddev->u.cli);
        if (rc != 0) {
                ptlrpc_req_finished(req);
                return rc;
@@ -1239,7 +1194,7 @@ int mdc_intent_getattr_async(struct obd_export *exp,
        rc = ldlm_cli_enqueue(exp, &req, einfo, &res_id, &policy, &flags, NULL,
                              0, LVB_T_NONE, &minfo->mi_lockh, 1);
        if (rc < 0) {
-               mdc_exit_request(&obddev->u.cli);
+               obd_put_request_slot(&obddev->u.cli);
                ptlrpc_req_finished(req);
                return rc;
        }
index 5dba2c81385718838b74f9f61d457401ef5ade8e..c018e3baf30fe41a6b88fb9adf73c882970c57d1 100644 (file)
@@ -86,7 +86,7 @@ int mdc_resource_get_unused(struct obd_export *exp, const struct lu_fid *fid,
        fid_build_reg_res_name(fid, &res_id);
        res = ldlm_resource_get(exp->exp_obd->obd_namespace,
                                NULL, &res_id, 0, 0);
-       if (!res)
+       if (IS_ERR(res))
                return 0;
        LDLM_RESOURCE_ADDREF(res);
        /* Initialize ibits lock policy. */
@@ -110,7 +110,7 @@ int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data,
        __u64 bits;
 
        bits = MDS_INODELOCK_UPDATE;
-       if (op_data->op_attr.ia_valid & (ATTR_MODE|ATTR_UID|ATTR_GID))
+       if (op_data->op_attr.ia_valid & (ATTR_MODE | ATTR_UID | ATTR_GID))
                bits |= MDS_INODELOCK_LOOKUP;
        if ((op_data->op_flags & MF_MDC_CANCEL_FID1) &&
            (fid_is_sane(&op_data->op_fid1)) &&
@@ -177,8 +177,8 @@ int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data,
 
                epoch = req_capsule_client_get(&req->rq_pill, &RMF_MDT_EPOCH);
                body = req_capsule_server_get(&req->rq_pill, &RMF_MDT_BODY);
-               epoch->handle = body->handle;
-               epoch->ioepoch = body->ioepoch;
+               epoch->handle = body->mbo_handle;
+               epoch->ioepoch = body->mbo_ioepoch;
                req->rq_replay_cb = mdc_replay_open;
        /** bug 3633, open may be committed and estale answer is not error */
        } else if (rc == -ESTALE && (op_data->op_flags & MF_SOM_CHANGE)) {
@@ -214,11 +214,9 @@ int mdc_create(struct obd_export *exp, struct md_op_data *op_data,
                 * mdc_fid_alloc() may return errno 1 in case of switch to new
                 * sequence, handle this.
                 */
-               rc = mdc_fid_alloc(exp, &op_data->op_fid2, op_data);
-               if (rc < 0) {
-                       CERROR("Can't alloc new fid, rc %d\n", rc);
+               rc = mdc_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
+               if (rc < 0)
                        return rc;
-               }
        }
 
 rebuild:
@@ -431,7 +429,8 @@ int mdc_rename(struct obd_export *exp, struct md_op_data *op_data,
        }
 
        req_capsule_set_size(&req->rq_pill, &RMF_NAME, RCL_CLIENT, oldlen + 1);
-       req_capsule_set_size(&req->rq_pill, &RMF_SYMTGT, RCL_CLIENT, newlen+1);
+       req_capsule_set_size(&req->rq_pill, &RMF_SYMTGT, RCL_CLIENT,
+                            newlen + 1);
 
        rc = mdc_prep_elc_req(exp, req, MDS_REINT, &cancels, count);
        if (rc) {
index 542801f04b0d8d61637394897c2c855d3c636411..5bf95f964438e1a05a7e0f426bd83589c599ddd8 100644 (file)
@@ -39,7 +39,9 @@
 # include <linux/utsname.h>
 
 #include "../include/lustre_acl.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/obd_class.h"
+#include "../include/lustre_lmv.h"
 #include "../include/lustre_fid.h"
 #include "../include/lprocfs_status.h"
 #include "../include/lustre_param.h"
@@ -57,16 +59,16 @@ static inline int mdc_queue_wait(struct ptlrpc_request *req)
        struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
        int rc;
 
-       /* mdc_enter_request() ensures that this client has no more
+       /* obd_get_request_slot() ensures that this client has no more
         * than cl_max_rpcs_in_flight RPCs simultaneously inf light
         * against an MDT.
         */
-       rc = mdc_enter_request(cli);
+       rc = obd_get_request_slot(cli);
        if (rc != 0)
                return rc;
 
        rc = ptlrpc_queue_wait(req);
-       mdc_exit_request(cli);
+       obd_put_request_slot(cli);
 
        return rc;
 }
@@ -98,7 +100,7 @@ static int mdc_getstatus(struct obd_export *exp, struct lu_fid *rootfid)
                goto out;
        }
 
-       *rootfid = body->fid1;
+       *rootfid = body->mbo_fid1;
        CDEBUG(D_NET,
               "root fid="DFID", last_committed=%llu\n",
               PFID(rootfid),
@@ -136,12 +138,12 @@ static int mdc_getattr_common(struct obd_export *exp,
        if (!body)
                return -EPROTO;
 
-       CDEBUG(D_NET, "mode: %o\n", body->mode);
+       CDEBUG(D_NET, "mode: %o\n", body->mbo_mode);
 
        mdc_update_max_ea_from_body(exp, body);
-       if (body->eadatasize != 0) {
+       if (body->mbo_eadatasize != 0) {
                eadata = req_capsule_server_sized_get(pill, &RMF_MDT_MD,
-                                                     body->eadatasize);
+                                                     body->mbo_eadatasize);
                if (!eadata)
                        return -EPROTO;
        }
@@ -230,32 +232,6 @@ static int mdc_getattr_name(struct obd_export *exp, struct md_op_data *op_data,
        return rc;
 }
 
-static int mdc_is_subdir(struct obd_export *exp,
-                        const struct lu_fid *pfid,
-                        const struct lu_fid *cfid,
-                        struct ptlrpc_request **request)
-{
-       struct ptlrpc_request  *req;
-       int                  rc;
-
-       *request = NULL;
-       req = ptlrpc_request_alloc_pack(class_exp2cliimp(exp),
-                                       &RQF_MDS_IS_SUBDIR, LUSTRE_MDS_VERSION,
-                                       MDS_IS_SUBDIR);
-       if (!req)
-               return -ENOMEM;
-
-       mdc_is_subdir_pack(req, pfid, cfid, 0);
-       ptlrpc_request_set_replen(req);
-
-       rc = ptlrpc_queue_wait(req);
-       if (rc && rc != -EREMOTE)
-               ptlrpc_req_finished(req);
-       else
-               *request = req;
-       return rc;
-}
-
 static int mdc_xattr_common(struct obd_export *exp,
                            const struct req_format *fmt,
                            const struct lu_fid *fid,
@@ -397,15 +373,15 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
        void               *buf;
        int                  rc;
 
-       if (!body->aclsize)
+       if (!body->mbo_aclsize)
                return 0;
 
-       buf = req_capsule_server_sized_get(pill, &RMF_ACL, body->aclsize);
+       buf = req_capsule_server_sized_get(pill, &RMF_ACL, body->mbo_aclsize);
 
        if (!buf)
                return -EPROTO;
 
-       acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
+       acl = posix_acl_from_xattr(&init_user_ns, buf, body->mbo_aclsize);
        if (!acl)
                return 0;
 
@@ -443,24 +419,24 @@ static int mdc_get_lustre_md(struct obd_export *exp,
 
        md->body = req_capsule_server_get(pill, &RMF_MDT_BODY);
 
-       if (md->body->valid & OBD_MD_FLEASIZE) {
+       if (md->body->mbo_valid & OBD_MD_FLEASIZE) {
                int lmmsize;
                struct lov_mds_md *lmm;
 
-               if (!S_ISREG(md->body->mode)) {
+               if (!S_ISREG(md->body->mbo_mode)) {
                        CDEBUG(D_INFO,
                               "OBD_MD_FLEASIZE set, should be a regular file, but is not\n");
                        rc = -EPROTO;
                        goto out;
                }
 
-               if (md->body->eadatasize == 0) {
+               if (md->body->mbo_eadatasize == 0) {
                        CDEBUG(D_INFO,
                               "OBD_MD_FLEASIZE set, but eadatasize 0\n");
                        rc = -EPROTO;
                        goto out;
                }
-               lmmsize = md->body->eadatasize;
+               lmmsize = md->body->mbo_eadatasize;
                lmm = req_capsule_server_sized_get(pill, &RMF_MDT_MD, lmmsize);
                if (!lmm) {
                        rc = -EPROTO;
@@ -479,24 +455,24 @@ static int mdc_get_lustre_md(struct obd_export *exp,
                        goto out;
                }
 
-       } else if (md->body->valid & OBD_MD_FLDIREA) {
+       } else if (md->body->mbo_valid & OBD_MD_FLDIREA) {
                int lmvsize;
                struct lov_mds_md *lmv;
 
-               if (!S_ISDIR(md->body->mode)) {
+               if (!S_ISDIR(md->body->mbo_mode)) {
                        CDEBUG(D_INFO,
                               "OBD_MD_FLDIREA set, should be a directory, but is not\n");
                        rc = -EPROTO;
                        goto out;
                }
 
-               if (md->body->eadatasize == 0) {
+               if (md->body->mbo_eadatasize == 0) {
                        CDEBUG(D_INFO,
                               "OBD_MD_FLDIREA is set, but eadatasize 0\n");
                        return -EPROTO;
                }
-               if (md->body->valid & OBD_MD_MEA) {
-                       lmvsize = md->body->eadatasize;
+               if (md->body->mbo_valid & OBD_MD_MEA) {
+                       lmvsize = md->body->mbo_eadatasize;
                        lmv = req_capsule_server_sized_get(pill, &RMF_MDT_MD,
                                                           lmvsize);
                        if (!lmv) {
@@ -504,15 +480,15 @@ static int mdc_get_lustre_md(struct obd_export *exp,
                                goto out;
                        }
 
-                       rc = obd_unpackmd(md_exp, (void *)&md->mea, lmv,
+                       rc = obd_unpackmd(md_exp, (void *)&md->lmv, lmv,
                                          lmvsize);
                        if (rc < 0)
                                goto out;
 
-                       if (rc < sizeof(*md->mea)) {
+                       if (rc < sizeof(*md->lmv)) {
                                CDEBUG(D_INFO,
-                                      "size too small: rc < sizeof(*md->mea) (%d < %d)\n",
-                                       rc, (int)sizeof(*md->mea));
+                                      "size too small: rc < sizeof(*md->lmv) (%d < %d)\n",
+                                       rc, (int)sizeof(*md->lmv));
                                rc = -EPROTO;
                                goto out;
                        }
@@ -520,12 +496,12 @@ static int mdc_get_lustre_md(struct obd_export *exp,
        }
        rc = 0;
 
-       if (md->body->valid & OBD_MD_FLACL) {
+       if (md->body->mbo_valid & OBD_MD_FLACL) {
                /* for ACL, it's possible that FLACL is set but aclsize is zero.
                 * only when aclsize != 0 there's an actual segment for ACL
                 * in reply buffer.
                 */
-               if (md->body->aclsize) {
+               if (md->body->mbo_aclsize) {
                        rc = mdc_unpack_acl(req, md);
                        if (rc)
                                goto out;
@@ -580,9 +556,9 @@ void mdc_replay_open(struct ptlrpc_request *req)
 
                file_fh = &och->och_fh;
                CDEBUG(D_HA, "updating handle from %#llx to %#llx\n",
-                      file_fh->cookie, body->handle.cookie);
+                      file_fh->cookie, body->mbo_handle.cookie);
                old = *file_fh;
-               *file_fh = body->handle;
+               *file_fh = body->mbo_handle;
        }
        close_req = mod->mod_close_req;
        if (close_req) {
@@ -597,7 +573,7 @@ void mdc_replay_open(struct ptlrpc_request *req)
                if (och)
                        LASSERT(!memcmp(&old, &epoch->handle, sizeof(old)));
                DEBUG_REQ(D_HA, close_req, "updating close body with new fh");
-               epoch->handle = body->handle;
+               epoch->handle = body->mbo_handle;
        }
 }
 
@@ -679,11 +655,11 @@ int mdc_set_open_replay_data(struct obd_export *exp,
                spin_unlock(&open_req->rq_lock);
        }
 
-       rec->cr_fid2 = body->fid1;
-       rec->cr_ioepoch = body->ioepoch;
-       rec->cr_old_handle.cookie = body->handle.cookie;
+       rec->cr_fid2 = body->mbo_fid1;
+       rec->cr_ioepoch = body->mbo_ioepoch;
+       rec->cr_old_handle.cookie = body->mbo_handle.cookie;
        open_req->rq_replay_cb = mdc_replay_open;
-       if (!fid_is_sane(&body->fid1)) {
+       if (!fid_is_sane(&body->mbo_fid1)) {
                DEBUG_REQ(D_ERROR, open_req,
                          "Saving replay request with insane fid");
                LBUG();
@@ -701,9 +677,15 @@ static void mdc_free_open(struct md_open_data *mod)
            imp_connect_disp_stripe(mod->mod_open_req->rq_import))
                committed = 1;
 
-       LASSERT(mod->mod_open_req->rq_replay == 0);
-
-       DEBUG_REQ(D_RPCTRACE, mod->mod_open_req, "free open request\n");
+       /*
+        * No reason to asssert here if the open request has
+        * rq_replay == 1. It means that mdc_close failed, and
+        * close request wasn`t sent. It is not fatal to client.
+        * The worst thing is eviction if the client gets open lock
+        */
+       DEBUG_REQ(D_RPCTRACE, mod->mod_open_req,
+                 "free open request rq_replay = %d\n",
+                  mod->mod_open_req->rq_replay);
 
        ptlrpc_request_committed(mod->mod_open_req, committed);
        if (mod->mod_close_req)
@@ -744,7 +726,7 @@ static void mdc_close_handle_reply(struct ptlrpc_request *req,
                epoch = req_capsule_client_get(&req->rq_pill, &RMF_MDT_EPOCH);
 
                epoch->flags |= MF_SOM_AU;
-               if (repbody->valid & OBD_MD_FLGETATTRLOCK)
+               if (repbody->mbo_valid & OBD_MD_FLGETATTRLOCK)
                        op_data->op_flags |= MF_GETATTR_LOCK;
        }
 }
@@ -763,7 +745,7 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
                req_fmt = &RQF_MDS_RELEASE_CLOSE;
 
                /* allocate a FID for volatile file */
-               rc = mdc_fid_alloc(exp, &op_data->op_fid2, op_data);
+               rc = mdc_fid_alloc(NULL, exp, &op_data->op_fid2, op_data);
                if (rc < 0) {
                        CERROR("%s: "DFID" failed to allocate FID: %d\n",
                               obd->obd_name, PFID(&op_data->op_fid1), rc);
@@ -773,22 +755,10 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
        }
 
        *request = NULL;
-       req = ptlrpc_request_alloc(class_exp2cliimp(exp), req_fmt);
-       if (!req)
-               return -ENOMEM;
-
-       rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_CLOSE);
-       if (rc) {
-               ptlrpc_request_free(req);
-               return rc;
-       }
-
-       /* To avoid a livelock (bug 7034), we need to send CLOSE RPCs to a
-        * portal whose threads are not taking any DLM locks and are therefore
-        * always progressing
-        */
-       req->rq_request_portal = MDS_READPAGE_PORTAL;
-       ptlrpc_at_set_req_timeout(req);
+       if (OBD_FAIL_CHECK(OBD_FAIL_MDC_CLOSE))
+               req = NULL;
+       else
+               req = ptlrpc_request_alloc(class_exp2cliimp(exp), req_fmt);
 
        /* Ensure that this close's handle is fixed up during replay. */
        if (likely(mod)) {
@@ -809,6 +779,29 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
                 CDEBUG(D_HA,
                        "couldn't find open req; expecting close error\n");
        }
+       if (!req) {
+               /*
+                * TODO: repeat close after errors
+                */
+               CWARN("%s: close of FID "DFID" failed, file reference will be dropped when this client unmounts or is evicted\n",
+                     obd->obd_name, PFID(&op_data->op_fid1));
+               rc = -ENOMEM;
+               goto out;
+       }
+
+       rc = ptlrpc_request_pack(req, LUSTRE_MDS_VERSION, MDS_CLOSE);
+       if (rc) {
+               ptlrpc_request_free(req);
+               goto out;
+       }
+
+       /*
+        * To avoid a livelock (bug 7034), we need to send CLOSE RPCs to a
+        * portal whose threads are not taking any DLM locks and are therefore
+        * always progressing
+        */
+       req->rq_request_portal = MDS_READPAGE_PORTAL;
+       ptlrpc_at_set_req_timeout(req);
 
        mdc_close_pack(req, op_data);
 
@@ -854,6 +847,7 @@ static int mdc_close(struct obd_export *exp, struct md_op_data *op_data,
                }
        }
 
+out:
        if (mod) {
                if (rc != 0)
                        mod->mod_close_req = NULL;
@@ -936,16 +930,17 @@ static int mdc_done_writing(struct obd_export *exp, struct md_op_data *op_data,
        return rc;
 }
 
-static int mdc_readpage(struct obd_export *exp, struct md_op_data *op_data,
-                       struct page **pages, struct ptlrpc_request **request)
+static int mdc_getpage(struct obd_export *exp, const struct lu_fid *fid,
+                      u64 offset, struct page **pages, int npages,
+                      struct ptlrpc_request **request)
 {
-       struct ptlrpc_request   *req;
        struct ptlrpc_bulk_desc *desc;
-       int                   i;
-       wait_queue_head_t             waitq;
-       int                   resends = 0;
-       struct l_wait_info       lwi;
-       int                   rc;
+       struct ptlrpc_request *req;
+       wait_queue_head_t waitq;
+       struct l_wait_info lwi;
+       int resends = 0;
+       int rc;
+       int i;
 
        *request = NULL;
        init_waitqueue_head(&waitq);
@@ -964,7 +959,7 @@ restart_bulk:
        req->rq_request_portal = MDS_READPAGE_PORTAL;
        ptlrpc_at_set_req_timeout(req);
 
-       desc = ptlrpc_prep_bulk_imp(req, op_data->op_npages, 1, BULK_PUT_SINK,
+       desc = ptlrpc_prep_bulk_imp(req, npages, 1, BULK_PUT_SINK,
                                    MDS_BULK_PORTAL);
        if (!desc) {
                ptlrpc_request_free(req);
@@ -972,12 +967,10 @@ restart_bulk:
        }
 
        /* NB req now owns desc and will free it when it gets freed */
-       for (i = 0; i < op_data->op_npages; i++)
+       for (i = 0; i < npages; i++)
                ptlrpc_prep_bulk_page_pin(desc, pages[i], 0, PAGE_SIZE);
 
-       mdc_readdir_pack(req, op_data->op_offset,
-                        PAGE_SIZE * op_data->op_npages,
-                        &op_data->op_fid1);
+       mdc_readdir_pack(req, offset, PAGE_SIZE * npages, fid);
 
        ptlrpc_request_set_replen(req);
        rc = ptlrpc_queue_wait(req);
@@ -988,11 +981,12 @@ restart_bulk:
 
                resends++;
                if (!client_should_resend(resends, &exp->exp_obd->u.cli)) {
-                       CERROR("too many resend retries, returning error\n");
+                       CERROR("%s: too many resend retries: rc = %d\n",
+                              exp->exp_obd->obd_name, -EIO);
                        return -EIO;
                }
-               lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(resends),
-                                      NULL, NULL, NULL);
+               lwi = LWI_TIMEOUT_INTR(cfs_time_seconds(resends), NULL, NULL,
+                                      NULL);
                l_wait_event(waitq, 0, &lwi);
 
                goto restart_bulk;
@@ -1006,9 +1000,9 @@ restart_bulk:
        }
 
        if (req->rq_bulk->bd_nob_transferred & ~LU_PAGE_MASK) {
-               CERROR("Unexpected # bytes transferred: %d (%ld expected)\n",
-                      req->rq_bulk->bd_nob_transferred,
-                      PAGE_SIZE * op_data->op_npages);
+               CERROR("%s: unexpected bytes transferred: %d (%ld expected)\n",
+                      exp->exp_obd->obd_name, req->rq_bulk->bd_nob_transferred,
+                      PAGE_SIZE * npages);
                ptlrpc_req_finished(req);
                return -EPROTO;
        }
@@ -1017,6 +1011,454 @@ restart_bulk:
        return 0;
 }
 
+static void mdc_release_page(struct page *page, int remove)
+{
+       if (remove) {
+               lock_page(page);
+               if (likely(page->mapping))
+                       truncate_complete_page(page->mapping, page);
+               unlock_page(page);
+       }
+       put_page(page);
+}
+
+static struct page *mdc_page_locate(struct address_space *mapping, __u64 *hash,
+                                   __u64 *start, __u64 *end, int hash64)
+{
+       /*
+        * Complement of hash is used as an index so that
+        * radix_tree_gang_lookup() can be used to find a page with starting
+        * hash _smaller_ than one we are looking for.
+        */
+       unsigned long offset = hash_x_index(*hash, hash64);
+       struct page *page;
+       int found;
+
+       spin_lock_irq(&mapping->tree_lock);
+       found = radix_tree_gang_lookup(&mapping->page_tree,
+                                      (void **)&page, offset, 1);
+       if (found > 0 && !radix_tree_exceptional_entry(page)) {
+               struct lu_dirpage *dp;
+
+               get_page(page);
+               spin_unlock_irq(&mapping->tree_lock);
+               /*
+                * In contrast to find_lock_page() we are sure that directory
+                * page cannot be truncated (while DLM lock is held) and,
+                * hence, can avoid restart.
+                *
+                * In fact, page cannot be locked here at all, because
+                * mdc_read_page_remote does synchronous io.
+                */
+               wait_on_page_locked(page);
+               if (PageUptodate(page)) {
+                       dp = kmap(page);
+                       if (BITS_PER_LONG == 32 && hash64) {
+                               *start = le64_to_cpu(dp->ldp_hash_start) >> 32;
+                               *end   = le64_to_cpu(dp->ldp_hash_end) >> 32;
+                               *hash  = *hash >> 32;
+                       } else {
+                               *start = le64_to_cpu(dp->ldp_hash_start);
+                               *end   = le64_to_cpu(dp->ldp_hash_end);
+                       }
+                       if (unlikely(*start == 1 && *hash == 0))
+                               *hash = *start;
+                       else
+                               LASSERTF(*start <= *hash, "start = %#llx,end = %#llx,hash = %#llx\n",
+                                        *start, *end, *hash);
+                       CDEBUG(D_VFSTRACE, "offset %lx [%#llx %#llx], hash %#llx\n",
+                              offset, *start, *end, *hash);
+                       if (*hash > *end) {
+                               kunmap(page);
+                               mdc_release_page(page, 0);
+                               page = NULL;
+                       } else if (*end != *start && *hash == *end) {
+                               /*
+                                * upon hash collision, remove this page,
+                                * otherwise put page reference, and
+                                * mdc_read_page_remote() will issue RPC to
+                                * fetch the page we want.
+                                */
+                               kunmap(page);
+                               mdc_release_page(page,
+                                                le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
+                               page = NULL;
+                       }
+               } else {
+                       put_page(page);
+                       page = ERR_PTR(-EIO);
+               }
+       } else {
+               spin_unlock_irq(&mapping->tree_lock);
+               page = NULL;
+       }
+       return page;
+}
+
+/*
+ * Adjust a set of pages, each page containing an array of lu_dirpages,
+ * so that each page can be used as a single logical lu_dirpage.
+ *
+ * A lu_dirpage is laid out as follows, where s = ldp_hash_start,
+ * e = ldp_hash_end, f = ldp_flags, p = padding, and each "ent" is a
+ * struct lu_dirent.  It has size up to LU_PAGE_SIZE. The ldp_hash_end
+ * value is used as a cookie to request the next lu_dirpage in a
+ * directory listing that spans multiple pages (two in this example):
+ *   ________
+ *  |        |
+ * .|--------v-------   -----.
+ * |s|e|f|p|ent|ent| ... |ent|
+ * '--|--------------   -----'   Each PAGE contains a single
+ *    '------.                   lu_dirpage.
+ * .---------v-------   -----.
+ * |s|e|f|p|ent| 0 | ... | 0 |
+ * '-----------------   -----'
+ *
+ * However, on hosts where the native VM page size (PAGE_SIZE) is
+ * larger than LU_PAGE_SIZE, a single host page may contain multiple
+ * lu_dirpages. After reading the lu_dirpages from the MDS, the
+ * ldp_hash_end of the first lu_dirpage refers to the one immediately
+ * after it in the same PAGE (arrows simplified for brevity, but
+ * in general e0==s1, e1==s2, etc.):
+ *
+ * .--------------------   -----.
+ * |s0|e0|f0|p|ent|ent| ... |ent|
+ * |---v----------------   -----|
+ * |s1|e1|f1|p|ent|ent| ... |ent|
+ * |---v----------------   -----|  Here, each PAGE contains
+ *             ...                 multiple lu_dirpages.
+ * |---v----------------   -----|
+ * |s'|e'|f'|p|ent|ent| ... |ent|
+ * '---|----------------   -----'
+ *     v
+ * .----------------------------.
+ * |        next PAGE           |
+ *
+ * This structure is transformed into a single logical lu_dirpage as follows:
+ *
+ * - Replace e0 with e' so the request for the next lu_dirpage gets the page
+ *   labeled 'next PAGE'.
+ *
+ * - Copy the LDF_COLLIDE flag from f' to f0 to correctly reflect whether
+ *   a hash collision with the next page exists.
+ *
+ * - Adjust the lde_reclen of the ending entry of each lu_dirpage to span
+ *   to the first entry of the next lu_dirpage.
+ */
+#if PAGE_SIZE > LU_PAGE_SIZE
+static void mdc_adjust_dirpages(struct page **pages, int cfs_pgs, int lu_pgs)
+{
+       int i;
+
+       for (i = 0; i < cfs_pgs; i++) {
+               struct lu_dirpage *dp = kmap(pages[i]);
+               __u64 hash_end = le64_to_cpu(dp->ldp_hash_end);
+               __u32 flags = le32_to_cpu(dp->ldp_flags);
+               struct lu_dirpage *first = dp;
+               struct lu_dirent *end_dirent = NULL;
+               struct lu_dirent *ent;
+
+               while (--lu_pgs > 0) {
+                       ent = lu_dirent_start(dp);
+                       for (end_dirent = ent; ent;
+                            end_dirent = ent, ent = lu_dirent_next(ent));
+
+                       /* Advance dp to next lu_dirpage. */
+                       dp = (struct lu_dirpage *)((char *)dp + LU_PAGE_SIZE);
+
+                       /* Check if we've reached the end of the CFS_PAGE. */
+                       if (!((unsigned long)dp & ~PAGE_MASK))
+                               break;
+
+                       /* Save the hash and flags of this lu_dirpage. */
+                       hash_end = le64_to_cpu(dp->ldp_hash_end);
+                       flags = le32_to_cpu(dp->ldp_flags);
+
+                       /* Check if lu_dirpage contains no entries. */
+                       if (!end_dirent)
+                               break;
+
+                       /*
+                        * Enlarge the end entry lde_reclen from 0 to
+                        * first entry of next lu_dirpage.
+                        */
+                       LASSERT(!le16_to_cpu(end_dirent->lde_reclen));
+                       end_dirent->lde_reclen =
+                               cpu_to_le16((char *)(dp->ldp_entries) -
+                                           (char *)end_dirent);
+               }
+
+               first->ldp_hash_end = hash_end;
+               first->ldp_flags &= ~cpu_to_le32(LDF_COLLIDE);
+               first->ldp_flags |= flags & cpu_to_le32(LDF_COLLIDE);
+
+               kunmap(pages[i]);
+       }
+       LASSERTF(lu_pgs == 0, "left = %d", lu_pgs);
+}
+#else
+#define mdc_adjust_dirpages(pages, cfs_pgs, lu_pgs) do {} while (0)
+#endif  /* PAGE_SIZE > LU_PAGE_SIZE */
+
+/* parameters for readdir page */
+struct readpage_param {
+       struct md_op_data       *rp_mod;
+       __u64                   rp_off;
+       int                     rp_hash64;
+       struct obd_export       *rp_exp;
+       struct md_callback      *rp_cb;
+};
+
+/**
+ * Read pages from server.
+ *
+ * Page in MDS_READPAGE RPC is packed in LU_PAGE_SIZE, and each page contains
+ * a header lu_dirpage which describes the start/end hash, and whether this
+ * page is empty (contains no dir entry) or hash collide with next page.
+ * After client receives reply, several pages will be integrated into dir page
+ * in PAGE_SIZE (if PAGE_SIZE greater than LU_PAGE_SIZE), and the
+ * lu_dirpage for this integrated page will be adjusted.
+ **/
+static int mdc_read_page_remote(void *data, struct page *page0)
+{
+       struct readpage_param *rp = data;
+       struct page **page_pool;
+       struct page *page;
+       struct lu_dirpage *dp;
+       int rd_pgs = 0; /* number of pages read actually */
+       int npages;
+       struct md_op_data *op_data = rp->rp_mod;
+       struct ptlrpc_request *req;
+       int max_pages = op_data->op_max_pages;
+       struct inode *inode;
+       struct lu_fid *fid;
+       int i;
+       int rc;
+
+       LASSERT(max_pages > 0 && max_pages <= PTLRPC_MAX_BRW_PAGES);
+       inode = op_data->op_data;
+       fid = &op_data->op_fid1;
+       LASSERT(inode);
+
+       page_pool = kcalloc(max_pages, sizeof(page), GFP_NOFS);
+       if (page_pool) {
+               page_pool[0] = page0;
+       } else {
+               page_pool = &page0;
+               max_pages = 1;
+       }
+
+       for (npages = 1; npages < max_pages; npages++) {
+               page = page_cache_alloc_cold(inode->i_mapping);
+               if (!page)
+                       break;
+               page_pool[npages] = page;
+       }
+
+       rc = mdc_getpage(rp->rp_exp, fid, rp->rp_off, page_pool, npages, &req);
+       if (!rc) {
+               int lu_pgs = req->rq_bulk->bd_nob_transferred;
+
+               rd_pgs = (req->rq_bulk->bd_nob_transferred +
+                         PAGE_SIZE - 1) >> PAGE_SHIFT;
+               lu_pgs >>= LU_PAGE_SHIFT;
+               LASSERT(!(req->rq_bulk->bd_nob_transferred & ~LU_PAGE_MASK));
+
+               CDEBUG(D_INODE, "read %d(%d)/%d pages\n", rd_pgs, lu_pgs,
+                      op_data->op_npages);
+
+               mdc_adjust_dirpages(page_pool, rd_pgs, lu_pgs);
+
+               SetPageUptodate(page0);
+       }
+
+       unlock_page(page0);
+       ptlrpc_req_finished(req);
+       CDEBUG(D_CACHE, "read %d/%d pages\n", rd_pgs, npages);
+       for (i = 1; i < npages; i++) {
+               unsigned long offset;
+               __u64 hash;
+               int ret;
+
+               page = page_pool[i];
+
+               if (rc < 0 || i >= rd_pgs) {
+                       put_page(page);
+                       continue;
+               }
+
+               SetPageUptodate(page);
+
+               dp = kmap(page);
+               hash = le64_to_cpu(dp->ldp_hash_start);
+               kunmap(page);
+
+               offset = hash_x_index(hash, rp->rp_hash64);
+
+               prefetchw(&page->flags);
+               ret = add_to_page_cache_lru(page, inode->i_mapping, offset,
+                                           GFP_KERNEL);
+               if (!ret)
+                       unlock_page(page);
+               else
+                       CDEBUG(D_VFSTRACE, "page %lu add to page cache failed: rc = %d\n",
+                              offset, ret);
+               put_page(page);
+       }
+
+       if (page_pool != &page0)
+               kfree(page_pool);
+
+       return rc;
+}
+
+/**
+ * Read dir page from cache first, if it can not find it, read it from
+ * server and add into the cache.
+ *
+ * \param[in] exp      MDC export
+ * \param[in] op_data  client MD stack parameters, transferring parameters
+ *                     between different layers on client MD stack.
+ * \param[in] cb_op    callback required for ldlm lock enqueue during
+ *                     read page
+ * \param[in] hash_offset the hash offset of the page to be read
+ * \param[in] ppage    the page to be read
+ *
+ * retval              = 0 get the page successfully
+ *                     errno(<0) get the page failed
+ */
+static int mdc_read_page(struct obd_export *exp, struct md_op_data *op_data,
+                        struct md_callback *cb_op, __u64 hash_offset,
+                        struct page **ppage)
+{
+       struct lookup_intent it = { .it_op = IT_READDIR };
+       struct page *page;
+       struct inode *dir = op_data->op_data;
+       struct address_space *mapping;
+       struct lu_dirpage *dp;
+       __u64 start = 0;
+       __u64 end = 0;
+       struct lustre_handle lockh;
+       struct ptlrpc_request *enq_req = NULL;
+       struct readpage_param rp_param;
+       int rc;
+
+       *ppage = NULL;
+
+       LASSERT(dir);
+       mapping = dir->i_mapping;
+
+       rc = mdc_intent_lock(exp, op_data, &it, &enq_req,
+                            cb_op->md_blocking_ast, 0);
+       if (enq_req)
+               ptlrpc_req_finished(enq_req);
+
+       if (rc < 0) {
+               CERROR("%s: "DFID" lock enqueue fails: rc = %d\n",
+                      exp->exp_obd->obd_name, PFID(&op_data->op_fid1), rc);
+               return rc;
+       }
+
+       rc = 0;
+       lockh.cookie = it.it_lock_handle;
+       mdc_set_lock_data(exp, &lockh, dir, NULL);
+
+       rp_param.rp_off = hash_offset;
+       rp_param.rp_hash64 = op_data->op_cli_flags & CLI_HASH64;
+       page = mdc_page_locate(mapping, &rp_param.rp_off, &start, &end,
+                              rp_param.rp_hash64);
+       if (IS_ERR(page)) {
+               CERROR("%s: dir page locate: "DFID" at %llu: rc %ld\n",
+                      exp->exp_obd->obd_name, PFID(&op_data->op_fid1),
+                      rp_param.rp_off, PTR_ERR(page));
+               rc = PTR_ERR(page);
+               goto out_unlock;
+       } else if (page) {
+               /*
+                * XXX nikita: not entirely correct handling of a corner case:
+                * suppose hash chain of entries with hash value HASH crosses
+                * border between pages P0 and P1. First both P0 and P1 are
+                * cached, seekdir() is called for some entry from the P0 part
+                * of the chain. Later P0 goes out of cache. telldir(HASH)
+                * happens and finds P1, as it starts with matching hash
+                * value. Remaining entries from P0 part of the chain are
+                * skipped. (Is that really a bug?)
+                *
+                * Possible solutions: 0. don't cache P1 is such case, handle
+                * it as an "overflow" page. 1. invalidate all pages at
+                * once. 2. use HASH|1 as an index for P1.
+                */
+               goto hash_collision;
+       }
+
+       rp_param.rp_exp = exp;
+       rp_param.rp_mod = op_data;
+       page = read_cache_page(mapping,
+                              hash_x_index(rp_param.rp_off,
+                                           rp_param.rp_hash64),
+                              mdc_read_page_remote, &rp_param);
+       if (IS_ERR(page)) {
+               CERROR("%s: read cache page: "DFID" at %llu: rc %ld\n",
+                      exp->exp_obd->obd_name, PFID(&op_data->op_fid1),
+                      rp_param.rp_off, PTR_ERR(page));
+               rc = PTR_ERR(page);
+               goto out_unlock;
+       }
+
+       wait_on_page_locked(page);
+       (void)kmap(page);
+       if (!PageUptodate(page)) {
+               CERROR("%s: page not updated: "DFID" at %llu: rc %d\n",
+                      exp->exp_obd->obd_name, PFID(&op_data->op_fid1),
+                      rp_param.rp_off, -5);
+               goto fail;
+       }
+       if (!PageChecked(page))
+               SetPageChecked(page);
+       if (PageError(page)) {
+               CERROR("%s: page error: "DFID" at %llu: rc %d\n",
+                      exp->exp_obd->obd_name, PFID(&op_data->op_fid1),
+                      rp_param.rp_off, -5);
+               goto fail;
+       }
+
+hash_collision:
+       dp = page_address(page);
+       if (BITS_PER_LONG == 32 && rp_param.rp_hash64) {
+               start = le64_to_cpu(dp->ldp_hash_start) >> 32;
+               end = le64_to_cpu(dp->ldp_hash_end) >> 32;
+               rp_param.rp_off = hash_offset >> 32;
+       } else {
+               start = le64_to_cpu(dp->ldp_hash_start);
+               end = le64_to_cpu(dp->ldp_hash_end);
+               rp_param.rp_off = hash_offset;
+       }
+       if (end == start) {
+               LASSERT(start == rp_param.rp_off);
+               CWARN("Page-wide hash collision: %#lx\n", (unsigned long)end);
+#if BITS_PER_LONG == 32
+               CWARN("Real page-wide hash collision at [%llu %llu] with hash %llu\n",
+                     le64_to_cpu(dp->ldp_hash_start),
+                     le64_to_cpu(dp->ldp_hash_end), hash_offset);
+#endif
+               /*
+                * Fetch whole overflow chain...
+                *
+                * XXX not yet.
+                */
+               goto fail;
+       }
+       *ppage = page;
+out_unlock:
+       ldlm_lock_decref(&lockh, it.it_lock_mode);
+       return rc;
+fail:
+       kunmap(page);
+       mdc_release_page(page, 1);
+       rc = -EIO;
+       goto out_unlock;
+}
+
 static int mdc_statfs(const struct lu_env *env,
                      struct obd_export *exp, struct obd_statfs *osfs,
                      __u64 max_age, __u32 flags)
@@ -1669,9 +2111,11 @@ static int mdc_ioc_swap_layouts(struct obd_export *exp,
         * with the request RPC to avoid extra RPC round trips
         */
        count = mdc_resource_get_unused(exp, &op_data->op_fid1, &cancels,
-                                       LCK_CR, MDS_INODELOCK_LAYOUT);
+                                       LCK_CR, MDS_INODELOCK_LAYOUT |
+                                       MDS_INODELOCK_XATTR);
        count += mdc_resource_get_unused(exp, &op_data->op_fid2, &cancels,
-                                        LCK_CR, MDS_INODELOCK_LAYOUT);
+                                        LCK_CR, MDS_INODELOCK_LAYOUT |
+                                        MDS_INODELOCK_XATTR);
 
        req = ptlrpc_request_alloc(class_exp2cliimp(exp),
                                   &RQF_MDS_SWAP_LAYOUTS);
@@ -2199,13 +2643,13 @@ static int mdc_import_event(struct obd_device *obd, struct obd_import *imp,
        return rc;
 }
 
-int mdc_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
-                 struct md_op_data *op_data)
+int mdc_fid_alloc(const struct lu_env *env, struct obd_export *exp,
+                 struct lu_fid *fid, struct md_op_data *op_data)
 {
        struct client_obd *cli = &exp->exp_obd->u.cli;
        struct lu_client_seq *seq = cli->cl_seq;
 
-       return seq_client_alloc_fid(NULL, seq, fid);
+       return seq_client_alloc_fid(env, seq, fid);
 }
 
 static struct obd_uuid *mdc_get_uuid(struct obd_export *exp)
@@ -2430,7 +2874,6 @@ static struct obd_ops mdc_obd_ops = {
 static struct md_ops mdc_md_ops = {
        .getstatus              = mdc_getstatus,
        .null_inode             = mdc_null_inode,
-       .find_cbdata            = mdc_find_cbdata,
        .close                  = mdc_close,
        .create                 = mdc_create,
        .done_writing           = mdc_done_writing,
@@ -2439,13 +2882,12 @@ static struct md_ops mdc_md_ops = {
        .getattr_name           = mdc_getattr_name,
        .intent_lock            = mdc_intent_lock,
        .link                   = mdc_link,
-       .is_subdir              = mdc_is_subdir,
        .rename                 = mdc_rename,
        .setattr                = mdc_setattr,
        .setxattr               = mdc_setxattr,
        .getxattr               = mdc_getxattr,
        .sync                   = mdc_sync,
-       .readpage               = mdc_readpage,
+       .read_page              = mdc_read_page,
        .unlink                 = mdc_unlink,
        .cancel_unused          = mdc_cancel_unused,
        .init_ea_size           = mdc_init_ea_size,
index e72f1fc00a1365094c42e51ee2183438549b8389..4516fff2ee55ed0d21935487912d7f7df162862b 100644 (file)
@@ -859,9 +859,6 @@ void cl_page_list_add(struct cl_page_list *plist, struct cl_page *page)
        LASSERT(page->cp_owner);
        LINVRNT(plist->pl_owner == current);
 
-       lockdep_off();
-       mutex_lock(&page->cp_mutex);
-       lockdep_on();
        LASSERT(list_empty(&page->cp_batch));
        list_add_tail(&page->cp_batch, &plist->pl_pages);
        ++plist->pl_nr;
@@ -877,12 +874,10 @@ void cl_page_list_del(const struct lu_env *env, struct cl_page_list *plist,
                      struct cl_page *page)
 {
        LASSERT(plist->pl_nr > 0);
+       LASSERT(cl_page_is_vmlocked(env, page));
        LINVRNT(plist->pl_owner == current);
 
        list_del_init(&page->cp_batch);
-       lockdep_off();
-       mutex_unlock(&page->cp_mutex);
-       lockdep_on();
        --plist->pl_nr;
        lu_ref_del_at(&page->cp_reference, &page->cp_queue_ref, "queue", plist);
        cl_page_put(env, page);
@@ -959,9 +954,6 @@ void cl_page_list_disown(const struct lu_env *env,
                LASSERT(plist->pl_nr > 0);
 
                list_del_init(&page->cp_batch);
-               lockdep_off();
-               mutex_unlock(&page->cp_mutex);
-               lockdep_on();
                --plist->pl_nr;
                /*
                 * cl_page_disown0 rather than usual cl_page_disown() is used,
index db2dc6b390736ef3c494273d6ed07c06d340d947..80c6e0e95c5f53f63b2ffeffda5fc313ef76634e 100644 (file)
@@ -151,7 +151,6 @@ struct cl_page *cl_page_alloc(const struct lu_env *env,
                INIT_LIST_HEAD(&page->cp_layers);
                INIT_LIST_HEAD(&page->cp_batch);
                INIT_LIST_HEAD(&page->cp_flight);
-               mutex_init(&page->cp_mutex);
                lu_ref_init(&page->cp_reference);
                head = o->co_lu.lo_header;
                list_for_each_entry(o, &head->loh_layers, co_lu.lo_linkage) {
@@ -478,7 +477,6 @@ static void cl_page_owner_clear(struct cl_page *page)
                LASSERT(page->cp_owner->ci_owned_nr > 0);
                page->cp_owner->ci_owned_nr--;
                page->cp_owner = NULL;
-               page->cp_task = NULL;
        }
 }
 
@@ -562,7 +560,6 @@ static int cl_page_own0(const struct lu_env *env, struct cl_io *io,
                        PASSERT(env, pg, !pg->cp_owner);
                        PASSERT(env, pg, !pg->cp_req);
                        pg->cp_owner = cl_io_top(io);
-                       pg->cp_task  = current;
                        cl_page_owner_set(pg);
                        if (pg->cp_state != CPS_FREEING) {
                                cl_page_state_set(env, pg, CPS_OWNED);
@@ -619,7 +616,6 @@ void cl_page_assume(const struct lu_env *env,
        cl_page_invoid(env, io, pg, CL_PAGE_OP(cpo_assume));
        PASSERT(env, pg, !pg->cp_owner);
        pg->cp_owner = cl_io_top(io);
-       pg->cp_task = current;
        cl_page_owner_set(pg);
        cl_page_state_set(env, pg, CPS_OWNED);
 }
@@ -860,10 +856,6 @@ void cl_page_completion(const struct lu_env *env,
        PASSERT(env, pg, pg->cp_state == cl_req_type_state(crt));
 
        CL_PAGE_HEADER(D_TRACE, env, pg, "%d %d\n", crt, ioret);
-       if (crt == CRT_READ && ioret == 0) {
-               PASSERT(env, pg, !(pg->cp_flags & CPF_READ_COMPLETED));
-               pg->cp_flags |= CPF_READ_COMPLETED;
-       }
 
        cl_page_state_set(env, pg, CPS_CACHED);
        if (crt >= CRT_NR)
@@ -989,10 +981,10 @@ void cl_page_header_print(const struct lu_env *env, void *cookie,
                          lu_printer_t printer, const struct cl_page *pg)
 {
        (*printer)(env, cookie,
-                  "page@%p[%d %p %d %d %d %p %p %#x]\n",
+                  "page@%p[%d %p %d %d %p %p]\n",
                   pg, atomic_read(&pg->cp_ref), pg->cp_obj,
-                  pg->cp_state, pg->cp_error, pg->cp_type,
-                  pg->cp_owner, pg->cp_req, pg->cp_flags);
+                  pg->cp_state, pg->cp_type,
+                  pg->cp_owner, pg->cp_req);
 }
 EXPORT_SYMBOL(cl_page_header_print);
 
index d9d2a1952b8bb7edb035f8e65f82d6202230d34e..67001674ab5d661a7a34bb823bb87f0d601ea66b 100644 (file)
@@ -40,6 +40,7 @@
 #include "../include/lprocfs_status.h"
 #include <linux/list.h>
 #include "../include/cl_object.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "llog_internal.h"
 
 struct obd_device *obd_devs[MAX_OBD_DEVICES];
@@ -56,8 +57,6 @@ unsigned int obd_dump_on_eviction;
 EXPORT_SYMBOL(obd_dump_on_eviction);
 unsigned int obd_max_dirty_pages = 256;
 EXPORT_SYMBOL(obd_max_dirty_pages);
-atomic_t obd_unstable_pages;
-EXPORT_SYMBOL(obd_unstable_pages);
 atomic_t obd_dirty_pages;
 EXPORT_SYMBOL(obd_dirty_pages);
 unsigned int obd_timeout = OBD_TIMEOUT_DEFAULT;   /* seconds */
@@ -116,19 +115,6 @@ int lustre_get_jobid(char *jobid)
 }
 EXPORT_SYMBOL(lustre_get_jobid);
 
-static inline void obd_data2conn(struct lustre_handle *conn,
-                                struct obd_ioctl_data *data)
-{
-       memset(conn, 0, sizeof(*conn));
-       conn->cookie = data->ioc_cookie;
-}
-
-static inline void obd_conn2data(struct obd_ioctl_data *data,
-                                struct lustre_handle *conn)
-{
-       data->ioc_cookie = conn->cookie;
-}
-
 static int class_resolve_dev_name(__u32 len, const char *name)
 {
        int rc;
@@ -287,13 +273,6 @@ int class_handle_ioctl(unsigned int cmd, unsigned long arg)
                goto out;
        }
 
-       case OBD_IOC_CLOSE_UUID: {
-               CDEBUG(D_IOCTL, "closing all connections to uuid %s (NOOP)\n",
-                      data->ioc_inlbuf1);
-               err = 0;
-               goto out;
-       }
-
        case OBD_IOC_GETDEVICE: {
                int     index = data->ioc_count;
                char    *status, *str;
@@ -542,23 +521,11 @@ static int __init obdclass_init(void)
 
 static void obdclass_exit(void)
 {
-       int i;
-
        int lustre_unregister_fs(void);
 
        lustre_unregister_fs();
 
        misc_deregister(&obd_psdev);
-       for (i = 0; i < class_devno_max(); i++) {
-               struct obd_device *obd = class_num2obd(i);
-
-               if (obd && obd->obd_set_up &&
-                   OBT(obd) && OBP(obd, detach)) {
-                       /* XXX should this call generic detach otherwise? */
-                       LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
-                       OBP(obd, detach)(obd);
-               }
-       }
        llog_info_fini();
        cl_global_fini();
        lu_global_fini();
index 8acf67239fa8c9e2fd50a957c509ac813ac2504c..0bd4ad20aba78a5c2f8cd169d8bfe4f9765f25a5 100644 (file)
@@ -48,10 +48,10 @@ int block_debug_setup(void *addr, int len, __u64 off, __u64 id)
        LASSERT(addr);
 
        put_unaligned_le64(off, addr);
-       put_unaligned_le64(id, addr+LPDS);
+       put_unaligned_le64(id, addr + LPDS);
        addr += len - LPDS - LPDS;
        put_unaligned_le64(off, addr);
-       put_unaligned_le64(id, addr+LPDS);
+       put_unaligned_le64(id, addr + LPDS);
 
        return 0;
 }
index 99c2da632b51431d6ca52c7b2608668fb575f35a..0bc623e5b35a2e51a36663c49410966fd4815584 100644 (file)
@@ -166,10 +166,10 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
            !type->typ_name)
                goto failed;
 
-       *(type->typ_dt_ops) = *dt_ops;
+       *type->typ_dt_ops = *dt_ops;
        /* md_ops is optional */
        if (md_ops)
-               *(type->typ_md_ops) = *md_ops;
+               *type->typ_md_ops = *md_ops;
        strcpy(type->typ_name, name);
        spin_lock_init(&type->obd_type_lock);
 
@@ -509,7 +509,7 @@ struct obd_device *class_devices_in_group(struct obd_uuid *grp_uuid, int *next)
                        continue;
                if (obd_uuid_equals(grp_uuid, &obd->obd_uuid)) {
                        if (next)
-                               *next = i+1;
+                               *next = i + 1;
                        read_unlock(&obd_dev_lock);
                        return obd;
                }
@@ -618,7 +618,7 @@ struct obd_export *class_conn2export(struct lustre_handle *conn)
        }
 
        CDEBUG(D_INFO, "looking for export cookie %#llx\n", conn->cookie);
-       export = class_handle2object(conn->cookie);
+       export = class_handle2object(conn->cookie, NULL);
        return export;
 }
 EXPORT_SYMBOL(class_conn2export);
@@ -1312,3 +1312,135 @@ void obd_zombie_impexp_stop(void)
        obd_zombie_impexp_notify();
        wait_for_completion(&obd_zombie_stop);
 }
+
+struct obd_request_slot_waiter {
+       struct list_head        orsw_entry;
+       wait_queue_head_t       orsw_waitq;
+       bool                    orsw_signaled;
+};
+
+static bool obd_request_slot_avail(struct client_obd *cli,
+                                  struct obd_request_slot_waiter *orsw)
+{
+       bool avail;
+
+       spin_lock(&cli->cl_loi_list_lock);
+       avail = !!list_empty(&orsw->orsw_entry);
+       spin_unlock(&cli->cl_loi_list_lock);
+
+       return avail;
+};
+
+/*
+ * For network flow control, the RPC sponsor needs to acquire a credit
+ * before sending the RPC. The credits count for a connection is defined
+ * by the "cl_max_rpcs_in_flight". If all the credits are occpuied, then
+ * the subsequent RPC sponsors need to wait until others released their
+ * credits, or the administrator increased the "cl_max_rpcs_in_flight".
+ */
+int obd_get_request_slot(struct client_obd *cli)
+{
+       struct obd_request_slot_waiter orsw;
+       struct l_wait_info lwi;
+       int rc;
+
+       spin_lock(&cli->cl_loi_list_lock);
+       if (cli->cl_r_in_flight < cli->cl_max_rpcs_in_flight) {
+               cli->cl_r_in_flight++;
+               spin_unlock(&cli->cl_loi_list_lock);
+               return 0;
+       }
+
+       init_waitqueue_head(&orsw.orsw_waitq);
+       list_add_tail(&orsw.orsw_entry, &cli->cl_loi_read_list);
+       orsw.orsw_signaled = false;
+       spin_unlock(&cli->cl_loi_list_lock);
+
+       lwi = LWI_INTR(LWI_ON_SIGNAL_NOOP, NULL);
+       rc = l_wait_event(orsw.orsw_waitq,
+                         obd_request_slot_avail(cli, &orsw) ||
+                         orsw.orsw_signaled,
+                         &lwi);
+
+       /*
+        * Here, we must take the lock to avoid the on-stack 'orsw' to be
+        * freed but other (such as obd_put_request_slot) is using it.
+        */
+       spin_lock(&cli->cl_loi_list_lock);
+       if (rc) {
+               if (!orsw.orsw_signaled) {
+                       if (list_empty(&orsw.orsw_entry))
+                               cli->cl_r_in_flight--;
+                       else
+                               list_del(&orsw.orsw_entry);
+               }
+       }
+
+       if (orsw.orsw_signaled) {
+               LASSERT(list_empty(&orsw.orsw_entry));
+
+               rc = -EINTR;
+       }
+       spin_unlock(&cli->cl_loi_list_lock);
+
+       return rc;
+}
+EXPORT_SYMBOL(obd_get_request_slot);
+
+void obd_put_request_slot(struct client_obd *cli)
+{
+       struct obd_request_slot_waiter *orsw;
+
+       spin_lock(&cli->cl_loi_list_lock);
+       cli->cl_r_in_flight--;
+
+       /* If there is free slot, wakeup the first waiter. */
+       if (!list_empty(&cli->cl_loi_read_list) &&
+           likely(cli->cl_r_in_flight < cli->cl_max_rpcs_in_flight)) {
+               orsw = list_entry(cli->cl_loi_read_list.next,
+                                 struct obd_request_slot_waiter, orsw_entry);
+               list_del_init(&orsw->orsw_entry);
+               cli->cl_r_in_flight++;
+               wake_up(&orsw->orsw_waitq);
+       }
+       spin_unlock(&cli->cl_loi_list_lock);
+}
+EXPORT_SYMBOL(obd_put_request_slot);
+
+__u32 obd_get_max_rpcs_in_flight(struct client_obd *cli)
+{
+       return cli->cl_max_rpcs_in_flight;
+}
+EXPORT_SYMBOL(obd_get_max_rpcs_in_flight);
+
+int obd_set_max_rpcs_in_flight(struct client_obd *cli, __u32 max)
+{
+       struct obd_request_slot_waiter *orsw;
+       __u32 old;
+       int diff;
+       int i;
+
+       if (max > OBD_MAX_RIF_MAX || max < 1)
+               return -ERANGE;
+
+       spin_lock(&cli->cl_loi_list_lock);
+       old = cli->cl_max_rpcs_in_flight;
+       cli->cl_max_rpcs_in_flight = max;
+       diff = max - old;
+
+       /* We increase the max_rpcs_in_flight, then wakeup some waiters. */
+       for (i = 0; i < diff; i++) {
+               if (list_empty(&cli->cl_loi_read_list))
+                       break;
+
+               orsw = list_entry(cli->cl_loi_read_list.next,
+                                 struct obd_request_slot_waiter, orsw_entry);
+               list_del_init(&orsw->orsw_entry);
+               cli->cl_r_in_flight++;
+               wake_up(&orsw->orsw_waitq);
+       }
+       spin_unlock(&cli->cl_loi_list_lock);
+
+       return 0;
+}
+EXPORT_SYMBOL(obd_set_max_rpcs_in_flight);
index 33342bfcc90e7030ccfe2c8807115bfbaaa96f8a..2b691d8cdf96c96125925d59baec156acd4d0e74 100644 (file)
@@ -65,6 +65,7 @@
 #include "../../include/obd_support.h"
 #include "../../include/obd_class.h"
 #include "../../include/lprocfs_status.h"
+#include "../../include/lustre/lustre_ioctl.h"
 #include "../../include/lustre_ver.h"
 
 /* buffer MUST be at least the size of obd_ioctl_hdr */
@@ -191,7 +192,7 @@ static long obd_class_ioctl(struct file *filp, unsigned int cmd,
 }
 
 /* declare character device */
-static struct file_operations obd_psdev_fops = {
+static const struct file_operations obd_psdev_fops = {
        .owner    = THIS_MODULE,
        .unlocked_ioctl = obd_class_ioctl, /* unlocked_ioctl */
        .open      = obd_class_open,      /* open */
index c6cc6a7666e323cc8b5dd26bcaa3103768e321e9..41b77a30feb3cc768ebe8d455c07a5f09060daa0 100644 (file)
@@ -44,7 +44,7 @@
 
 #include <linux/fs.h>
 
-void obdo_refresh_inode(struct inode *dst, struct obdo *src, u32 valid)
+void obdo_refresh_inode(struct inode *dst, const struct obdo *src, u32 valid)
 {
        valid &= src->o_valid;
 
index 8f70dd2686f9ddc8387dcd9d55b4445f73b54e3e..aea1abdcf29523d0b5854d8509572c19d54a4b48 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "../../include/obd_support.h"
 #include "../../include/lprocfs_status.h"
+#include "../../include/obd_class.h"
 
 struct static_lustre_uintvalue_attr {
        struct {
@@ -95,8 +96,9 @@ LUSTRE_STATIC_UINT_ATTR(timeout, &obd_timeout);
 static ssize_t max_dirty_mb_show(struct kobject *kobj, struct attribute *attr,
                                 char *buf)
 {
-       return sprintf(buf, "%ul\n",
-                       obd_max_dirty_pages / (1 << (20 - PAGE_SHIFT)));
+       return sprintf(buf, "%lu\n",
+                      (unsigned long)obd_max_dirty_pages /
+                      (1 << (20 - PAGE_SHIFT)));
 }
 
 static ssize_t max_dirty_mb_store(struct kobject *kobj, struct attribute *attr,
index 1784ca0634280de5ae5ce26b4d9b32d680174204..8f06141f93541f4b7597eeeb46f93007a9372f2a 100644 (file)
@@ -80,7 +80,7 @@ static void llog_free_handle(struct llog_handle *loghandle)
                LASSERT(list_empty(&loghandle->u.phd.phd_entry));
        else if (loghandle->lgh_hdr->llh_flags & LLOG_F_IS_CAT)
                LASSERT(list_empty(&loghandle->u.chd.chd_head));
-       LASSERT(sizeof(*(loghandle->lgh_hdr)) == LLOG_CHUNK_SIZE);
+       LASSERT(sizeof(*loghandle->lgh_hdr) == LLOG_CHUNK_SIZE);
        kfree(loghandle->lgh_hdr);
 out:
        kfree(loghandle);
index a82a2950295a8972df5ecfd082b6102b10a64611..d28751a022264f75ea4695c8361431eff956901f 100644 (file)
@@ -123,7 +123,6 @@ out:
 int llog_cat_close(const struct lu_env *env, struct llog_handle *cathandle)
 {
        struct llog_handle      *loghandle, *n;
-       int                      rc;
 
        list_for_each_entry_safe(loghandle, n, &cathandle->u.chd.chd_head,
                                 u.phd.phd_entry) {
@@ -134,8 +133,7 @@ int llog_cat_close(const struct lu_env *env, struct llog_handle *cathandle)
        /* if handle was stored in ctxt, remove it too */
        if (cathandle->lgh_ctxt->loc_handle == cathandle)
                cathandle->lgh_ctxt->loc_handle = NULL;
-       rc = llog_close(env, cathandle);
-       return rc;
+       return llog_close(env, cathandle);
 }
 EXPORT_SYMBOL(llog_cat_close);
 
index f7b9b190350ce9069b9bfb4fdddb09c01e5909fd..0ec636106ea3fb53750055d1ce9d2b5d16752cc6 100644 (file)
@@ -224,6 +224,7 @@ void lustre_swab_llog_rec(struct llog_rec_hdr *rec)
                __swab32s(&lsr->lsr_uid_h);
                __swab32s(&lsr->lsr_gid);
                __swab32s(&lsr->lsr_gid_h);
+               __swab64s(&lsr->lsr_valid);
                tail = &lsr->lsr_tail;
                break;
        }
index 279b625f1afe468d2396d2aa1f04c0d16a1487d0..be6b6af0c548063580298768ca35d3b3b9f56a01 100644 (file)
@@ -96,6 +96,12 @@ static const char * const obd_connect_names[] = {
        "pingless",
        "flock_deadlock",
        "disp_stripe",
+       "open_by_fid",
+       "lfsck",
+       "unknown",
+       "unlink_close",
+       "unknown",
+       "dir_stripe",
        "unknown",
        NULL
 };
@@ -309,7 +315,7 @@ struct dentry *ldebugfs_add_simple(struct dentry *root,
 }
 EXPORT_SYMBOL_GPL(ldebugfs_add_simple);
 
-static struct file_operations lprocfs_generic_fops = { };
+static const struct file_operations lprocfs_generic_fops = { };
 
 int ldebugfs_add_vars(struct dentry *parent,
                      struct lprocfs_vars *list,
@@ -1547,6 +1553,146 @@ void lprocfs_oh_clear(struct obd_histogram *oh)
 }
 EXPORT_SYMBOL(lprocfs_oh_clear);
 
+int lprocfs_wr_root_squash(const char __user *buffer, unsigned long count,
+                          struct root_squash_info *squash, char *name)
+{
+       char kernbuf[64], *tmp, *errmsg;
+       unsigned long uid, gid;
+       int rc;
+
+       if (count >= sizeof(kernbuf)) {
+               errmsg = "string too long";
+               rc = -EINVAL;
+               goto failed_noprint;
+       }
+       if (copy_from_user(kernbuf, buffer, count)) {
+               errmsg = "bad address";
+               rc = -EFAULT;
+               goto failed_noprint;
+       }
+       kernbuf[count] = '\0';
+
+       /* look for uid gid separator */
+       tmp = strchr(kernbuf, ':');
+       if (!tmp) {
+               errmsg = "needs uid:gid format";
+               rc = -EINVAL;
+               goto failed;
+       }
+       *tmp = '\0';
+       tmp++;
+
+       /* parse uid */
+       if (kstrtoul(kernbuf, 0, &uid) != 0) {
+               errmsg = "bad uid";
+               rc = -EINVAL;
+               goto failed;
+       }
+       /* parse gid */
+       if (kstrtoul(tmp, 0, &gid) != 0) {
+               errmsg = "bad gid";
+               rc = -EINVAL;
+               goto failed;
+       }
+
+       squash->rsi_uid = uid;
+       squash->rsi_gid = gid;
+
+       LCONSOLE_INFO("%s: root_squash is set to %u:%u\n",
+                     name, squash->rsi_uid, squash->rsi_gid);
+       return count;
+
+failed:
+       if (tmp) {
+               tmp--;
+               *tmp = ':';
+       }
+       CWARN("%s: failed to set root_squash to \"%s\", %s, rc = %d\n",
+             name, kernbuf, errmsg, rc);
+       return rc;
+failed_noprint:
+       CWARN("%s: failed to set root_squash due to %s, rc = %d\n",
+             name, errmsg, rc);
+       return rc;
+}
+EXPORT_SYMBOL(lprocfs_wr_root_squash);
+
+int lprocfs_wr_nosquash_nids(const char __user *buffer, unsigned long count,
+                            struct root_squash_info *squash, char *name)
+{
+       char *kernbuf = NULL, *errmsg;
+       struct list_head tmp;
+       int len = count;
+       int rc;
+
+       if (count > 4096) {
+               errmsg = "string too long";
+               rc = -EINVAL;
+               goto failed;
+       }
+
+       kernbuf = kzalloc(count + 1, GFP_NOFS);
+       if (!kernbuf) {
+               errmsg = "no memory";
+               rc = -ENOMEM;
+               goto failed;
+       }
+
+       if (copy_from_user(kernbuf, buffer, count)) {
+               errmsg = "bad address";
+               rc = -EFAULT;
+               goto failed;
+       }
+       kernbuf[count] = '\0';
+
+       if (count > 0 && kernbuf[count - 1] == '\n')
+               len = count - 1;
+
+       if ((len == 4 && !strncmp(kernbuf, "NONE", len)) ||
+           (len == 5 && !strncmp(kernbuf, "clear", len))) {
+               /* empty string is special case */
+               down_write(&squash->rsi_sem);
+               if (!list_empty(&squash->rsi_nosquash_nids))
+                       cfs_free_nidlist(&squash->rsi_nosquash_nids);
+               up_write(&squash->rsi_sem);
+               LCONSOLE_INFO("%s: nosquash_nids is cleared\n", name);
+               kfree(kernbuf);
+               return count;
+       }
+
+       INIT_LIST_HEAD(&tmp);
+       if (cfs_parse_nidlist(kernbuf, count, &tmp) <= 0) {
+               errmsg = "can't parse";
+               rc = -EINVAL;
+               goto failed;
+       }
+       LCONSOLE_INFO("%s: nosquash_nids set to %s\n",
+                     name, kernbuf);
+       kfree(kernbuf);
+       kernbuf = NULL;
+
+       down_write(&squash->rsi_sem);
+       if (!list_empty(&squash->rsi_nosquash_nids))
+               cfs_free_nidlist(&squash->rsi_nosquash_nids);
+       list_splice(&tmp, &squash->rsi_nosquash_nids);
+       up_write(&squash->rsi_sem);
+
+       return count;
+
+failed:
+       if (kernbuf) {
+               CWARN("%s: failed to set nosquash_nids to \"%s\", %s rc = %d\n",
+                     name, kernbuf, errmsg, rc);
+               kfree(kernbuf);
+               kernbuf = NULL;
+       } else {
+               CWARN("%s: failed to set nosquash_nids due to %s rc = %d\n",
+                     name, errmsg, rc);
+       }
+       return rc;
+}
+EXPORT_SYMBOL(lprocfs_wr_nosquash_nids);
+
 static ssize_t lustre_attr_show(struct kobject *kobj,
                                struct attribute *attr, char *buf)
 {
index 9b03059f34d63f585232ed4e55e4ab1964b0ed82..9d1c96b8ab7355c38846eb260270735315f9f551 100644 (file)
 #include "../include/lu_ref.h"
 #include <linux/list.h>
 
+enum {
+       LU_CACHE_PERCENT_MAX     = 50,
+       LU_CACHE_PERCENT_DEFAULT = 20
+};
+
+#define LU_CACHE_NR_MAX_ADJUST         128
+#define LU_CACHE_NR_UNLIMITED          -1
+#define LU_CACHE_NR_DEFAULT            LU_CACHE_NR_UNLIMITED
+#define LU_CACHE_NR_LDISKFS_LIMIT      LU_CACHE_NR_UNLIMITED
+#define LU_CACHE_NR_ZFS_LIMIT          256
+
+#define LU_SITE_BITS_MIN       12
+#define LU_SITE_BITS_MAX       24
+/**
+ * total 256 buckets, we don't want too many buckets because:
+ * - consume too much memory
+ * - avoid unbalanced LRU list
+ */
+#define LU_SITE_BKT_BITS       8
+
+static unsigned int lu_cache_percent = LU_CACHE_PERCENT_DEFAULT;
+module_param(lu_cache_percent, int, 0644);
+MODULE_PARM_DESC(lu_cache_percent, "Percentage of memory to be used as lu_object cache");
+
+static long lu_cache_nr = LU_CACHE_NR_DEFAULT;
+module_param(lu_cache_nr, long, 0644);
+MODULE_PARM_DESC(lu_cache_nr, "Maximum number of objects in lu_object cache");
+
 static void lu_object_free(const struct lu_env *env, struct lu_object *o);
 static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx);
 
@@ -573,6 +601,27 @@ static struct lu_object *lu_object_find(const struct lu_env *env,
        return lu_object_find_at(env, dev->ld_site->ls_top_dev, f, conf);
 }
 
+/*
+ * Limit the lu_object cache to a maximum of lu_cache_nr objects.  Because
+ * the calculation for the number of objects to reclaim is not covered by
+ * a lock the maximum number of objects is capped by LU_CACHE_MAX_ADJUST.
+ * This ensures that many concurrent threads will not accidentally purge
+ * the entire cache.
+ */
+static void lu_object_limit(const struct lu_env *env, struct lu_device *dev)
+{
+       __u64 size, nr;
+
+       if (lu_cache_nr == LU_CACHE_NR_UNLIMITED)
+               return;
+
+       size = cfs_hash_size_get(dev->ld_site->ls_obj_hash);
+       nr = (__u64)lu_cache_nr;
+       if (size > nr)
+               lu_site_purge(env, dev->ld_site,
+                             min_t(__u64, size - nr, LU_CACHE_NR_MAX_ADJUST));
+}
+
 static struct lu_object *lu_object_new(const struct lu_env *env,
                                       struct lu_device *dev,
                                       const struct lu_fid *f,
@@ -590,6 +639,9 @@ static struct lu_object *lu_object_new(const struct lu_env *env,
        cfs_hash_bd_get_and_lock(hs, (void *)f, &bd, 1);
        cfs_hash_bd_add_locked(hs, &bd, &o->lo_header->loh_hash);
        cfs_hash_bd_unlock(hs, &bd, 1);
+
+       lu_object_limit(env, dev);
+
        return o;
 }
 
@@ -656,6 +708,9 @@ static struct lu_object *lu_object_find_try(const struct lu_env *env,
        if (likely(PTR_ERR(shadow) == -ENOENT)) {
                cfs_hash_bd_add_locked(hs, &bd, &o->lo_header->loh_hash);
                cfs_hash_bd_unlock(hs, &bd, 1);
+
+               lu_object_limit(env, dev);
+
                return o;
        }
 
@@ -726,34 +781,31 @@ int lu_device_type_init(struct lu_device_type *ldt)
 {
        int result = 0;
 
+       atomic_set(&ldt->ldt_device_nr, 0);
        INIT_LIST_HEAD(&ldt->ldt_linkage);
        if (ldt->ldt_ops->ldto_init)
                result = ldt->ldt_ops->ldto_init(ldt);
-       if (result == 0)
+
+       if (!result) {
+               spin_lock(&obd_types_lock);
                list_add(&ldt->ldt_linkage, &lu_device_types);
+               spin_unlock(&obd_types_lock);
+       }
+
        return result;
 }
 EXPORT_SYMBOL(lu_device_type_init);
 
 void lu_device_type_fini(struct lu_device_type *ldt)
 {
+       spin_lock(&obd_types_lock);
        list_del_init(&ldt->ldt_linkage);
+       spin_unlock(&obd_types_lock);
        if (ldt->ldt_ops->ldto_fini)
                ldt->ldt_ops->ldto_fini(ldt);
 }
 EXPORT_SYMBOL(lu_device_type_fini);
 
-void lu_types_stop(void)
-{
-       struct lu_device_type *ldt;
-
-       list_for_each_entry(ldt, &lu_device_types, ldt_linkage) {
-               if (ldt->ldt_device_nr == 0 && ldt->ldt_ops->ldto_stop)
-                       ldt->ldt_ops->ldto_stop(ldt);
-       }
-}
-EXPORT_SYMBOL(lu_types_stop);
-
 /**
  * Global list of all sites on this node
  */
@@ -808,20 +860,12 @@ void lu_site_print(const struct lu_env *env, struct lu_site *s, void *cookie,
 }
 EXPORT_SYMBOL(lu_site_print);
 
-enum {
-       LU_CACHE_PERCENT_MAX     = 50,
-       LU_CACHE_PERCENT_DEFAULT = 20
-};
-
-static unsigned int lu_cache_percent = LU_CACHE_PERCENT_DEFAULT;
-module_param(lu_cache_percent, int, 0644);
-MODULE_PARM_DESC(lu_cache_percent, "Percentage of memory to be used as lu_object cache");
-
 /**
  * Return desired hash table order.
  */
-static int lu_htable_order(void)
+static int lu_htable_order(struct lu_device *top)
 {
+       unsigned long bits_max = LU_SITE_BITS_MAX;
        unsigned long cache_size;
        int bits;
 
@@ -854,7 +898,7 @@ static int lu_htable_order(void)
        for (bits = 1; (1 << bits) < cache_size; ++bits) {
                ;
        }
-       return bits;
+       return clamp_t(typeof(bits), bits, LU_SITE_BITS_MIN, bits_max);
 }
 
 static unsigned lu_obj_hop_hash(struct cfs_hash *hs,
@@ -930,28 +974,17 @@ static void lu_dev_add_linkage(struct lu_site *s, struct lu_device *d)
 /**
  * Initialize site \a s, with \a d as the top level device.
  */
-#define LU_SITE_BITS_MIN    12
-#define LU_SITE_BITS_MAX    19
-/**
- * total 256 buckets, we don't want too many buckets because:
- * - consume too much memory
- * - avoid unbalanced LRU list
- */
-#define LU_SITE_BKT_BITS    8
-
 int lu_site_init(struct lu_site *s, struct lu_device *top)
 {
        struct lu_site_bkt_data *bkt;
        struct cfs_hash_bd bd;
+       unsigned long bits;
+       unsigned long i;
        char name[16];
-       int bits;
-       int i;
 
        memset(s, 0, sizeof(*s));
-       bits = lu_htable_order();
        snprintf(name, 16, "lu_site_%s", top->ld_type->ldt_name);
-       for (bits = min(max(LU_SITE_BITS_MIN, bits), LU_SITE_BITS_MAX);
-            bits >= LU_SITE_BITS_MIN; bits--) {
+       for (bits = lu_htable_order(top); bits >= LU_SITE_BITS_MIN; bits--) {
                s->ls_obj_hash = cfs_hash_create(name, bits, bits,
                                                 bits - LU_SITE_BKT_BITS,
                                                 sizeof(*bkt), 0, 0,
@@ -959,13 +992,14 @@ int lu_site_init(struct lu_site *s, struct lu_device *top)
                                                 CFS_HASH_SPIN_BKTLOCK |
                                                 CFS_HASH_NO_ITEMREF |
                                                 CFS_HASH_DEPTH |
-                                                CFS_HASH_ASSERT_EMPTY);
+                                                CFS_HASH_ASSERT_EMPTY |
+                                                CFS_HASH_COUNTER);
                if (s->ls_obj_hash)
                        break;
        }
 
        if (!s->ls_obj_hash) {
-               CERROR("failed to create lu_site hash with bits: %d\n", bits);
+               CERROR("failed to create lu_site hash with bits: %lu\n", bits);
                return -ENOMEM;
        }
 
@@ -1082,8 +1116,10 @@ EXPORT_SYMBOL(lu_device_put);
  */
 int lu_device_init(struct lu_device *d, struct lu_device_type *t)
 {
-       if (t->ldt_device_nr++ == 0 && t->ldt_ops->ldto_start)
+       if (atomic_inc_return(&t->ldt_device_nr) == 1 &&
+           t->ldt_ops->ldto_start)
                t->ldt_ops->ldto_start(t);
+
        memset(d, 0, sizeof(*d));
        atomic_set(&d->ld_ref, 0);
        d->ld_type = t;
@@ -1098,9 +1134,8 @@ EXPORT_SYMBOL(lu_device_init);
  */
 void lu_device_fini(struct lu_device *d)
 {
-       struct lu_device_type *t;
+       struct lu_device_type *t = d->ld_type;
 
-       t = d->ld_type;
        if (d->ld_obd) {
                d->ld_obd->obd_lu_dev = NULL;
                d->ld_obd = NULL;
@@ -1109,8 +1144,10 @@ void lu_device_fini(struct lu_device *d)
        lu_ref_fini(&d->ld_reference);
        LASSERTF(atomic_read(&d->ld_ref) == 0,
                 "Refcount is %u\n", atomic_read(&d->ld_ref));
-       LASSERT(t->ldt_device_nr > 0);
-       if (--t->ldt_device_nr == 0 && t->ldt_ops->ldto_stop)
+       LASSERT(atomic_read(&t->ldt_device_nr) > 0);
+
+       if (atomic_dec_and_test(&t->ldt_device_nr) &&
+           t->ldt_ops->ldto_stop)
                t->ldt_ops->ldto_stop(t);
 }
 EXPORT_SYMBOL(lu_device_fini);
index 082f530c527c31f4aa5b9023f976f9d16579a3f4..8faa318bf6b4e7a3c7a6d8b35e6f5323f07f3dc8 100644 (file)
@@ -130,7 +130,7 @@ void class_handle_unhash(struct portals_handle *h)
 }
 EXPORT_SYMBOL(class_handle_unhash);
 
-void *class_handle2object(__u64 cookie)
+void *class_handle2object(__u64 cookie, const void *owner)
 {
        struct handle_bucket *bucket;
        struct portals_handle *h;
@@ -145,7 +145,7 @@ void *class_handle2object(__u64 cookie)
 
        rcu_read_lock();
        list_for_each_entry_rcu(h, &bucket->head, h_link) {
-               if (h->h_cookie != cookie)
+               if (h->h_cookie != cookie || h->h_owner != owner)
                        continue;
 
                spin_lock(&h->h_lock);
@@ -214,7 +214,7 @@ static int cleanup_all_handles(void)
                struct portals_handle *h;
 
                spin_lock(&handle_hash[i].lock);
-               list_for_each_entry_rcu(h, &(handle_hash[i].head), h_link) {
+               list_for_each_entry_rcu(h, &handle_hash[i].head, h_link) {
                        CERROR("force clean handle %#llx addr %p ops %p\n",
                               h->h_cookie, h, h->h_ops);
 
index 0eab1236501bd4d77b7bf870d483c3525edd928b..b7dcadbbc0e307bb4e54cf7573e7fc583d452d12 100644 (file)
@@ -37,6 +37,7 @@
 #define DEBUG_SUBSYSTEM S_CLASS
 #include "../include/obd_class.h"
 #include <linux/string.h>
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_log.h"
 #include "../include/lprocfs_status.h"
 #include "../include/lustre_param.h"
@@ -237,7 +238,7 @@ static int class_attach(struct lustre_cfg *lcfg)
        /* recovery data */
        init_waitqueue_head(&obd->obd_evict_inprogress_waitq);
 
-       llog_group_init(&obd->obd_olg, FID_SEQ_LLOG);
+       llog_group_init(&obd->obd_olg);
 
        obd->obd_conn_inprogress = 0;
 
@@ -250,15 +251,6 @@ static int class_attach(struct lustre_cfg *lcfg)
        }
        memcpy(obd->obd_uuid.uuid, uuid, len);
 
-       /* do the attach */
-       if (OBP(obd, attach)) {
-               rc = OBP(obd, attach)(obd, sizeof(*lcfg), lcfg);
-               if (rc) {
-                       rc = -EINVAL;
-                       goto out;
-               }
-       }
-
        /* Detach drops this */
        spin_lock(&obd->obd_dev_lock);
        atomic_set(&obd->obd_refcount, 1);
@@ -526,11 +518,6 @@ void class_decref(struct obd_device *obd, const char *scope, const void *source)
                                CERROR("Cleanup %s returned %d\n",
                                       obd->obd_name, err);
                }
-               if (OBP(obd, detach)) {
-                       err = OBP(obd, detach)(obd);
-                       if (err)
-                               CERROR("Detach returned %d\n", err);
-               }
                class_release_dev(obd);
        }
 }
@@ -1026,7 +1013,7 @@ int class_process_proc_param(char *prefix, struct lprocfs_vars *lvars,
 
                                        oldfs = get_fs();
                                        set_fs(KERNEL_DS);
-                                       rc = (var->fops->write)(&fakefile, sval,
+                                       rc = var->fops->write(&fakefile, sval,
                                                                vallen, NULL);
                                        set_fs(oldfs);
                                }
@@ -1317,33 +1304,33 @@ static int class_config_parse_rec(struct llog_rec_hdr *rec, char *buf,
        if (rc < 0)
                return rc;
 
-       ptr += snprintf(ptr, end-ptr, "cmd=%05x ", lcfg->lcfg_command);
+       ptr += snprintf(ptr, end - ptr, "cmd=%05x ", lcfg->lcfg_command);
        if (lcfg->lcfg_flags)
-               ptr += snprintf(ptr, end-ptr, "flags=%#08x ",
+               ptr += snprintf(ptr, end - ptr, "flags=%#08x ",
                                lcfg->lcfg_flags);
 
        if (lcfg->lcfg_num)
-               ptr += snprintf(ptr, end-ptr, "num=%#08x ", lcfg->lcfg_num);
+               ptr += snprintf(ptr, end - ptr, "num=%#08x ", lcfg->lcfg_num);
 
        if (lcfg->lcfg_nid) {
                char nidstr[LNET_NIDSTR_SIZE];
 
                libcfs_nid2str_r(lcfg->lcfg_nid, nidstr, sizeof(nidstr));
-               ptr += snprintf(ptr, end-ptr, "nid=%s(%#llx)\n     ",
+               ptr += snprintf(ptr, end - ptr, "nid=%s(%#llx)\n     ",
                                nidstr, lcfg->lcfg_nid);
        }
 
        if (lcfg->lcfg_command == LCFG_MARKER) {
                struct cfg_marker *marker = lustre_cfg_buf(lcfg, 1);
 
-               ptr += snprintf(ptr, end-ptr, "marker=%d(%#x)%s '%s'",
+               ptr += snprintf(ptr, end - ptr, "marker=%d(%#x)%s '%s'",
                                marker->cm_step, marker->cm_flags,
                                marker->cm_tgtname, marker->cm_comment);
        } else {
                int i;
 
                for (i = 0; i <  lcfg->lcfg_bufcount; i++) {
-                       ptr += snprintf(ptr, end-ptr, "%d:%s  ", i,
+                       ptr += snprintf(ptr, end - ptr, "%d:%s  ", i,
                                        lustre_cfg_string(lcfg, i));
                }
        }
index aa84a50e99041eda799dfa209da575ecbcd7fe8e..0273768fdda8f46d5c8325f4696a8010c569ae43 100644 (file)
@@ -37,7 +37,7 @@
  */
 
 #define DEBUG_SUBSYSTEM S_CLASS
-#define D_MOUNT (D_SUPER|D_CONFIG/*|D_WARNING */)
+#define D_MOUNT (D_SUPER | D_CONFIG/*|D_WARNING */)
 #define PRINT_CMD CDEBUG
 
 #include "../include/obd.h"
@@ -68,7 +68,7 @@ static void (*kill_super_cb)(struct super_block *sb);
  *   this log, and is added to the mgc's list of logs to follow.
  */
 int lustre_process_log(struct super_block *sb, char *logname,
-                     struct config_llog_instance *cfg)
+                      struct config_llog_instance *cfg)
 {
        struct lustre_cfg *lcfg;
        struct lustre_cfg_bufs *bufs;
@@ -394,7 +394,7 @@ int lustre_start_mgc(struct super_block *sb)
            lsi->lsi_lmd->lmd_flags & LMD_FLG_NOIR)
                data->ocd_connect_flags &= ~OBD_CONNECT_IMP_RECOV;
        data->ocd_version = LUSTRE_VERSION_CODE;
-       rc = obd_connect(NULL, &exp, obd, &(obd->obd_uuid), data, NULL);
+       rc = obd_connect(NULL, &exp, obd, &obd->obd_uuid, data, NULL);
        if (rc) {
                CERROR("connect failed %d\n", rc);
                goto out;
@@ -670,7 +670,6 @@ int lustre_common_put_super(struct super_block *sb)
        }
        /* Drop a ref to the mounted disk */
        lustre_put_lsi(sb);
-       lu_types_stop();
        return rc;
 }
 EXPORT_SYMBOL(lustre_common_put_super);
@@ -731,7 +730,7 @@ int lustre_check_exclusion(struct super_block *sb, char *svname)
 static int lmd_make_exclusion(struct lustre_mount_data *lmd, const char *ptr)
 {
        const char *s1 = ptr, *s2;
-       __u32 index, *exclude_list;
+       __u32 index = 0, *exclude_list;
        int rc = 0, devmax;
 
        /* The shortest an ost name can be is 8 chars: -OST0000.
@@ -758,7 +757,7 @@ static int lmd_make_exclusion(struct lustre_mount_data *lmd, const char *ptr)
                        exclude_list[lmd->lmd_exclude_count++] = index;
                else
                        CDEBUG(D_MOUNT, "ignoring exclude %.*s: type = %#x\n",
-                              (uint)(s2-s1), s1, rc);
+                              (uint)(s2 - s1), s1, rc);
                s1 = s2;
                /* now we are pointing at ':' (next exclude)
                 * or ',' (end of excludes)
@@ -880,7 +879,7 @@ static int lmd_parse_mgs(struct lustre_mount_data *lmd, char **ptr)
  */
 static int lmd_parse(char *options, struct lustre_mount_data *lmd)
 {
-       char *s1, *s2, *devname = NULL;
+       char *s1, *s2, *s3, *devname = NULL;
        struct lustre_mount_data *raw = (struct lustre_mount_data *)options;
        int rc = 0;
 
@@ -913,6 +912,7 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                /* Skip whitespace and extra commas */
                while (*s1 == ' ' || *s1 == ',')
                        s1++;
+               s3 = s1;
 
                /* Client options are parsed in ll_options: eg. flock,
                 * user_xattr, acl
@@ -970,6 +970,7 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                        rc = lmd_parse_mgssec(lmd, s1 + 7);
                        if (rc)
                                goto invalid;
+                       s3 = s2;
                        clear++;
                /* ost exclusion list */
                } else if (strncmp(s1, "exclude=", 8) == 0) {
@@ -990,10 +991,19 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                        size_t length, params_length;
                        char *tail = strchr(s1 + 6, ',');
 
-                       if (!tail)
+                       if (!tail) {
                                length = strlen(s1);
-                       else
-                               length = tail - s1;
+                       } else {
+                               lnet_nid_t nid;
+                               char *param_str = tail + 1;
+                               int supplementary = 1;
+
+                               while (!class_parse_nid_quiet(param_str, &nid,
+                                                             &param_str)) {
+                                       supplementary = 0;
+                               }
+                               length = param_str - s1 - supplementary;
+                       }
                        length -= 6;
                        params_length = strlen(lmd->lmd_params);
                        if (params_length + length + 1 >= LMD_PARAMS_MAXLEN)
@@ -1001,6 +1011,7 @@ static int lmd_parse(char *options, struct lustre_mount_data *lmd)
                        strncat(lmd->lmd_params, s1 + 6, length);
                        lmd->lmd_params[params_length + length] = '\0';
                        strlcat(lmd->lmd_params, " ", LMD_PARAMS_MAXLEN);
+                       s3 = s1 + 6 + length;
                        clear++;
                } else if (strncmp(s1, "osd=", 4) == 0) {
                        rc = lmd_parse_string(&lmd->lmd_osd_type, s1 + 4);
@@ -1097,7 +1108,7 @@ static int lustre_fill_super(struct super_block *sb, void *data, int silent)
        struct lustre_sb_info *lsi;
        int rc;
 
-       CDEBUG(D_MOUNT|D_VFSTRACE, "VFS Op: sb %p\n", sb);
+       CDEBUG(D_MOUNT | D_VFSTRACE, "VFS Op: sb %p\n", sb);
 
        lsi = lustre_init_lsi(sb);
        if (!lsi)
@@ -1133,7 +1144,7 @@ static int lustre_fill_super(struct super_block *sb, void *data, int silent)
                } else {
                        rc = lustre_start_mgc(sb);
                        if (rc) {
-                               lustre_put_lsi(sb);
+                               lustre_common_put_super(sb);
                                goto out;
                        }
                        /* Connect and start */
index 8583a4a8c206ef4d3f4e04d9b3b537ec83c6cd96..79104a66da96b68da15fc1e9474871eeed965852 100644 (file)
@@ -112,7 +112,7 @@ void obdo_from_inode(struct obdo *dst, struct inode *src, u32 valid)
 }
 EXPORT_SYMBOL(obdo_from_inode);
 
-void obdo_to_ioobj(struct obdo *oa, struct obd_ioobj *ioobj)
+void obdo_to_ioobj(const struct obdo *oa, struct obd_ioobj *ioobj)
 {
        ioobj->ioo_oid = oa->o_oi;
        if (unlikely(!(oa->o_valid & OBD_MD_FLGROUP)))
@@ -125,7 +125,8 @@ void obdo_to_ioobj(struct obdo *oa, struct obd_ioobj *ioobj)
 }
 EXPORT_SYMBOL(obdo_to_ioobj);
 
-static void iattr_from_obdo(struct iattr *attr, struct obdo *oa, u32 valid)
+static void iattr_from_obdo(struct iattr *attr, const struct obdo *oa,
+                           u32 valid)
 {
        valid &= oa->o_valid;
 
@@ -152,12 +153,14 @@ static void iattr_from_obdo(struct iattr *attr, struct obdo *oa, u32 valid)
        }
 #if 0   /* you shouldn't be able to change a file's type with setattr */
        if (valid & OBD_MD_FLTYPE) {
-               attr->ia_mode = (attr->ia_mode & ~S_IFMT)|(oa->o_mode & S_IFMT);
+               attr->ia_mode = (attr->ia_mode & ~S_IFMT) |
+                               (oa->o_mode & S_IFMT);
                attr->ia_valid |= ATTR_MODE;
        }
 #endif
        if (valid & OBD_MD_FLMODE) {
-               attr->ia_mode = (attr->ia_mode & S_IFMT)|(oa->o_mode & ~S_IFMT);
+               attr->ia_mode = (attr->ia_mode & S_IFMT) |
+                               (oa->o_mode & ~S_IFMT);
                attr->ia_valid |= ATTR_MODE;
                if (!in_group_p(make_kgid(&init_user_ns, oa->o_gid)) &&
                    !capable(CFS_CAP_FSETID))
@@ -173,7 +176,7 @@ static void iattr_from_obdo(struct iattr *attr, struct obdo *oa, u32 valid)
        }
 }
 
-void md_from_obdo(struct md_op_data *op_data, struct obdo *oa, u32 valid)
+void md_from_obdo(struct md_op_data *op_data, const struct obdo *oa, u32 valid)
 {
        iattr_from_obdo(&op_data->op_attr, oa, valid);
        if (valid & OBD_MD_FLBLOCKS) {
index 5b29c4a44fe5080f25ed6018ce51484152b3b33e..75271127ec3946af98ad5c1ca075f82a07a6f07e 100644 (file)
@@ -41,6 +41,7 @@
 #include "../include/cl_object.h"
 #include "../include/lustre_fid.h"
 #include "../include/lustre_acl.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_net.h"
 
 #include "echo_internal.h"
@@ -1442,7 +1443,6 @@ static int echo_client_prep_commit(const struct lu_env *env,
                }
 
                ioo.ioo_bufcnt = npages;
-               oti->oti_transno = 0;
 
                lpages = npages;
                ret = obd_preprw(env, rw, exp, oa, 1, &ioo, rnb, &lpages,
index f5034a253f6d3959b2bab205732e88a206c4e138..966414fd5424d0de71ac2bc2ddbe57b1f3ed0c80 100644 (file)
@@ -33,9 +33,9 @@
 
 /* The persistent object (i.e. actually stores stuff!) */
 #define ECHO_PERSISTENT_OBJID    1ULL
-#define ECHO_PERSISTENT_SIZE     ((__u64)(1<<20))
+#define ECHO_PERSISTENT_SIZE     ((__u64)(1 << 20))
 
 /* block size to use for data verification */
-#define OBD_ECHO_BLOCK_SIZE    (4<<10)
+#define OBD_ECHO_BLOCK_SIZE    (4 << 10)
 
 #endif
index 7e83d395b9986a2688de6b8b6aa417075a06c2b3..9172b78ac00b4f540ff88971d9ca1667d9b2f36d 100644 (file)
@@ -119,6 +119,7 @@ static ssize_t max_rpcs_in_flight_store(struct kobject *kobj,
 
        spin_lock(&cli->cl_loi_list_lock);
        cli->cl_max_rpcs_in_flight = val;
+       client_adjust_max_dirty(cli);
        spin_unlock(&cli->cl_loi_list_lock);
 
        return count;
@@ -136,10 +137,10 @@ static ssize_t max_dirty_mb_show(struct kobject *kobj,
        int mult;
 
        spin_lock(&cli->cl_loi_list_lock);
-       val = cli->cl_dirty_max;
+       val = cli->cl_dirty_max_pages;
        spin_unlock(&cli->cl_loi_list_lock);
 
-       mult = 1 << 20;
+       mult = 1 << (20 - PAGE_SHIFT);
        return lprocfs_read_frac_helper(buf, PAGE_SIZE, val, mult);
 }
 
@@ -166,7 +167,7 @@ static ssize_t max_dirty_mb_store(struct kobject *kobj,
                return -ERANGE;
 
        spin_lock(&cli->cl_loi_list_lock);
-       cli->cl_dirty_max = (u32)(pages_number << PAGE_SHIFT);
+       cli->cl_dirty_max_pages = pages_number;
        osc_wake_cache_waiters(cli);
        spin_unlock(&cli->cl_loi_list_lock);
 
@@ -244,7 +245,7 @@ static ssize_t cur_dirty_bytes_show(struct kobject *kobj,
        int len;
 
        spin_lock(&cli->cl_loi_list_lock);
-       len = sprintf(buf, "%lu\n", cli->cl_dirty);
+       len = sprintf(buf, "%lu\n", cli->cl_dirty_pages << PAGE_SHIFT);
        spin_unlock(&cli->cl_loi_list_lock);
 
        return len;
@@ -583,6 +584,7 @@ static ssize_t max_pages_per_rpc_store(struct kobject *kobj,
        }
        spin_lock(&cli->cl_loi_list_lock);
        cli->cl_max_pages_per_rpc = val;
+       client_adjust_max_dirty(cli);
        spin_unlock(&cli->cl_loi_list_lock);
 
        return count;
index d011135802d59313c109005e4c5f760615740c56..97f936eada5d3b4c002ecc5f38c31932c87d0bee 100644 (file)
@@ -958,8 +958,8 @@ static int osc_extent_wait(const struct lu_env *env, struct osc_extent *ext,
        rc = l_wait_event(ext->oe_waitq, extent_wait_cb(ext, state), &lwi);
        if (rc == -ETIMEDOUT) {
                OSC_EXTENT_DUMP(D_ERROR, ext,
-                       "%s: wait ext to %d timedout, recovery in progress?\n",
-                       osc_export(obj)->exp_obd->obd_name, state);
+                               "%s: wait ext to %d timedout, recovery in progress?\n",
+                               osc_export(obj)->exp_obd->obd_name, state);
 
                lwi = LWI_INTR(NULL, NULL);
                rc = l_wait_event(ext->oe_waitq, extent_wait_cb(ext, state),
@@ -1384,13 +1384,11 @@ static int osc_completion(const struct lu_env *env, struct osc_async_page *oap,
 #define OSC_DUMP_GRANT(lvl, cli, fmt, args...) do {                          \
        struct client_obd *__tmp = (cli);                                     \
        CDEBUG(lvl, "%s: grant { dirty: %ld/%ld dirty_pages: %d/%d "          \
-              "unstable_pages: %d/%d dropped: %ld avail: %ld, "              \
-              "reserved: %ld, flight: %d } lru {in list: %d, "               \
-              "left: %d, waiters: %d }" fmt,                                 \
+              "dropped: %ld avail: %ld, reserved: %ld, flight: %d }"         \
+              "lru {in list: %d, left: %d, waiters: %d }" fmt,               \
               __tmp->cl_import->imp_obd->obd_name,                           \
-              __tmp->cl_dirty, __tmp->cl_dirty_max,                          \
+              __tmp->cl_dirty_pages, __tmp->cl_dirty_max_pages,              \
               atomic_read(&obd_dirty_pages), obd_max_dirty_pages,            \
-              atomic_read(&obd_unstable_pages), obd_max_dirty_pages,         \
               __tmp->cl_lost_grant, __tmp->cl_avail_grant,                   \
               __tmp->cl_reserved_grant, __tmp->cl_w_in_flight,               \
               atomic_read(&__tmp->cl_lru_in_list),                           \
@@ -1405,7 +1403,7 @@ static void osc_consume_write_grant(struct client_obd *cli,
        assert_spin_locked(&cli->cl_loi_list_lock);
        LASSERT(!(pga->flag & OBD_BRW_FROM_GRANT));
        atomic_inc(&obd_dirty_pages);
-       cli->cl_dirty += PAGE_SIZE;
+       cli->cl_dirty_pages++;
        pga->flag |= OBD_BRW_FROM_GRANT;
        CDEBUG(D_CACHE, "using %lu grant credits for brw %p page %p\n",
               PAGE_SIZE, pga, pga->pg);
@@ -1425,11 +1423,11 @@ static void osc_release_write_grant(struct client_obd *cli,
 
        pga->flag &= ~OBD_BRW_FROM_GRANT;
        atomic_dec(&obd_dirty_pages);
-       cli->cl_dirty -= PAGE_SIZE;
+       cli->cl_dirty_pages--;
        if (pga->flag & OBD_BRW_NOCACHE) {
                pga->flag &= ~OBD_BRW_NOCACHE;
                atomic_dec(&obd_dirty_transit_pages);
-               cli->cl_dirty_transit -= PAGE_SIZE;
+               cli->cl_dirty_transit--;
        }
 }
 
@@ -1498,7 +1496,7 @@ static void osc_free_grant(struct client_obd *cli, unsigned int nr_pages,
 
        spin_lock(&cli->cl_loi_list_lock);
        atomic_sub(nr_pages, &obd_dirty_pages);
-       cli->cl_dirty -= nr_pages << PAGE_SHIFT;
+       cli->cl_dirty_pages -= nr_pages;
        cli->cl_lost_grant += lost_grant;
        if (cli->cl_avail_grant < grant && cli->cl_lost_grant >= grant) {
                /* borrow some grant from truncate to avoid the case that
@@ -1511,7 +1509,7 @@ static void osc_free_grant(struct client_obd *cli, unsigned int nr_pages,
        spin_unlock(&cli->cl_loi_list_lock);
        CDEBUG(D_CACHE, "lost %u grant: %lu avail: %lu dirty: %lu\n",
               lost_grant, cli->cl_lost_grant,
-              cli->cl_avail_grant, cli->cl_dirty);
+              cli->cl_avail_grant, cli->cl_dirty_pages << PAGE_SHIFT);
 }
 
 /**
@@ -1541,12 +1539,11 @@ static int osc_enter_cache_try(struct client_obd *cli,
        if (rc < 0)
                return 0;
 
-       if (cli->cl_dirty + PAGE_SIZE <= cli->cl_dirty_max &&
-           atomic_read(&obd_unstable_pages) + 1 +
-           atomic_read(&obd_dirty_pages) <= obd_max_dirty_pages) {
+       if (cli->cl_dirty_pages <= cli->cl_dirty_max_pages &&
+           atomic_read(&obd_dirty_pages) + 1 <= obd_max_dirty_pages) {
                osc_consume_write_grant(cli, &oap->oap_brw_page);
                if (transient) {
-                       cli->cl_dirty_transit += PAGE_SIZE;
+                       cli->cl_dirty_transit++;
                        atomic_inc(&obd_dirty_transit_pages);
                        oap->oap_brw_flags |= OBD_BRW_NOCACHE;
                }
@@ -1593,8 +1590,8 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli,
         * of queued writes and create a discontiguous rpc stream
         */
        if (OBD_FAIL_CHECK(OBD_FAIL_OSC_NO_GRANT) ||
-           cli->cl_dirty_max < PAGE_SIZE     ||
-           cli->cl_ar.ar_force_sync || loi->loi_ar.ar_force_sync) {
+           !cli->cl_dirty_max_pages || cli->cl_ar.ar_force_sync ||
+           loi->loi_ar.ar_force_sync) {
                rc = -EDQUOT;
                goto out;
        }
@@ -1615,7 +1612,7 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli,
        init_waitqueue_head(&ocw.ocw_waitq);
        ocw.ocw_oap   = oap;
        ocw.ocw_grant = bytes;
-       while (cli->cl_dirty > 0 || cli->cl_w_in_flight > 0) {
+       while (cli->cl_dirty_pages > 0 || cli->cl_w_in_flight > 0) {
                list_add_tail(&ocw.ocw_entry, &cli->cl_cache_waiters);
                ocw.ocw_rc = 0;
                spin_unlock(&cli->cl_loi_list_lock);
@@ -1670,12 +1667,11 @@ void osc_wake_cache_waiters(struct client_obd *cli)
 
                ocw->ocw_rc = -EDQUOT;
                /* we can't dirty more */
-               if ((cli->cl_dirty + PAGE_SIZE > cli->cl_dirty_max) ||
-                   (atomic_read(&obd_unstable_pages) + 1 +
-                    atomic_read(&obd_dirty_pages) > obd_max_dirty_pages)) {
+               if ((cli->cl_dirty_pages > cli->cl_dirty_max_pages) ||
+                   (atomic_read(&obd_dirty_pages) + 1 > obd_max_dirty_pages)) {
                        CDEBUG(D_CACHE, "no dirty room: dirty: %ld osc max %ld, sys max %d\n",
-                              cli->cl_dirty,
-                              cli->cl_dirty_max, obd_max_dirty_pages);
+                              cli->cl_dirty_pages, cli->cl_dirty_max_pages,
+                              obd_max_dirty_pages);
                        goto wakeup;
                }
 
@@ -1843,97 +1839,6 @@ static void osc_process_ar(struct osc_async_rc *ar, __u64 xid,
                ar->ar_force_sync = 0;
 }
 
-/**
- * Performs "unstable" page accounting. This function balances the
- * increment operations performed in osc_inc_unstable_pages. It is
- * registered as the RPC request callback, and is executed when the
- * bulk RPC is committed on the server. Thus at this point, the pages
- * involved in the bulk transfer are no longer considered unstable.
- */
-void osc_dec_unstable_pages(struct ptlrpc_request *req)
-{
-       struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
-       struct ptlrpc_bulk_desc *desc = req->rq_bulk;
-       int page_count = desc->bd_iov_count;
-       int i;
-
-       /* No unstable page tracking */
-       if (!cli->cl_cache)
-               return;
-
-       LASSERT(page_count >= 0);
-
-       for (i = 0; i < page_count; i++)
-               dec_node_page_state(desc->bd_iov[i].kiov_page,
-                                                       NR_UNSTABLE_NFS);
-
-       atomic_sub(page_count, &cli->cl_cache->ccc_unstable_nr);
-       LASSERT(atomic_read(&cli->cl_cache->ccc_unstable_nr) >= 0);
-
-       atomic_sub(page_count, &cli->cl_unstable_count);
-       LASSERT(atomic_read(&cli->cl_unstable_count) >= 0);
-
-       atomic_sub(page_count, &obd_unstable_pages);
-       LASSERT(atomic_read(&obd_unstable_pages) >= 0);
-
-       spin_lock(&req->rq_lock);
-       req->rq_committed = 1;
-       req->rq_unstable  = 0;
-       spin_unlock(&req->rq_lock);
-
-       wake_up_all(&cli->cl_cache->ccc_unstable_waitq);
-}
-
-/* "unstable" page accounting. See: osc_dec_unstable_pages. */
-void osc_inc_unstable_pages(struct ptlrpc_request *req)
-{
-       struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
-       struct ptlrpc_bulk_desc *desc = req->rq_bulk;
-       long page_count = desc->bd_iov_count;
-       int i;
-
-       /* No unstable page tracking */
-       if (!cli->cl_cache)
-               return;
-
-       LASSERT(page_count >= 0);
-
-       for (i = 0; i < page_count; i++)
-               inc_node_page_state(desc->bd_iov[i].kiov_page,
-                                                       NR_UNSTABLE_NFS);
-
-       LASSERT(atomic_read(&cli->cl_cache->ccc_unstable_nr) >= 0);
-       atomic_add(page_count, &cli->cl_cache->ccc_unstable_nr);
-
-       LASSERT(atomic_read(&cli->cl_unstable_count) >= 0);
-       atomic_add(page_count, &cli->cl_unstable_count);
-
-       LASSERT(atomic_read(&obd_unstable_pages) >= 0);
-       atomic_add(page_count, &obd_unstable_pages);
-
-       spin_lock(&req->rq_lock);
-
-       /*
-        * If the request has already been committed (i.e. brw_commit
-        * called via rq_commit_cb), we need to undo the unstable page
-        * increments we just performed because rq_commit_cb wont be
-        * called again. Otherwise, just set the commit callback so the
-        * unstable page accounting is properly updated when the request
-        * is committed
-        */
-       if (req->rq_committed) {
-               /* Drop lock before calling osc_dec_unstable_pages */
-               spin_unlock(&req->rq_lock);
-               osc_dec_unstable_pages(req);
-               spin_lock(&req->rq_lock);
-       } else {
-               req->rq_unstable = 1;
-               req->rq_commit_cb = osc_dec_unstable_pages;
-       }
-
-       spin_unlock(&req->rq_lock);
-}
-
 /* this must be called holding the loi list lock to give coverage to exit_cache,
  * async_flag maintenance, and oap_request
  */
@@ -1945,9 +1850,6 @@ static void osc_ap_completion(const struct lu_env *env, struct client_obd *cli,
        __u64 xid = 0;
 
        if (oap->oap_request) {
-               if (!rc)
-                       osc_inc_unstable_pages(oap->oap_request);
-
                xid = ptlrpc_req_xid(oap->oap_request);
                ptlrpc_req_finished(oap->oap_request);
                oap->oap_request = NULL;
@@ -2434,9 +2336,6 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io,
                        return rc;
        }
 
-       if (osc_over_unstable_soft_limit(cli))
-               brw_flags |= OBD_BRW_SOFT_SYNC;
-
        oap->oap_cmd = cmd;
        oap->oap_page_off = ops->ops_from;
        oap->oap_count = ops->ops_to - ops->ops_from;
@@ -2645,7 +2544,7 @@ int osc_flush_async_page(const struct lu_env *env, struct cl_io *io,
                goto out;
 
        spin_lock(&oap->oap_lock);
-       oap->oap_async_flags |= ASYNC_READY|ASYNC_URGENT;
+       oap->oap_async_flags |= ASYNC_READY | ASYNC_URGENT;
        spin_unlock(&oap->oap_lock);
 
        if (memory_pressure_get())
index c8c3f1ca77be51ba93eebd394cbd2717a9062ede..d41680b520951768dc56dd2bf7a894372ba2f7bc 100644 (file)
@@ -389,7 +389,7 @@ extern struct lu_device_type osc_device_type;
 extern struct lu_context_key osc_key;
 extern struct lu_context_key osc_session_key;
 
-#define OSC_FLAGS (ASYNC_URGENT|ASYNC_READY)
+#define OSC_FLAGS (ASYNC_URGENT | ASYNC_READY)
 
 int osc_lock_init(const struct lu_env *env,
                  struct cl_object *obj, struct cl_lock *lock,
index 7a27f0961955c3bea63cad737622cbab589d6afa..eca5feffbec52263e4598523c653a2429be90722 100644 (file)
@@ -71,7 +71,6 @@ struct osc_async_page {
        struct client_obd       *oap_cli;
        struct osc_object       *oap_obj;
 
-       struct ldlm_lock        *oap_ldlm_lock;
        spinlock_t               oap_lock;
 };
 
@@ -198,7 +197,7 @@ int osc_quotacheck(struct obd_device *unused, struct obd_export *exp,
 int osc_quota_poll_check(struct obd_export *exp, struct if_quotacheck *qchk);
 void osc_inc_unstable_pages(struct ptlrpc_request *req);
 void osc_dec_unstable_pages(struct ptlrpc_request *req);
-int  osc_over_unstable_soft_limit(struct client_obd *cli);
+bool osc_over_unstable_soft_limit(struct client_obd *cli);
 
 struct ldlm_lock *osc_dlmlock_at_pgoff(const struct lu_env *env,
                                       struct osc_object *obj, pgoff_t index,
index 6e3dcd38913feb0200fac3bc6d28aef4f976d565..f6db60c54ab120386c270d1cc6d178afecf62e0b 100644 (file)
@@ -163,14 +163,19 @@ static int osc_io_submit(const struct lu_env *env,
                        continue;
                }
 
-               cl_page_list_move(qout, qin, page);
                spin_lock(&oap->oap_lock);
-               oap->oap_async_flags = ASYNC_URGENT|ASYNC_READY;
+               oap->oap_async_flags = ASYNC_URGENT | ASYNC_READY;
                oap->oap_async_flags |= ASYNC_COUNT_STABLE;
                spin_unlock(&oap->oap_lock);
 
                osc_page_submit(env, opg, crt, brw_flags);
                list_add_tail(&oap->oap_pending_item, &list);
+
+               if (page->cp_sync_io)
+                       cl_page_list_move(qout, qin, page);
+               else /* async IO */
+                       cl_page_list_del(env, qin, page);
+
                if (++queued == max_pages) {
                        queued = 0;
                        result = osc_queue_sync_pages(env, osc, &list, cmd,
index 355f496a2093a5b957c12147ca2bd7695ec1dd4b..c8889eabc402f17adb647ee08e07b59f018d78ba 100644 (file)
@@ -323,32 +323,6 @@ int osc_page_init(const struct lu_env *env, struct cl_object *obj,
        return result;
 }
 
-int osc_over_unstable_soft_limit(struct client_obd *cli)
-{
-       long obd_upages, obd_dpages, osc_upages;
-
-       /* Can't check cli->cl_unstable_count, therefore, no soft limit */
-       if (!cli)
-               return 0;
-
-       obd_upages = atomic_read(&obd_unstable_pages);
-       obd_dpages = atomic_read(&obd_dirty_pages);
-
-       osc_upages = atomic_read(&cli->cl_unstable_count);
-
-       /*
-        * obd_max_dirty_pages is the max number of (dirty + unstable)
-        * pages allowed at any given time. To simulate an unstable page
-        * only limit, we subtract the current number of dirty pages
-        * from this max. This difference is roughly the amount of pages
-        * currently available for unstable pages. Thus, the soft limit
-        * is half of that difference. Check osc_upages to ensure we don't
-        * set SOFT_SYNC for OSCs without any outstanding unstable pages.
-        */
-       return osc_upages &&
-              obd_upages >= (obd_max_dirty_pages - obd_dpages) / 2;
-}
-
 /**
  * Helper function called by osc_io_submit() for every page in an immediate
  * transfer (i.e., transferred synchronously).
@@ -368,9 +342,6 @@ void osc_page_submit(const struct lu_env *env, struct osc_page *opg,
        oap->oap_count = opg->ops_to - opg->ops_from;
        oap->oap_brw_flags = brw_flags | OBD_BRW_SYNC;
 
-       if (osc_over_unstable_soft_limit(oap->oap_cli))
-               oap->oap_brw_flags |= OBD_BRW_SOFT_SYNC;
-
        if (capable(CFS_CAP_SYS_RESOURCE)) {
                oap->oap_brw_flags |= OBD_BRW_NOQUOTA;
                oap->oap_cmd |= OBD_BRW_NOQUOTA;
@@ -539,6 +510,28 @@ static void discard_pagevec(const struct lu_env *env, struct cl_io *io,
        }
 }
 
+/**
+ * Check if a cl_page can be released, i.e, it's not being used.
+ *
+ * If unstable account is turned on, bulk transfer may hold one refcount
+ * for recovery so we need to check vmpage refcount as well; otherwise,
+ * even we can destroy cl_page but the corresponding vmpage can't be reused.
+ */
+static inline bool lru_page_busy(struct client_obd *cli, struct cl_page *page)
+{
+       if (cl_page_in_use_noref(page))
+               return true;
+
+       if (cli->cl_cache->ccc_unstable_check) {
+               struct page *vmpage = cl_page_vmpage(page);
+
+               /* vmpage have two known users: cl_page and VM page cache */
+               if (page_count(vmpage) - page_mapcount(vmpage) > 2)
+                       return true;
+       }
+       return false;
+}
+
 /**
  * Drop @target of pages from LRU at most.
  */
@@ -584,7 +577,7 @@ int osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
                        break;
 
                page = opg->ops_cl.cpl_page;
-               if (cl_page_in_use_noref(page)) {
+               if (lru_page_busy(cli, page)) {
                        list_move_tail(&opg->ops_lru, &cli->cl_lru_list);
                        continue;
                }
@@ -620,7 +613,7 @@ int osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
                }
 
                if (cl_page_own_try(env, io, page) == 0) {
-                       if (!cl_page_in_use_noref(page)) {
+                       if (!lru_page_busy(cli, page)) {
                                /* remove it from lru list earlier to avoid
                                 * lock contention
                                 */
@@ -742,6 +735,13 @@ out:
        return rc;
 }
 
+/**
+ * osc_lru_reserve() is called to reserve an LRU slot for a cl_page.
+ *
+ * Usually the LRU slots are reserved in osc_io_iter_rw_init().
+ * Only in the case that the LRU slots are in extreme shortage, it should
+ * have reserved enough slots for an IO.
+ */
 static int osc_lru_reserve(const struct lu_env *env, struct osc_object *obj,
                           struct osc_page *opg)
 {
@@ -787,4 +787,150 @@ out:
        return rc;
 }
 
+/**
+ * Atomic operations are expensive. We accumulate the accounting for the
+ * same page pgdat to get better performance.
+ * In practice this can work pretty good because the pages in the same RPC
+ * are likely from the same page zone.
+ */
+static inline void unstable_page_accounting(struct ptlrpc_bulk_desc *desc,
+                                           int factor)
+{
+       int page_count = desc->bd_iov_count;
+       pg_data_t *last = NULL;
+       int count = 0;
+       int i;
+
+       for (i = 0; i < page_count; i++) {
+               pg_data_t *pgdat = page_pgdat(desc->bd_iov[i].bv_page);
+
+               if (likely(pgdat == last)) {
+                       ++count;
+                       continue;
+               }
+
+               if (count > 0) {
+                       mod_node_page_state(pgdat, NR_UNSTABLE_NFS,
+                                           factor * count);
+                       count = 0;
+               }
+               last = pgdat;
+               ++count;
+       }
+       if (count > 0)
+               mod_node_page_state(last, NR_UNSTABLE_NFS, factor * count);
+}
+
+static inline void add_unstable_page_accounting(struct ptlrpc_bulk_desc *desc)
+{
+       unstable_page_accounting(desc, 1);
+}
+
+static inline void dec_unstable_page_accounting(struct ptlrpc_bulk_desc *desc)
+{
+       unstable_page_accounting(desc, -1);
+}
+
+/**
+ * Performs "unstable" page accounting. This function balances the
+ * increment operations performed in osc_inc_unstable_pages. It is
+ * registered as the RPC request callback, and is executed when the
+ * bulk RPC is committed on the server. Thus at this point, the pages
+ * involved in the bulk transfer are no longer considered unstable.
+ *
+ * If this function is called, the request should have been committed
+ * or req:rq_unstable must have been set; it implies that the unstable
+ * statistic have been added.
+ */
+void osc_dec_unstable_pages(struct ptlrpc_request *req)
+{
+       struct client_obd *cli = &req->rq_import->imp_obd->u.cli;
+       struct ptlrpc_bulk_desc *desc = req->rq_bulk;
+       int page_count = desc->bd_iov_count;
+       int unstable_count;
+
+       LASSERT(page_count >= 0);
+       dec_unstable_page_accounting(desc);
+
+       unstable_count = atomic_sub_return(page_count, &cli->cl_unstable_count);
+       LASSERT(unstable_count >= 0);
+
+       unstable_count = atomic_sub_return(page_count,
+                                          &cli->cl_cache->ccc_unstable_nr);
+       LASSERT(unstable_count >= 0);
+       if (!unstable_count)
+               wake_up_all(&cli->cl_cache->ccc_unstable_waitq);
+
+       if (osc_cache_too_much(cli))
+               (void)ptlrpcd_queue_work(cli->cl_lru_work);
+}
+
+/**
+ * "unstable" page accounting. See: osc_dec_unstable_pages.
+ */
+void osc_inc_unstable_pages(struct ptlrpc_request *req)
+{
+       struct client_obd *cli  = &req->rq_import->imp_obd->u.cli;
+       struct ptlrpc_bulk_desc *desc = req->rq_bulk;
+       int page_count = desc->bd_iov_count;
+
+       /* No unstable page tracking */
+       if (!cli->cl_cache || !cli->cl_cache->ccc_unstable_check)
+               return;
+
+       add_unstable_page_accounting(desc);
+       atomic_add(page_count, &cli->cl_unstable_count);
+       atomic_add(page_count, &cli->cl_cache->ccc_unstable_nr);
+
+       /*
+        * If the request has already been committed (i.e. brw_commit
+        * called via rq_commit_cb), we need to undo the unstable page
+        * increments we just performed because rq_commit_cb wont be
+        * called again.
+        */
+       spin_lock(&req->rq_lock);
+       if (unlikely(req->rq_committed)) {
+               spin_unlock(&req->rq_lock);
+
+               osc_dec_unstable_pages(req);
+       } else {
+               req->rq_unstable = 1;
+               spin_unlock(&req->rq_lock);
+       }
+}
+
+/**
+ * Check if it piggybacks SOFT_SYNC flag to OST from this OSC.
+ * This function will be called by every BRW RPC so it's critical
+ * to make this function fast.
+ */
+bool osc_over_unstable_soft_limit(struct client_obd *cli)
+{
+       long unstable_nr, osc_unstable_count;
+
+       /* Can't check cli->cl_unstable_count, therefore, no soft limit */
+       if (!cli->cl_cache || !cli->cl_cache->ccc_unstable_check)
+               return false;
+
+       osc_unstable_count = atomic_read(&cli->cl_unstable_count);
+       unstable_nr = atomic_read(&cli->cl_cache->ccc_unstable_nr);
+
+       CDEBUG(D_CACHE,
+              "%s: cli: %p unstable pages: %lu, osc unstable pages: %lu\n",
+              cli->cl_import->imp_obd->obd_name, cli,
+              unstable_nr, osc_unstable_count);
+
+       /*
+        * If the LRU slots are in shortage - 25% remaining AND this OSC
+        * has one full RPC window of unstable pages, it's a good chance
+        * to piggyback a SOFT_SYNC flag.
+        * Please notice that the OST won't take immediate response for the
+        * SOFT_SYNC request so active OSCs will have more chance to carry
+        * the flag, this is reasonable.
+        */
+       return unstable_nr > cli->cl_cache->ccc_lru_max >> 2 &&
+              osc_unstable_count > cli->cl_max_pages_per_rpc *
+                                   cli->cl_max_rpcs_in_flight;
+}
+
 /** @} osc */
index 536b868ff776b8ad38f93c23f628e4e875991785..bdb329d72ab8dbf2c2595b2d2d3d532bdb2be6cf 100644 (file)
@@ -41,6 +41,7 @@
 
 #include "../include/lustre_ha.h"
 #include "../include/lprocfs_status.h"
+#include "../include/lustre/lustre_ioctl.h"
 #include "../include/lustre_debug.h"
 #include "../include/lustre_param.h"
 #include "../include/lustre_fid.h"
@@ -497,14 +498,10 @@ static int osc_real_create(struct obd_export *exp, struct obdo *oa,
        lsm->lsm_oi = oa->o_oi;
        *ea = lsm;
 
-       if (oti) {
-               oti->oti_transno = lustre_msg_get_transno(req->rq_repmsg);
-
-               if (oa->o_valid & OBD_MD_FLCOOKIE) {
-                       if (!oti->oti_logcookies)
-                               oti_alloc_cookies(oti, 1);
-                       *oti->oti_logcookies = oa->o_lcookie;
-               }
+       if (oti && oa->o_valid & OBD_MD_FLCOOKIE) {
+               if (!oti->oti_logcookies)
+                       oti->oti_logcookies = &oti->oti_onecookie;
+               *oti->oti_logcookies = oa->o_lcookie;
        }
 
        CDEBUG(D_HA, "transno: %lld\n",
@@ -649,7 +646,7 @@ static int osc_resource_get_unused(struct obd_export *exp, struct obdo *oa,
 
        ostid_build_res_name(&oa->o_oi, &res_id);
        res = ldlm_resource_get(ns, NULL, &res_id, 0, 0);
-       if (!res)
+       if (IS_ERR(res))
                return 0;
 
        LDLM_RESOURCE_ADDREF(res);
@@ -794,42 +791,43 @@ static int osc_destroy(const struct lu_env *env, struct obd_export *exp,
 static void osc_announce_cached(struct client_obd *cli, struct obdo *oa,
                                long writing_bytes)
 {
-       u32 bits = OBD_MD_FLBLOCKS|OBD_MD_FLGRANT;
+       u32 bits = OBD_MD_FLBLOCKS | OBD_MD_FLGRANT;
 
        LASSERT(!(oa->o_valid & bits));
 
        oa->o_valid |= bits;
        spin_lock(&cli->cl_loi_list_lock);
-       oa->o_dirty = cli->cl_dirty;
-       if (unlikely(cli->cl_dirty - cli->cl_dirty_transit >
-                    cli->cl_dirty_max)) {
+       oa->o_dirty = cli->cl_dirty_pages << PAGE_SHIFT;
+       if (unlikely(cli->cl_dirty_pages - cli->cl_dirty_transit >
+                    cli->cl_dirty_max_pages)) {
                CERROR("dirty %lu - %lu > dirty_max %lu\n",
-                      cli->cl_dirty, cli->cl_dirty_transit, cli->cl_dirty_max);
+                      cli->cl_dirty_pages, cli->cl_dirty_transit,
+                      cli->cl_dirty_max_pages);
                oa->o_undirty = 0;
-       } else if (unlikely(atomic_read(&obd_unstable_pages) +
-                           atomic_read(&obd_dirty_pages) -
+       } else if (unlikely(atomic_read(&obd_dirty_pages) -
                            atomic_read(&obd_dirty_transit_pages) >
                            (long)(obd_max_dirty_pages + 1))) {
                /* The atomic_read() allowing the atomic_inc() are
                 * not covered by a lock thus they may safely race and trip
                 * this CERROR() unless we add in a small fudge factor (+1).
                 */
-               CERROR("%s: dirty %d + %d - %d > system dirty_max %d\n",
+               CERROR("%s: dirty %d + %d > system dirty_max %d\n",
                       cli->cl_import->imp_obd->obd_name,
-                      atomic_read(&obd_unstable_pages),
                       atomic_read(&obd_dirty_pages),
                       atomic_read(&obd_dirty_transit_pages),
                       obd_max_dirty_pages);
                oa->o_undirty = 0;
-       } else if (unlikely(cli->cl_dirty_max - cli->cl_dirty > 0x7fffffff)) {
+       } else if (unlikely(cli->cl_dirty_max_pages - cli->cl_dirty_pages >
+                  0x7fffffff)) {
                CERROR("dirty %lu - dirty_max %lu too big???\n",
-                      cli->cl_dirty, cli->cl_dirty_max);
+                      cli->cl_dirty_pages, cli->cl_dirty_max_pages);
                oa->o_undirty = 0;
        } else {
                long max_in_flight = (cli->cl_max_pages_per_rpc <<
-                                     PAGE_SHIFT)*
+                                     PAGE_SHIFT) *
                                     (cli->cl_max_rpcs_in_flight + 1);
-               oa->o_undirty = max(cli->cl_dirty_max, max_in_flight);
+               oa->o_undirty = max(cli->cl_dirty_max_pages << PAGE_SHIFT,
+                                   max_in_flight);
        }
        oa->o_grant = cli->cl_avail_grant + cli->cl_reserved_grant;
        oa->o_dropped = cli->cl_lost_grant;
@@ -1029,22 +1027,24 @@ static void osc_init_grant(struct client_obd *cli, struct obd_connect_data *ocd)
 {
        /*
         * ocd_grant is the total grant amount we're expect to hold: if we've
-        * been evicted, it's the new avail_grant amount, cl_dirty will drop
-        * to 0 as inflight RPCs fail out; otherwise, it's avail_grant + dirty.
+        * been evicted, it's the new avail_grant amount, cl_dirty_pages will
+        * drop to 0 as inflight RPCs fail out; otherwise, it's avail_grant +
+        * dirty.
         *
         * race is tolerable here: if we're evicted, but imp_state already
-        * left EVICTED state, then cl_dirty must be 0 already.
+        * left EVICTED state, then cl_dirty_pages must be 0 already.
         */
        spin_lock(&cli->cl_loi_list_lock);
        if (cli->cl_import->imp_state == LUSTRE_IMP_EVICTED)
                cli->cl_avail_grant = ocd->ocd_grant;
        else
-               cli->cl_avail_grant = ocd->ocd_grant - cli->cl_dirty;
+               cli->cl_avail_grant = ocd->ocd_grant -
+                                     (cli->cl_dirty_pages << PAGE_SHIFT);
 
        if (cli->cl_avail_grant < 0) {
                CWARN("%s: available grant < 0: avail/ocd/dirty %ld/%u/%ld\n",
                      cli->cl_import->imp_obd->obd_name, cli->cl_avail_grant,
-                     ocd->ocd_grant, cli->cl_dirty);
+                     ocd->ocd_grant, cli->cl_dirty_pages << PAGE_SHIFT);
                /* workaround for servers which do not have the patch from
                 * LU-2679
                 */
@@ -1463,7 +1463,8 @@ static int check_write_checksum(struct obdo *oa, const lnet_process_id_t *peer,
                           oa->o_valid & OBD_MD_FLFID ? oa->o_parent_oid : 0,
                           oa->o_valid & OBD_MD_FLFID ? oa->o_parent_ver : 0,
                           POSTID(&oa->o_oi), pga[0]->off,
-                          pga[page_count-1]->off + pga[page_count-1]->count - 1);
+                          pga[page_count - 1]->off +
+                          pga[page_count - 1]->count - 1);
        CERROR("original client csum %x (type %x), server csum %x (type %x), client csum now %x\n",
               client_cksum, client_cksum_type,
               server_cksum, cksum_type, new_cksum);
@@ -1565,7 +1566,8 @@ static int osc_brw_fini_request(struct ptlrpc_request *req, int rc)
                char *router = "";
                enum cksum_type cksum_type;
 
-               cksum_type = cksum_type_unpack(body->oa.o_valid&OBD_MD_FLFLAGS ?
+               cksum_type = cksum_type_unpack(body->oa.o_valid &
+                                              OBD_MD_FLFLAGS ?
                                               body->oa.o_flags : 0);
                client_cksum = osc_checksum_bulk(rc, aa->aa_page_count,
                                                 aa->aa_ppga, OST_READ,
@@ -1817,6 +1819,9 @@ static int brw_interpret(const struct lu_env *env,
        }
        kmem_cache_free(obdo_cachep, aa->aa_oa);
 
+       if (lustre_msg_get_opc(req->rq_reqmsg) == OST_WRITE && rc == 0)
+               osc_inc_unstable_pages(req);
+
        list_for_each_entry_safe(ext, tmp, &aa->aa_exts, oe_link) {
                list_del_init(&ext->oe_link);
                osc_extent_finish(env, ext, 1, rc);
@@ -1847,21 +1852,21 @@ static int brw_interpret(const struct lu_env *env,
 
 static void brw_commit(struct ptlrpc_request *req)
 {
-       spin_lock(&req->rq_lock);
        /*
         * If osc_inc_unstable_pages (via osc_extent_finish) races with
         * this called via the rq_commit_cb, I need to ensure
         * osc_dec_unstable_pages is still called. Otherwise unstable
         * pages may be leaked.
         */
-       if (req->rq_unstable) {
+       spin_lock(&req->rq_lock);
+       if (unlikely(req->rq_unstable)) {
+               req->rq_unstable = 0;
                spin_unlock(&req->rq_lock);
                osc_dec_unstable_pages(req);
-               spin_lock(&req->rq_lock);
        } else {
                req->rq_committed = 1;
+               spin_unlock(&req->rq_lock);
        }
-       spin_unlock(&req->rq_lock);
 }
 
 /**
@@ -1881,13 +1886,13 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
        struct osc_async_page *tmp;
        struct cl_req *clerq = NULL;
        enum cl_req_type crt = (cmd & OBD_BRW_WRITE) ? CRT_WRITE : CRT_READ;
-       struct ldlm_lock *lock = NULL;
        struct cl_req_attr *crattr = NULL;
        u64 starting_offset = OBD_OBJECT_EOF;
        u64 ending_offset = 0;
        int mpflag = 0;
        int mem_tight = 0;
        int page_count = 0;
+       bool soft_sync = false;
        int i;
        int rc;
        struct ost_body *body;
@@ -1915,6 +1920,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
                }
        }
 
+       soft_sync = osc_over_unstable_soft_limit(cli);
        if (mem_tight)
                mpflag = cfs_memory_pressure_get_and_set();
 
@@ -1947,10 +1953,11 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
                                rc = PTR_ERR(clerq);
                                goto out;
                        }
-                       lock = oap->oap_ldlm_lock;
                }
                if (mem_tight)
                        oap->oap_brw_flags |= OBD_BRW_MEMALLOC;
+               if (soft_sync)
+                       oap->oap_brw_flags |= OBD_BRW_SOFT_SYNC;
                pga[i] = &oap->oap_brw_page;
                pga[i]->off = oap->oap_obj_off + oap->oap_page_off;
                CDEBUG(0, "put page %p index %lu oap %p flg %x to pga\n",
@@ -1964,10 +1971,6 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
        LASSERT(clerq);
        crattr->cra_oa = oa;
        cl_req_attr_set(env, clerq, crattr, ~0ULL);
-       if (lock) {
-               oa->o_handle = lock->l_remote_handle;
-               oa->o_valid |= OBD_MD_FLHANDLE;
-       }
 
        rc = cl_req_prep(env, clerq);
        if (rc != 0) {
@@ -1998,7 +2001,7 @@ int osc_build_rpc(const struct lu_env *env, struct client_obd *cli,
        body = req_capsule_client_get(&req->rq_pill, &RMF_OST_BODY);
        crattr->cra_oa = &body->oa;
        cl_req_attr_set(env, clerq, crattr,
-                       OBD_MD_FLMTIME|OBD_MD_FLCTIME|OBD_MD_FLATIME);
+                       OBD_MD_FLMTIME | OBD_MD_FLCTIME | OBD_MD_FLATIME);
 
        lustre_msg_set_jobid(req->rq_reqmsg, crattr->cra_jobid);
 
@@ -2116,27 +2119,6 @@ static int osc_set_data_with_check(struct lustre_handle *lockh,
        return set;
 }
 
-/* find any ldlm lock of the inode in osc
- * return 0    not find
- *     1    find one
- *      < 0    error
- */
-static int osc_find_cbdata(struct obd_export *exp, struct lov_stripe_md *lsm,
-                          ldlm_iterator_t replace, void *data)
-{
-       struct ldlm_res_id res_id;
-       struct obd_device *obd = class_exp2obd(exp);
-       int rc = 0;
-
-       ostid_build_res_name(&lsm->lsm_oi, &res_id);
-       rc = ldlm_resource_iterate(obd->obd_namespace, &res_id, replace, data);
-       if (rc == LDLM_ITER_STOP)
-               return 1;
-       if (rc == LDLM_ITER_CONTINUE)
-               return 0;
-       return rc;
-}
-
 static int osc_enqueue_fini(struct ptlrpc_request *req,
                            osc_enqueue_upcall_f upcall, void *cookie,
                            struct lustre_handle *lockh, enum ldlm_mode mode,
@@ -2632,7 +2614,7 @@ static int osc_getstripe(struct lov_stripe_md *lsm,
                        lmm_objects =
                            &(((struct lov_user_md_v1 *)lumk)->lmm_objects[0]);
                else
-                       lmm_objects = &(lumk->lmm_objects[0]);
+                       lmm_objects = &lumk->lmm_objects[0];
                lmm_objects->l_ost_oi = lsm->lsm_oi;
        } else {
                lum_size = lov_mds_md_size(0, lum.lmm_magic);
@@ -3014,8 +2996,9 @@ static int osc_reconnect(const struct lu_env *env,
                long lost_grant;
 
                spin_lock(&cli->cl_loi_list_lock);
-               data->ocd_grant = (cli->cl_avail_grant + cli->cl_dirty) ?:
-                               2 * cli_brw_size(obd);
+               data->ocd_grant = (cli->cl_avail_grant +
+                                  (cli->cl_dirty_pages << PAGE_SHIFT)) ?:
+                                  2 * cli_brw_size(obd);
                lost_grant = cli->cl_lost_grant;
                cli->cl_lost_grant = 0;
                spin_unlock(&cli->cl_loi_list_lock);
@@ -3354,7 +3337,6 @@ static struct obd_ops osc_obd_ops = {
        .getattr_async  = osc_getattr_async,
        .setattr        = osc_setattr,
        .setattr_async  = osc_setattr_async,
-       .find_cbdata    = osc_find_cbdata,
        .iocontrol      = osc_iocontrol,
        .get_info       = osc_get_info,
        .set_info_async = osc_set_info_async,
index d4463d7c81d2938cf0ed1361cc129aafc0e386c8..bae91bdb5302d425b34c5c0a18b637328114a835 100644 (file)
@@ -202,7 +202,7 @@ void __ptlrpc_free_bulk(struct ptlrpc_bulk_desc *desc, int unpin)
 
        if (unpin) {
                for (i = 0; i < desc->bd_iov_count; i++)
-                       put_page(desc->bd_iov[i].kiov_page);
+                       put_page(desc->bd_iov[i].bv_page);
        }
 
        kfree(desc);
@@ -385,10 +385,12 @@ static int ptlrpc_at_recv_early_reply(struct ptlrpc_request *req)
        spin_lock(&req->rq_lock);
        olddl = req->rq_deadline;
        /*
-        * server assumes it now has rq_timeout from when it sent the
-        * early reply, so client should give it at least that long.
+        * server assumes it now has rq_timeout from when the request
+        * arrived, so the client should give it at least that long.
+        * since we don't know the arrival time we'll use the original
+        * sent time
         */
-       req->rq_deadline = ktime_get_real_seconds() + req->rq_timeout +
+       req->rq_deadline = req->rq_sent + req->rq_timeout +
                           ptlrpc_at_get_net_latency(req);
 
        DEBUG_REQ(D_ADAPTTO, req,
@@ -1628,8 +1630,10 @@ int ptlrpc_check_set(const struct lu_env *env, struct ptlrpc_request_set *set)
                            req->rq_waiting || req->rq_wait_ctx) {
                                int status;
 
-                               if (!ptlrpc_unregister_reply(req, 1))
+                               if (!ptlrpc_unregister_reply(req, 1)) {
+                                       ptlrpc_unregister_bulk(req, 1);
                                        continue;
+                               }
 
                                spin_lock(&imp->imp_lock);
                                if (ptlrpc_import_delay_req(imp, req,
index 3292e6ea0102aa5ad9d28e842abe642fe3c0b377..93b1e78abed488adfd40ce95eb0ef89864c7fb44 100644 (file)
@@ -307,7 +307,8 @@ void ptlrpc_invalidate_import(struct obd_import *imp)
                 */
                lwi = LWI_TIMEOUT_INTERVAL(
                        cfs_timeout_cap(cfs_time_seconds(timeout)),
-                       (timeout > 1)?cfs_time_seconds(1):cfs_time_seconds(1)/2,
+                       (timeout > 1) ? cfs_time_seconds(1) :
+                       cfs_time_seconds(1) / 2,
                        NULL, NULL);
                rc = l_wait_event(imp->imp_recovery_waitq,
                                  (atomic_read(&imp->imp_inflight) == 0),
@@ -698,7 +699,8 @@ int ptlrpc_connect_import(struct obd_import *imp)
        request->rq_send_state = LUSTRE_IMP_CONNECTING;
        /* Allow a slightly larger reply for future growth compatibility */
        req_capsule_set_size(&request->rq_pill, &RMF_CONNECT_DATA, RCL_SERVER,
-                            sizeof(struct obd_connect_data)+16*sizeof(__u64));
+                            sizeof(struct obd_connect_data) +
+                            16 * sizeof(__u64));
        ptlrpc_request_set_replen(request);
        request->rq_interpret_reply = ptlrpc_connect_interpret;
 
@@ -1132,6 +1134,7 @@ finish:
 
                LASSERT((cli->cl_max_pages_per_rpc <= PTLRPC_MAX_BRW_PAGES) &&
                        (cli->cl_max_pages_per_rpc > 0));
+               client_adjust_max_dirty(cli);
        }
 
 out:
@@ -1497,10 +1500,13 @@ EXPORT_SYMBOL(ptlrpc_disconnect_import);
 /* Adaptive Timeout utils */
 extern unsigned int at_min, at_max, at_history;
 
-/* Bin into timeslices using AT_BINS bins.
- * This gives us a max of the last binlimit*AT_BINS secs without the storage,
- * but still smoothing out a return to normalcy from a slow response.
- * (E.g. remember the maximum latency in each minute of the last 4 minutes.)
+/*
+ *Update at_current with the specified value (bounded by at_min and at_max),
+ * as well as the AT history "bins".
+ *  - Bin into timeslices using AT_BINS bins.
+ *  - This gives us a max of the last at_history seconds without the storage,
+ *    but still smoothing out a return to normalcy from a slow response.
+ *  - (E.g. remember the maximum latency in each minute of the last 4 minutes.)
  */
 int at_measured(struct adaptive_timeout *at, unsigned int val)
 {
index ab5d8517424530bae3be1847e60958b5453b63f1..101ac877a0fc21f43addd9b132a78100335b2466 100644 (file)
@@ -667,11 +667,8 @@ static struct req_format *req_formats[] = {
        &RQF_MDS_SYNC,
        &RQF_MDS_CLOSE,
        &RQF_MDS_RELEASE_CLOSE,
-       &RQF_MDS_PIN,
-       &RQF_MDS_UNPIN,
        &RQF_MDS_READPAGE,
        &RQF_MDS_WRITEPAGE,
-       &RQF_MDS_IS_SUBDIR,
        &RQF_MDS_DONE_WRITING,
        &RQF_MDS_REINT,
        &RQF_MDS_REINT_CREATE,
@@ -1389,15 +1386,6 @@ struct req_format RQF_MDS_RELEASE_CLOSE =
                        mdt_release_close_client, mds_last_unlink_server);
 EXPORT_SYMBOL(RQF_MDS_RELEASE_CLOSE);
 
-struct req_format RQF_MDS_PIN =
-       DEFINE_REQ_FMT0("MDS_PIN",
-                       mdt_body_capa, mdt_body_only);
-EXPORT_SYMBOL(RQF_MDS_PIN);
-
-struct req_format RQF_MDS_UNPIN =
-       DEFINE_REQ_FMT0("MDS_UNPIN", mdt_body_only, empty);
-EXPORT_SYMBOL(RQF_MDS_UNPIN);
-
 struct req_format RQF_MDS_DONE_WRITING =
        DEFINE_REQ_FMT0("MDS_DONE_WRITING",
                        mdt_close_client, mdt_body_only);
@@ -1448,11 +1436,6 @@ struct req_format RQF_MDS_WRITEPAGE =
                        mdt_body_capa, mdt_body_only);
 EXPORT_SYMBOL(RQF_MDS_WRITEPAGE);
 
-struct req_format RQF_MDS_IS_SUBDIR =
-       DEFINE_REQ_FMT0("MDS_IS_SUBDIR",
-                       mdt_body_only, mdt_body_only);
-EXPORT_SYMBOL(RQF_MDS_IS_SUBDIR);
-
 struct req_format RQF_LLOG_ORIGIN_HANDLE_CREATE =
        DEFINE_REQ_FMT0("LLOG_ORIGIN_HANDLE_CREATE",
                        llog_origin_handle_create_client, llogd_body_only);
index bc93b75744e1b466ebc5e781e3a28f95ebc78860..9bad57d65db45ae85be21b671d21820c2b63b488 100644 (file)
@@ -191,7 +191,7 @@ ptlrpc_ldebugfs_register(struct dentry *root, char *dir,
        LASSERT(!*debugfs_root_ret);
        LASSERT(!*stats_ret);
 
-       svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES+LUSTRE_MAX_OPCODES,
+       svc_stats = lprocfs_alloc_stats(EXTRA_MAX_OPCODES + LUSTRE_MAX_OPCODES,
                                        0);
        if (!svc_stats)
                return;
@@ -937,7 +937,7 @@ static int ptlrpc_lprocfs_svc_req_history_show(struct seq_file *s, void *iter)
 static int
 ptlrpc_lprocfs_svc_req_history_open(struct inode *inode, struct file *file)
 {
-       static struct seq_operations sops = {
+       static const struct seq_operations sops = {
                .start = ptlrpc_lprocfs_svc_req_history_start,
                .stop  = ptlrpc_lprocfs_svc_req_history_stop,
                .next  = ptlrpc_lprocfs_svc_req_history_next,
index 11ec8254534741bd09026fb2f25b2e67198416ef..44f4eae2a2e75579cb96cfd4ec2af4251a152bf4 100644 (file)
@@ -398,7 +398,8 @@ int ptlrpc_send_reply(struct ptlrpc_request *req, int flags)
        lustre_msg_set_status(req->rq_repmsg,
                              ptlrpc_status_hton(req->rq_status));
        lustre_msg_set_opc(req->rq_repmsg,
-               req->rq_reqmsg ? lustre_msg_get_opc(req->rq_reqmsg) : 0);
+                          req->rq_reqmsg ?
+                          lustre_msg_get_opc(req->rq_reqmsg) : 0);
 
        target_pack_pool_reply(req);
 
index b514f18fae5032f9788db0513427981160c41395..2cf3a512993504125a17ba642a3595752b3bc90c 100644 (file)
@@ -1203,8 +1203,9 @@ __u32 lustre_msg_calc_cksum(struct lustre_msg *msg)
                unsigned int hsize = 4;
 
                cfs_crypto_hash_digest(CFS_HASH_ALG_CRC32, (unsigned char *)pb,
-                                  lustre_msg_buflen(msg, MSG_PTLRPC_BODY_OFF),
-                                  NULL, 0, (unsigned char *)&crc, &hsize);
+                                      lustre_msg_buflen(msg,
+                                                        MSG_PTLRPC_BODY_OFF),
+                                      NULL, 0, (unsigned char *)&crc, &hsize);
                return crc;
        }
        default:
@@ -1674,35 +1675,35 @@ EXPORT_SYMBOL(lustre_swab_lquota_lvb);
 
 void lustre_swab_mdt_body(struct mdt_body *b)
 {
-       lustre_swab_lu_fid(&b->fid1);
-       lustre_swab_lu_fid(&b->fid2);
+       lustre_swab_lu_fid(&b->mbo_fid1);
+       lustre_swab_lu_fid(&b->mbo_fid2);
        /* handle is opaque */
-       __swab64s(&b->valid);
-       __swab64s(&b->size);
-       __swab64s(&b->mtime);
-       __swab64s(&b->atime);
-       __swab64s(&b->ctime);
-       __swab64s(&b->blocks);
-       __swab64s(&b->ioepoch);
-       __swab64s(&b->t_state);
-       __swab32s(&b->fsuid);
-       __swab32s(&b->fsgid);
-       __swab32s(&b->capability);
-       __swab32s(&b->mode);
-       __swab32s(&b->uid);
-       __swab32s(&b->gid);
-       __swab32s(&b->flags);
-       __swab32s(&b->rdev);
-       __swab32s(&b->nlink);
-       CLASSERT(offsetof(typeof(*b), unused2) != 0);
-       __swab32s(&b->suppgid);
-       __swab32s(&b->eadatasize);
-       __swab32s(&b->aclsize);
-       __swab32s(&b->max_mdsize);
-       __swab32s(&b->max_cookiesize);
-       __swab32s(&b->uid_h);
-       __swab32s(&b->gid_h);
-       CLASSERT(offsetof(typeof(*b), padding_5) != 0);
+       __swab64s(&b->mbo_valid);
+       __swab64s(&b->mbo_size);
+       __swab64s(&b->mbo_mtime);
+       __swab64s(&b->mbo_atime);
+       __swab64s(&b->mbo_ctime);
+       __swab64s(&b->mbo_blocks);
+       __swab64s(&b->mbo_ioepoch);
+       __swab64s(&b->mbo_t_state);
+       __swab32s(&b->mbo_fsuid);
+       __swab32s(&b->mbo_fsgid);
+       __swab32s(&b->mbo_capability);
+       __swab32s(&b->mbo_mode);
+       __swab32s(&b->mbo_uid);
+       __swab32s(&b->mbo_gid);
+       __swab32s(&b->mbo_flags);
+       __swab32s(&b->mbo_rdev);
+       __swab32s(&b->mbo_nlink);
+       CLASSERT(offsetof(typeof(*b), mbo_unused2) != 0);
+       __swab32s(&b->mbo_suppgid);
+       __swab32s(&b->mbo_eadatasize);
+       __swab32s(&b->mbo_aclsize);
+       __swab32s(&b->mbo_max_mdsize);
+       __swab32s(&b->mbo_max_cookiesize);
+       __swab32s(&b->mbo_uid_h);
+       __swab32s(&b->mbo_gid_h);
+       CLASSERT(offsetof(typeof(*b), mbo_padding_5) != 0);
 }
 EXPORT_SYMBOL(lustre_swab_mdt_body);
 
@@ -1878,6 +1879,43 @@ void lustre_swab_lov_desc(struct lov_desc *ld)
 }
 EXPORT_SYMBOL(lustre_swab_lov_desc);
 
+/* This structure is always in little-endian */
+static void lustre_swab_lmv_mds_md_v1(struct lmv_mds_md_v1 *lmm1)
+{
+       int i;
+
+       __swab32s(&lmm1->lmv_magic);
+       __swab32s(&lmm1->lmv_stripe_count);
+       __swab32s(&lmm1->lmv_master_mdt_index);
+       __swab32s(&lmm1->lmv_hash_type);
+       __swab32s(&lmm1->lmv_layout_version);
+       for (i = 0; i < lmm1->lmv_stripe_count; i++)
+               lustre_swab_lu_fid(&lmm1->lmv_stripe_fids[i]);
+}
+
+void lustre_swab_lmv_mds_md(union lmv_mds_md *lmm)
+{
+       switch (lmm->lmv_magic) {
+       case LMV_MAGIC_V1:
+               lustre_swab_lmv_mds_md_v1(&lmm->lmv_md_v1);
+               break;
+       default:
+               break;
+       }
+}
+EXPORT_SYMBOL(lustre_swab_lmv_mds_md);
+
+void lustre_swab_lmv_user_md(struct lmv_user_md *lum)
+{
+       __swab32s(&lum->lum_magic);
+       __swab32s(&lum->lum_stripe_count);
+       __swab32s(&lum->lum_stripe_offset);
+       __swab32s(&lum->lum_hash_type);
+       __swab32s(&lum->lum_type);
+       CLASSERT(offsetof(typeof(*lum), lum_padding1));
+}
+EXPORT_SYMBOL(lustre_swab_lmv_user_md);
+
 static void print_lum(struct lov_user_md *lum)
 {
        CDEBUG(D_OTHER, "lov_user_md %p:\n", lum);
@@ -1941,9 +1979,9 @@ void lustre_swab_lov_user_md_objects(struct lov_user_ost_data *lod,
        int i;
 
        for (i = 0; i < stripe_count; i++) {
-               lustre_swab_ost_id(&(lod[i].l_ost_oi));
-               __swab32s(&(lod[i].l_ost_gen));
-               __swab32s(&(lod[i].l_ost_idx));
+               lustre_swab_ost_id(&lod[i].l_ost_oi);
+               __swab32s(&lod[i].l_ost_gen);
+               __swab32s(&lod[i].l_ost_idx);
        }
 }
 EXPORT_SYMBOL(lustre_swab_lov_user_md_objects);
index 6c820e9441719c18632e2cec521b38a648b46b1c..5b9fb11c0b6bfe3593eca796db0b9c8204396295 100644 (file)
@@ -64,9 +64,9 @@ void ptlrpc_add_bulk_page(struct ptlrpc_bulk_desc *desc, struct page *page,
 {
        lnet_kiov_t *kiov = &desc->bd_iov[desc->bd_iov_count];
 
-       kiov->kiov_page = page;
-       kiov->kiov_offset = pageoffset;
-       kiov->kiov_len = len;
+       kiov->bv_page = page;
+       kiov->bv_offset = pageoffset;
+       kiov->bv_len = len;
 
        desc->bd_iov_count++;
 }
index 0a374b6c2f71c335ba4dab0a83efe9170e4331ce..1f55d642aa7503535aa43998cd229971a37b9ff4 100644 (file)
@@ -412,7 +412,7 @@ static int ptlrpcd(void *arg)
         * an argument, describing its "scope".
         */
        rc = lu_context_init(&env.le_ctx,
-                            LCT_CL_THREAD|LCT_REMEMBER|LCT_NOREF);
+                            LCT_CL_THREAD | LCT_REMEMBER | LCT_NOREF);
        if (rc == 0) {
                rc = lu_context_init(env.le_ses,
                                     LCT_SESSION | LCT_REMEMBER | LCT_NOREF);
@@ -567,7 +567,7 @@ int ptlrpcd_start(struct ptlrpcd_ctl *pc)
         * ptlrpcd thread (or a thread-set) has to be given an argument,
         * describing its "scope".
         */
-       rc = lu_context_init(&pc->pc_env.le_ctx, LCT_CL_THREAD|LCT_REMEMBER);
+       rc = lu_context_init(&pc->pc_env.le_ctx, LCT_CL_THREAD | LCT_REMEMBER);
        if (rc != 0)
                goto out;
 
index 5f4d797185895f107bce05f1e676a0014e393fd4..fdb32d5c07de5d84969496c9bc247bd96cfd7f9f 100644 (file)
@@ -326,12 +326,12 @@ void sptlrpc_enc_pool_put_pages(struct ptlrpc_bulk_desc *desc)
        LASSERT(page_pools.epp_pools[p_idx]);
 
        for (i = 0; i < desc->bd_iov_count; i++) {
-               LASSERT(desc->bd_enc_iov[i].kiov_page);
+               LASSERT(desc->bd_enc_iov[i].bv_page);
                LASSERT(g_idx != 0 || page_pools.epp_pools[p_idx]);
                LASSERT(!page_pools.epp_pools[p_idx][g_idx]);
 
                page_pools.epp_pools[p_idx][g_idx] =
-                                       desc->bd_enc_iov[i].kiov_page;
+                                       desc->bd_enc_iov[i].bv_page;
 
                if (++g_idx == PAGES_PER_POOL) {
                        p_idx++;
@@ -522,9 +522,10 @@ int sptlrpc_get_bulk_checksum(struct ptlrpc_bulk_desc *desc, __u8 alg,
        hashsize = cfs_crypto_hash_digestsize(cfs_hash_alg_id[alg]);
 
        for (i = 0; i < desc->bd_iov_count; i++) {
-               cfs_crypto_hash_update_page(hdesc, desc->bd_iov[i].kiov_page,
-                                 desc->bd_iov[i].kiov_offset & ~PAGE_MASK,
-                                 desc->bd_iov[i].kiov_len);
+               cfs_crypto_hash_update_page(hdesc, desc->bd_iov[i].bv_page,
+                                           desc->bd_iov[i].bv_offset &
+                                           ~PAGE_MASK,
+                                           desc->bd_iov[i].bv_len);
        }
 
        if (hashsize > buflen) {
index 5c4590b0c5216ac42ae5d50bed20b20d5b5fb4e0..cd305bcb334a039484fe5579fc54789fe4f4f8ed 100644 (file)
@@ -154,13 +154,13 @@ static void corrupt_bulk_data(struct ptlrpc_bulk_desc *desc)
        unsigned int off, i;
 
        for (i = 0; i < desc->bd_iov_count; i++) {
-               if (desc->bd_iov[i].kiov_len == 0)
+               if (desc->bd_iov[i].bv_len == 0)
                        continue;
 
-               ptr = kmap(desc->bd_iov[i].kiov_page);
-               off = desc->bd_iov[i].kiov_offset & ~PAGE_MASK;
+               ptr = kmap(desc->bd_iov[i].bv_page);
+               off = desc->bd_iov[i].bv_offset & ~PAGE_MASK;
                ptr[off] ^= 0x1;
-               kunmap(desc->bd_iov[i].kiov_page);
+               kunmap(desc->bd_iov[i].bv_page);
                return;
        }
 }
@@ -249,9 +249,12 @@ int plain_ctx_verify(struct ptlrpc_cli_ctx *ctx, struct ptlrpc_request *req)
                unsigned int hsize = 4;
 
                cfs_crypto_hash_digest(CFS_HASH_ALG_CRC32,
-                               lustre_msg_buf(msg, PLAIN_PACK_MSG_OFF, 0),
-                               lustre_msg_buflen(msg, PLAIN_PACK_MSG_OFF),
-                               NULL, 0, (unsigned char *)&cksum, &hsize);
+                                      lustre_msg_buf(msg, PLAIN_PACK_MSG_OFF,
+                                                     0),
+                                      lustre_msg_buflen(msg,
+                                                        PLAIN_PACK_MSG_OFF),
+                                      NULL, 0, (unsigned char *)&cksum,
+                                      &hsize);
                if (cksum != msg->lm_cksum) {
                        CDEBUG(D_SEC,
                               "early reply checksum mismatch: %08x != %08x\n",
@@ -349,11 +352,11 @@ int plain_cli_unwrap_bulk(struct ptlrpc_cli_ctx *ctx,
 
        /* fix the actual data size */
        for (i = 0, nob = 0; i < desc->bd_iov_count; i++) {
-               if (desc->bd_iov[i].kiov_len + nob > desc->bd_nob_transferred) {
-                       desc->bd_iov[i].kiov_len =
+               if (desc->bd_iov[i].bv_len + nob > desc->bd_nob_transferred) {
+                       desc->bd_iov[i].bv_len =
                                desc->bd_nob_transferred - nob;
                }
-               nob += desc->bd_iov[i].kiov_len;
+               nob += desc->bd_iov[i].bv_len;
        }
 
        rc = plain_verify_bulk_csum(desc, req->rq_flvr.u_bulk.hash.hash_alg,
@@ -869,9 +872,12 @@ int plain_authorize(struct ptlrpc_request *req)
                unsigned int hsize = 4;
 
                cfs_crypto_hash_digest(CFS_HASH_ALG_CRC32,
-                       lustre_msg_buf(msg, PLAIN_PACK_MSG_OFF, 0),
-                       lustre_msg_buflen(msg, PLAIN_PACK_MSG_OFF),
-                       NULL, 0, (unsigned char *)&msg->lm_cksum, &hsize);
+                                      lustre_msg_buf(msg, PLAIN_PACK_MSG_OFF,
+                                                     0),
+                                      lustre_msg_buflen(msg,
+                                                        PLAIN_PACK_MSG_OFF),
+                                      NULL, 0, (unsigned char *)&msg->lm_cksum,
+                                      &hsize);
                req->rq_reply_off = 0;
        }
 
index 4788c4940c2aba30a7669b6b60f28f377cb68403..a2fce664b4ecb2d69902228836b4ec08df608c23 100644 (file)
@@ -1005,13 +1005,16 @@ ptlrpc_at_remove_timed(struct ptlrpc_request *req)
        array->paa_count--;
 }
 
+/*
+ * Attempt to extend the request deadline by sending an early reply to the
+ * client.
+ */
 static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req)
 {
        struct ptlrpc_service_part *svcpt = req->rq_rqbd->rqbd_svcpt;
        struct ptlrpc_request *reqcopy;
        struct lustre_msg *reqmsg;
        long olddl = req->rq_deadline - ktime_get_real_seconds();
-       time64_t newdl;
        int rc;
 
        /* deadline is when the client expects us to reply, margin is the
@@ -1039,8 +1042,13 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req)
                return -ENOSYS;
        }
 
-       /* Fake our processing time into the future to ask the clients
-        * for some extra amount of time
+       /*
+        * We want to extend the request deadline by at_extra seconds,
+        * so we set our service estimate to reflect how much time has
+        * passed since this request arrived plus an additional
+        * at_extra seconds. The client will calculate the new deadline
+        * based on this service estimate (plus some additional time to
+        * account for network latency). See ptlrpc_at_recv_early_reply
         */
        at_measured(&svcpt->scp_at_estimate, at_extra +
                    ktime_get_real_seconds() - req->rq_arrival_time.tv_sec);
@@ -1056,7 +1064,6 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req)
                          ktime_get_real_seconds());
                return -ETIMEDOUT;
        }
-       newdl = ktime_get_real_seconds() + at_get(&svcpt->scp_at_estimate);
 
        reqcopy = ptlrpc_request_cache_alloc(GFP_NOFS);
        if (!reqcopy)
@@ -1110,7 +1117,8 @@ static int ptlrpc_at_send_early_reply(struct ptlrpc_request *req)
 
        if (!rc) {
                /* Adjust our own deadline to what we told the client */
-               req->rq_deadline = newdl;
+               req->rq_deadline = req->rq_arrival_time.tv_sec +
+                                  at_get(&svcpt->scp_at_estimate);
                req->rq_early_count++; /* number sent, server side */
        } else {
                DEBUG_REQ(D_ERROR, req, "Early reply send failed %d", rc);
@@ -1982,11 +1990,12 @@ ptlrpc_wait_event(struct ptlrpc_service_part *svcpt,
        cond_resched();
 
        l_wait_event_exclusive_head(svcpt->scp_waitq,
-                               ptlrpc_thread_stopping(thread) ||
-                               ptlrpc_server_request_incoming(svcpt) ||
-                               ptlrpc_server_request_pending(svcpt, false) ||
-                               ptlrpc_rqbd_pending(svcpt) ||
-                               ptlrpc_at_check(svcpt), &lwi);
+                                   ptlrpc_thread_stopping(thread) ||
+                                   ptlrpc_server_request_incoming(svcpt) ||
+                                   ptlrpc_server_request_pending(svcpt,
+                                                                 false) ||
+                                   ptlrpc_rqbd_pending(svcpt) ||
+                                   ptlrpc_at_check(svcpt), &lwi);
 
        if (ptlrpc_thread_stopping(thread))
                return -EINTR;
@@ -2049,7 +2058,7 @@ static int ptlrpc_main(void *arg)
        }
 
        rc = lu_context_init(&env->le_ctx,
-                            svc->srv_ctx_tags|LCT_REMEMBER|LCT_NOREF);
+                            svc->srv_ctx_tags | LCT_REMEMBER | LCT_NOREF);
        if (rc)
                goto out_srv_fini;
 
@@ -2349,7 +2358,7 @@ static void ptlrpc_svcpt_stop_threads(struct ptlrpc_service_part *svcpt)
 
        while (!list_empty(&zombie)) {
                thread = list_entry(zombie.next,
-                                       struct ptlrpc_thread, t_link);
+                                   struct ptlrpc_thread, t_link);
                list_del(&thread->t_link);
                kfree(thread);
        }
@@ -2539,8 +2548,8 @@ int ptlrpc_hr_init(void)
                LASSERT(hrp->hrp_nthrs > 0);
                hrp->hrp_thrs =
                        kzalloc_node(hrp->hrp_nthrs * sizeof(*hrt), GFP_NOFS,
-                               cfs_cpt_spread_node(ptlrpc_hr.hr_cpt_table,
-                                                   i));
+                                    cfs_cpt_spread_node(ptlrpc_hr.hr_cpt_table,
+                                                        i));
                if (!hrp->hrp_thrs) {
                        rc = -ENOMEM;
                        goto out;
@@ -2593,7 +2602,8 @@ static void ptlrpc_wait_replies(struct ptlrpc_service_part *svcpt)
                                                     NULL, NULL);
 
                rc = l_wait_event(svcpt->scp_waitq,
-                    atomic_read(&svcpt->scp_nreps_difficult) == 0, &lwi);
+                                 atomic_read(&svcpt->scp_nreps_difficult) == 0,
+                                 &lwi);
                if (rc == 0)
                        break;
                CWARN("Unexpectedly long timeout %s %p\n",
@@ -2639,7 +2649,7 @@ ptlrpc_service_unlink_rqbd(struct ptlrpc_service *svc)
                 * event with its 'unlink' flag set for each posted rqbd
                 */
                list_for_each_entry(rqbd, &svcpt->scp_rqbd_posted,
-                                       rqbd_list) {
+                                   rqbd_list) {
                        rc = LNetMDUnlink(rqbd->rqbd_md_h);
                        LASSERT(rc == 0 || rc == -ENOENT);
                }
index 6cc2b2edf3fc5bda048d4d5fe46d4fa4e8062132..eb6d88e85b9fd007255ab6f3a46ca6fbdbea921b 100644 (file)
@@ -190,28 +190,30 @@ void lustre_assert_wire_constants(void)
                 (long long)REINT_SETXATTR);
        LASSERTF(REINT_RMENTRY == 8, "found %lld\n",
                 (long long)REINT_RMENTRY);
-       LASSERTF(REINT_MAX == 9, "found %lld\n",
+       LASSERTF(REINT_MIGRATE == 9, "found %lld\n",
+                (long long)REINT_MIGRATE);
+       LASSERTF(REINT_MAX == 10, "found %lld\n",
                 (long long)REINT_MAX);
        LASSERTF(DISP_IT_EXECD == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_IT_EXECD);
+                (unsigned)DISP_IT_EXECD);
        LASSERTF(DISP_LOOKUP_EXECD == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_LOOKUP_EXECD);
+                (unsigned)DISP_LOOKUP_EXECD);
        LASSERTF(DISP_LOOKUP_NEG == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_LOOKUP_NEG);
+                (unsigned)DISP_LOOKUP_NEG);
        LASSERTF(DISP_LOOKUP_POS == 0x00000008UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_LOOKUP_POS);
+                (unsigned)DISP_LOOKUP_POS);
        LASSERTF(DISP_OPEN_CREATE == 0x00000010UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_OPEN_CREATE);
+                (unsigned)DISP_OPEN_CREATE);
        LASSERTF(DISP_OPEN_OPEN == 0x00000020UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_OPEN_OPEN);
+                (unsigned)DISP_OPEN_OPEN);
        LASSERTF(DISP_ENQ_COMPLETE == 0x00400000UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_ENQ_COMPLETE);
+                (unsigned)DISP_ENQ_COMPLETE);
        LASSERTF(DISP_ENQ_OPEN_REF == 0x00800000UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_ENQ_OPEN_REF);
+                (unsigned)DISP_ENQ_OPEN_REF);
        LASSERTF(DISP_ENQ_CREATE_REF == 0x01000000UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_ENQ_CREATE_REF);
+                (unsigned)DISP_ENQ_CREATE_REF);
        LASSERTF(DISP_OPEN_LOCK == 0x02000000UL, "found 0x%.8xUL\n",
-               (unsigned)DISP_OPEN_LOCK);
+                (unsigned)DISP_OPEN_LOCK);
        LASSERTF(MDS_STATUS_CONN == 1, "found %lld\n",
                 (long long)MDS_STATUS_CONN);
        LASSERTF(MDS_STATUS_LOV == 2, "found %lld\n",
@@ -219,55 +221,55 @@ void lustre_assert_wire_constants(void)
        LASSERTF(LUSTRE_BFLAG_UNCOMMITTED_WRITES == 1, "found %lld\n",
                 (long long)LUSTRE_BFLAG_UNCOMMITTED_WRITES);
        LASSERTF(MF_SOM_CHANGE == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)MF_SOM_CHANGE);
+                (unsigned)MF_SOM_CHANGE);
        LASSERTF(MF_EPOCH_OPEN == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)MF_EPOCH_OPEN);
+                (unsigned)MF_EPOCH_OPEN);
        LASSERTF(MF_EPOCH_CLOSE == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)MF_EPOCH_CLOSE);
+                (unsigned)MF_EPOCH_CLOSE);
        LASSERTF(MF_MDC_CANCEL_FID1 == 0x00000008UL, "found 0x%.8xUL\n",
-               (unsigned)MF_MDC_CANCEL_FID1);
+                (unsigned)MF_MDC_CANCEL_FID1);
        LASSERTF(MF_MDC_CANCEL_FID2 == 0x00000010UL, "found 0x%.8xUL\n",
-               (unsigned)MF_MDC_CANCEL_FID2);
+                (unsigned)MF_MDC_CANCEL_FID2);
        LASSERTF(MF_MDC_CANCEL_FID3 == 0x00000020UL, "found 0x%.8xUL\n",
-               (unsigned)MF_MDC_CANCEL_FID3);
+                (unsigned)MF_MDC_CANCEL_FID3);
        LASSERTF(MF_MDC_CANCEL_FID4 == 0x00000040UL, "found 0x%.8xUL\n",
-               (unsigned)MF_MDC_CANCEL_FID4);
+                (unsigned)MF_MDC_CANCEL_FID4);
        LASSERTF(MF_SOM_AU == 0x00000080UL, "found 0x%.8xUL\n",
-               (unsigned)MF_SOM_AU);
+                (unsigned)MF_SOM_AU);
        LASSERTF(MF_GETATTR_LOCK == 0x00000100UL, "found 0x%.8xUL\n",
-               (unsigned)MF_GETATTR_LOCK);
+                (unsigned)MF_GETATTR_LOCK);
        LASSERTF(MDS_ATTR_MODE == 0x0000000000000001ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_MODE);
+                (long long)MDS_ATTR_MODE);
        LASSERTF(MDS_ATTR_UID == 0x0000000000000002ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_UID);
+                (long long)MDS_ATTR_UID);
        LASSERTF(MDS_ATTR_GID == 0x0000000000000004ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_GID);
+                (long long)MDS_ATTR_GID);
        LASSERTF(MDS_ATTR_SIZE == 0x0000000000000008ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_SIZE);
+                (long long)MDS_ATTR_SIZE);
        LASSERTF(MDS_ATTR_ATIME == 0x0000000000000010ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_ATIME);
+                (long long)MDS_ATTR_ATIME);
        LASSERTF(MDS_ATTR_MTIME == 0x0000000000000020ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_MTIME);
+                (long long)MDS_ATTR_MTIME);
        LASSERTF(MDS_ATTR_CTIME == 0x0000000000000040ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_CTIME);
+                (long long)MDS_ATTR_CTIME);
        LASSERTF(MDS_ATTR_ATIME_SET == 0x0000000000000080ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_ATIME_SET);
+                (long long)MDS_ATTR_ATIME_SET);
        LASSERTF(MDS_ATTR_MTIME_SET == 0x0000000000000100ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_MTIME_SET);
+                (long long)MDS_ATTR_MTIME_SET);
        LASSERTF(MDS_ATTR_FORCE == 0x0000000000000200ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_FORCE);
+                (long long)MDS_ATTR_FORCE);
        LASSERTF(MDS_ATTR_ATTR_FLAG == 0x0000000000000400ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_ATTR_FLAG);
+                (long long)MDS_ATTR_ATTR_FLAG);
        LASSERTF(MDS_ATTR_KILL_SUID == 0x0000000000000800ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_KILL_SUID);
+                (long long)MDS_ATTR_KILL_SUID);
        LASSERTF(MDS_ATTR_KILL_SGID == 0x0000000000001000ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_KILL_SGID);
+                (long long)MDS_ATTR_KILL_SGID);
        LASSERTF(MDS_ATTR_CTIME_SET == 0x0000000000002000ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_CTIME_SET);
+                (long long)MDS_ATTR_CTIME_SET);
        LASSERTF(MDS_ATTR_FROM_OPEN == 0x0000000000004000ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_FROM_OPEN);
+                (long long)MDS_ATTR_FROM_OPEN);
        LASSERTF(MDS_ATTR_BLOCKS == 0x0000000000008000ULL, "found 0x%.16llxULL\n",
-                       (long long)MDS_ATTR_BLOCKS);
+                (long long)MDS_ATTR_BLOCKS);
        LASSERTF(FLD_QUERY == 900, "found %lld\n",
                 (long long)FLD_QUERY);
        LASSERTF(FLD_FIRST_OPC == 900, "found %lld\n",
@@ -418,15 +420,15 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct lustre_mdt_attrs *)0)->lma_self_fid) == 16, "found %lld\n",
                 (long long)(int)sizeof(((struct lustre_mdt_attrs *)0)->lma_self_fid));
        LASSERTF(LMAI_RELEASED == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)LMAI_RELEASED);
+                (unsigned)LMAI_RELEASED);
        LASSERTF(LMAC_HSM == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)LMAC_HSM);
+                (unsigned)LMAC_HSM);
        LASSERTF(LMAC_SOM == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)LMAC_SOM);
+                (unsigned)LMAC_SOM);
        LASSERTF(LMAC_NOT_IN_OI == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)LMAC_NOT_IN_OI);
+                (unsigned)LMAC_NOT_IN_OI);
        LASSERTF(LMAC_FID_ON_OST == 0x00000008UL, "found 0x%.8xUL\n",
-               (unsigned)LMAC_FID_ON_OST);
+                (unsigned)LMAC_FID_ON_OST);
 
        /* Checks for struct ost_id */
        LASSERTF((int)sizeof(struct ost_id) == 16, "found %lld\n",
@@ -452,35 +454,35 @@ void lustre_assert_wire_constants(void)
        LASSERTF(FID_SEQ_IGIF == 12, "found %lld\n",
                 (long long)FID_SEQ_IGIF);
        LASSERTF(FID_SEQ_IGIF_MAX == 0x00000000ffffffffULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_IGIF_MAX);
+                (long long)FID_SEQ_IGIF_MAX);
        LASSERTF(FID_SEQ_IDIF == 0x0000000100000000ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_IDIF);
+                (long long)FID_SEQ_IDIF);
        LASSERTF(FID_SEQ_IDIF_MAX == 0x00000001ffffffffULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_IDIF_MAX);
+                (long long)FID_SEQ_IDIF_MAX);
        LASSERTF(FID_SEQ_START == 0x0000000200000000ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_START);
+                (long long)FID_SEQ_START);
        LASSERTF(FID_SEQ_LOCAL_FILE == 0x0000000200000001ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_LOCAL_FILE);
+                (long long)FID_SEQ_LOCAL_FILE);
        LASSERTF(FID_SEQ_DOT_LUSTRE == 0x0000000200000002ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_DOT_LUSTRE);
+                (long long)FID_SEQ_DOT_LUSTRE);
        LASSERTF(FID_SEQ_SPECIAL == 0x0000000200000004ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_SPECIAL);
+                (long long)FID_SEQ_SPECIAL);
        LASSERTF(FID_SEQ_QUOTA == 0x0000000200000005ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_QUOTA);
+                (long long)FID_SEQ_QUOTA);
        LASSERTF(FID_SEQ_QUOTA_GLB == 0x0000000200000006ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_QUOTA_GLB);
+                (long long)FID_SEQ_QUOTA_GLB);
        LASSERTF(FID_SEQ_ROOT == 0x0000000200000007ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_ROOT);
+                (long long)FID_SEQ_ROOT);
        LASSERTF(FID_SEQ_NORMAL == 0x0000000200000400ULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_NORMAL);
+                (long long)FID_SEQ_NORMAL);
        LASSERTF(FID_SEQ_LOV_DEFAULT == 0xffffffffffffffffULL, "found 0x%.16llxULL\n",
-                       (long long)FID_SEQ_LOV_DEFAULT);
+                (long long)FID_SEQ_LOV_DEFAULT);
        LASSERTF(FID_OID_SPECIAL_BFL == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)FID_OID_SPECIAL_BFL);
+                (unsigned)FID_OID_SPECIAL_BFL);
        LASSERTF(FID_OID_DOT_LUSTRE == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)FID_OID_DOT_LUSTRE);
+                (unsigned)FID_OID_DOT_LUSTRE);
        LASSERTF(FID_OID_DOT_LUSTRE_OBF == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)FID_OID_DOT_LUSTRE_OBF);
+                (unsigned)FID_OID_DOT_LUSTRE_OBF);
 
        /* Checks for struct lu_dirent */
        LASSERTF((int)sizeof(struct lu_dirent) == 32, "found %lld\n",
@@ -510,11 +512,11 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct lu_dirent *)0)->lde_name[0]) == 1, "found %lld\n",
                 (long long)(int)sizeof(((struct lu_dirent *)0)->lde_name[0]));
        LASSERTF(LUDA_FID == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)LUDA_FID);
+                (unsigned)LUDA_FID);
        LASSERTF(LUDA_TYPE == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)LUDA_TYPE);
+                (unsigned)LUDA_TYPE);
        LASSERTF(LUDA_64BITHASH == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)LUDA_64BITHASH);
+                (unsigned)LUDA_64BITHASH);
 
        /* Checks for struct luda_type */
        LASSERTF((int)sizeof(struct luda_type) == 2, "found %lld\n",
@@ -602,9 +604,9 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct lustre_msg_v2 *)0)->lm_buflens[0]) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct lustre_msg_v2 *)0)->lm_buflens[0]));
        LASSERTF(LUSTRE_MSG_MAGIC_V2 == 0x0BD00BD3, "found 0x%.8x\n",
-               LUSTRE_MSG_MAGIC_V2);
+                LUSTRE_MSG_MAGIC_V2);
        LASSERTF(LUSTRE_MSG_MAGIC_V2_SWABBED == 0xD30BD00B, "found 0x%.8x\n",
-               LUSTRE_MSG_MAGIC_V2_SWABBED);
+                LUSTRE_MSG_MAGIC_V2_SWABBED);
 
        /* Checks for struct ptlrpc_body */
        LASSERTF((int)sizeof(struct ptlrpc_body_v3) == 184, "found %lld\n",
@@ -780,61 +782,61 @@ void lustre_assert_wire_constants(void)
        LASSERTF(MSG_PTLRPC_HEADER_OFF == 31, "found %lld\n",
                 (long long)MSG_PTLRPC_HEADER_OFF);
        LASSERTF(PTLRPC_MSG_VERSION == 0x00000003, "found 0x%.8x\n",
-               PTLRPC_MSG_VERSION);
+                PTLRPC_MSG_VERSION);
        LASSERTF(LUSTRE_VERSION_MASK == 0xffff0000, "found 0x%.8x\n",
-               LUSTRE_VERSION_MASK);
+                LUSTRE_VERSION_MASK);
        LASSERTF(LUSTRE_OBD_VERSION == 0x00010000, "found 0x%.8x\n",
-               LUSTRE_OBD_VERSION);
+                LUSTRE_OBD_VERSION);
        LASSERTF(LUSTRE_MDS_VERSION == 0x00020000, "found 0x%.8x\n",
-               LUSTRE_MDS_VERSION);
+                LUSTRE_MDS_VERSION);
        LASSERTF(LUSTRE_OST_VERSION == 0x00030000, "found 0x%.8x\n",
-               LUSTRE_OST_VERSION);
+                LUSTRE_OST_VERSION);
        LASSERTF(LUSTRE_DLM_VERSION == 0x00040000, "found 0x%.8x\n",
-               LUSTRE_DLM_VERSION);
+                LUSTRE_DLM_VERSION);
        LASSERTF(LUSTRE_LOG_VERSION == 0x00050000, "found 0x%.8x\n",
-               LUSTRE_LOG_VERSION);
+                LUSTRE_LOG_VERSION);
        LASSERTF(LUSTRE_MGS_VERSION == 0x00060000, "found 0x%.8x\n",
-               LUSTRE_MGS_VERSION);
+                LUSTRE_MGS_VERSION);
        LASSERTF(MSGHDR_AT_SUPPORT == 1, "found %lld\n",
                 (long long)MSGHDR_AT_SUPPORT);
        LASSERTF(MSGHDR_CKSUM_INCOMPAT18 == 2, "found %lld\n",
                 (long long)MSGHDR_CKSUM_INCOMPAT18);
        LASSERTF(MSG_OP_FLAG_MASK == 0xffff0000UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_OP_FLAG_MASK);
+                (unsigned)MSG_OP_FLAG_MASK);
        LASSERTF(MSG_OP_FLAG_SHIFT == 16, "found %lld\n",
                 (long long)MSG_OP_FLAG_SHIFT);
        LASSERTF(MSG_GEN_FLAG_MASK == 0x0000ffffUL, "found 0x%.8xUL\n",
-               (unsigned)MSG_GEN_FLAG_MASK);
+                (unsigned)MSG_GEN_FLAG_MASK);
        LASSERTF(MSG_LAST_REPLAY == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_LAST_REPLAY);
+                (unsigned)MSG_LAST_REPLAY);
        LASSERTF(MSG_RESENT == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_RESENT);
+                (unsigned)MSG_RESENT);
        LASSERTF(MSG_REPLAY == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_REPLAY);
+                (unsigned)MSG_REPLAY);
        LASSERTF(MSG_DELAY_REPLAY == 0x00000010UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_DELAY_REPLAY);
+                (unsigned)MSG_DELAY_REPLAY);
        LASSERTF(MSG_VERSION_REPLAY == 0x00000020UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_VERSION_REPLAY);
+                (unsigned)MSG_VERSION_REPLAY);
        LASSERTF(MSG_REQ_REPLAY_DONE == 0x00000040UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_REQ_REPLAY_DONE);
+                (unsigned)MSG_REQ_REPLAY_DONE);
        LASSERTF(MSG_LOCK_REPLAY_DONE == 0x00000080UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_LOCK_REPLAY_DONE);
+                (unsigned)MSG_LOCK_REPLAY_DONE);
        LASSERTF(MSG_CONNECT_RECOVERING == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_RECOVERING);
+                (unsigned)MSG_CONNECT_RECOVERING);
        LASSERTF(MSG_CONNECT_RECONNECT == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_RECONNECT);
+                (unsigned)MSG_CONNECT_RECONNECT);
        LASSERTF(MSG_CONNECT_REPLAYABLE == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_REPLAYABLE);
+                (unsigned)MSG_CONNECT_REPLAYABLE);
        LASSERTF(MSG_CONNECT_LIBCLIENT == 0x00000010UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_LIBCLIENT);
+                (unsigned)MSG_CONNECT_LIBCLIENT);
        LASSERTF(MSG_CONNECT_INITIAL == 0x00000020UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_INITIAL);
+                (unsigned)MSG_CONNECT_INITIAL);
        LASSERTF(MSG_CONNECT_ASYNC == 0x00000040UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_ASYNC);
+                (unsigned)MSG_CONNECT_ASYNC);
        LASSERTF(MSG_CONNECT_NEXT_VER == 0x00000080UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_NEXT_VER);
+                (unsigned)MSG_CONNECT_NEXT_VER);
        LASSERTF(MSG_CONNECT_TRANSNO == 0x00000100UL, "found 0x%.8xUL\n",
-               (unsigned)MSG_CONNECT_TRANSNO);
+                (unsigned)MSG_CONNECT_TRANSNO);
 
        /* Checks for struct obd_connect_data */
        LASSERTF((int)sizeof(struct obd_connect_data) == 192, "found %lld\n",
@@ -1069,12 +1071,18 @@ void lustre_assert_wire_constants(void)
                 "found 0x%.16llxULL\n", OBD_CONNECT_FLOCK_DEAD);
        LASSERTF(OBD_CONNECT_OPEN_BY_FID == 0x20000000000000ULL,
                 "found 0x%.16llxULL\n", OBD_CONNECT_OPEN_BY_FID);
+       LASSERTF(OBD_CONNECT_LFSCK == 0x40000000000000ULL, "found 0x%.16llxULL\n",
+                OBD_CONNECT_LFSCK);
+       LASSERTF(OBD_CONNECT_UNLINK_CLOSE == 0x100000000000000ULL, "found 0x%.16llxULL\n",
+                OBD_CONNECT_UNLINK_CLOSE);
+       LASSERTF(OBD_CONNECT_DIR_STRIPE == 0x400000000000000ULL, "found 0x%.16llxULL\n",
+                OBD_CONNECT_DIR_STRIPE);
        LASSERTF(OBD_CKSUM_CRC32 == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)OBD_CKSUM_CRC32);
+                (unsigned)OBD_CKSUM_CRC32);
        LASSERTF(OBD_CKSUM_ADLER == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)OBD_CKSUM_ADLER);
+                (unsigned)OBD_CKSUM_ADLER);
        LASSERTF(OBD_CKSUM_CRC32C == 0x00000004UL, "found 0x%.8xUL\n",
-               (unsigned)OBD_CKSUM_CRC32C);
+                (unsigned)OBD_CKSUM_CRC32C);
 
        /* Checks for struct obdo */
        LASSERTF((int)sizeof(struct obdo) == 208, "found %lld\n",
@@ -1346,7 +1354,7 @@ void lustre_assert_wire_constants(void)
                 (long long)(int)offsetof(struct lov_mds_md_v1, lmm_objects[0]));
        LASSERTF((int)sizeof(((struct lov_mds_md_v1 *)0)->lmm_objects[0]) == 24, "found %lld\n",
                 (long long)(int)sizeof(((struct lov_mds_md_v1 *)0)->lmm_objects[0]));
-       CLASSERT(LOV_MAGIC_V1 == 0x0BD10BD0);
+       CLASSERT(LOV_MAGIC_V1 == (0x0BD10000 | 0x0BD0));
 
        /* Checks for struct lov_mds_md_v3 */
        LASSERTF((int)sizeof(struct lov_mds_md_v3) == 48, "found %lld\n",
@@ -1384,15 +1392,64 @@ void lustre_assert_wire_constants(void)
                 (long long)(int)offsetof(struct lov_mds_md_v3, lmm_objects[0]));
        LASSERTF((int)sizeof(((struct lov_mds_md_v3 *)0)->lmm_objects[0]) == 24, "found %lld\n",
                 (long long)(int)sizeof(((struct lov_mds_md_v3 *)0)->lmm_objects[0]));
-       CLASSERT(LOV_MAGIC_V3 == 0x0BD30BD0);
+       CLASSERT(LOV_MAGIC_V3 == (0x0BD30000 | 0x0BD0));
        LASSERTF(LOV_PATTERN_RAID0 == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)LOV_PATTERN_RAID0);
+                (unsigned)LOV_PATTERN_RAID0);
        LASSERTF(LOV_PATTERN_RAID1 == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)LOV_PATTERN_RAID1);
+                (unsigned)LOV_PATTERN_RAID1);
        LASSERTF(LOV_PATTERN_FIRST == 0x00000100UL, "found 0x%.8xUL\n",
-               (unsigned)LOV_PATTERN_FIRST);
+                (unsigned)LOV_PATTERN_FIRST);
        LASSERTF(LOV_PATTERN_CMOBD == 0x00000200UL, "found 0x%.8xUL\n",
-               (unsigned)LOV_PATTERN_CMOBD);
+                (unsigned)LOV_PATTERN_CMOBD);
+
+       /* Checks for struct lmv_mds_md_v1 */
+       LASSERTF((int)sizeof(struct lmv_mds_md_v1) == 56, "found %lld\n",
+                (long long)(int)sizeof(struct lmv_mds_md_v1));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_magic) == 0, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_magic));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_magic) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_magic));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_stripe_count) == 4, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_stripe_count));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_stripe_count) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_stripe_count));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_master_mdt_index) == 8, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_master_mdt_index));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_master_mdt_index) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_master_mdt_index));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_hash_type) == 12, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_hash_type));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_hash_type) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_hash_type));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_layout_version) == 16, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_layout_version));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_layout_version) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_layout_version));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_padding1) == 20, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_padding1));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding1) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding1));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_padding2) == 24, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_padding2));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding2) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding2));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_padding3) == 32, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_padding3));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding3) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_padding3));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_pool_name[16]) == 56, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_pool_name[16]));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_pool_name[16]) == 1, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_pool_name[16]));
+       LASSERTF((int)offsetof(struct lmv_mds_md_v1, lmv_stripe_fids[0]) == 56, "found %lld\n",
+                (long long)(int)offsetof(struct lmv_mds_md_v1, lmv_stripe_fids[0]));
+       LASSERTF((int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_stripe_fids[0]) == 16, "found %lld\n",
+                (long long)(int)sizeof(((struct lmv_mds_md_v1 *)0)->lmv_stripe_fids[0]));
+       CLASSERT(LMV_MAGIC_V1 == 0x0CD20CD0);
+       CLASSERT(LMV_MAGIC_STRIPE == 0x0CD40CD0);
+       CLASSERT(LMV_HASH_TYPE_MASK == 0x0000ffff);
+       CLASSERT(LMV_HASH_FLAG_MIGRATION == 0x80000000);
+       CLASSERT(LMV_HASH_FLAG_DEAD == 0x40000000);
 
        /* Checks for struct obd_statfs */
        LASSERTF((int)sizeof(struct obd_statfs) == 144, "found %lld\n",
@@ -1582,15 +1639,15 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct obd_dqblk *)0)->dqb_padding) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct obd_dqblk *)0)->dqb_padding));
        LASSERTF(Q_QUOTACHECK == 0x800100, "found 0x%.8x\n",
-               Q_QUOTACHECK);
+                Q_QUOTACHECK);
        LASSERTF(Q_INITQUOTA == 0x800101, "found 0x%.8x\n",
-               Q_INITQUOTA);
+                Q_INITQUOTA);
        LASSERTF(Q_GETOINFO == 0x800102, "found 0x%.8x\n",
-               Q_GETOINFO);
+                Q_GETOINFO);
        LASSERTF(Q_GETOQUOTA == 0x800103, "found 0x%.8x\n",
-               Q_GETOQUOTA);
+                Q_GETOQUOTA);
        LASSERTF(Q_FINVALIDATE == 0x800104, "found 0x%.8x\n",
-               Q_FINVALIDATE);
+                Q_FINVALIDATE);
 
        /* Checks for struct niobuf_remote */
        LASSERTF((int)sizeof(struct niobuf_remote) == 16, "found %lld\n",
@@ -1608,27 +1665,27 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct niobuf_remote *)0)->flags) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct niobuf_remote *)0)->flags));
        LASSERTF(OBD_BRW_READ == 0x01, "found 0x%.8x\n",
-               OBD_BRW_READ);
+                OBD_BRW_READ);
        LASSERTF(OBD_BRW_WRITE == 0x02, "found 0x%.8x\n",
-               OBD_BRW_WRITE);
+                OBD_BRW_WRITE);
        LASSERTF(OBD_BRW_SYNC == 0x08, "found 0x%.8x\n",
-               OBD_BRW_SYNC);
+                OBD_BRW_SYNC);
        LASSERTF(OBD_BRW_CHECK == 0x10, "found 0x%.8x\n",
-               OBD_BRW_CHECK);
+                OBD_BRW_CHECK);
        LASSERTF(OBD_BRW_FROM_GRANT == 0x20, "found 0x%.8x\n",
-               OBD_BRW_FROM_GRANT);
+                OBD_BRW_FROM_GRANT);
        LASSERTF(OBD_BRW_GRANTED == 0x40, "found 0x%.8x\n",
-               OBD_BRW_GRANTED);
+                OBD_BRW_GRANTED);
        LASSERTF(OBD_BRW_NOCACHE == 0x80, "found 0x%.8x\n",
-               OBD_BRW_NOCACHE);
+                OBD_BRW_NOCACHE);
        LASSERTF(OBD_BRW_NOQUOTA == 0x100, "found 0x%.8x\n",
-               OBD_BRW_NOQUOTA);
+                OBD_BRW_NOQUOTA);
        LASSERTF(OBD_BRW_SRVLOCK == 0x200, "found 0x%.8x\n",
-               OBD_BRW_SRVLOCK);
+                OBD_BRW_SRVLOCK);
        LASSERTF(OBD_BRW_ASYNC == 0x400, "found 0x%.8x\n",
-               OBD_BRW_ASYNC);
+                OBD_BRW_ASYNC);
        LASSERTF(OBD_BRW_MEMALLOC == 0x800, "found 0x%.8x\n",
-               OBD_BRW_MEMALLOC);
+                OBD_BRW_MEMALLOC);
        LASSERTF(OBD_BRW_OVER_USRQUOTA == 0x1000, "found 0x%.8x\n",
                 OBD_BRW_OVER_USRQUOTA);
        LASSERTF(OBD_BRW_OVER_GRPQUOTA == 0x2000, "found 0x%.8x\n",
@@ -1663,203 +1720,203 @@ void lustre_assert_wire_constants(void)
        /* Checks for struct mdt_body */
        LASSERTF((int)sizeof(struct mdt_body) == 216, "found %lld\n",
                 (long long)(int)sizeof(struct mdt_body));
-       LASSERTF((int)offsetof(struct mdt_body, fid1) == 0, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, fid1));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->fid1) == 16, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->fid1));
-       LASSERTF((int)offsetof(struct mdt_body, fid2) == 16, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, fid2));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->fid2) == 16, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->fid2));
-       LASSERTF((int)offsetof(struct mdt_body, handle) == 32, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, handle));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->handle) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->handle));
-       LASSERTF((int)offsetof(struct mdt_body, valid) == 40, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, valid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->valid) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->valid));
-       LASSERTF((int)offsetof(struct mdt_body, size) == 48, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, size));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->size) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->size));
-       LASSERTF((int)offsetof(struct mdt_body, mtime) == 56, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, mtime));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->mtime) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->mtime));
-       LASSERTF((int)offsetof(struct mdt_body, atime) == 64, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, atime));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->atime) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->atime));
-       LASSERTF((int)offsetof(struct mdt_body, ctime) == 72, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, ctime));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->ctime) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->ctime));
-       LASSERTF((int)offsetof(struct mdt_body, blocks) == 80, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, blocks));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->blocks) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->blocks));
-       LASSERTF((int)offsetof(struct mdt_body, t_state) == 96, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, t_state));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->t_state) == 8,
+       LASSERTF((int)offsetof(struct mdt_body, mbo_fid1) == 0, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_fid1));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_fid1) == 16, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_fid1));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_fid2) == 16, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_fid2));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_fid2) == 16, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_fid2));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_handle) == 32, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_handle));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_handle) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_handle));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_valid) == 40, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_valid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_valid) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_valid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_size) == 48, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_size));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_size) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_size));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_mtime) == 56, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_mtime));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_mtime) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_mtime));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_atime) == 64, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_atime));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_atime) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_atime));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_ctime) == 72, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_ctime));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_ctime) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_ctime));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_blocks) == 80, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_blocks));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_blocks) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_blocks));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_t_state) == 96, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_t_state));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_t_state) == 8,
                 "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->t_state));
-       LASSERTF((int)offsetof(struct mdt_body, fsuid) == 104, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, fsuid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->fsuid) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->fsuid));
-       LASSERTF((int)offsetof(struct mdt_body, fsgid) == 108, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, fsgid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->fsgid) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->fsgid));
-       LASSERTF((int)offsetof(struct mdt_body, capability) == 112, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, capability));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->capability) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->capability));
-       LASSERTF((int)offsetof(struct mdt_body, mode) == 116, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, mode));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->mode) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->mode));
-       LASSERTF((int)offsetof(struct mdt_body, uid) == 120, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, uid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->uid) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->uid));
-       LASSERTF((int)offsetof(struct mdt_body, gid) == 124, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, gid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->gid) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->gid));
-       LASSERTF((int)offsetof(struct mdt_body, flags) == 128, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, flags));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->flags) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->flags));
-       LASSERTF((int)offsetof(struct mdt_body, rdev) == 132, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, rdev));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->rdev) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->rdev));
-       LASSERTF((int)offsetof(struct mdt_body, nlink) == 136, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, nlink));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->nlink) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->nlink));
-       LASSERTF((int)offsetof(struct mdt_body, unused2) == 140, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, unused2));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->unused2) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->unused2));
-       LASSERTF((int)offsetof(struct mdt_body, suppgid) == 144, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, suppgid));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->suppgid) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->suppgid));
-       LASSERTF((int)offsetof(struct mdt_body, eadatasize) == 148, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, eadatasize));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->eadatasize) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->eadatasize));
-       LASSERTF((int)offsetof(struct mdt_body, aclsize) == 152, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, aclsize));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->aclsize) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->aclsize));
-       LASSERTF((int)offsetof(struct mdt_body, max_mdsize) == 156, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, max_mdsize));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->max_mdsize) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->max_mdsize));
-       LASSERTF((int)offsetof(struct mdt_body, max_cookiesize) == 160, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, max_cookiesize));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->max_cookiesize) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->max_cookiesize));
-       LASSERTF((int)offsetof(struct mdt_body, uid_h) == 164, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, uid_h));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->uid_h) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->uid_h));
-       LASSERTF((int)offsetof(struct mdt_body, gid_h) == 168, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, gid_h));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->gid_h) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->gid_h));
-       LASSERTF((int)offsetof(struct mdt_body, padding_5) == 172, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_5));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_5) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_5));
-       LASSERTF((int)offsetof(struct mdt_body, padding_6) == 176, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_6));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_6) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_6));
-       LASSERTF((int)offsetof(struct mdt_body, padding_7) == 184, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_7));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_7) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_7));
-       LASSERTF((int)offsetof(struct mdt_body, padding_8) == 192, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_8));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_8) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_8));
-       LASSERTF((int)offsetof(struct mdt_body, padding_9) == 200, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_9));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_9) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_9));
-       LASSERTF((int)offsetof(struct mdt_body, padding_10) == 208, "found %lld\n",
-                (long long)(int)offsetof(struct mdt_body, padding_10));
-       LASSERTF((int)sizeof(((struct mdt_body *)0)->padding_10) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct mdt_body *)0)->padding_10));
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_t_state));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_fsuid) == 104, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_fsuid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_fsuid) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_fsuid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_fsgid) == 108, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_fsgid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_fsgid) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_fsgid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_capability) == 112, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_capability));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_capability) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_capability));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_mode) == 116, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_mode));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_mode) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_mode));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_uid) == 120, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_uid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_uid) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_uid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_gid) == 124, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_gid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_gid) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_gid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_flags) == 128, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_flags));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_flags) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_flags));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_rdev) == 132, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_rdev));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_rdev) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_rdev));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_nlink) == 136, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_nlink));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_nlink) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_nlink));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_unused2) == 140, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_unused2));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_unused2) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_unused2));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_suppgid) == 144, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_suppgid));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_suppgid) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_suppgid));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_eadatasize) == 148, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_eadatasize));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_eadatasize) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_eadatasize));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_aclsize) == 152, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_aclsize));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_aclsize) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_aclsize));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_max_mdsize) == 156, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_max_mdsize));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_max_mdsize) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_max_mdsize));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_max_cookiesize) == 160, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_max_cookiesize));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_max_cookiesize) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_max_cookiesize));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_uid_h) == 164, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_uid_h));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_uid_h) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_uid_h));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_gid_h) == 168, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_gid_h));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_gid_h) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_gid_h));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_5) == 172, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_5));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_5) == 4, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_5));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_6) == 176, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_6));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_6) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_6));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_7) == 184, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_7));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_7) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_7));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_8) == 192, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_8));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_8) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_8));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_9) == 200, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_9));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_9) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_9));
+       LASSERTF((int)offsetof(struct mdt_body, mbo_padding_10) == 208, "found %lld\n",
+                (long long)(int)offsetof(struct mdt_body, mbo_padding_10));
+       LASSERTF((int)sizeof(((struct mdt_body *)0)->mbo_padding_10) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct mdt_body *)0)->mbo_padding_10));
        LASSERTF(MDS_FMODE_CLOSED == 000000000000UL, "found 0%.11oUL\n",
-               MDS_FMODE_CLOSED);
+                MDS_FMODE_CLOSED);
        LASSERTF(MDS_FMODE_EXEC == 000000000004UL, "found 0%.11oUL\n",
-               MDS_FMODE_EXEC);
+                MDS_FMODE_EXEC);
        LASSERTF(MDS_FMODE_EPOCH == 000001000000UL, "found 0%.11oUL\n",
-               MDS_FMODE_EPOCH);
+                MDS_FMODE_EPOCH);
        LASSERTF(MDS_FMODE_TRUNC == 000002000000UL, "found 0%.11oUL\n",
-               MDS_FMODE_TRUNC);
+                MDS_FMODE_TRUNC);
        LASSERTF(MDS_FMODE_SOM == 000004000000UL, "found 0%.11oUL\n",
-               MDS_FMODE_SOM);
+                MDS_FMODE_SOM);
        LASSERTF(MDS_OPEN_CREATED == 000000000010UL, "found 0%.11oUL\n",
-               MDS_OPEN_CREATED);
+                MDS_OPEN_CREATED);
        LASSERTF(MDS_OPEN_CROSS == 000000000020UL, "found 0%.11oUL\n",
-               MDS_OPEN_CROSS);
+                MDS_OPEN_CROSS);
        LASSERTF(MDS_OPEN_CREAT == 000000000100UL, "found 0%.11oUL\n",
-               MDS_OPEN_CREAT);
+                MDS_OPEN_CREAT);
        LASSERTF(MDS_OPEN_EXCL == 000000000200UL, "found 0%.11oUL\n",
-               MDS_OPEN_EXCL);
+                MDS_OPEN_EXCL);
        LASSERTF(MDS_OPEN_TRUNC == 000000001000UL, "found 0%.11oUL\n",
-               MDS_OPEN_TRUNC);
+                MDS_OPEN_TRUNC);
        LASSERTF(MDS_OPEN_APPEND == 000000002000UL, "found 0%.11oUL\n",
-               MDS_OPEN_APPEND);
+                MDS_OPEN_APPEND);
        LASSERTF(MDS_OPEN_SYNC == 000000010000UL, "found 0%.11oUL\n",
-               MDS_OPEN_SYNC);
+                MDS_OPEN_SYNC);
        LASSERTF(MDS_OPEN_DIRECTORY == 000000200000UL, "found 0%.11oUL\n",
-               MDS_OPEN_DIRECTORY);
+                MDS_OPEN_DIRECTORY);
        LASSERTF(MDS_OPEN_BY_FID == 000040000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_BY_FID);
+                MDS_OPEN_BY_FID);
        LASSERTF(MDS_OPEN_DELAY_CREATE == 000100000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_DELAY_CREATE);
+                MDS_OPEN_DELAY_CREATE);
        LASSERTF(MDS_OPEN_OWNEROVERRIDE == 000200000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_OWNEROVERRIDE);
+                MDS_OPEN_OWNEROVERRIDE);
        LASSERTF(MDS_OPEN_JOIN_FILE == 000400000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_JOIN_FILE);
+                MDS_OPEN_JOIN_FILE);
        LASSERTF(MDS_OPEN_LOCK == 004000000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_LOCK);
+                MDS_OPEN_LOCK);
        LASSERTF(MDS_OPEN_HAS_EA == 010000000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_HAS_EA);
+                MDS_OPEN_HAS_EA);
        LASSERTF(MDS_OPEN_HAS_OBJS == 020000000000UL, "found 0%.11oUL\n",
-               MDS_OPEN_HAS_OBJS);
+                MDS_OPEN_HAS_OBJS);
        LASSERTF(MDS_OPEN_NORESTORE == 00000000000100000000000ULL, "found 0%.22lloULL\n",
-                       (long long)MDS_OPEN_NORESTORE);
+                (long long)MDS_OPEN_NORESTORE);
        LASSERTF(MDS_OPEN_NEWSTRIPE == 00000000000200000000000ULL, "found 0%.22lloULL\n",
-                       (long long)MDS_OPEN_NEWSTRIPE);
+                (long long)MDS_OPEN_NEWSTRIPE);
        LASSERTF(MDS_OPEN_VOLATILE == 00000000000400000000000ULL, "found 0%.22lloULL\n",
-                       (long long)MDS_OPEN_VOLATILE);
+                (long long)MDS_OPEN_VOLATILE);
        LASSERTF(LUSTRE_SYNC_FL == 0x00000008, "found 0x%.8x\n",
-               LUSTRE_SYNC_FL);
+                LUSTRE_SYNC_FL);
        LASSERTF(LUSTRE_IMMUTABLE_FL == 0x00000010, "found 0x%.8x\n",
-               LUSTRE_IMMUTABLE_FL);
+                LUSTRE_IMMUTABLE_FL);
        LASSERTF(LUSTRE_APPEND_FL == 0x00000020, "found 0x%.8x\n",
-               LUSTRE_APPEND_FL);
+                LUSTRE_APPEND_FL);
        LASSERTF(LUSTRE_NOATIME_FL == 0x00000080, "found 0x%.8x\n",
-               LUSTRE_NOATIME_FL);
+                LUSTRE_NOATIME_FL);
        LASSERTF(LUSTRE_DIRSYNC_FL == 0x00010000, "found 0x%.8x\n",
-               LUSTRE_DIRSYNC_FL);
+                LUSTRE_DIRSYNC_FL);
        LASSERTF(MDS_INODELOCK_LOOKUP == 0x000001, "found 0x%.8x\n",
-               MDS_INODELOCK_LOOKUP);
+                MDS_INODELOCK_LOOKUP);
        LASSERTF(MDS_INODELOCK_UPDATE == 0x000002, "found 0x%.8x\n",
-               MDS_INODELOCK_UPDATE);
+                MDS_INODELOCK_UPDATE);
        LASSERTF(MDS_INODELOCK_OPEN == 0x000004, "found 0x%.8x\n",
-               MDS_INODELOCK_OPEN);
+                MDS_INODELOCK_OPEN);
        LASSERTF(MDS_INODELOCK_LAYOUT == 0x000008, "found 0x%.8x\n",
-               MDS_INODELOCK_LAYOUT);
+                MDS_INODELOCK_LAYOUT);
 
        /* Checks for struct mdt_ioepoch */
        LASSERTF((int)sizeof(struct mdt_ioepoch) == 24, "found %lld\n",
@@ -2617,35 +2674,6 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct lmv_desc *)0)->ld_uuid) == 40, "found %lld\n",
                 (long long)(int)sizeof(((struct lmv_desc *)0)->ld_uuid));
 
-       /* Checks for struct lmv_stripe_md */
-       LASSERTF((int)sizeof(struct lmv_stripe_md) == 32, "found %lld\n",
-                (long long)(int)sizeof(struct lmv_stripe_md));
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_magic) == 0, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_magic));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_magic) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_magic));
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_count) == 4, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_count));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_count) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_count));
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_master) == 8, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_master));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_master) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_master));
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_padding) == 12, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_padding));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_padding) == 4, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_padding));
-       CLASSERT(LOV_MAXPOOLNAME == 16);
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_pool_name[16]) == 32, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_pool_name[16]));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_pool_name[16]) == 1, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_pool_name[16]));
-       LASSERTF((int)offsetof(struct lmv_stripe_md, mea_ids[0]) == 32, "found %lld\n",
-                (long long)(int)offsetof(struct lmv_stripe_md, mea_ids[0]));
-       LASSERTF((int)sizeof(((struct lmv_stripe_md *)0)->mea_ids[0]) == 16, "found %lld\n",
-                (long long)(int)sizeof(((struct lmv_stripe_md *)0)->mea_ids[0]));
-
        /* Checks for struct lov_desc */
        LASSERTF((int)sizeof(struct lov_desc) == 88, "found %lld\n",
                 (long long)(int)sizeof(struct lov_desc));
@@ -3195,10 +3223,10 @@ void lustre_assert_wire_constants(void)
                 (long long)(int)offsetof(struct llog_setattr64_rec, lsr_gid_h));
        LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_gid_h) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct llog_setattr64_rec *)0)->lsr_gid_h));
-       LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_padding) == 48, "found %lld\n",
-                (long long)(int)offsetof(struct llog_setattr64_rec, lsr_padding));
-       LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_padding) == 8, "found %lld\n",
-                (long long)(int)sizeof(((struct llog_setattr64_rec *)0)->lsr_padding));
+       LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_valid) == 48, "found %lld\n",
+                (long long)(int)offsetof(struct llog_setattr64_rec, lsr_valid));
+       LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_valid) == 8, "found %lld\n",
+                (long long)(int)sizeof(((struct llog_setattr64_rec *)0)->lsr_valid));
        LASSERTF((int)offsetof(struct llog_setattr64_rec, lsr_tail) == 56, "found %lld\n",
                 (long long)(int)offsetof(struct llog_setattr64_rec, lsr_tail));
        LASSERTF((int)sizeof(((struct llog_setattr64_rec *)0)->lsr_tail) == 8, "found %lld\n",
@@ -3506,6 +3534,19 @@ void lustre_assert_wire_constants(void)
        CLASSERT(LLOG_ORIGIN_HANDLE_DESTROY == 509);
        CLASSERT(LLOG_FIRST_OPC == 501);
        CLASSERT(LLOG_LAST_OPC == 510);
+       CLASSERT(LLOG_CONFIG_ORIG_CTXT == 0);
+       CLASSERT(LLOG_CONFIG_REPL_CTXT == 1);
+       CLASSERT(LLOG_MDS_OST_ORIG_CTXT == 2);
+       CLASSERT(LLOG_MDS_OST_REPL_CTXT == 3);
+       CLASSERT(LLOG_SIZE_ORIG_CTXT == 4);
+       CLASSERT(LLOG_SIZE_REPL_CTXT == 5);
+       CLASSERT(LLOG_TEST_ORIG_CTXT == 8);
+       CLASSERT(LLOG_TEST_REPL_CTXT == 9);
+       CLASSERT(LLOG_CHANGELOG_ORIG_CTXT == 12);
+       CLASSERT(LLOG_CHANGELOG_REPL_CTXT == 13);
+       CLASSERT(LLOG_CHANGELOG_USER_ORIG_CTXT == 14);
+       CLASSERT(LLOG_AGENT_ORIG_CTXT == 15);
+       CLASSERT(LLOG_MAX_CTXTS == 16);
 
        /* Checks for struct llogd_conn_body */
        LASSERTF((int)sizeof(struct llogd_conn_body) == 40, "found %lld\n",
@@ -3943,9 +3984,9 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct hsm_progress *)0)->padding) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct hsm_progress *)0)->padding));
        LASSERTF(HP_FLAG_COMPLETED == 0x01, "found 0x%.8x\n",
-               HP_FLAG_COMPLETED);
+                HP_FLAG_COMPLETED);
        LASSERTF(HP_FLAG_RETRY == 0x02, "found 0x%.8x\n",
-               HP_FLAG_RETRY);
+                HP_FLAG_RETRY);
 
        LASSERTF((int)offsetof(struct hsm_copy, hc_data_version) == 0, "found %lld\n",
                 (long long)(int)offsetof(struct hsm_copy, hc_data_version));
@@ -4100,9 +4141,9 @@ void lustre_assert_wire_constants(void)
        LASSERTF((int)sizeof(((struct hsm_request *)0)->hr_data_len) == 4, "found %lld\n",
                 (long long)(int)sizeof(((struct hsm_request *)0)->hr_data_len));
        LASSERTF(HSM_FORCE_ACTION == 0x00000001UL, "found 0x%.8xUL\n",
-               (unsigned)HSM_FORCE_ACTION);
+                (unsigned)HSM_FORCE_ACTION);
        LASSERTF(HSM_GHOST_COPY == 0x00000002UL, "found 0x%.8xUL\n",
-               (unsigned)HSM_GHOST_COPY);
+                (unsigned)HSM_GHOST_COPY);
 
        /* Checks for struct hsm_user_request */
        LASSERTF((int)sizeof(struct hsm_user_request) == 24, "found %lld\n",
index 42ff0d8b2eadd30eaf21c41a7860173819e46df1..48aa45acc9538bac4c0e86a5056c446e5d9ca537 100644 (file)
@@ -51,6 +51,140 @@ Description:
                uses.
 Users:
 
+What:          /sys/class/most/mostcore/devices/<mdev>/dci
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               If the network interface controller is attached via USB, a dci
+               directory is created that allows applications to use the
+               controller's direct communication interface (DCI) to exchange
+               information.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/arb_address
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to set an arbitrary DCI register address an
+               application wants to read from or write to.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/arb_value
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to read from or write to the arbitrary DCI register
+               whose address is stored in arb_address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_eui48_hi
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MAC address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_eui48_lo
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MAC address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_eui48_mi
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MAC address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_filter
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MEP filter address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_hash0
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MEP hash table.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_hash1
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MEP hash table.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_hash2
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MEP hash table.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/mep_hash3
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               This is used to check and configure the MEP hash table.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/ni_state
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the current network interface state.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/node_address
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the current node address.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/node_position
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the current node position.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/packet_bandwidth
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Indicates the configured packet bandwidth.
+Users:
+
+What:          /sys/class/most/mostcore/devices/<mdev>/dci/sync_ep
+Date:          June 2016
+KernelVersion: 4.9
+Contact:       Christian Gromm <christian.gromm@microchip.com>
+Description:
+               Triggers the controller's synchronization process for a certain
+               endpoint.
+Users:
+
 What:          /sys/class/most/mostcore/devices/<mdev>/<channel>/
 Date:          June 2015
 KernelVersion: 4.3
index de4f76abfb47cd35812082140e7b4da9511df7b5..1c20ae69c5616713eb70cf5876e8623387ca2b56 100644 (file)
@@ -130,7 +130,7 @@ static int aim_open(struct inode *inode, struct file *filp)
        if (!c->dev) {
                pr_info("WARN: Device is destroyed\n");
                mutex_unlock(&c->io_mutex);
-               return -EBUSY;
+               return -ENODEV;
        }
 
        if (c->access_ref) {
@@ -201,7 +201,7 @@ static ssize_t aim_write(struct file *filp, const char __user *buf,
        }
 
        if (unlikely(!c->dev)) {
-               ret = -EPIPE;
+               ret = -ENODEV;
                goto unlock;
        }
 
@@ -256,7 +256,7 @@ aim_read(struct file *filp, char __user *buf, size_t count, loff_t *offset)
        /* make sure we don't submit to gone devices */
        if (unlikely(!c->dev)) {
                mutex_unlock(&c->io_mutex);
-               return -EIO;
+               return -ENODEV;
        }
 
        to_copy = min_t(size_t,
@@ -366,7 +366,7 @@ static int aim_rx_completion(struct mbo *mbo)
        spin_lock(&c->unlink);
        if (!c->access_ref || !c->dev) {
                spin_unlock(&c->unlink);
-               return -EFAULT;
+               return -ENODEV;
        }
        kfifo_in(&c->fifo, &mbo, 1);
        spin_unlock(&c->unlink);
@@ -499,23 +499,27 @@ static struct most_aim cdev_aim = {
 
 static int __init mod_init(void)
 {
+       int err;
+
        pr_info("init()\n");
 
        INIT_LIST_HEAD(&channel_list);
        spin_lock_init(&ch_list_lock);
        ida_init(&minor_id);
 
-       if (alloc_chrdev_region(&aim_devno, 0, 50, "cdev") < 0)
-               return -EIO;
+       err = alloc_chrdev_region(&aim_devno, 0, 50, "cdev");
+       if (err < 0)
+               goto dest_ida;
        major = MAJOR(aim_devno);
 
        aim_class = class_create(THIS_MODULE, "most_cdev_aim");
        if (IS_ERR(aim_class)) {
                pr_err("no udev support\n");
+               err = PTR_ERR(aim_class);
                goto free_cdev;
        }
-
-       if (most_register_aim(&cdev_aim))
+       err = most_register_aim(&cdev_aim);
+       if (err)
                goto dest_class;
        return 0;
 
@@ -523,7 +527,9 @@ dest_class:
        class_destroy(aim_class);
 free_cdev:
        unregister_chrdev_region(aim_devno, 1);
-       return -EIO;
+dest_ida:
+       ida_destroy(&minor_id);
+       return err;
 }
 
 static void __exit mod_exit(void)
index 2f42de44d05137cf9e894675c71759934832b345..4659a6450c04f1c30c0695f473ba9875c0c08bbc 100644 (file)
@@ -298,15 +298,16 @@ static struct net_dev_context *get_net_dev_context(
        struct most_interface *iface)
 {
        struct net_dev_context *nd, *tmp;
+       unsigned long flags;
 
-       spin_lock(&list_lock);
+       spin_lock_irqsave(&list_lock, flags);
        list_for_each_entry_safe(nd, tmp, &net_devices, list) {
                if (nd->iface == iface) {
-                       spin_unlock(&list_lock);
+                       spin_unlock_irqrestore(&list_lock, flags);
                        return nd;
                }
        }
-       spin_unlock(&list_lock);
+       spin_unlock_irqrestore(&list_lock, flags);
        return NULL;
 }
 
@@ -316,6 +317,7 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
 {
        struct net_dev_context *nd;
        struct net_dev_channel *ch;
+       unsigned long flags;
 
        if (!iface)
                return -EINVAL;
@@ -332,9 +334,9 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
 
                nd->iface = iface;
 
-               spin_lock(&list_lock);
+               spin_lock_irqsave(&list_lock, flags);
                list_add(&nd->list, &net_devices);
-               spin_unlock(&list_lock);
+               spin_unlock_irqrestore(&list_lock, flags);
        }
 
        ch = ccfg->direction == MOST_CH_TX ? &nd->tx : &nd->rx;
@@ -377,6 +379,7 @@ static int aim_disconnect_channel(struct most_interface *iface,
 {
        struct net_dev_context *nd;
        struct net_dev_channel *ch;
+       unsigned long flags;
 
        nd = get_net_dev_context(iface);
        if (!nd)
@@ -398,9 +401,9 @@ static int aim_disconnect_channel(struct most_interface *iface,
        most_net_rm_netdev_safe(nd);
 
        if (!nd->rx.linked && !nd->tx.linked) {
-               spin_lock(&list_lock);
+               spin_lock_irqsave(&list_lock, flags);
                list_del(&nd->list);
-               spin_unlock(&list_lock);
+               spin_unlock_irqrestore(&list_lock, flags);
                kfree(nd);
        }
 
@@ -514,20 +517,21 @@ static int __init most_net_init(void)
 static void __exit most_net_exit(void)
 {
        struct net_dev_context *nd, *tmp;
+       unsigned long flags;
 
-       spin_lock(&list_lock);
+       spin_lock_irqsave(&list_lock, flags);
        list_for_each_entry_safe(nd, tmp, &net_devices, list) {
                list_del(&nd->list);
-               spin_unlock(&list_lock);
+               spin_unlock_irqrestore(&list_lock, flags);
                /*
                 * do not call most_stop_channel() here, because channels are
                 * going to be closed in ndo_stop() after unregister_netdev()
                 */
                most_net_rm_netdev_safe(nd);
                kfree(nd);
-               spin_lock(&list_lock);
+               spin_lock_irqsave(&list_lock, flags);
        }
-       spin_unlock(&list_lock);
+       spin_unlock_irqrestore(&list_lock, flags);
 
        most_deregister_aim(&aim);
        pr_info("most_net_exit()\n");
index 13abf7c275a4e9809c5e2eb02faf1a135493a5af..150dc895a34b36bd74e2ff0bdb4cbb7ebd310426 100644 (file)
@@ -79,7 +79,7 @@ static int aim_vdev_open(struct file *filp)
        struct most_video_dev *mdev = video_drvdata(filp);
        struct aim_fh *fh;
 
-       pr_info("aim_vdev_open()\n");
+       v4l2_info(&mdev->v4l2_dev, "aim_vdev_open()\n");
 
        switch (vdev->vfl_type) {
        case VFL_TYPE_GRABBER:
@@ -93,7 +93,7 @@ static int aim_vdev_open(struct file *filp)
                return -ENOMEM;
 
        if (!atomic_inc_and_test(&mdev->access_ref)) {
-               pr_err("too many clients\n");
+               v4l2_err(&mdev->v4l2_dev, "too many clients\n");
                ret = -EBUSY;
                goto err_dec;
        }
@@ -106,7 +106,7 @@ static int aim_vdev_open(struct file *filp)
 
        ret = most_start_channel(mdev->iface, mdev->ch_idx, &aim_info);
        if (ret) {
-               pr_err("most_start_channel() failed\n");
+               v4l2_err(&mdev->v4l2_dev, "most_start_channel() failed\n");
                goto err_rm;
        }
 
@@ -128,7 +128,7 @@ static int aim_vdev_close(struct file *filp)
        struct most_video_dev *mdev = fh->mdev;
        struct mbo *mbo, *tmp;
 
-       pr_info("aim_vdev_close()\n");
+       v4l2_info(&mdev->v4l2_dev, "aim_vdev_close()\n");
 
        /*
         * We need to put MBOs back before we call most_stop_channel()
@@ -139,15 +139,15 @@ static int aim_vdev_close(struct file *filp)
         * This must be implemented in core.
         */
 
-       spin_lock(&mdev->list_lock);
+       spin_lock_irq(&mdev->list_lock);
        mdev->mute = true;
        list_for_each_entry_safe(mbo, tmp, &mdev->pending_mbos, list) {
                list_del(&mbo->list);
-               spin_unlock(&mdev->list_lock);
+               spin_unlock_irq(&mdev->list_lock);
                most_put_mbo(mbo);
-               spin_lock(&mdev->list_lock);
+               spin_lock_irq(&mdev->list_lock);
        }
-       spin_unlock(&mdev->list_lock);
+       spin_unlock_irq(&mdev->list_lock);
        most_stop_channel(mdev->iface, mdev->ch_idx, &aim_info);
        mdev->mute = false;
 
@@ -187,7 +187,7 @@ static ssize_t aim_vdev_read(struct file *filp, char __user *buf,
                int const cnt = rem < count ? rem : count;
 
                if (copy_to_user(buf, mbo->virt_address + fh->offs, cnt)) {
-                       pr_err("read: copy_to_user failed\n");
+                       v4l2_err(&mdev->v4l2_dev, "read: copy_to_user failed\n");
                        if (!ret)
                                ret = -EFAULT;
                        return ret;
@@ -200,9 +200,9 @@ static ssize_t aim_vdev_read(struct file *filp, char __user *buf,
 
                if (cnt >= rem) {
                        fh->offs = 0;
-                       spin_lock(&mdev->list_lock);
+                       spin_lock_irq(&mdev->list_lock);
                        list_del(&mbo->list);
-                       spin_unlock(&mdev->list_lock);
+                       spin_unlock_irq(&mdev->list_lock);
                        most_put_mbo(mbo);
                }
        }
@@ -250,16 +250,16 @@ static int aim_set_format(struct most_video_dev *mdev, unsigned int cmd,
        return 0;
 }
 
-static int vidioc_querycap(struct file *file, void  *priv,
+static int vidioc_querycap(struct file *file, void *priv,
                           struct v4l2_capability *cap)
 {
        struct aim_fh *fh = priv;
        struct most_video_dev *mdev = fh->mdev;
 
-       pr_info("vidioc_querycap()\n");
+       v4l2_info(&mdev->v4l2_dev, "vidioc_querycap()\n");
 
        strlcpy(cap->driver, "v4l2_most_aim", sizeof(cap->driver));
-       strlcpy(cap->card, "my_card", sizeof(cap->card));
+       strlcpy(cap->card, "MOST", sizeof(cap->card));
        snprintf(cap->bus_info, sizeof(cap->bus_info),
                 "%s", mdev->iface->description);
 
@@ -270,10 +270,13 @@ static int vidioc_querycap(struct file *file, void  *priv,
        return 0;
 }
 
-static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
+static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv,
                                   struct v4l2_fmtdesc *f)
 {
-       pr_info("vidioc_enum_fmt_vid_cap() %d\n", f->index);
+       struct aim_fh *fh = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       v4l2_info(&mdev->v4l2_dev, "vidioc_enum_fmt_vid_cap() %d\n", f->index);
 
        if (f->index)
                return -EINVAL;
@@ -289,7 +292,10 @@ static int vidioc_enum_fmt_vid_cap(struct file *file, void  *priv,
 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
                                struct v4l2_format *f)
 {
-       pr_info("vidioc_g_fmt_vid_cap()\n");
+       struct aim_fh *fh = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       v4l2_info(&mdev->v4l2_dev, "vidioc_g_fmt_vid_cap()\n");
 
        aim_set_format_struct(f);
        return 0;
@@ -298,7 +304,7 @@ static int vidioc_g_fmt_vid_cap(struct file *file, void *priv,
 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
                                  struct v4l2_format *f)
 {
-       struct aim_fh *fh  = priv;
+       struct aim_fh *fh = priv;
        struct most_video_dev *mdev = fh->mdev;
 
        return aim_set_format(mdev, VIDIOC_TRY_FMT, f);
@@ -307,7 +313,7 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
                                struct v4l2_format *f)
 {
-       struct aim_fh *fh  = priv;
+       struct aim_fh *fh = priv;
        struct most_video_dev *mdev = fh->mdev;
 
        return aim_set_format(mdev, VIDIOC_S_FMT, f);
@@ -315,7 +321,10 @@ static int vidioc_s_fmt_vid_cap(struct file *file, void *priv,
 
 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
 {
-       pr_info("vidioc_g_std()\n");
+       struct aim_fh *fh = priv;
+       struct most_video_dev *mdev = fh->mdev;
+
+       v4l2_info(&mdev->v4l2_dev, "vidioc_g_std()\n");
 
        *norm = V4L2_STD_UNKNOWN;
        return 0;
@@ -352,7 +361,7 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int index)
        struct aim_fh *fh = priv;
        struct most_video_dev *mdev = fh->mdev;
 
-       pr_info("vidioc_s_input(%d)\n", index);
+       v4l2_info(&mdev->v4l2_dev, "vidioc_s_input(%d)\n", index);
 
        if (index >= V4L2_AIM_MAX_INPUT)
                return -EINVAL;
@@ -393,45 +402,46 @@ static const struct video_device aim_videodev_template = {
 static struct most_video_dev *get_aim_dev(
        struct most_interface *iface, int channel_idx)
 {
-       struct most_video_dev *mdev, *tmp;
+       struct most_video_dev *mdev;
+       unsigned long flags;
 
-       spin_lock(&list_lock);
-       list_for_each_entry_safe(mdev, tmp, &video_devices, list) {
+       spin_lock_irqsave(&list_lock, flags);
+       list_for_each_entry(mdev, &video_devices, list) {
                if (mdev->iface == iface && mdev->ch_idx == channel_idx) {
-                       spin_unlock(&list_lock);
+                       spin_unlock_irqrestore(&list_lock, flags);
                        return mdev;
                }
        }
-       spin_unlock(&list_lock);
+       spin_unlock_irqrestore(&list_lock, flags);
        return NULL;
 }
 
 static int aim_rx_data(struct mbo *mbo)
 {
+       unsigned long flags;
        struct most_video_dev *mdev =
                get_aim_dev(mbo->ifp, mbo->hdm_channel_id);
 
        if (!mdev)
                return -EIO;
 
-       spin_lock(&mdev->list_lock);
+       spin_lock_irqsave(&mdev->list_lock, flags);
        if (unlikely(mdev->mute)) {
-               spin_unlock(&mdev->list_lock);
+               spin_unlock_irqrestore(&mdev->list_lock, flags);
                return -EIO;
        }
 
        list_add_tail(&mbo->list, &mdev->pending_mbos);
-       spin_unlock(&mdev->list_lock);
+       spin_unlock_irqrestore(&mdev->list_lock, flags);
        wake_up_interruptible(&mdev->wait_data);
        return 0;
 }
 
 static int aim_register_videodev(struct most_video_dev *mdev)
 {
-       int retval = -ENOMEM;
        int ret;
 
-       pr_info("aim_register_videodev()\n");
+       v4l2_info(&mdev->v4l2_dev, "aim_register_videodev()\n");
 
        init_waitqueue_head(&mdev->wait_data);
 
@@ -444,27 +454,24 @@ static int aim_register_videodev(struct most_video_dev *mdev)
        *mdev->vdev = aim_videodev_template;
        mdev->vdev->v4l2_dev = &mdev->v4l2_dev;
        mdev->vdev->lock = &mdev->lock;
-       strcpy(mdev->vdev->name, "most v4l2 aim video");
+       snprintf(mdev->vdev->name, sizeof(mdev->vdev->name), "MOST: %s",
+                mdev->v4l2_dev.name);
 
        /* Register the v4l2 device */
        video_set_drvdata(mdev->vdev, mdev);
-       retval = video_register_device(mdev->vdev, VFL_TYPE_GRABBER, -1);
-       if (retval != 0) {
-               pr_err("video_register_device failed (%d)\n", retval);
-               ret = -ENODEV;
-               goto err_vbi_dev;
+       ret = video_register_device(mdev->vdev, VFL_TYPE_GRABBER, -1);
+       if (ret) {
+               v4l2_err(&mdev->v4l2_dev, "video_register_device failed (%d)\n",
+                        ret);
+               video_device_release(mdev->vdev);
        }
 
-       return 0;
-
-err_vbi_dev:
-       video_device_release(mdev->vdev);
        return ret;
 }
 
 static void aim_unregister_videodev(struct most_video_dev *mdev)
 {
-       pr_info("aim_unregister_videodev()\n");
+       v4l2_info(&mdev->v4l2_dev, "aim_unregister_videodev()\n");
 
        video_unregister_device(mdev->vdev);
 }
@@ -485,7 +492,7 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
        int ret;
        struct most_video_dev *mdev = get_aim_dev(iface, channel_idx);
 
-       pr_info("aim_probe_channel()\n");
+       pr_info("aim_probe_channel(%s)\n", name);
 
        if (mdev) {
                pr_err("channel already linked\n");
@@ -516,8 +523,7 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
        mdev->v4l2_dev.release = aim_v4l2_dev_release;
 
        /* Create the v4l2_device */
-       strlcpy(mdev->v4l2_dev.name, "most_video_device",
-               sizeof(mdev->v4l2_dev.name));
+       strlcpy(mdev->v4l2_dev.name, name, sizeof(mdev->v4l2_dev.name));
        ret = v4l2_device_register(NULL, &mdev->v4l2_dev);
        if (ret) {
                pr_err("v4l2_device_register() failed\n");
@@ -529,9 +535,10 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
        if (ret)
                goto err_unreg;
 
-       spin_lock(&list_lock);
+       spin_lock_irq(&list_lock);
        list_add(&mdev->list, &video_devices);
-       spin_unlock(&list_lock);
+       spin_unlock_irq(&list_lock);
+       v4l2_info(&mdev->v4l2_dev, "aim_probe_channel() done\n");
        return 0;
 
 err_unreg:
@@ -545,16 +552,16 @@ static int aim_disconnect_channel(struct most_interface *iface,
 {
        struct most_video_dev *mdev = get_aim_dev(iface, channel_idx);
 
-       pr_info("aim_disconnect_channel()\n");
-
        if (!mdev) {
                pr_err("no such channel is linked\n");
                return -ENOENT;
        }
 
-       spin_lock(&list_lock);
+       v4l2_info(&mdev->v4l2_dev, "aim_disconnect_channel()\n");
+
+       spin_lock_irq(&list_lock);
        list_del(&mdev->list);
-       spin_unlock(&list_lock);
+       spin_unlock_irq(&list_lock);
 
        aim_unregister_videodev(mdev);
        v4l2_device_disconnect(&mdev->v4l2_dev);
@@ -585,17 +592,17 @@ static void __exit aim_exit(void)
         * we simulate this call here.
         * This must be fixed in core.
         */
-       spin_lock(&list_lock);
+       spin_lock_irq(&list_lock);
        list_for_each_entry_safe(mdev, tmp, &video_devices, list) {
                list_del(&mdev->list);
-               spin_unlock(&list_lock);
+               spin_unlock_irq(&list_lock);
 
                aim_unregister_videodev(mdev);
                v4l2_device_disconnect(&mdev->v4l2_dev);
                v4l2_device_put(&mdev->v4l2_dev);
-               spin_lock(&list_lock);
+               spin_lock_irq(&list_lock);
        }
-       spin_unlock(&list_lock);
+       spin_unlock_irq(&list_lock);
 
        most_deregister_aim(&aim_info);
        BUG_ON(!list_empty(&video_devices));
index 3c524506ee2233f559182301f39528bbd7ac5988..20b69705cfdb215b17d5e9476a9be6bcb22d883b 100644 (file)
 #include "dim2_reg.h"
 #include <linux/stddef.h>
 
-/*
- * The number of frames per sub-buffer for synchronous channels.
- * Allowed values: 1, 2, 4, 8, 16, 32, 64.
- */
-#define FRAMES_PER_SUBBUFF 16
-
-/*
- * Size factor for synchronous DBR buffer.
- * Minimal value is 4*FRAMES_PER_SUBBUFF.
- */
-#define SYNC_DBR_FACTOR (4u * (u16)FRAMES_PER_SUBBUFF)
-
 /*
  * Size factor for isochronous DBR buffer.
  * Minimal value is 3.
@@ -64,9 +52,6 @@
 /* -------------------------------------------------------------------------- */
 /* generic helper functions and macros */
 
-#define MLBC0_FCNT_VAL_MACRO(n) MLBC0_FCNT_VAL_ ## n ## FPSB
-#define MLBC0_FCNT_VAL(fpsb) MLBC0_FCNT_VAL_MACRO(fpsb)
-
 static inline u32 bit_mask(u8 position)
 {
        return (u32)1 << position;
@@ -85,6 +70,7 @@ struct lld_global_vars_t {
        bool dim_is_initialized;
        bool mcm_is_initialized;
        struct dim2_regs __iomem *dim2; /* DIM2 core base address */
+       u32 fcnt;
        u32 dbr_map[DBR_MAP_SIZE];
 };
 
@@ -149,15 +135,34 @@ static void free_dbr(int offs, int size)
 
 /* -------------------------------------------------------------------------- */
 
-static u32 dim2_read_ctr(u32 ctr_addr, u16 mdat_idx)
+static void dim2_transfer_madr(u32 val)
 {
-       dimcb_io_write(&g.dim2->MADR, ctr_addr);
+       dimcb_io_write(&g.dim2->MADR, val);
 
-       /* wait till transfer is completed */
+       /* wait for transfer completion */
        while ((dimcb_io_read(&g.dim2->MCTL) & 1) != 1)
                continue;
 
        dimcb_io_write(&g.dim2->MCTL, 0);   /* clear transfer complete */
+}
+
+static void dim2_clear_dbr(u16 addr, u16 size)
+{
+       enum { MADR_TB_BIT = 30, MADR_WNR_BIT = 31 };
+
+       u16 const end_addr = addr + size;
+       u32 const cmd = bit_mask(MADR_WNR_BIT) | bit_mask(MADR_TB_BIT);
+
+       dimcb_io_write(&g.dim2->MCTL, 0);   /* clear transfer complete */
+       dimcb_io_write(&g.dim2->MDAT0, 0);
+
+       for (; addr < end_addr; addr++)
+               dim2_transfer_madr(cmd | addr);
+}
+
+static u32 dim2_read_ctr(u32 ctr_addr, u16 mdat_idx)
+{
+       dim2_transfer_madr(ctr_addr);
 
        return dimcb_io_read((&g.dim2->MDAT0) + mdat_idx);
 }
@@ -182,13 +187,7 @@ static void dim2_write_ctr_mask(u32 ctr_addr, const u32 *mask, const u32 *value)
        dimcb_io_write(&g.dim2->MDWE2, mask[2]);
        dimcb_io_write(&g.dim2->MDWE3, mask[3]);
 
-       dimcb_io_write(&g.dim2->MADR, bit_mask(MADR_WNR_BIT) | ctr_addr);
-
-       /* wait till transfer is completed */
-       while ((dimcb_io_read(&g.dim2->MCTL) & 1) != 1)
-               continue;
-
-       dimcb_io_write(&g.dim2->MCTL, 0);   /* clear transfer complete */
+       dim2_transfer_madr(bit_mask(MADR_WNR_BIT) | ctr_addr);
 }
 
 static inline void dim2_write_ctr(u32 ctr_addr, const u32 *value)
@@ -356,6 +355,9 @@ static void dim2_clear_channel(u8 ch_addr)
 
        dim2_clear_cat(MLB_CAT, ch_addr);
        dim2_clear_cdt(ch_addr);
+
+       /* clear channel status bit */
+       dimcb_io_write(&g.dim2->ACSR0, bit_mask(ch_addr));
 }
 
 /* -------------------------------------------------------------------------- */
@@ -398,7 +400,8 @@ static inline bool check_packet_length(u32 packet_length)
 
 static inline bool check_bytes_per_frame(u32 bytes_per_frame)
 {
-       u16 const max_size = ((u16)CDT3_BD_MASK + 1u) / SYNC_DBR_FACTOR;
+       u16 const bd_factor = g.fcnt + 2;
+       u16 const max_size = ((u16)CDT3_BD_MASK + 1u) >> bd_factor;
 
        if (bytes_per_frame <= 0)
                return false; /* too small */
@@ -439,7 +442,7 @@ static inline u16 norm_sync_buffer_size(u16 buf_size, u16 bytes_per_frame)
 {
        u16 n;
        u16 const max_size = (u16)ADT1_ISOC_SYNC_BD_MASK + 1u;
-       u32 const unit = bytes_per_frame * (u16)FRAMES_PER_SUBBUFF;
+       u32 const unit = bytes_per_frame << g.fcnt;
 
        if (buf_size > max_size)
                buf_size = max_size;
@@ -479,7 +482,7 @@ static void dim2_initialize(bool enable_6pin, u8 mlb_clock)
        dimcb_io_write(&g.dim2->MLBC0,
                       enable_6pin << MLBC0_MLBPEN_BIT |
                       mlb_clock << MLBC0_MLBCLK_SHIFT |
-                      MLBC0_FCNT_VAL(FRAMES_PER_SUBBUFF) << MLBC0_FCNT_SHIFT |
+                      g.fcnt << MLBC0_FCNT_SHIFT |
                       true << MLBC0_MLBEN_BIT);
 
        /* activate all HBI channels */
@@ -650,7 +653,8 @@ static bool channel_detach_buffers(struct dim_channel *ch, u16 buffers_number)
 /* -------------------------------------------------------------------------- */
 /* API */
 
-u8 dim_startup(struct dim2_regs __iomem *dim_base_address, u32 mlb_clock)
+u8 dim_startup(struct dim2_regs __iomem *dim_base_address, u32 mlb_clock,
+              u32 fcnt)
 {
        g.dim_is_initialized = false;
 
@@ -662,7 +666,11 @@ u8 dim_startup(struct dim2_regs __iomem *dim_base_address, u32 mlb_clock)
        if (mlb_clock >= 8)
                return DIM_INIT_ERR_MLB_CLOCK;
 
+       if (fcnt > MLBC0_FCNT_MAX_VAL)
+               return DIM_INIT_ERR_MLB_CLOCK;
+
        g.dim2 = dim_base_address;
+       g.fcnt = fcnt;
        g.dbr_map[0] = 0;
        g.dbr_map[1] = 0;
 
@@ -781,6 +789,8 @@ u8 dim_init_isoc(struct dim_channel *ch, u8 is_tx, u16 ch_address,
 u8 dim_init_sync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
                 u16 bytes_per_frame)
 {
+       u16 bd_factor = g.fcnt + 2;
+
        if (!g.dim_is_initialized || !ch)
                return DIM_ERR_DRIVER_NOT_INITIALIZED;
 
@@ -790,13 +800,14 @@ u8 dim_init_sync(struct dim_channel *ch, u8 is_tx, u16 ch_address,
        if (!check_bytes_per_frame(bytes_per_frame))
                return DIM_ERR_BAD_CONFIG;
 
-       ch->dbr_size = bytes_per_frame * SYNC_DBR_FACTOR;
+       ch->dbr_size = bytes_per_frame << bd_factor;
        ch->dbr_addr = alloc_dbr(ch->dbr_size);
        if (ch->dbr_addr >= DBR_SIZE)
                return DIM_INIT_ERR_OUT_OF_MEMORY;
 
        sync_init(ch, ch_address / 2, bytes_per_frame);
 
+       dim2_clear_dbr(ch->dbr_addr, ch->dbr_size);
        dim2_configure_channel(ch->addr, CAT_CT_VAL_SYNC, is_tx,
                               ch->dbr_addr, ch->dbr_size, 0, true);
 
index 1c924e869de7bfe99935b04d61c0e5191093bc5a..62eb5e7f81dfdac2955e39c42da2dc70d8546d18 100644 (file)
@@ -60,7 +60,8 @@ struct dim_channel {
        u16 done_sw_buffers_number; /*< Done software buffers number. */
 };
 
-u8 dim_startup(struct dim2_regs __iomem *dim_base_address, u32 mlb_clock);
+u8 dim_startup(struct dim2_regs __iomem *dim_base_address, u32 mlb_clock,
+              u32 fcnt);
 
 void dim_shutdown(void);
 
index a364495515136426a92462e6838599a4d94c36e0..87039d9aa87fb489eb9577125bbb6cff9ea88dd2 100644 (file)
@@ -44,6 +44,17 @@ static char *clock_speed;
 module_param(clock_speed, charp, 0);
 MODULE_PARM_DESC(clock_speed, "MediaLB Clock Speed");
 
+/*
+ * The parameter representing the number of frames per sub-buffer for
+ * synchronous channels.  Valid values: [0 .. 6].
+ *
+ * The values 0, 1, 2, 3, 4, 5, 6 represent corresponding number of frames per
+ * sub-buffer 1, 2, 4, 8, 16, 32, 64.
+ */
+static u8 fcnt = 4;  /* (1 << fcnt) frames per subbuffer */
+module_param(fcnt, byte, 0);
+MODULE_PARM_DESC(fcnt, "Num of frames per sub-buffer for sync channels as a power of 2");
+
 /*
  * #############################################################################
  *
@@ -212,7 +223,8 @@ static int startup_dim(struct platform_device *pdev)
                        return ret;
        }
 
-       hal_ret = dim_startup(dev->io_base, dev->clk_speed);
+       pr_info("sync: num of frames per sub-buffer: %u\n", fcnt);
+       hal_ret = dim_startup(dev->io_base, dev->clk_speed, fcnt);
        if (hal_ret != DIM_NO_ERROR) {
                pr_err("dim_startup failed: %d\n", hal_ret);
                if (pdata && pdata->destroy)
@@ -705,12 +717,14 @@ static int poison_channel(struct most_interface *most_iface, int ch_idx)
        if (!hdm_ch->is_initialized)
                return -EPERM;
 
+       tasklet_disable(&dim2_tasklet);
        spin_lock_irqsave(&dim_lock, flags);
        hal_ret = dim_destroy_channel(&hdm_ch->ch);
        hdm_ch->is_initialized = false;
        if (ch_idx == dev->atx_idx)
                dev->atx_idx = -1;
        spin_unlock_irqrestore(&dim_lock, flags);
+       tasklet_enable(&dim2_tasklet);
        if (hal_ret != DIM_NO_ERROR) {
                pr_err("HAL Failed to close channel %s\n", hdm_ch->name);
                ret = -EFAULT;
index e0837b6b9ae10ed2f67919923918e840e56f1a77..3b1c2004e5201b7774f29ba52736862646cb802d 100644 (file)
@@ -77,13 +77,7 @@ enum {
 
        MLBC0_FCNT_SHIFT = 15,
        MLBC0_FCNT_MASK = 7,
-       MLBC0_FCNT_VAL_1FPSB = 0,
-       MLBC0_FCNT_VAL_2FPSB = 1,
-       MLBC0_FCNT_VAL_4FPSB = 2,
-       MLBC0_FCNT_VAL_8FPSB = 3,
-       MLBC0_FCNT_VAL_16FPSB = 4,
-       MLBC0_FCNT_VAL_32FPSB = 5,
-       MLBC0_FCNT_VAL_64FPSB = 6,
+       MLBC0_FCNT_MAX_VAL = 6,
 
        MLBC0_MLBEN_BIT = 0,
 
index aeae071f28232170fe0685a7675b4262f7e9ec8b..5b27e963f6e0fe280117a84e2f2fd478755118f4 100644 (file)
@@ -43,8 +43,9 @@
 
 #define USB_VENDOR_ID_SMSC     0x0424  /* VID: SMSC */
 #define USB_DEV_ID_BRDG                0xC001  /* PID: USB Bridge */
-#define USB_DEV_ID_INIC                0xCF18  /* PID: USB INIC */
-#define HW_RESYNC              0x0000
+#define USB_DEV_ID_OS81118     0xCF18  /* PID: USB OS81118 */
+#define USB_DEV_ID_OS81119     0xCF19  /* PID: USB OS81119 */
+#define USB_DEV_ID_OS81210     0xCF30  /* PID: USB OS81210 */
 /* DRCI Addresses */
 #define DRCI_REG_NI_STATE      0x0100
 #define DRCI_REG_PACKET_BW     0x0101
 /**
  * struct buf_anchor - used to create a list of pending URBs
  * @urb: pointer to USB request block
- * @clear_work_obj:
  * @list: linked list
  * @urb_completion:
  */
 struct buf_anchor {
        struct urb *urb;
-       struct work_struct clear_work_obj;
        struct list_head list;
-       struct completion urb_compl;
 };
 
-#define to_buf_anchor(w) container_of(w, struct buf_anchor, clear_work_obj)
-
 /**
  * struct most_dci_obj - Direct Communication Interface
  * @kobj:position in sysfs
  * @usb_device: pointer to the usb device
+ * @reg_addr: register address for arbitrary DCI access
  */
 struct most_dci_obj {
        struct kobject kobj;
        struct usb_device *usb_device;
+       u16 reg_addr;
 };
 
 #define to_dci_obj(p) container_of(p, struct most_dci_obj, kobj)
 
+struct most_dev;
+
+struct clear_hold_work {
+       struct work_struct ws;
+       struct most_dev *mdev;
+       unsigned int channel;
+       int pipe;
+};
+
+#define to_clear_hold_work(w) container_of(w, struct clear_hold_work, ws)
+
 /**
  * struct most_dev - holds all usb interface specific stuff
  * @parent: parent object in sysfs
@@ -127,6 +136,7 @@ struct most_dev {
        spinlock_t anchor_list_lock[MAX_NUM_ENDPOINTS];
        bool padding_active[MAX_NUM_ENDPOINTS];
        bool is_channel_healthy[MAX_NUM_ENDPOINTS];
+       struct clear_hold_work clear_work[MAX_NUM_ENDPOINTS];
        struct list_head *anchor_list;
        struct mutex io_mutex;
        struct timer_list link_stat_timer;
@@ -191,40 +201,37 @@ static inline int drci_wr_reg(struct usb_device *dev, u16 reg, u16 data)
  * free_anchored_buffers - free device's anchored items
  * @mdev: the device
  * @channel: channel ID
+ * @status: status of MBO termination
  */
-static void free_anchored_buffers(struct most_dev *mdev, unsigned int channel)
+static void free_anchored_buffers(struct most_dev *mdev, unsigned int channel,
+                                 enum mbo_status_flags status)
 {
        struct mbo *mbo;
        struct buf_anchor *anchor, *tmp;
+       spinlock_t *lock = mdev->anchor_list_lock + channel; /* temp. lock */
        unsigned long flags;
 
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+       spin_lock_irqsave(lock, flags);
        list_for_each_entry_safe(anchor, tmp, &mdev->anchor_list[channel],
                                 list) {
                struct urb *urb = anchor->urb;
 
-               spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+               spin_unlock_irqrestore(lock, flags);
                if (likely(urb)) {
                        mbo = urb->context;
-                       if (!irqs_disabled()) {
-                               usb_kill_urb(urb);
-                       } else {
-                               usb_unlink_urb(urb);
-                               wait_for_completion(&anchor->urb_compl);
-                       }
-                       if ((mbo) && (mbo->complete)) {
-                               mbo->status = MBO_E_CLOSE;
+                       usb_kill_urb(urb);
+                       if (mbo && mbo->complete) {
+                               mbo->status = status;
                                mbo->processed_length = 0;
                                mbo->complete(mbo);
                        }
                        usb_free_urb(urb);
                }
-               spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+               spin_lock_irqsave(lock, flags);
                list_del(&anchor->list);
-               cancel_work_sync(&anchor->clear_work_obj);
                kfree(anchor);
        }
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       spin_unlock_irqrestore(lock, flags);
 }
 
 /**
@@ -274,22 +281,28 @@ static unsigned int get_stream_frame_size(struct most_channel_config *cfg)
  */
 static int hdm_poison_channel(struct most_interface *iface, int channel)
 {
-       struct most_dev *mdev;
+       struct most_dev *mdev = to_mdev(iface);
+       unsigned long flags;
+       spinlock_t *lock; /* temp. lock */
 
-       mdev = to_mdev(iface);
        if (unlikely(!iface)) {
                dev_warn(&mdev->usb_device->dev, "Poison: Bad interface.\n");
                return -EIO;
        }
-       if (unlikely((channel < 0) || (channel >= iface->num_channels))) {
+       if (unlikely(channel < 0 || channel >= iface->num_channels)) {
                dev_warn(&mdev->usb_device->dev, "Channel ID out of range.\n");
                return -ECHRNG;
        }
 
+       lock = mdev->anchor_list_lock + channel;
+       spin_lock_irqsave(lock, flags);
        mdev->is_channel_healthy[channel] = false;
+       spin_unlock_irqrestore(lock, flags);
+
+       cancel_work_sync(&mdev->clear_work[channel].ws);
 
        mutex_lock(&mdev->io_mutex);
-       free_anchored_buffers(mdev, channel);
+       free_anchored_buffers(mdev, channel, MBO_E_CLOSE);
        if (mdev->padding_active[channel])
                mdev->padding_active[channel] = false;
 
@@ -313,10 +326,10 @@ static int hdm_poison_channel(struct most_interface *iface, int channel)
 static int hdm_add_padding(struct most_dev *mdev, int channel, struct mbo *mbo)
 {
        struct most_channel_config *conf = &mdev->conf[channel];
-       unsigned int j, num_frames, frame_size;
+       unsigned int frame_size = get_stream_frame_size(conf);
+       unsigned int j, num_frames;
        u16 rd_addr, wr_addr;
 
-       frame_size = get_stream_frame_size(conf);
        if (!frame_size)
                return -EIO;
        num_frames = mbo->buffer_length / frame_size;
@@ -350,10 +363,10 @@ static int hdm_add_padding(struct most_dev *mdev, int channel, struct mbo *mbo)
 static int hdm_remove_padding(struct most_dev *mdev, int channel,
                              struct mbo *mbo)
 {
-       unsigned int j, num_frames, frame_size;
        struct most_channel_config *const conf = &mdev->conf[channel];
+       unsigned int frame_size = get_stream_frame_size(conf);
+       unsigned int j, num_frames;
 
-       frame_size = get_stream_frame_size(conf);
        if (!frame_size)
                return -EIO;
        num_frames = mbo->processed_length / USB_MTU;
@@ -380,37 +393,30 @@ static int hdm_remove_padding(struct most_dev *mdev, int channel,
  */
 static void hdm_write_completion(struct urb *urb)
 {
-       struct mbo *mbo;
-       struct buf_anchor *anchor;
-       struct most_dev *mdev;
-       struct device *dev;
-       unsigned int channel;
+       struct mbo *mbo = urb->context;
+       struct buf_anchor *anchor = mbo->priv;
+       struct most_dev *mdev = to_mdev(mbo->ifp);
+       unsigned int channel = mbo->hdm_channel_id;
+       struct device *dev = &mdev->usb_device->dev;
+       spinlock_t *lock = mdev->anchor_list_lock + channel; /* temp. lock */
        unsigned long flags;
 
-       mbo = urb->context;
-       anchor = mbo->priv;
-       mdev = to_mdev(mbo->ifp);
-       channel = mbo->hdm_channel_id;
-       dev = &mdev->usb_device->dev;
-
-       if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
-           (!mdev->is_channel_healthy[channel])) {
-               complete(&anchor->urb_compl);
+       spin_lock_irqsave(lock, flags);
+       if (urb->status == -ENOENT || urb->status == -ECONNRESET ||
+           !mdev->is_channel_healthy[channel]) {
+               spin_unlock_irqrestore(lock, flags);
                return;
        }
 
-       if (unlikely(urb->status && !(urb->status == -ENOENT ||
-                                     urb->status == -ECONNRESET ||
-                                     urb->status == -ESHUTDOWN))) {
+       if (unlikely(urb->status && urb->status != -ESHUTDOWN)) {
                mbo->processed_length = 0;
                switch (urb->status) {
                case -EPIPE:
                        dev_warn(dev, "Broken OUT pipe detected\n");
-                       most_stop_enqueue(&mdev->iface, channel);
-                       mbo->status = MBO_E_INVAL;
-                       usb_unlink_urb(urb);
-                       INIT_WORK(&anchor->clear_work_obj, wq_clear_halt);
-                       schedule_work(&anchor->clear_work_obj);
+                       mdev->is_channel_healthy[channel] = false;
+                       spin_unlock_irqrestore(lock, flags);
+                       mdev->clear_work[channel].pipe = urb->pipe;
+                       schedule_work(&mdev->clear_work[channel].ws);
                        return;
                case -ENODEV:
                case -EPROTO:
@@ -425,9 +431,8 @@ static void hdm_write_completion(struct urb *urb)
                mbo->processed_length = urb->actual_length;
        }
 
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
        list_del(&anchor->list);
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       spin_unlock_irqrestore(lock, flags);
        kfree(anchor);
 
        if (likely(mbo->complete))
@@ -545,36 +550,30 @@ static void hdm_write_completion(struct urb *urb)
  */
 static void hdm_read_completion(struct urb *urb)
 {
-       struct mbo *mbo;
-       struct buf_anchor *anchor;
-       struct most_dev *mdev;
-       struct device *dev;
+       struct mbo *mbo = urb->context;
+       struct buf_anchor *anchor = mbo->priv;
+       struct most_dev *mdev = to_mdev(mbo->ifp);
+       unsigned int channel = mbo->hdm_channel_id;
+       struct device *dev = &mdev->usb_device->dev;
+       spinlock_t *lock = mdev->anchor_list_lock + channel; /* temp. lock */
        unsigned long flags;
-       unsigned int channel;
 
-       mbo = urb->context;
-       anchor = mbo->priv;
-       mdev = to_mdev(mbo->ifp);
-       channel = mbo->hdm_channel_id;
-       dev = &mdev->usb_device->dev;
-
-       if ((urb->status == -ENOENT) || (urb->status == -ECONNRESET) ||
-           (!mdev->is_channel_healthy[channel])) {
-               complete(&anchor->urb_compl);
+       spin_lock_irqsave(lock, flags);
+       if (urb->status == -ENOENT || urb->status == -ECONNRESET ||
+           !mdev->is_channel_healthy[channel]) {
+               spin_unlock_irqrestore(lock, flags);
                return;
        }
 
-       if (unlikely(urb->status && !(urb->status == -ENOENT ||
-                                     urb->status == -ECONNRESET ||
-                                     urb->status == -ESHUTDOWN))) {
+       if (unlikely(urb->status && urb->status != -ESHUTDOWN)) {
                mbo->processed_length = 0;
                switch (urb->status) {
                case -EPIPE:
                        dev_warn(dev, "Broken IN pipe detected\n");
-                       mbo->status = MBO_E_INVAL;
-                       usb_unlink_urb(urb);
-                       INIT_WORK(&anchor->clear_work_obj, wq_clear_halt);
-                       schedule_work(&anchor->clear_work_obj);
+                       mdev->is_channel_healthy[channel] = false;
+                       spin_unlock_irqrestore(lock, flags);
+                       mdev->clear_work[channel].pipe = urb->pipe;
+                       schedule_work(&mdev->clear_work[channel].ws);
                        return;
                case -ENODEV:
                case -EPROTO:
@@ -588,20 +587,16 @@ static void hdm_read_completion(struct urb *urb)
                }
        } else {
                mbo->processed_length = urb->actual_length;
-               if (!mdev->padding_active[channel]) {
-                       mbo->status = MBO_SUCCESS;
-               } else {
-                       if (hdm_remove_padding(mdev, channel, mbo)) {
-                               mbo->processed_length = 0;
-                               mbo->status = MBO_E_INVAL;
-                       } else {
-                               mbo->status = MBO_SUCCESS;
-                       }
+               mbo->status = MBO_SUCCESS;
+               if (mdev->padding_active[channel] &&
+                   hdm_remove_padding(mdev, channel, mbo)) {
+                       mbo->processed_length = 0;
+                       mbo->status = MBO_E_INVAL;
                }
        }
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+
        list_del(&anchor->list);
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       spin_unlock_irqrestore(lock, flags);
        kfree(anchor);
 
        if (likely(mbo->complete))
@@ -636,10 +631,11 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
        unsigned long flags;
        unsigned long length;
        void *virt_address;
+       spinlock_t *lock; /* temp. lock */
 
        if (unlikely(!iface || !mbo))
                return -EIO;
-       if (unlikely(iface->num_channels <= channel) || (channel < 0))
+       if (unlikely(iface->num_channels <= channel || channel < 0))
                return -ECHRNG;
 
        mdev = to_mdev(iface);
@@ -650,10 +646,8 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
                return -ENODEV;
 
        urb = usb_alloc_urb(NO_ISOCHRONOUS_URB, GFP_ATOMIC);
-       if (!urb) {
-               dev_err(dev, "Failed to allocate URB\n");
+       if (!urb)
                return -ENOMEM;
-       }
 
        anchor = kzalloc(sizeof(*anchor), GFP_ATOMIC);
        if (!anchor) {
@@ -662,19 +656,13 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
        }
 
        anchor->urb = urb;
-       init_completion(&anchor->urb_compl);
        mbo->priv = anchor;
 
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
-       list_add_tail(&anchor->list, &mdev->anchor_list[channel]);
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
-
-       if ((mdev->padding_active[channel]) &&
-           (conf->direction & MOST_CH_TX))
-               if (hdm_add_padding(mdev, channel, mbo)) {
-                       retval = -EIO;
-                       goto _error_1;
-               }
+       if ((conf->direction & MOST_CH_TX) && mdev->padding_active[channel] &&
+           hdm_add_padding(mdev, channel, mbo)) {
+               retval = -EIO;
+               goto _error;
+       }
 
        urb->transfer_dma = mbo->bus_address;
        virt_address = mbo->virt_address;
@@ -701,6 +689,11 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
        }
        urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
 
+       lock = mdev->anchor_list_lock + channel;
+       spin_lock_irqsave(lock, flags);
+       list_add_tail(&anchor->list, &mdev->anchor_list[channel]);
+       spin_unlock_irqrestore(lock, flags);
+
        retval = usb_submit_urb(urb, GFP_KERNEL);
        if (retval) {
                dev_err(dev, "URB submit failed with error %d.\n", retval);
@@ -709,9 +702,9 @@ static int hdm_enqueue(struct most_interface *iface, int channel,
        return 0;
 
 _error_1:
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
+       spin_lock_irqsave(lock, flags);
        list_del(&anchor->list);
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
+       spin_unlock_irqrestore(lock, flags);
        kfree(anchor);
 _error:
        usb_free_urb(urb);
@@ -731,29 +724,30 @@ static int hdm_configure_channel(struct most_interface *iface, int channel,
        unsigned int frame_size;
        unsigned int temp_size;
        unsigned int tail_space;
-       struct most_dev *mdev;
-       struct device *dev;
+       struct most_dev *mdev = to_mdev(iface);
+       struct device *dev = &mdev->usb_device->dev;
 
-       mdev = to_mdev(iface);
        mdev->is_channel_healthy[channel] = true;
-       dev = &mdev->usb_device->dev;
+       mdev->clear_work[channel].channel = channel;
+       mdev->clear_work[channel].mdev = mdev;
+       INIT_WORK(&mdev->clear_work[channel].ws, wq_clear_halt);
 
        if (unlikely(!iface || !conf)) {
                dev_err(dev, "Bad interface or config pointer.\n");
                return -EINVAL;
        }
-       if (unlikely((channel < 0) || (channel >= iface->num_channels))) {
+       if (unlikely(channel < 0 || channel >= iface->num_channels)) {
                dev_err(dev, "Channel ID out of range.\n");
                return -EINVAL;
        }
-       if ((!conf->num_buffers) || (!conf->buffer_size)) {
+       if (!conf->num_buffers || !conf->buffer_size) {
                dev_err(dev, "Misconfig: buffer size or #buffers zero.\n");
                return -EINVAL;
        }
 
-       if (!(conf->data_type == MOST_CH_SYNC) &&
-           !((conf->data_type == MOST_CH_ISOC_AVP) &&
-             (conf->packets_per_xact != 0xFF))) {
+       if (conf->data_type != MOST_CH_SYNC &&
+           !(conf->data_type == MOST_CH_ISOC_AVP &&
+             conf->packets_per_xact != 0xFF)) {
                mdev->padding_active[channel] = false;
                goto exit;
        }
@@ -762,7 +756,7 @@ static int hdm_configure_channel(struct most_interface *iface, int channel,
        temp_size = conf->buffer_size;
 
        frame_size = get_stream_frame_size(conf);
-       if ((frame_size == 0) || (frame_size > USB_MTU)) {
+       if (frame_size == 0 || frame_size > USB_MTU) {
                dev_warn(dev, "Misconfig: frame size wrong\n");
                return -EINVAL;
        }
@@ -807,17 +801,17 @@ static int hdm_update_netinfo(struct most_dev *mdev)
        if (!is_valid_ether_addr(mdev->hw_addr)) {
                if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_HI, &hi) < 0) {
                        dev_err(dev, "Vendor request \"hw_addr_hi\" failed\n");
-                       return -1;
+                       return -EFAULT;
                }
 
                if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_MI, &mi) < 0) {
                        dev_err(dev, "Vendor request \"hw_addr_mid\" failed\n");
-                       return -1;
+                       return -EFAULT;
                }
 
                if (drci_rd_reg(usb_device, DRCI_REG_HW_ADDR_LO, &lo) < 0) {
                        dev_err(dev, "Vendor request \"hw_addr_low\" failed\n");
-                       return -1;
+                       return -EFAULT;
                }
 
                mutex_lock(&mdev->io_mutex);
@@ -832,7 +826,7 @@ static int hdm_update_netinfo(struct most_dev *mdev)
 
        if (drci_rd_reg(usb_device, DRCI_REG_NI_STATE, &link) < 0) {
                dev_err(dev, "Vendor request \"link status\" failed\n");
-               return -1;
+               return -EFAULT;
        }
 
        mutex_lock(&mdev->io_mutex);
@@ -886,25 +880,22 @@ static void link_stat_timer_handler(unsigned long data)
  */
 static void wq_netinfo(struct work_struct *wq_obj)
 {
-       struct most_dev *mdev;
-       int i, prev_link_stat;
+       struct most_dev *mdev = to_mdev_from_work(wq_obj);
+       int i, prev_link_stat = mdev->link_stat;
        u8 prev_hw_addr[6];
 
-       mdev = to_mdev_from_work(wq_obj);
-       prev_link_stat = mdev->link_stat;
-
        for (i = 0; i < 6; i++)
                prev_hw_addr[i] = mdev->hw_addr[i];
 
        if (hdm_update_netinfo(mdev) < 0)
                return;
-       if ((prev_link_stat != mdev->link_stat) ||
-           (prev_hw_addr[0] != mdev->hw_addr[0]) ||
-           (prev_hw_addr[1] != mdev->hw_addr[1]) ||
-           (prev_hw_addr[2] != mdev->hw_addr[2]) ||
-           (prev_hw_addr[3] != mdev->hw_addr[3]) ||
-           (prev_hw_addr[4] != mdev->hw_addr[4]) ||
-           (prev_hw_addr[5] != mdev->hw_addr[5]))
+       if (prev_link_stat != mdev->link_stat ||
+           prev_hw_addr[0] != mdev->hw_addr[0] ||
+           prev_hw_addr[1] != mdev->hw_addr[1] ||
+           prev_hw_addr[2] != mdev->hw_addr[2] ||
+           prev_hw_addr[3] != mdev->hw_addr[3] ||
+           prev_hw_addr[4] != mdev->hw_addr[4] ||
+           prev_hw_addr[5] != mdev->hw_addr[5])
                most_deliver_netinfo(&mdev->iface, mdev->link_stat,
                                     &mdev->hw_addr[0]);
 }
@@ -917,33 +908,20 @@ static void wq_netinfo(struct work_struct *wq_obj)
  */
 static void wq_clear_halt(struct work_struct *wq_obj)
 {
-       struct buf_anchor *anchor;
-       struct most_dev *mdev;
-       struct mbo *mbo;
-       struct urb *urb;
-       unsigned int channel;
-       unsigned long flags;
-
-       anchor = to_buf_anchor(wq_obj);
-       urb = anchor->urb;
-       mbo = urb->context;
-       mdev = to_mdev(mbo->ifp);
-       channel = mbo->hdm_channel_id;
+       struct clear_hold_work *clear_work = to_clear_hold_work(wq_obj);
+       struct most_dev *mdev = clear_work->mdev;
+       unsigned int channel = clear_work->channel;
+       int pipe = clear_work->pipe;
 
-       if (usb_clear_halt(urb->dev, urb->pipe))
+       mutex_lock(&mdev->io_mutex);
+       most_stop_enqueue(&mdev->iface, channel);
+       free_anchored_buffers(mdev, channel, MBO_E_INVAL);
+       if (usb_clear_halt(mdev->usb_device, pipe))
                dev_warn(&mdev->usb_device->dev, "Failed to reset endpoint.\n");
 
-       usb_free_urb(urb);
-       spin_lock_irqsave(&mdev->anchor_list_lock[channel], flags);
-       list_del(&anchor->list);
-       spin_unlock_irqrestore(&mdev->anchor_list_lock[channel], flags);
-
-       if (likely(mbo->complete))
-               mbo->complete(mbo);
-       if (mdev->conf[channel].direction & MOST_CH_TX)
-               most_resume_enqueue(&mdev->iface, channel);
-
-       kfree(anchor);
+       mdev->is_channel_healthy[channel] = true;
+       most_resume_enqueue(&mdev->iface, channel);
+       mutex_unlock(&mdev->io_mutex);
 }
 
 /**
@@ -958,7 +936,9 @@ static const struct file_operations hdm_usb_fops = {
  */
 static struct usb_device_id usbid[] = {
        { USB_DEVICE(USB_VENDOR_ID_SMSC, USB_DEV_ID_BRDG), },
-       { USB_DEVICE(USB_VENDOR_ID_SMSC, USB_DEV_ID_INIC), },
+       { USB_DEVICE(USB_VENDOR_ID_SMSC, USB_DEV_ID_OS81118), },
+       { USB_DEVICE(USB_VENDOR_ID_SMSC, USB_DEV_ID_OS81119), },
+       { USB_DEVICE(USB_VENDOR_ID_SMSC, USB_DEV_ID_OS81210), },
        { } /* Terminating entry */
 };
 
@@ -970,6 +950,10 @@ static struct usb_device_id usbid[] = {
        struct most_dci_attribute most_dci_attr_##_name = \
                __ATTR(_name, S_IRUGO | S_IWUSR, show_value, store_value)
 
+#define MOST_DCI_WO_ATTR(_name) \
+       struct most_dci_attribute most_dci_attr_##_name = \
+               __ATTR(_name, S_IWUSR, NULL, store_value)
+
 /**
  * struct most_dci_attribute - to access the attributes of a dci object
  * @attr: attributes of a dci object
@@ -1046,45 +1030,68 @@ static void most_dci_release(struct kobject *kobj)
        kfree(dci_obj);
 }
 
+struct regs {
+       const char *name;
+       u16 reg;
+};
+
+static const struct regs ro_regs[] = {
+       { "ni_state", DRCI_REG_NI_STATE },
+       { "packet_bandwidth", DRCI_REG_PACKET_BW },
+       { "node_address", DRCI_REG_NODE_ADDR },
+       { "node_position", DRCI_REG_NODE_POS },
+};
+
+static const struct regs rw_regs[] = {
+       { "mep_filter", DRCI_REG_MEP_FILTER },
+       { "mep_hash0", DRCI_REG_HASH_TBL0 },
+       { "mep_hash1", DRCI_REG_HASH_TBL1 },
+       { "mep_hash2", DRCI_REG_HASH_TBL2 },
+       { "mep_hash3", DRCI_REG_HASH_TBL3 },
+       { "mep_eui48_hi", DRCI_REG_HW_ADDR_HI },
+       { "mep_eui48_mi", DRCI_REG_HW_ADDR_MI },
+       { "mep_eui48_lo", DRCI_REG_HW_ADDR_LO },
+};
+
+static int get_stat_reg_addr(const struct regs *regs, int size,
+                            const char *name, u16 *reg_addr)
+{
+       int i;
+
+       for (i = 0; i < size; i++) {
+               if (!strcmp(name, regs[i].name)) {
+                       *reg_addr = regs[i].reg;
+                       return 0;
+               }
+       }
+       return -EFAULT;
+}
+
+#define get_static_reg_addr(regs, name, reg_addr) \
+       get_stat_reg_addr(regs, ARRAY_SIZE(regs), name, reg_addr)
+
 static ssize_t show_value(struct most_dci_obj *dci_obj,
                          struct most_dci_attribute *attr, char *buf)
 {
-       u16 tmp_val;
+       const char *name = attr->attr.name;
+       u16 val;
        u16 reg_addr;
        int err;
 
-       if (!strcmp(attr->attr.name, "ni_state"))
-               reg_addr = DRCI_REG_NI_STATE;
-       else if (!strcmp(attr->attr.name, "packet_bandwidth"))
-               reg_addr = DRCI_REG_PACKET_BW;
-       else if (!strcmp(attr->attr.name, "node_address"))
-               reg_addr = DRCI_REG_NODE_ADDR;
-       else if (!strcmp(attr->attr.name, "node_position"))
-               reg_addr = DRCI_REG_NODE_POS;
-       else if (!strcmp(attr->attr.name, "mep_filter"))
-               reg_addr = DRCI_REG_MEP_FILTER;
-       else if (!strcmp(attr->attr.name, "mep_hash0"))
-               reg_addr = DRCI_REG_HASH_TBL0;
-       else if (!strcmp(attr->attr.name, "mep_hash1"))
-               reg_addr = DRCI_REG_HASH_TBL1;
-       else if (!strcmp(attr->attr.name, "mep_hash2"))
-               reg_addr = DRCI_REG_HASH_TBL2;
-       else if (!strcmp(attr->attr.name, "mep_hash3"))
-               reg_addr = DRCI_REG_HASH_TBL3;
-       else if (!strcmp(attr->attr.name, "mep_eui48_hi"))
-               reg_addr = DRCI_REG_HW_ADDR_HI;
-       else if (!strcmp(attr->attr.name, "mep_eui48_mi"))
-               reg_addr = DRCI_REG_HW_ADDR_MI;
-       else if (!strcmp(attr->attr.name, "mep_eui48_lo"))
-               reg_addr = DRCI_REG_HW_ADDR_LO;
-       else
-               return -EIO;
+       if (!strcmp(name, "arb_address"))
+               return snprintf(buf, PAGE_SIZE, "%04x\n", dci_obj->reg_addr);
 
-       err = drci_rd_reg(dci_obj->usb_device, reg_addr, &tmp_val);
+       if (!strcmp(name, "arb_value"))
+               reg_addr = dci_obj->reg_addr;
+       else if (get_static_reg_addr(ro_regs, name, &reg_addr) &&
+                get_static_reg_addr(rw_regs, name, &reg_addr))
+               return -EFAULT;
+
+       err = drci_rd_reg(dci_obj->usb_device, reg_addr, &val);
        if (err < 0)
                return err;
 
-       return snprintf(buf, PAGE_SIZE, "%04x\n", tmp_val);
+       return snprintf(buf, PAGE_SIZE, "%04x\n", val);
 }
 
 static ssize_t store_value(struct most_dci_obj *dci_obj,
@@ -1093,31 +1100,28 @@ static ssize_t store_value(struct most_dci_obj *dci_obj,
 {
        u16 val;
        u16 reg_addr;
-       int err;
-
-       if (!strcmp(attr->attr.name, "mep_filter"))
-               reg_addr = DRCI_REG_MEP_FILTER;
-       else if (!strcmp(attr->attr.name, "mep_hash0"))
-               reg_addr = DRCI_REG_HASH_TBL0;
-       else if (!strcmp(attr->attr.name, "mep_hash1"))
-               reg_addr = DRCI_REG_HASH_TBL1;
-       else if (!strcmp(attr->attr.name, "mep_hash2"))
-               reg_addr = DRCI_REG_HASH_TBL2;
-       else if (!strcmp(attr->attr.name, "mep_hash3"))
-               reg_addr = DRCI_REG_HASH_TBL3;
-       else if (!strcmp(attr->attr.name, "mep_eui48_hi"))
-               reg_addr = DRCI_REG_HW_ADDR_HI;
-       else if (!strcmp(attr->attr.name, "mep_eui48_mi"))
-               reg_addr = DRCI_REG_HW_ADDR_MI;
-       else if (!strcmp(attr->attr.name, "mep_eui48_lo"))
-               reg_addr = DRCI_REG_HW_ADDR_LO;
-       else
-               return -EIO;
+       const char *name = attr->attr.name;
+       int err = kstrtou16(buf, 16, &val);
 
-       err = kstrtou16(buf, 16, &val);
        if (err)
                return err;
 
+       if (!strcmp(name, "arb_address")) {
+               dci_obj->reg_addr = val;
+               return count;
+       }
+
+       if (!strcmp(name, "arb_value")) {
+               reg_addr = dci_obj->reg_addr;
+       } else if (!strcmp(name, "sync_ep")) {
+               u16 ep = val;
+
+               reg_addr = DRCI_REG_BASE + DRCI_COMMAND + ep * 16;
+               val = 1;
+       } else if (get_static_reg_addr(ro_regs, name, &reg_addr)) {
+               return -EFAULT;
+       }
+
        err = drci_wr_reg(dci_obj->usb_device, reg_addr, val);
        if (err < 0)
                return err;
@@ -1129,6 +1133,7 @@ static MOST_DCI_RO_ATTR(ni_state);
 static MOST_DCI_RO_ATTR(packet_bandwidth);
 static MOST_DCI_RO_ATTR(node_address);
 static MOST_DCI_RO_ATTR(node_position);
+static MOST_DCI_WO_ATTR(sync_ep);
 static MOST_DCI_ATTR(mep_filter);
 static MOST_DCI_ATTR(mep_hash0);
 static MOST_DCI_ATTR(mep_hash1);
@@ -1137,6 +1142,8 @@ static MOST_DCI_ATTR(mep_hash3);
 static MOST_DCI_ATTR(mep_eui48_hi);
 static MOST_DCI_ATTR(mep_eui48_mi);
 static MOST_DCI_ATTR(mep_eui48_lo);
+static MOST_DCI_ATTR(arb_address);
+static MOST_DCI_ATTR(arb_value);
 
 /**
  * most_dci_def_attrs - array of default attribute files of the dci object
@@ -1146,6 +1153,7 @@ static struct attribute *most_dci_def_attrs[] = {
        &most_dci_attr_packet_bandwidth.attr,
        &most_dci_attr_node_address.attr,
        &most_dci_attr_node_position.attr,
+       &most_dci_attr_sync_ep.attr,
        &most_dci_attr_mep_filter.attr,
        &most_dci_attr_mep_hash0.attr,
        &most_dci_attr_mep_hash1.attr,
@@ -1154,6 +1162,8 @@ static struct attribute *most_dci_def_attrs[] = {
        &most_dci_attr_mep_eui48_hi.attr,
        &most_dci_attr_mep_eui48_mi.attr,
        &most_dci_attr_mep_eui48_lo.attr,
+       &most_dci_attr_arb_address.attr,
+       &most_dci_attr_arb_value.attr,
        NULL,
 };
 
@@ -1176,10 +1186,9 @@ static struct kobj_type most_dci_ktype = {
 static struct
 most_dci_obj *create_most_dci_obj(struct kobject *parent)
 {
-       struct most_dci_obj *most_dci;
+       struct most_dci_obj *most_dci = kzalloc(sizeof(*most_dci), GFP_KERNEL);
        int retval;
 
-       most_dci = kzalloc(sizeof(*most_dci), GFP_KERNEL);
        if (!most_dci)
                return NULL;
 
@@ -1216,21 +1225,17 @@ static void destroy_most_dci_obj(struct most_dci_obj *p)
 static int
 hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
 {
+       struct usb_host_interface *usb_iface_desc = interface->cur_altsetting;
+       struct usb_device *usb_dev = interface_to_usbdev(interface);
+       struct device *dev = &usb_dev->dev;
+       struct most_dev *mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
        unsigned int i;
        unsigned int num_endpoints;
        struct most_channel_capability *tmp_cap;
-       struct most_dev *mdev;
-       struct usb_device *usb_dev;
-       struct device *dev;
-       struct usb_host_interface *usb_iface_desc;
        struct usb_endpoint_descriptor *ep_desc;
        int ret = 0;
        int err;
 
-       usb_iface_desc = interface->cur_altsetting;
-       usb_dev = interface_to_usbdev(interface);
-       dev = &usb_dev->dev;
-       mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
        if (!mdev)
                goto exit_ENOMEM;
 
@@ -1332,7 +1337,9 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)
        }
 
        mutex_lock(&mdev->io_mutex);
-       if (le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_INIC) {
+       if (le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81118 ||
+           le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81119 ||
+           le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81210) {
                /* this increments the reference count of the instance
                 * object of the core
                 */
@@ -1379,9 +1386,8 @@ exit_ENOMEM:
  */
 static void hdm_disconnect(struct usb_interface *interface)
 {
-       struct most_dev *mdev;
+       struct most_dev *mdev = usb_get_intfdata(interface);
 
-       mdev = usb_get_intfdata(interface);
        mutex_lock(&mdev->io_mutex);
        usb_set_intfdata(interface, NULL);
        mdev->usb_device = NULL;
index 7c619feb12d335556d24474f0bbc826b4880d787..db0606ca9f79d080c0486e5ead0ffa771c0c9133 100644 (file)
@@ -33,7 +33,7 @@
 #define STRING_SIZE    80
 
 static struct class *most_class;
-static struct device *class_glue_dir;
+static struct device *core_dev;
 static struct ida mdev_id;
 static int dummy_num_buffers;
 
@@ -51,6 +51,7 @@ struct most_c_obj {
        u16 channel_id;
        bool is_poisoned;
        struct mutex start_mutex;
+       struct mutex nq_mutex; /* nq thread synchronization */
        int is_starving;
        struct most_interface *iface;
        struct most_inst_obj *inst;
@@ -1131,18 +1132,18 @@ static inline void trash_mbo(struct mbo *mbo)
        spin_unlock_irqrestore(&c->fifo_lock, flags);
 }
 
-static struct mbo *get_hdm_mbo(struct most_c_obj *c)
+static bool hdm_mbo_ready(struct most_c_obj *c)
 {
-       unsigned long flags;
-       struct mbo *mbo;
+       bool empty;
 
-       spin_lock_irqsave(&c->fifo_lock, flags);
-       if (c->enqueue_halt || list_empty(&c->halt_fifo))
-               mbo = NULL;
-       else
-               mbo = list_pop_mbo(&c->halt_fifo);
-       spin_unlock_irqrestore(&c->fifo_lock, flags);
-       return mbo;
+       if (c->enqueue_halt)
+               return false;
+
+       spin_lock_irq(&c->fifo_lock);
+       empty = list_empty(&c->halt_fifo);
+       spin_unlock_irq(&c->fifo_lock);
+
+       return !empty;
 }
 
 static void nq_hdm_mbo(struct mbo *mbo)
@@ -1160,20 +1161,32 @@ static int hdm_enqueue_thread(void *data)
 {
        struct most_c_obj *c = data;
        struct mbo *mbo;
+       int ret;
        typeof(c->iface->enqueue) enqueue = c->iface->enqueue;
 
        while (likely(!kthread_should_stop())) {
                wait_event_interruptible(c->hdm_fifo_wq,
-                                        (mbo = get_hdm_mbo(c)) ||
+                                        hdm_mbo_ready(c) ||
                                         kthread_should_stop());
 
-               if (unlikely(!mbo))
+               mutex_lock(&c->nq_mutex);
+               spin_lock_irq(&c->fifo_lock);
+               if (unlikely(c->enqueue_halt || list_empty(&c->halt_fifo))) {
+                       spin_unlock_irq(&c->fifo_lock);
+                       mutex_unlock(&c->nq_mutex);
                        continue;
+               }
+
+               mbo = list_pop_mbo(&c->halt_fifo);
+               spin_unlock_irq(&c->fifo_lock);
 
                if (c->cfg.direction == MOST_CH_RX)
                        mbo->buffer_length = c->cfg.buffer_size;
 
-               if (unlikely(enqueue(mbo->ifp, mbo->hdm_channel_id, mbo))) {
+               ret = enqueue(mbo->ifp, mbo->hdm_channel_id, mbo);
+               mutex_unlock(&c->nq_mutex);
+
+               if (unlikely(ret)) {
                        pr_err("hdm enqueue failed\n");
                        nq_hdm_mbo(mbo);
                        c->hdm_enqueue_task = NULL;
@@ -1468,10 +1481,8 @@ static void most_read_completion(struct mbo *mbo)
                return;
        }
 
-       if (atomic_sub_and_test(1, &c->mbo_nq_level)) {
-               pr_info("WARN: rx device out of buffers\n");
+       if (atomic_sub_and_test(1, &c->mbo_nq_level))
                c->is_starving = 1;
-       }
 
        if (c->aim0.refs && c->aim0.ptr->rx_completion &&
            c->aim0.ptr->rx_completion(mbo) == 0)
@@ -1761,6 +1772,7 @@ struct kobject *most_register_interface(struct most_interface *iface)
                init_completion(&c->cleanup);
                atomic_set(&c->mbo_ref, 0);
                mutex_init(&c->start_mutex);
+               mutex_init(&c->nq_mutex);
                list_add_tail(&c->list, &inst->channel_list);
        }
        pr_info("registered new MOST device mdev%d (%s)\n",
@@ -1826,8 +1838,12 @@ void most_stop_enqueue(struct most_interface *iface, int id)
 {
        struct most_c_obj *c = get_channel_by_iface(iface, id);
 
-       if (likely(c))
-               c->enqueue_halt = true;
+       if (!c)
+               return;
+
+       mutex_lock(&c->nq_mutex);
+       c->enqueue_halt = true;
+       mutex_unlock(&c->nq_mutex);
 }
 EXPORT_SYMBOL_GPL(most_stop_enqueue);
 
@@ -1843,9 +1859,12 @@ void most_resume_enqueue(struct most_interface *iface, int id)
 {
        struct most_c_obj *c = get_channel_by_iface(iface, id);
 
-       if (unlikely(!c))
+       if (!c)
                return;
+
+       mutex_lock(&c->nq_mutex);
        c->enqueue_halt = false;
+       mutex_unlock(&c->nq_mutex);
 
        wake_up_interruptible(&c->hdm_fifo_wq);
 }
@@ -1879,22 +1898,19 @@ static int __init most_init(void)
                goto exit_class;
        }
 
-       class_glue_dir =
-               device_create(most_class, NULL, 0, NULL, "mostcore");
-       if (IS_ERR(class_glue_dir)) {
-               err = PTR_ERR(class_glue_dir);
+       core_dev = device_create(most_class, NULL, 0, NULL, "mostcore");
+       if (IS_ERR(core_dev)) {
+               err = PTR_ERR(core_dev);
                goto exit_driver;
        }
 
-       most_aim_kset =
-               kset_create_and_add("aims", NULL, &class_glue_dir->kobj);
+       most_aim_kset = kset_create_and_add("aims", NULL, &core_dev->kobj);
        if (!most_aim_kset) {
                err = -ENOMEM;
                goto exit_class_container;
        }
 
-       most_inst_kset =
-               kset_create_and_add("devices", NULL, &class_glue_dir->kobj);
+       most_inst_kset = kset_create_and_add("devices", NULL, &core_dev->kobj);
        if (!most_inst_kset) {
                err = -ENOMEM;
                goto exit_driver_kset;
index 99445d0fcf9c1c40ea823700a709f80bba1a18f7..595ac1b9be0551728678bf306d96f914bc79cb93 100644 (file)
@@ -192,7 +192,7 @@ static int xlr_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
        return phy_ethtool_sset(phydev, ecmd);
 }
 
-static struct ethtool_ops xlr_ethtool_ops = {
+static const struct ethtool_ops xlr_ethtool_ops = {
        .get_settings = xlr_get_settings,
        .set_settings = xlr_set_settings,
 };
index 16ea17ff3fd25d0057b9fecf612eb36df633522f..0b8f1d9c7056c8a23243c7d441985f5e0bfbcd67 100644 (file)
@@ -6,5 +6,5 @@ config OCTEON_USB
          Networks' products in the Octeon family.
 
          To compile this driver as a module, choose M here. The module
-         will be called octeon-usb.
+         will be called octeon-hcd.
 
index 48846dffc8e1161d2a78f7db3ebb6b5d28237424..4e7304210bb91ee257fe077d43d6878e5e26a660 100644 (file)
@@ -117,7 +117,10 @@ static void cvm_oct_rgmii_poll(struct net_device *dev)
        cvmx_helper_link_info_t link_info;
        bool status_change;
 
-       link_info = cvmx_helper_link_autoconf(priv->port);
+       link_info = cvmx_helper_link_get(priv->port);
+       if (priv->link_info != link_info.u64 &&
+           cvmx_helper_link_set(priv->port, link_info))
+               link_info.u64 = priv->link_info;
        status_change = priv->link_info != link_info.u64;
        priv->link_info = link_info.u64;
 
index a10fe3af9a9ce8e00d59c0620eac5acd91adc541..ce1e2a321abb7338b58601c8be61069c8deeabe2 100644 (file)
 
 #include <asm/octeon/cvmx-gmxx-defs.h>
 
-static struct napi_struct cvm_oct_napi;
+static atomic_t oct_rx_ready = ATOMIC_INIT(0);
+
+static struct oct_rx_group {
+       int irq;
+       int group;
+       struct napi_struct napi;
+} oct_rx_group[16];
 
 /**
  * cvm_oct_do_interrupt - interrupt handler.
- * @cpl: Interrupt number. Unused
- * @dev_id: Cookie to identify the device. Unused
+ * @irq: Interrupt number.
+ * @napi_id: Cookie to identify the NAPI instance.
  *
  * The interrupt occurs whenever the POW has packets in our group.
  *
  */
-static irqreturn_t cvm_oct_do_interrupt(int cpl, void *dev_id)
+static irqreturn_t cvm_oct_do_interrupt(int irq, void *napi_id)
 {
        /* Disable the IRQ and start napi_poll. */
-       disable_irq_nosync(OCTEON_IRQ_WORKQ0 + pow_receive_group);
-       napi_schedule(&cvm_oct_napi);
+       disable_irq_nosync(irq);
+       napi_schedule(napi_id);
 
        return IRQ_HANDLED;
 }
@@ -143,14 +149,7 @@ static inline int cvm_oct_check_rcv_error(cvmx_wqe_t *work)
        return 0;
 }
 
-/**
- * cvm_oct_napi_poll - the NAPI poll function.
- * @napi: The NAPI instance, or null if called from cvm_oct_poll_controller
- * @budget: Maximum number of packets to receive.
- *
- * Returns the number of packets processed.
- */
-static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
+static int cvm_oct_poll(struct oct_rx_group *rx_group, int budget)
 {
        const int       coreid = cvmx_get_core_num();
        u64     old_group_mask;
@@ -172,13 +171,13 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
        if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
                old_group_mask = cvmx_read_csr(CVMX_SSO_PPX_GRP_MSK(coreid));
                cvmx_write_csr(CVMX_SSO_PPX_GRP_MSK(coreid),
-                              1ull << pow_receive_group);
+                              BIT(rx_group->group));
                cvmx_read_csr(CVMX_SSO_PPX_GRP_MSK(coreid)); /* Flush */
        } else {
                old_group_mask = cvmx_read_csr(CVMX_POW_PP_GRP_MSKX(coreid));
                cvmx_write_csr(CVMX_POW_PP_GRP_MSKX(coreid),
                               (old_group_mask & ~0xFFFFull) |
-                              1 << pow_receive_group);
+                              BIT(rx_group->group));
        }
 
        if (USE_ASYNC_IOBDMA) {
@@ -203,15 +202,15 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
                if (!work) {
                        if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
                                cvmx_write_csr(CVMX_SSO_WQ_IQ_DIS,
-                                              1ull << pow_receive_group);
+                                              BIT(rx_group->group));
                                cvmx_write_csr(CVMX_SSO_WQ_INT,
-                                              1ull << pow_receive_group);
+                                              BIT(rx_group->group));
                        } else {
                                union cvmx_pow_wq_int wq_int;
 
                                wq_int.u64 = 0;
-                               wq_int.s.iq_dis = 1 << pow_receive_group;
-                               wq_int.s.wq_int = 1 << pow_receive_group;
+                               wq_int.s.iq_dis = BIT(rx_group->group);
+                               wq_int.s.wq_int = BIT(rx_group->group);
                                cvmx_write_csr(CVMX_POW_WQ_INT, wq_int.u64);
                        }
                        break;
@@ -410,10 +409,28 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
        }
        cvm_oct_rx_refill_pool(0);
 
-       if (rx_count < budget && napi) {
+       return rx_count;
+}
+
+/**
+ * cvm_oct_napi_poll - the NAPI poll function.
+ * @napi: The NAPI instance.
+ * @budget: Maximum number of packets to receive.
+ *
+ * Returns the number of packets processed.
+ */
+static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
+{
+       struct oct_rx_group *rx_group = container_of(napi, struct oct_rx_group,
+                                                    napi);
+       int rx_count;
+
+       rx_count = cvm_oct_poll(rx_group, budget);
+
+       if (rx_count < budget) {
                /* No more work */
                napi_complete(napi);
-               enable_irq(OCTEON_IRQ_WORKQ0 + pow_receive_group);
+               enable_irq(rx_group->irq);
        }
        return rx_count;
 }
@@ -427,7 +444,19 @@ static int cvm_oct_napi_poll(struct napi_struct *napi, int budget)
  */
 void cvm_oct_poll_controller(struct net_device *dev)
 {
-       cvm_oct_napi_poll(NULL, 16);
+       int i;
+
+       if (!atomic_read(&oct_rx_ready))
+               return;
+
+       for (i = 0; i < ARRAY_SIZE(oct_rx_group); i++) {
+
+               if (!(pow_receive_groups & BIT(i)))
+                       continue;
+
+               cvm_oct_poll(&oct_rx_group[i], 16);
+
+       }
 }
 #endif
 
@@ -446,54 +475,81 @@ void cvm_oct_rx_initialize(void)
        if (!dev_for_napi)
                panic("No net_devices were allocated.");
 
-       netif_napi_add(dev_for_napi, &cvm_oct_napi, cvm_oct_napi_poll,
-                      rx_napi_weight);
-       napi_enable(&cvm_oct_napi);
+       for (i = 0; i < ARRAY_SIZE(oct_rx_group); i++) {
+               int ret;
 
-       /* Register an IRQ handler to receive POW interrupts */
-       i = request_irq(OCTEON_IRQ_WORKQ0 + pow_receive_group,
-                       cvm_oct_do_interrupt, 0, "Ethernet", cvm_oct_device);
+               if (!(pow_receive_groups & BIT(i)))
+                       continue;
 
-       if (i)
-               panic("Could not acquire Ethernet IRQ %d\n",
-                     OCTEON_IRQ_WORKQ0 + pow_receive_group);
+               netif_napi_add(dev_for_napi, &oct_rx_group[i].napi,
+                              cvm_oct_napi_poll, rx_napi_weight);
+               napi_enable(&oct_rx_group[i].napi);
 
-       disable_irq_nosync(OCTEON_IRQ_WORKQ0 + pow_receive_group);
+               oct_rx_group[i].irq = OCTEON_IRQ_WORKQ0 + i;
+               oct_rx_group[i].group = i;
 
-       /* Enable POW interrupt when our port has at least one packet */
-       if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
-               union cvmx_sso_wq_int_thrx int_thr;
-               union cvmx_pow_wq_int_pc int_pc;
-
-               int_thr.u64 = 0;
-               int_thr.s.tc_en = 1;
-               int_thr.s.tc_thr = 1;
-               cvmx_write_csr(CVMX_SSO_WQ_INT_THRX(pow_receive_group),
-                              int_thr.u64);
-
-               int_pc.u64 = 0;
-               int_pc.s.pc_thr = 5;
-               cvmx_write_csr(CVMX_SSO_WQ_INT_PC, int_pc.u64);
-       } else {
-               union cvmx_pow_wq_int_thrx int_thr;
-               union cvmx_pow_wq_int_pc int_pc;
-
-               int_thr.u64 = 0;
-               int_thr.s.tc_en = 1;
-               int_thr.s.tc_thr = 1;
-               cvmx_write_csr(CVMX_POW_WQ_INT_THRX(pow_receive_group),
-                              int_thr.u64);
-
-               int_pc.u64 = 0;
-               int_pc.s.pc_thr = 5;
-               cvmx_write_csr(CVMX_POW_WQ_INT_PC, int_pc.u64);
-       }
+               /* Register an IRQ handler to receive POW interrupts */
+               ret = request_irq(oct_rx_group[i].irq, cvm_oct_do_interrupt, 0,
+                                 "Ethernet", &oct_rx_group[i].napi);
+               if (ret)
+                       panic("Could not acquire Ethernet IRQ %d\n",
+                             oct_rx_group[i].irq);
+
+               disable_irq_nosync(oct_rx_group[i].irq);
+
+               /* Enable POW interrupt when our port has at least one packet */
+               if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+                       union cvmx_sso_wq_int_thrx int_thr;
+                       union cvmx_pow_wq_int_pc int_pc;
+
+                       int_thr.u64 = 0;
+                       int_thr.s.tc_en = 1;
+                       int_thr.s.tc_thr = 1;
+                       cvmx_write_csr(CVMX_SSO_WQ_INT_THRX(i), int_thr.u64);
+
+                       int_pc.u64 = 0;
+                       int_pc.s.pc_thr = 5;
+                       cvmx_write_csr(CVMX_SSO_WQ_INT_PC, int_pc.u64);
+               } else {
+                       union cvmx_pow_wq_int_thrx int_thr;
+                       union cvmx_pow_wq_int_pc int_pc;
+
+                       int_thr.u64 = 0;
+                       int_thr.s.tc_en = 1;
+                       int_thr.s.tc_thr = 1;
+                       cvmx_write_csr(CVMX_POW_WQ_INT_THRX(i), int_thr.u64);
 
-       /* Schedule NAPI now. This will indirectly enable the interrupt. */
-       napi_schedule(&cvm_oct_napi);
+                       int_pc.u64 = 0;
+                       int_pc.s.pc_thr = 5;
+                       cvmx_write_csr(CVMX_POW_WQ_INT_PC, int_pc.u64);
+               }
+
+               /* Schedule NAPI now. This will indirectly enable the
+                * interrupt.
+                */
+               napi_schedule(&oct_rx_group[i].napi);
+       }
+       atomic_inc(&oct_rx_ready);
 }
 
 void cvm_oct_rx_shutdown(void)
 {
-       netif_napi_del(&cvm_oct_napi);
+       int i;
+
+       for (i = 0; i < ARRAY_SIZE(oct_rx_group); i++) {
+
+               if (!(pow_receive_groups & BIT(i)))
+                       continue;
+
+               /* Disable POW interrupt */
+               if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+                       cvmx_write_csr(CVMX_SSO_WQ_INT_THRX(i), 0);
+               else
+                       cvmx_write_csr(CVMX_POW_WQ_INT_THRX(i), 0);
+
+               /* Free the interrupt handler */
+               free_irq(oct_rx_group[i].irq, cvm_oct_device);
+
+               netif_napi_del(&oct_rx_group[i].napi);
+       }
 }
index 45f024bc5e33f777d2a320633dff9eb55dfac64d..617da8037a4dd28d791a2c775e48da4a9be30234 100644 (file)
@@ -32,12 +32,13 @@ static inline void *cvm_oct_get_buffer_ptr(union cvmx_buf_ptr packet_ptr)
  */
 static inline int INTERFACE(int ipd_port)
 {
-       int interface = cvmx_helper_get_interface_num(ipd_port);
+       int interface;
 
+       if (ipd_port == CVMX_PIP_NUM_INPUT_PORTS)
+               return 10;
+       interface = cvmx_helper_get_interface_num(ipd_port);
        if (interface >= 0)
                return interface;
-       else if (ipd_port == CVMX_PIP_NUM_INPUT_PORTS)
-               return 10;
        panic("Illegal ipd_port %d passed to INTERFACE\n", ipd_port);
 }
 
index 45d576361319f8aef68744b160557ef8fcea5b1d..5f746b88522d82888d75bedb645becbf24e46a7b 100644 (file)
@@ -35,7 +35,7 @@
 #include <asm/octeon/cvmx-fau.h>
 #include <asm/octeon/cvmx-ipd.h>
 #include <asm/octeon/cvmx-helper.h>
-
+#include <asm/octeon/cvmx-asxx-defs.h>
 #include <asm/octeon/cvmx-gmxx-defs.h>
 #include <asm/octeon/cvmx-smix-defs.h>
 
@@ -45,7 +45,7 @@ MODULE_PARM_DESC(num_packet_buffers, "\n"
        "\tNumber of packet buffers to allocate and store in the\n"
        "\tFPA. By default, 1024 packet buffers are used.\n");
 
-int pow_receive_group = 15;
+static int pow_receive_group = 15;
 module_param(pow_receive_group, int, 0444);
 MODULE_PARM_DESC(pow_receive_group, "\n"
        "\tPOW group to receive packets from. All ethernet hardware\n"
@@ -53,6 +53,15 @@ MODULE_PARM_DESC(pow_receive_group, "\n"
        "\tgroup. Also any other software can submit packets to this\n"
        "\tgroup for the kernel to process.");
 
+static int receive_group_order;
+module_param(receive_group_order, int, 0444);
+MODULE_PARM_DESC(receive_group_order, "\n"
+       "\tOrder (0..4) of receive groups to take into use. Ethernet hardware\n"
+       "\twill be configured to send incoming packets to multiple POW\n"
+       "\tgroups. pow_receive_group parameter is ignored when multiple\n"
+       "\tgroups are taken into use and groups are allocated starting\n"
+       "\tfrom 0. By default, a single group is used.\n");
+
 int pow_send_group = -1;
 module_param(pow_send_group, int, 0644);
 MODULE_PARM_DESC(pow_send_group, "\n"
@@ -86,6 +95,8 @@ int rx_napi_weight = 32;
 module_param(rx_napi_weight, int, 0444);
 MODULE_PARM_DESC(rx_napi_weight, "The NAPI WEIGHT parameter.");
 
+/* Mask indicating which receive groups are in use. */
+int pow_receive_groups;
 
 /*
  * cvm_oct_poll_queue_stopping - flag to indicate polling should stop.
@@ -237,8 +248,7 @@ static int cvm_oct_common_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct octeon_ethernet *priv = netdev_priv(dev);
        int interface = INTERFACE(priv->port);
-       int index = INDEX(priv->port);
-#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
+#if IS_ENABLED(CONFIG_VLAN_8021Q)
        int vlan_bytes = 4;
 #else
        int vlan_bytes = 0;
@@ -259,6 +269,7 @@ static int cvm_oct_common_change_mtu(struct net_device *dev, int new_mtu)
        if ((interface < 2) &&
            (cvmx_helper_interface_get_mode(interface) !=
                CVMX_HELPER_INTERFACE_MODE_SPI)) {
+               int index = INDEX(priv->port);
                /* Add ethernet header and FCS, and VLAN if configured. */
                int max_packet = new_mtu + 14 + 4 + vlan_bytes;
 
@@ -300,12 +311,12 @@ static void cvm_oct_common_set_multicast_list(struct net_device *dev)
        union cvmx_gmxx_prtx_cfg gmx_cfg;
        struct octeon_ethernet *priv = netdev_priv(dev);
        int interface = INTERFACE(priv->port);
-       int index = INDEX(priv->port);
 
        if ((interface < 2) &&
            (cvmx_helper_interface_get_mode(interface) !=
                CVMX_HELPER_INTERFACE_MODE_SPI)) {
                union cvmx_gmxx_rxx_adr_ctl control;
+               int index = INDEX(priv->port);
 
                control.u64 = 0;
                control.s.bcst = 1;     /* Allow broadcast MAC addresses */
@@ -352,7 +363,6 @@ static int cvm_oct_set_mac_filter(struct net_device *dev)
        struct octeon_ethernet *priv = netdev_priv(dev);
        union cvmx_gmxx_prtx_cfg gmx_cfg;
        int interface = INTERFACE(priv->port);
-       int index = INDEX(priv->port);
 
        if ((interface < 2) &&
            (cvmx_helper_interface_get_mode(interface) !=
@@ -360,6 +370,7 @@ static int cvm_oct_set_mac_filter(struct net_device *dev)
                int i;
                u8 *ptr = dev->dev_addr;
                u64 mac = 0;
+               int index = INDEX(priv->port);
 
                for (i = 0; i < 6; i++)
                        mac = (mac << 8) | (u64)ptr[i];
@@ -477,6 +488,8 @@ int cvm_oct_common_open(struct net_device *dev,
 
        gmx_cfg.u64 = cvmx_read_csr(CVMX_GMXX_PRTX_CFG(index, interface));
        gmx_cfg.s.en = 1;
+       if (octeon_has_feature(OCTEON_FEATURE_PKND))
+               gmx_cfg.s.pknd = priv->port;
        cvmx_write_csr(CVMX_GMXX_PRTX_CFG(index, interface), gmx_cfg.u64);
 
        if (octeon_is_simulation())
@@ -508,8 +521,10 @@ void cvm_oct_link_poll(struct net_device *dev)
        if (link_info.u64 == priv->link_info)
                return;
 
-       link_info = cvmx_helper_link_autoconf(priv->port);
-       priv->link_info = link_info.u64;
+       if (cvmx_helper_link_set(priv->port, link_info))
+               link_info.u64 = priv->link_info;
+       else
+               priv->link_info = link_info.u64;
 
        if (link_info.s.link_up) {
                if (!netif_carrier_ok(dev))
@@ -647,6 +662,16 @@ static struct device_node *cvm_oct_node_for_port(struct device_node *pip,
        return np;
 }
 
+static void cvm_set_rgmii_delay(struct device_node *np, int iface, int port)
+{
+       u32 delay_value;
+
+       if (!of_property_read_u32(np, "rx-delay", &delay_value))
+               cvmx_write_csr(CVMX_ASXX_RX_CLK_SETX(port, iface), delay_value);
+       if (!of_property_read_u32(np, "tx-delay", &delay_value))
+               cvmx_write_csr(CVMX_ASXX_TX_CLK_SETX(port, iface), delay_value);
+}
+
 static int cvm_oct_probe(struct platform_device *pdev)
 {
        int num_interfaces;
@@ -668,6 +693,14 @@ static int cvm_oct_probe(struct platform_device *pdev)
 
        cvmx_helper_initialize_packet_io_global();
 
+       if (receive_group_order) {
+               if (receive_group_order > 4)
+                       receive_group_order = 4;
+               pow_receive_groups = (1 << (1 << receive_group_order)) - 1;
+       } else {
+               pow_receive_groups = BIT(pow_receive_group);
+       }
+
        /* Change the input group for all ports before input is enabled */
        num_interfaces = cvmx_helper_get_number_of_interfaces();
        for (interface = 0; interface < num_interfaces; interface++) {
@@ -681,7 +714,37 @@ static int cvm_oct_probe(struct platform_device *pdev)
 
                        pip_prt_tagx.u64 =
                            cvmx_read_csr(CVMX_PIP_PRT_TAGX(port));
-                       pip_prt_tagx.s.grp = pow_receive_group;
+
+                       if (receive_group_order) {
+                               int tag_mask;
+
+                               /* We support only 16 groups at the moment, so
+                                * always disable the two additional "hidden"
+                                * tag_mask bits on CN68XX.
+                                */
+                               if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+                                       pip_prt_tagx.u64 |= 0x3ull << 44;
+
+                               tag_mask = ~((1 << receive_group_order) - 1);
+                               pip_prt_tagx.s.grptagbase       = 0;
+                               pip_prt_tagx.s.grptagmask       = tag_mask;
+                               pip_prt_tagx.s.grptag           = 1;
+                               pip_prt_tagx.s.tag_mode         = 0;
+                               pip_prt_tagx.s.inc_prt_flag     = 1;
+                               pip_prt_tagx.s.ip6_dprt_flag    = 1;
+                               pip_prt_tagx.s.ip4_dprt_flag    = 1;
+                               pip_prt_tagx.s.ip6_sprt_flag    = 1;
+                               pip_prt_tagx.s.ip4_sprt_flag    = 1;
+                               pip_prt_tagx.s.ip6_dst_flag     = 1;
+                               pip_prt_tagx.s.ip4_dst_flag     = 1;
+                               pip_prt_tagx.s.ip6_src_flag     = 1;
+                               pip_prt_tagx.s.ip4_src_flag     = 1;
+                               pip_prt_tagx.s.grp              = 0;
+                       } else {
+                               pip_prt_tagx.s.grptag   = 0;
+                               pip_prt_tagx.s.grp      = pow_receive_group;
+                       }
+
                        cvmx_write_csr(CVMX_PIP_PRT_TAGX(port),
                                       pip_prt_tagx.u64);
                }
@@ -703,7 +766,6 @@ static int cvm_oct_probe(struct platform_device *pdev)
        if ((pow_send_group != -1)) {
                struct net_device *dev;
 
-               pr_info("\tConfiguring device for POW only access\n");
                dev = alloc_etherdev(sizeof(struct octeon_ethernet));
                if (dev) {
                        /* Initialize the device private structure. */
@@ -806,6 +868,8 @@ static int cvm_oct_probe(struct platform_device *pdev)
                        case CVMX_HELPER_INTERFACE_MODE_GMII:
                                dev->netdev_ops = &cvm_oct_rgmii_netdev_ops;
                                strcpy(dev->name, "eth%d");
+                               cvm_set_rgmii_delay(priv->of_node, interface,
+                                                   port_index);
                                break;
                        }
 
@@ -842,17 +906,8 @@ static int cvm_oct_remove(struct platform_device *pdev)
 {
        int port;
 
-       /* Disable POW interrupt */
-       if (OCTEON_IS_MODEL(OCTEON_CN68XX))
-               cvmx_write_csr(CVMX_SSO_WQ_INT_THRX(pow_receive_group), 0);
-       else
-               cvmx_write_csr(CVMX_POW_WQ_INT_THRX(pow_receive_group), 0);
-
        cvmx_ipd_disable();
 
-       /* Free the interrupt handler */
-       free_irq(OCTEON_IRQ_WORKQ0 + pow_receive_group, cvm_oct_device);
-
        atomic_inc_return(&cvm_oct_poll_queue_stopping);
        cancel_delayed_work_sync(&cvm_oct_rx_refill_work);
 
index d533aefe085aee810541381d098d1813c59a652b..9c6852d61c0d3339490241a71e4553357fb3f70b 100644 (file)
@@ -72,7 +72,7 @@ void cvm_oct_link_poll(struct net_device *dev);
 
 extern int always_use_pow;
 extern int pow_send_group;
-extern int pow_receive_group;
+extern int pow_receive_groups;
 extern char pow_send_list[];
 extern struct net_device *cvm_oct_device[];
 extern atomic_t cvm_oct_poll_queue_stopping;
index a5755358cc5db510b5a1f3be2ef1400ab6dd6ee7..bf722e751548f638b11c2bf2908403fdba1d820b 100644 (file)
@@ -481,7 +481,7 @@ void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
                        limit = 8;/*   1R */
 
                for (i = 0; i < limit; i++) {
-                       if (psta_ht->ht_cap.supp_mcs_set[i/8] & BIT(i%8))
+                       if (psta_ht->ht_cap.mcs.rx_mask[i / 8] & BIT(i % 8))
                                tx_ra_bitmap |= BIT(i+12);
                }
 
@@ -658,11 +658,15 @@ void update_sta_info_apmode(struct adapter *padapter, struct sta_info *psta)
                phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
 
                /* check if sta support s Short GI */
-               if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & (IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40))
+               if (le16_to_cpu(phtpriv_sta->ht_cap.cap_info &
+                               phtpriv_ap->ht_cap.cap_info) &
+                   (IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40))
                        phtpriv_sta->sgi = true;
 
                /*  bwmode */
-               if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & IEEE80211_HT_CAP_SUP_WIDTH) {
+               if (le16_to_cpu(phtpriv_sta->ht_cap.cap_info &
+                               phtpriv_ap->ht_cap.cap_info) &
+                   IEEE80211_HT_CAP_SUP_WIDTH) {
                        phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
                        phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
                }
@@ -702,12 +706,12 @@ static void update_hw_ht_param(struct adapter *padapter)
 
        /* handle A-MPDU parameter field */
        /*
-               AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
-               AMPDU_para [4:2]:Min MPDU Start Spacing
+               ampdu_params_info [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
+               ampdu_params_info [4:2]:Min MPDU Start Spacing
        */
-       max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
+       max_AMPDU_len = pmlmeinfo->HT_caps.ampdu_params_info & 0x03;
 
-       min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
+       min_MPDU_spacing = (pmlmeinfo->HT_caps.ampdu_params_info & 0x1c) >> 2;
 
        rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
 
@@ -716,7 +720,7 @@ static void update_hw_ht_param(struct adapter *padapter)
        /*  */
        /*  Config SM Power Save setting */
        /*  */
-       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & 0x0C) >> 2;
+       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.cap_info) & 0x0C) >> 2;
        if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
                DBG_88E("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
 }
@@ -1032,7 +1036,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
                       (pbss_network->IELength - _BEACON_IE_OFFSET_));
        if (p && ie_len > 0) {
                u8 rf_type;
-               struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);
+               struct ieee80211_ht_cap *pht_cap = (struct ieee80211_ht_cap *)(p + 2);
 
                pHT_caps_ie = p;
                ht_cap = true;
@@ -1050,8 +1054,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf,  int len)
                pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03);
 
                if (rf_type == RF_1T1R) {
-                       pht_cap->supp_mcs_set[0] = 0xff;
-                       pht_cap->supp_mcs_set[1] = 0x0;
+                       pht_cap->mcs.rx_mask[0] = 0xff;
+                       pht_cap->mcs.rx_mask[1] = 0x0;
                }
                memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
        }
@@ -1422,7 +1426,8 @@ static int rtw_ht_operation_update(struct adapter *padapter)
        if (pmlmepriv->num_sta_no_ht ||
            (pmlmepriv->ht_op_mode & HT_INFO_OPERATION_MODE_NON_GF_DEVS_PRESENT))
                new_op_mode = OP_MODE_MIXED;
-       else if ((phtpriv_ap->ht_cap.cap_info & IEEE80211_HT_CAP_SUP_WIDTH) &&
+       else if ((le16_to_cpu(phtpriv_ap->ht_cap.cap_info) &
+                 IEEE80211_HT_CAP_SUP_WIDTH) &&
                 pmlmepriv->num_sta_ht_20mhz)
                new_op_mode = OP_MODE_20MHZ_HT_STA_ASSOCED;
        else if (pmlmepriv->olbc_ht)
@@ -1552,7 +1557,7 @@ void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
        }
 
        if (psta->flags & WLAN_STA_HT) {
-               u16 ht_capab = psta->htpriv.ht_cap.cap_info;
+               u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
 
                DBG_88E("HT: STA %pM HT Capabilities Info: 0x%04x\n",
                        (psta->hwaddr), ht_capab);
@@ -1710,40 +1715,6 @@ u8 ap_free_sta(struct adapter *padapter, struct sta_info *psta,
        return beacon_updated;
 }
 
-int rtw_ap_inform_ch_switch(struct adapter *padapter, u8 new_ch, u8 ch_offset)
-{
-       struct list_head *phead, *plist;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
-       u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       if ((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE)
-               return 0;
-
-       DBG_88E(FUNC_NDEV_FMT" with ch:%u, offset:%u\n",
-               FUNC_NDEV_ARG(padapter->pnetdev), new_ch, ch_offset);
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       plist = phead->next;
-
-       /* for each sta in asoc_queue */
-       while (phead != plist) {
-               psta = container_of(plist, struct sta_info, asoc_list);
-               plist = plist->next;
-
-               issue_action_spct_ch_switch(padapter, psta->hwaddr, new_ch, ch_offset);
-               psta->expire_to = min_t(unsigned int, pstapriv->expire_to * 2, 5);
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       issue_action_spct_ch_switch(padapter, bc_addr, new_ch, ch_offset);
-
-       return 0;
-}
-
 int rtw_sta_flush(struct adapter *padapter)
 {
        struct list_head *phead, *plist;
@@ -1856,9 +1827,6 @@ void start_ap_mode(struct adapter *padapter)
        pmlmepriv->wps_probe_resp_ie = NULL;
        pmlmepriv->wps_assoc_resp_ie = NULL;
 
-       pmlmepriv->p2p_beacon_ie = NULL;
-       pmlmepriv->p2p_probe_resp_ie = NULL;
-
        /* for ACL */
        INIT_LIST_HEAD(&(pacl_list->acl_node_q.queue));
        pacl_list->num = 0;
index 77485235c6155f819058ab297d8a098d4d449c98..e87ab11183cbb990552656de446aea3ca4dc08c2 100644 (file)
@@ -27,8 +27,8 @@ No irqsave is necessary.
 
 int rtw_init_cmd_priv(struct cmd_priv *pcmdpriv)
 {
-       sema_init(&(pcmdpriv->cmd_queue_sema), 0);
-       sema_init(&(pcmdpriv->terminate_cmdthread_sema), 0);
+       init_completion(&pcmdpriv->cmd_queue_comp);
+       init_completion(&pcmdpriv->terminate_cmdthread_comp);
 
        _rtw_init_queue(&(pcmdpriv->cmd_queue));
        return _SUCCESS;
@@ -122,7 +122,7 @@ u32 rtw_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
        res = _rtw_enqueue_cmd(&pcmdpriv->cmd_queue, cmd_obj);
 
        if (res == _SUCCESS)
-               up(&pcmdpriv->cmd_queue_sema);
+               complete(&pcmdpriv->cmd_queue_comp);
 
 exit:
 
@@ -162,12 +162,12 @@ int rtw_cmd_thread(void *context)
        allow_signal(SIGTERM);
 
        pcmdpriv->cmdthd_running = true;
-       up(&pcmdpriv->terminate_cmdthread_sema);
+       complete(&pcmdpriv->terminate_cmdthread_comp);
 
        RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("start r871x rtw_cmd_thread !!!!\n"));
 
        while (1) {
-               if (_rtw_down_sema(&pcmdpriv->cmd_queue_sema) == _FAIL)
+               if (wait_for_completion_interruptible(&pcmdpriv->cmd_queue_comp))
                        break;
 
                if (padapter->bDriverStopped ||
@@ -234,7 +234,7 @@ _next:
                rtw_free_cmd_obj(pcmd);
        }
 
-       up(&pcmdpriv->terminate_cmdthread_sema);
+       complete(&pcmdpriv->terminate_cmdthread_comp);
 
 
        complete_and_exit(NULL, 0);
@@ -305,8 +305,6 @@ u8 rtw_sitesurvey_cmd(struct adapter  *padapter, struct ndis_802_11_ssid *ssid,
        res = rtw_enqueue_cmd(pcmdpriv, ph2c);
 
        if (res == _SUCCESS) {
-               pmlmepriv->scan_start_time = jiffies;
-
                mod_timer(&pmlmepriv->scan_to_timer,
                          jiffies + msecs_to_jiffies(SCANNING_TIMEOUT));
 
@@ -670,13 +668,13 @@ u8 rtw_addbareq_cmd(struct adapter *padapter, u8 tid, u8 *addr)
        u8      res = _SUCCESS;
 
 
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
+       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
        if (!ph2c) {
                res = _FAIL;
                goto exit;
        }
 
-       paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_KERNEL);
+       paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_ATOMIC);
        if (!paddbareq_parm) {
                kfree(ph2c);
                res = _FAIL;
index db5c952ac8520679294a8cafac4384d9d412d19a..60d8c7b9f458ba31a7e13fc49f8f86d60a9a2034 100644 (file)
@@ -138,144 +138,6 @@ int proc_set_read_reg(struct file *file, const char __user *buffer,
        return count;
 }
 
-int proc_get_fwstate(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "fwstate=0x%x\n", get_fwstate(pmlmepriv));
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_sec_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "auth_alg=0x%x, enc_alg=0x%x, auth_type=0x%x, enc_type=0x%x\n",
-                                               psecuritypriv->dot11AuthAlgrthm, psecuritypriv->dot11PrivacyAlgrthm,
-                                               psecuritypriv->ndisauthtype, psecuritypriv->ndisencryptstatus);
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_mlmext_state(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "pmlmeinfo->state=0x%x\n", pmlmeinfo->state);
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_qos_option(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "qos_option=%d\n", pmlmepriv->qospriv.qos_option);
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_ht_option(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "ht_option=%d\n", pmlmepriv->htpriv.ht_option);
-       *eof = 1;
-       return len;
-}
-
-int proc_get_rf_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "cur_ch=%d, cur_bw=%d, cur_ch_offset=%d\n",
-                                       pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
-       *eof = 1;
-       return len;
-}
-
-int proc_get_ap_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct sta_info *psta;
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       int len = 0;
-
-       psta = rtw_get_stainfo(pstapriv, cur_network->network.MacAddress);
-       if (psta) {
-               int i;
-               struct recv_reorder_ctrl *preorder_ctrl;
-
-               len += snprintf(page + len, count - len, "SSID=%s\n", cur_network->network.Ssid.Ssid);
-               len += snprintf(page + len, count - len, "sta's macaddr:%pM\n", psta->hwaddr);
-               len += snprintf(page + len, count - len, "cur_channel=%d, cur_bwmode=%d, cur_ch_offset=%d\n", pmlmeext->cur_channel, pmlmeext->cur_bwmode, pmlmeext->cur_ch_offset);
-               len += snprintf(page + len, count - len, "rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
-               len += snprintf(page + len, count - len, "state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
-               len += snprintf(page + len, count - len, "qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
-               len += snprintf(page + len, count - len, "bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
-               len += snprintf(page + len, count - len, "ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
-               len += snprintf(page + len, count - len, "agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
-
-               for (i = 0; i < 16; i++) {
-                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                       if (preorder_ctrl->enable)
-                               len += snprintf(page + len, count - len, "tid=%d, indicate_seq=%d\n", i, preorder_ctrl->indicate_seq);
-               }
-       } else {
-               len += snprintf(page + len, count - len, "can't get sta's macaddr, cur_network's macaddr: %pM\n", cur_network->network.MacAddress);
-       }
-
-       *eof = 1;
-       return len;
-}
-
 int proc_get_adapter_state(char *page, char **start,
                          off_t offset, int count,
                          int *eof, void *data)
@@ -291,599 +153,6 @@ int proc_get_adapter_state(char *page, char **start,
        return len;
 }
 
-int proc_get_trx_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct recv_priv  *precvpriv = &padapter->recvpriv;
-       int len = 0;
-
-       len += snprintf(page + len, count - len, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d, free_ext_xmitbuf_cnt=%d, free_recvframe_cnt=%d\n",
-                               pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt, pxmitpriv->free_xmit_extbuf_cnt, precvpriv->free_recvframe_cnt);
-       len += snprintf(page + len, count - len, "rx_urb_pending_cn=%d\n", precvpriv->rx_pending_cnt);
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_mac_reg_dump1(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
-
-       for (i = 0x0; i < 0x300; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_mac_reg_dump2(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
-       memset(page, 0, count);
-       for (i = 0x300; i < 0x600; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_mac_reg_dump3(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= MAC REG =======\n");
-
-       for (i = 0x600; i < 0x800; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_bb_reg_dump1(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
-       for (i = 0x800; i < 0xB00; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-int proc_get_bb_reg_dump2(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
-       for (i = 0xB00; i < 0xE00; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-int proc_get_bb_reg_dump3(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1;
-
-       len += snprintf(page + len, count - len, "\n======= BB REG =======\n");
-       for (i = 0xE00; i < 0x1000; i += 4) {
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", usb_read32(padapter, i));
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-int proc_get_rf_reg_dump1(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1, path;
-       u32 value;
-
-       len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
-       path = 1;
-       len += snprintf(page + len, count - len, "\nRF_Path(%x)\n", path);
-       for (i = 0; i < 0xC0; i++) {
-               value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x ", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", value);
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-int proc_get_rf_reg_dump2(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1, path;
-       u32 value;
-
-       len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
-       path = 1;
-       len += snprintf(page + len, count - len, "\nRF_Path(%x)\n", path);
-       for (i = 0xC0; i < 0x100; i++) {
-               value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x ", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", value);
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-int proc_get_rf_reg_dump3(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1, path;
-       u32 value;
-
-       len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
-       path = 2;
-       len += snprintf(page + len, count - len, "\nRF_Path(%x)\n", path);
-       for (i = 0; i < 0xC0; i++) {
-               value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x ", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", value);
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-
-       *eof = 1;
-       return len;
-}
-
-
-int proc_get_rf_reg_dump4(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-       int i, j = 1, path;
-       u32 value;
-
-       len += snprintf(page + len, count - len, "\n======= RF REG =======\n");
-       path = 2;
-       len += snprintf(page + len, count - len, "\nRF_Path(%x)\n", path);
-       for (i = 0xC0; i < 0x100; i++) {
-               value = rtw_hal_read_rfreg(padapter, path, i, 0xffffffff);
-               if (j%4 == 1)
-                       len += snprintf(page + len, count - len, "0x%02x ", i);
-               len += snprintf(page + len, count - len, " 0x%08x ", value);
-               if ((j++)%4 == 0)
-                       len += snprintf(page + len, count - len, "\n");
-       }
-       *eof = 1;
-       return len;
-}
-
-
-
-int proc_get_rx_signal(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       int len = 0;
-
-       len = snprintf(page + len, count,
-               "rssi:%d\n"
-               "rxpwdb:%d\n"
-               "signal_strength:%u\n"
-               "signal_qual:%u\n"
-               "noise:%u\n",
-               padapter->recvpriv.rssi,
-               padapter->recvpriv.rxpwdb,
-               padapter->recvpriv.signal_strength,
-               padapter->recvpriv.signal_qual,
-               padapter->recvpriv.noise
-               );
-
-       *eof = 1;
-       return len;
-}
-
-int proc_set_rx_signal(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       char tmp[32];
-       u32 is_signal_dbg;
-       s32 signal_strength;
-
-       if (count < 1)
-               return -EFAULT;
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               int num = sscanf(tmp, "%u %u", &is_signal_dbg, &signal_strength);
-
-               is_signal_dbg = is_signal_dbg == 0 ? 0 : 1;
-               if (is_signal_dbg && num != 2)
-                       return count;
-
-               signal_strength = clamp(signal_strength, 0, 100);
-
-               padapter->recvpriv.is_signal_dbg = is_signal_dbg;
-               padapter->recvpriv.signal_strength_dbg = signal_strength;
-
-               if (is_signal_dbg)
-                       DBG_88E("set %s %u\n", "DBG_SIGNAL_STRENGTH", signal_strength);
-               else
-                       DBG_88E("set %s\n", "HW_SIGNAL_STRENGTH");
-       }
-       return count;
-}
-
-int proc_get_ht_enable(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       int len = 0;
-
-       if (pregpriv)
-               len += snprintf(page + len, count - len,
-                       "%d\n",
-                       pregpriv->ht_enable
-                       );
-       *eof = 1;
-       return len;
-}
-
-int proc_set_ht_enable(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       char tmp[32];
-       s32 mode = 0;
-
-       if (count < 1)
-               return -EFAULT;
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               if (pregpriv) {
-                       pregpriv->ht_enable = mode;
-                       pr_info("ht_enable=%d\n", pregpriv->ht_enable);
-               }
-       }
-
-       return count;
-}
-
-int proc_get_cbw40_enable(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-
-       int len = 0;
-
-       if (pregpriv)
-               len += snprintf(page + len, count - len,
-                       "%d\n",
-                       pregpriv->cbw40_enable
-                       );
-
-       *eof = 1;
-       return len;
-}
-
-int proc_set_cbw40_enable(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       char tmp[32];
-       s32 mode = 0;
-
-       if (count < 1)
-               return -EFAULT;
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               if (pregpriv) {
-                       pregpriv->cbw40_enable = mode;
-                       pr_info("cbw40_enable=%d\n", mode);
-               }
-       }
-       return count;
-}
-
-int proc_get_ampdu_enable(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-
-       int len = 0;
-
-       if (pregpriv)
-               len += snprintf(page + len, count - len,
-                       "%d\n",
-                       pregpriv->ampdu_enable
-                       );
-
-       *eof = 1;
-       return len;
-}
-
-int proc_set_ampdu_enable(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       char tmp[32];
-       s32 mode = 0;
-
-       if (count < 1)
-               return -EFAULT;
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               if (pregpriv) {
-                       pregpriv->ampdu_enable = mode;
-                       pr_info("ampdu_enable=%d\n", mode);
-               }
-       }
-       return count;
-}
-
-int proc_get_two_path_rssi(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-
-       int len = 0;
-
-       if (padapter)
-               len += snprintf(page + len, count - len,
-                       "%d %d\n",
-                       padapter->recvpriv.RxRssi[0],
-                       padapter->recvpriv.RxRssi[1]
-                       );
-
-       *eof = 1;
-       return len;
-}
-
-int proc_get_rx_stbc(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-
-       int len = 0;
-
-       if (pregpriv)
-               len += snprintf(page + len, count - len,
-                       "%d\n",
-                       pregpriv->rx_stbc
-                       );
-
-       *eof = 1;
-       return len;
-}
-
-int proc_set_rx_stbc(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       char tmp[32];
-       u32 mode = 0;
-
-       if (count < 1)
-               return -EFAULT;
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               if (pregpriv) {
-                       pregpriv->rx_stbc = mode;
-                       netdev_info(dev, "rx_stbc=%d\n", mode);
-               }
-       }
-       return count;
-}
-
-int proc_get_rssi_disp(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       *eof = 1;
-       return 0;
-}
-
-int proc_set_rssi_disp(struct file *file, const char __user *buffer,
-               unsigned long count, void *data)
-{
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       char tmp[32];
-       u32 enable = 0;
-
-       if (count < 1) {
-               DBG_88E("argument size is less than 1\n");
-               return -EFAULT;
-       }
-
-       if (buffer && !copy_from_user(tmp, buffer, sizeof(tmp))) {
-               int num = sscanf(tmp, "%x", &enable);
-
-               if (num !=  1) {
-                       DBG_88E("invalid set_rssi_disp parameter!\n");
-                       return count;
-               }
-
-               if (enable) {
-                       DBG_88E("Turn On Rx RSSI Display Function\n");
-                       padapter->bRxRSSIDisplay = enable;
-               } else {
-                       DBG_88E("Turn Off Rx RSSI Display Function\n");
-                       padapter->bRxRSSIDisplay = 0;
-               }
-       }
-       return count;
-}
-
-#ifdef CONFIG_88EU_AP_MODE
-
-int proc_get_all_sta_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data)
-{
-       struct sta_info *psta;
-       struct net_device *dev = data;
-       struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       int i, j;
-       struct list_head *plist, *phead;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       int len = 0;
-
-
-       len += snprintf(page + len, count - len, "sta_dz_bitmap=0x%x, tim_bitmap=0x%x\n", pstapriv->sta_dz_bitmap, pstapriv->tim_bitmap);
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-
-       for (i = 0; i < NUM_STA; i++) {
-               phead = &pstapriv->sta_hash[i];
-               plist = phead->next;
-
-               while (phead != plist) {
-                       psta = container_of(plist, struct sta_info, hash_list);
-
-                       plist = plist->next;
-
-                       len += snprintf(page + len, count - len, "sta's macaddr: %pM\n", psta->hwaddr);
-                       len += snprintf(page + len, count - len, "rtsen=%d, cts2slef=%d\n", psta->rtsen, psta->cts2self);
-                       len += snprintf(page + len, count - len, "state=0x%x, aid=%d, macid=%d, raid=%d\n", psta->state, psta->aid, psta->mac_id, psta->raid);
-                       len += snprintf(page + len, count - len, "qos_en=%d, ht_en=%d, init_rate=%d\n", psta->qos_option, psta->htpriv.ht_option, psta->init_rate);
-                       len += snprintf(page + len, count - len, "bwmode=%d, ch_offset=%d, sgi=%d\n", psta->htpriv.bwmode, psta->htpriv.ch_offset, psta->htpriv.sgi);
-                       len += snprintf(page + len, count - len, "ampdu_enable = %d\n", psta->htpriv.ampdu_enable);
-                       len += snprintf(page + len, count - len, "agg_enable_bitmap=%x, candidate_tid_bitmap=%x\n", psta->htpriv.agg_enable_bitmap, psta->htpriv.candidate_tid_bitmap);
-                       len += snprintf(page + len, count - len, "sleepq_len=%d\n", psta->sleepq_len);
-                       len += snprintf(page + len, count - len, "capability=0x%x\n", psta->capability);
-                       len += snprintf(page + len, count - len, "flags=0x%x\n", psta->flags);
-                       len += snprintf(page + len, count - len, "wpa_psk=0x%x\n", psta->wpa_psk);
-                       len += snprintf(page + len, count - len, "wpa2_group_cipher=0x%x\n", psta->wpa2_group_cipher);
-                       len += snprintf(page + len, count - len, "wpa2_pairwise_cipher=0x%x\n", psta->wpa2_pairwise_cipher);
-                       len += snprintf(page + len, count - len, "qos_info=0x%x\n", psta->qos_info);
-                       len += snprintf(page + len, count - len, "dot118021XPrivacy=0x%x\n", psta->dot118021XPrivacy);
-
-                       for (j = 0; j < 16; j++) {
-                               preorder_ctrl = &psta->recvreorder_ctrl[j];
-                               if (preorder_ctrl->enable)
-                                       len += snprintf(page + len, count - len, "tid=%d, indicate_seq=%d\n", j, preorder_ctrl->indicate_seq);
-                       }
-               }
-       }
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       *eof = 1;
-       return len;
-}
-#endif
-
 int proc_get_best_channel(char *page, char **start,
                          off_t offset, int count,
                          int *eof, void *data)
index fbce1f7e68caf5c3517179aa01bfbb16265f8c42..16cc7706a1e642de6d21cd2b2c21220092af94b3 100644 (file)
@@ -317,69 +317,6 @@ void efuse_ReadEFuse(struct adapter *Adapter, u8 efuseType, u16 _offset, u16 _si
        }
 }
 
-/* Do not support BT */
-void EFUSE_GetEfuseDefinition(struct adapter *pAdapter, u8 efuseType, u8 type, void *pOut)
-{
-       switch (type) {
-       case TYPE_EFUSE_MAX_SECTION:
-               {
-                       u8 *pMax_section;
-                       pMax_section = pOut;
-                       *pMax_section = EFUSE_MAX_SECTION_88E;
-               }
-               break;
-       case TYPE_EFUSE_REAL_CONTENT_LEN:
-               {
-                       u16 *pu2Tmp;
-                       pu2Tmp = pOut;
-                       *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E;
-               }
-               break;
-       case TYPE_EFUSE_CONTENT_LEN_BANK:
-               {
-                       u16 *pu2Tmp;
-                       pu2Tmp = pOut;
-                       *pu2Tmp = EFUSE_REAL_CONTENT_LEN_88E;
-               }
-               break;
-       case TYPE_AVAILABLE_EFUSE_BYTES_BANK:
-               {
-                       u16 *pu2Tmp;
-                       pu2Tmp = pOut;
-                       *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E);
-               }
-               break;
-       case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL:
-               {
-                       u16 *pu2Tmp;
-                       pu2Tmp = pOut;
-                       *pu2Tmp = (u16)(EFUSE_REAL_CONTENT_LEN_88E-EFUSE_OOB_PROTECT_BYTES_88E);
-               }
-               break;
-       case TYPE_EFUSE_MAP_LEN:
-               {
-                       u16 *pu2Tmp;
-                       pu2Tmp = pOut;
-                       *pu2Tmp = (u16)EFUSE_MAP_LEN_88E;
-               }
-               break;
-       case TYPE_EFUSE_PROTECT_BYTES_BANK:
-               {
-                       u8 *pu1Tmp;
-                       pu1Tmp = pOut;
-                       *pu1Tmp = (u8)(EFUSE_OOB_PROTECT_BYTES_88E);
-               }
-               break;
-       default:
-               {
-                       u8 *pu1Tmp;
-                       pu1Tmp = pOut;
-                       *pu1Tmp = 0;
-               }
-               break;
-       }
-}
-
 u8 Efuse_WordEnableDataWrite(struct adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data)
 {
        u16     tmpaddr = 0;
@@ -483,14 +420,11 @@ int Efuse_PgPacketRead(struct adapter *pAdapter, u8 offset, u8 *data)
        u8 hoffset = 0, hworden = 0;
        u8 tmpidx = 0;
        u8 tmpdata[8];
-       u8 max_section = 0;
        u8 tmp_header = 0;
 
-       EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAX_SECTION, (void *)&max_section);
-
        if (!data)
                return false;
-       if (offset > max_section)
+       if (offset > EFUSE_MAX_SECTION_88E)
                return false;
 
        memset(data, 0xff, sizeof(u8) * PGPKT_DATA_SIZE);
@@ -591,12 +525,12 @@ static bool hal_EfuseFixHeaderProcess(struct adapter *pAdapter, u8 efuseType, st
 static bool hal_EfusePgPacketWrite2ByteHeader(struct adapter *pAdapter, u8 efuseType, u16 *pAddr, struct pgpkt *pTargetPkt)
 {
        bool bRet = false;
-       u16     efuse_addr = *pAddr, efuse_max_available_len = 0;
+       u16 efuse_addr = *pAddr;
+       u16 efuse_max_available_len =
+               EFUSE_REAL_CONTENT_LEN_88E - EFUSE_OOB_PROTECT_BYTES_88E;
        u8 pg_header = 0, tmp_header = 0, pg_header_temp = 0;
        u8 repeatcnt = 0;
 
-       EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len);
-
        while (efuse_addr < efuse_max_available_len) {
                pg_header = ((pTargetPkt->offset & 0x07) << 5) | 0x0F;
                efuse_OneByteWrite(pAdapter, efuse_addr, pg_header);
@@ -769,12 +703,11 @@ static bool hal_EfusePartialWriteCheck(struct adapter *pAdapter, u8 efuseType, u
        bool bRet = false;
        u8 i, efuse_data = 0, cur_header = 0;
        u8 matched_wden = 0, badworden = 0;
-       u16     startAddr = 0, efuse_max_available_len = 0, efuse_max = 0;
+       u16 startAddr = 0;
+       u16 efuse_max_available_len =
+               EFUSE_REAL_CONTENT_LEN_88E - EFUSE_OOB_PROTECT_BYTES_88E;
        struct pgpkt curPkt;
 
-       EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_AVAILABLE_EFUSE_BYTES_BANK, (void *)&efuse_max_available_len);
-       EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&efuse_max);
-
        rtw_hal_get_hwreg(pAdapter, HW_VAR_EFUSE_BYTES, (u8 *)&startAddr);
        startAddr %= EFUSE_REAL_CONTENT_LEN;
 
@@ -846,12 +779,7 @@ hal_EfusePgCheckAvailableAddr(
                u8 efuseType
        )
 {
-       u16     efuse_max_available_len = 0;
-
-       /* Change to check TYPE_EFUSE_MAP_LEN , because 8188E raw 256, logic map over 256. */
-       EFUSE_GetEfuseDefinition(pAdapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&efuse_max_available_len);
-
-       if (Efuse_GetCurrentSize(pAdapter) >= efuse_max_available_len)
+       if (Efuse_GetCurrentSize(pAdapter) >= EFUSE_MAP_LEN_88E)
                return false;
        return true;
 }
@@ -977,13 +905,9 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 *targetdata)
  */
 static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse)
 {
-       u16 mapLen = 0;
-
        Efuse_PowerSwitch(pAdapter, false, true);
 
-       EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
-
-       efuse_ReadEFuse(pAdapter, efuseType, 0, mapLen, Efuse);
+       efuse_ReadEFuse(pAdapter, efuseType, 0, EFUSE_MAP_LEN_88E, Efuse);
 
        Efuse_PowerSwitch(pAdapter, false, false);
 }
@@ -996,12 +920,9 @@ void EFUSE_ShadowMapUpdate(
        u8 efuseType)
 {
        struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-       u16 mapLen = 0;
-
-       EFUSE_GetEfuseDefinition(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
 
        if (pEEPROM->bautoload_fail_flag)
-               memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen);
+               memset(pEEPROM->efuse_eeprom_data, 0xFF, EFUSE_MAP_LEN_88E);
        else
                Efuse_ReadAllMap(pAdapter, efuseType, pEEPROM->efuse_eeprom_data);
 }
index 0b0d78fe83ed60d6c4e6972228a9d80074202f1c..914c4923421b908ec06eeb46c3629e367daedb9a 100644 (file)
@@ -155,59 +155,6 @@ u8 *rtw_set_ie
        return pbuf + len + 2;
 }
 
-inline u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode,
-       u8 new_ch, u8 ch_switch_cnt)
-{
-       u8 ie_data[3];
-
-       ie_data[0] = ch_switch_mode;
-       ie_data[1] = new_ch;
-       ie_data[2] = ch_switch_cnt;
-       return rtw_set_ie(buf, WLAN_EID_CHANNEL_SWITCH,  3, ie_data, buf_len);
-}
-
-inline u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset)
-{
-       if (ch_offset == SCN)
-               return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       else if (ch_offset == SCA)
-               return HAL_PRIME_CHNL_OFFSET_UPPER;
-       else if (ch_offset == SCB)
-               return HAL_PRIME_CHNL_OFFSET_LOWER;
-
-       return HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-}
-
-inline u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset)
-{
-       if (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
-               return SCN;
-       else if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-               return SCB;
-       else if (ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-               return SCA;
-
-       return SCN;
-}
-
-inline u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset)
-{
-       return rtw_set_ie(buf, WLAN_EID_SECONDARY_CHANNEL_OFFSET,  1, &secondary_ch_offset, buf_len);
-}
-
-inline u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl,
-       u8 flags, u16 reason, u16 precedence)
-{
-       u8 ie_data[6];
-
-       ie_data[0] = ttl;
-       ie_data[1] = flags;
-       *(u16 *)(ie_data + 2) = cpu_to_le16(reason);
-       *(u16 *)(ie_data + 4) = cpu_to_le16(precedence);
-
-       return rtw_set_ie(buf, 0x118,  6, ie_data, buf_len);
-}
-
 /*----------------------------------------------------------------------------
 index: the information element id index, limit is the limit for search
 -----------------------------------------------------------------------------*/
@@ -236,97 +183,6 @@ u8 *rtw_get_ie(u8 *pbuf, int index, int *len, int limit)
        return NULL;
 }
 
-/**
- * rtw_get_ie_ex - Search specific IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- * @ie: If not NULL and the specific IE is found, the IE will be copied to the buf starting from the specific IE
- * @ielen: If not NULL and the specific IE is found, will set to the length of the entire IE
- *
- * Returns: The address of the specific IE found, or NULL
- */
-u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen)
-{
-       uint cnt;
-       u8 *target_ie = NULL;
-
-
-       if (ielen)
-               *ielen = 0;
-
-       if (!in_ie || in_len <= 0)
-               return target_ie;
-
-       cnt = 0;
-
-       while (cnt < in_len) {
-               if (eid == in_ie[cnt] && (!oui || !memcmp(&in_ie[cnt + 2], oui, oui_len))) {
-                       target_ie = &in_ie[cnt];
-
-                       if (ie)
-                               memcpy(ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
-                       if (ielen)
-                               *ielen = in_ie[cnt + 1] + 2;
-
-                       break;
-               } else {
-                       cnt += in_ie[cnt + 1] + 2; /* goto next */
-               }
-       }
-       return target_ie;
-}
-
-/**
- * rtw_ies_remove_ie - Find matching IEs and remove
- * @ies: Address of IEs to search
- * @ies_len: Pointer of length of ies, will update to new length
- * @offset: The offset to start scarch
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- *
- * Returns: _SUCCESS: ies is updated, _FAIL: not updated
- */
-int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len)
-{
-       int ret = _FAIL;
-       u8 *target_ie;
-       u32 target_ielen;
-       u8 *start;
-       uint search_len;
-
-       if (!ies || !ies_len || *ies_len <= offset)
-               goto exit;
-
-       start = ies + offset;
-       search_len = *ies_len - offset;
-
-       while (1) {
-               target_ie = rtw_get_ie_ex(start, search_len, eid, oui, oui_len, NULL, &target_ielen);
-               if (target_ie && target_ielen) {
-                       u8 buf[MAX_IE_SZ] = {0};
-                       u8 *remain_ies = target_ie + target_ielen;
-                       uint remain_len = search_len - (remain_ies - start);
-
-                       memcpy(buf, remain_ies, remain_len);
-                       memcpy(target_ie, buf, remain_len);
-                       *ies_len = *ies_len - target_ielen;
-                       ret = _SUCCESS;
-
-                       start = target_ie;
-                       search_len = remain_len;
-               } else {
-                       break;
-               }
-       }
-exit:
-       return ret;
-}
-
 void rtw_set_supported_rate(u8 *SupportedRates, uint mode)
 {
 
@@ -1096,43 +952,6 @@ void rtw_macaddr_cfg(u8 *mac_addr)
        DBG_88E("rtw_macaddr_cfg MAC Address  = %pM\n", (mac_addr));
 }
 
-void dump_ies(u8 *buf, u32 buf_len)
-{
-       u8 *pos = buf;
-       u8 id, len;
-
-       while (pos - buf <= buf_len) {
-               id = *pos;
-               len = *(pos + 1);
-
-               DBG_88E("%s ID:%u, LEN:%u\n", __func__, id, len);
-               dump_wps_ie(pos, len);
-
-               pos += (2 + len);
-       }
-}
-
-void dump_wps_ie(u8 *ie, u32 ie_len)
-{
-       u8 *pos = ie;
-       u16 id;
-       u16 len;
-       u8 *wps_ie;
-       uint wps_ielen;
-
-       wps_ie = rtw_get_wps_ie(ie, ie_len, NULL, &wps_ielen);
-       if (wps_ie != ie || wps_ielen == 0)
-               return;
-
-       pos += 6;
-       while (pos - ie < ie_len) {
-               id = get_unaligned_be16(pos);
-               len = get_unaligned_be16(pos + 2);
-               DBG_88E("%s ID:0x%04x, LEN:%u\n", __func__, id, len);
-               pos += (4 + len);
-       }
-}
-
 /* Baron adds to avoid FreeBSD warning */
 int ieee80211_is_empty_essid(const char *essid, int essid_len)
 {
@@ -1223,7 +1042,6 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork)
        __le16 le_tmp;
        u16 wpa_len = 0, rsn_len = 0;
        struct HT_info_element *pht_info = NULL;
-       struct rtw_ieee80211_ht_cap *pht_cap = NULL;
        unsigned int            len;
        unsigned char           *p;
 
@@ -1259,10 +1077,12 @@ void rtw_get_bcn_info(struct wlan_network *pnetwork)
        /* parsing HT_CAP_IE */
        p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
        if (p && len > 0) {
-                       pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
-                       pnetwork->BcnInfo.ht_cap_info = pht_cap->cap_info;
+               struct ieee80211_ht_cap *ht_cap =
+                       (struct ieee80211_ht_cap *)(p + 2);
+
+               pnetwork->BcnInfo.ht_cap_info = le16_to_cpu(ht_cap->cap_info);
        } else {
-                       pnetwork->BcnInfo.ht_cap_info = 0;
+               pnetwork->BcnInfo.ht_cap_info = 0;
        }
        /* parsing HT_INFO_IE */
        p = rtw_get_ie(pnetwork->network.IEs + _FIXED_IE_LENGTH_, _HT_ADD_INFO_IE_, &len, pnetwork->network.IELength - _FIXED_IE_LENGTH_);
@@ -1335,58 +1155,3 @@ u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsign
        }
        return max_rate;
 }
-
-int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8 *category, u8 *action)
-{
-       const u8 *frame_body = frame + sizeof(struct rtw_ieee80211_hdr_3addr);
-       u16 fc;
-       u8 c, a = 0;
-
-       fc = le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)frame)->frame_ctl);
-
-       if ((fc & (RTW_IEEE80211_FCTL_FTYPE | RTW_IEEE80211_FCTL_STYPE)) !=
-           (RTW_IEEE80211_FTYPE_MGMT | RTW_IEEE80211_STYPE_ACTION))
-               return false;
-
-       c = frame_body[0];
-
-       switch (c) {
-       case RTW_WLAN_CATEGORY_P2P: /* vendor-specific */
-               break;
-       default:
-               a = frame_body[1];
-       }
-
-       if (category)
-               *category = c;
-       if (action)
-               *action = a;
-
-       return true;
-}
-
-static const char *_action_public_str[] = {
-       "ACT_PUB_BSSCOEXIST",
-       "ACT_PUB_DSE_ENABLE",
-       "ACT_PUB_DSE_DEENABLE",
-       "ACT_PUB_DSE_REG_LOCATION",
-       "ACT_PUB_EXT_CHL_SWITCH",
-       "ACT_PUB_DSE_MSR_REQ",
-       "ACT_PUB_DSE_MSR_RPRT",
-       "ACT_PUB_MP",
-       "ACT_PUB_DSE_PWR_CONSTRAINT",
-       "ACT_PUB_VENDOR",
-       "ACT_PUB_GAS_INITIAL_REQ",
-       "ACT_PUB_GAS_INITIAL_RSP",
-       "ACT_PUB_GAS_COMEBACK_REQ",
-       "ACT_PUB_GAS_COMEBACK_RSP",
-       "ACT_PUB_TDLS_DISCOVERY_RSP",
-       "ACT_PUB_LOCATION_TRACK",
-       "ACT_PUB_RSVD",
-};
-
-const char *action_public_str(u8 action)
-{
-       action = min_t(u8, action, ACT_PUBLIC_MAX);
-       return _action_public_str[action];
-}
index f85a6abec3a3626fdc3e16508488d0de7d2bdcc8..6ed23f4db38ca98209c1b73ba23e758894be8e1f 100644 (file)
@@ -14,7 +14,6 @@
  ******************************************************************************/
 #define _RTW_IOCTL_SET_C_
 
-
 #include <osdep_service.h>
 #include <drv_types.h>
 #include <rtw_ioctl_set.h>
@@ -570,10 +569,8 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)
        struct registry_priv *pregistrypriv = &adapter->registrypriv;
        struct mlme_priv        *pmlmepriv = &adapter->mlmepriv;
        struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-       struct rtw_ieee80211_ht_cap *pht_capie;
        u8      rf_type = 0;
        u8      bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
-       u16     mcs_rate = 0;
        u32     ht_ielen = 0;
 
        if (adapter->registrypriv.mp_mode == 1) {
@@ -588,15 +585,11 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)
        if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) {
                p = rtw_get_ie(&pcur_bss->IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pcur_bss->IELength-12);
                if (p && ht_ielen > 0) {
-                       pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
-
-                       memcpy(&mcs_rate, pht_capie->supp_mcs_set, 2);
-
                        /* cur_bwmod is updated by beacon, pmlmeinfo is updated by association response */
                        bw_40MHz = (pmlmeext->cur_bwmode && (HT_INFO_HT_PARAM_REC_TRANS_CHNL_WIDTH & pmlmeinfo->HT_info.infos[0])) ? 1 : 0;
 
-                       short_GI_20 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_20) ? 1 : 0;
-                       short_GI_40 = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & IEEE80211_HT_CAP_SGI_40) ? 1 : 0;
+                       short_GI_20 = (le16_to_cpu(pmlmeinfo->HT_caps.cap_info) & IEEE80211_HT_CAP_SGI_20) ? 1 : 0;
+                       short_GI_40 = (le16_to_cpu(pmlmeinfo->HT_caps.cap_info) & IEEE80211_HT_CAP_SGI_40) ? 1 : 0;
 
                        rtw_hal_get_hwreg(adapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
                        max_rate = rtw_mcs_rate(
@@ -604,7 +597,7 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter)
                                bw_40MHz & (pregistrypriv->cbw40_enable),
                                short_GI_20,
                                short_GI_40,
-                               pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate
+                               pmlmeinfo->HT_caps.mcs.rx_mask
                        );
                }
        } else {
index 1456499b84bfd862238f66e80c7e8b0f57c2393b..249568c5b060cb74a363d146fd43c056767b3d07 100644 (file)
@@ -52,8 +52,6 @@ int rtw_init_mlme_priv(struct adapter *padapter)
        _rtw_init_queue(&(pmlmepriv->free_bss_pool));
        _rtw_init_queue(&(pmlmepriv->scanned_queue));
 
-       set_scanned_network_val(pmlmepriv, 0);
-
        memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct ndis_802_11_ssid));
 
        pbuf = vzalloc(MAX_BSS_CNT * (sizeof(struct wlan_network)));
@@ -100,12 +98,6 @@ void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
        rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie, &pmlmepriv->wps_probe_req_ie_len);
        rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_resp_ie, &pmlmepriv->wps_probe_resp_ie_len);
        rtw_free_mlme_ie_data(&pmlmepriv->wps_assoc_resp_ie, &pmlmepriv->wps_assoc_resp_ie_len);
-
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_beacon_ie, &pmlmepriv->p2p_beacon_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_req_ie, &pmlmepriv->p2p_probe_req_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_probe_resp_ie, &pmlmepriv->p2p_probe_resp_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_go_probe_resp_ie, &pmlmepriv->p2p_go_probe_resp_ie_len);
-       rtw_free_mlme_ie_data(&pmlmepriv->p2p_assoc_req_ie, &pmlmepriv->p2p_assoc_req_ie_len);
 }
 #else
 void rtw_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
@@ -143,8 +135,6 @@ struct wlan_network *_rtw_alloc_network(struct mlme_priv *pmlmepriv)
        pnetwork->aid = 0;
        pnetwork->join_res = 0;
 
-       pmlmepriv->num_of_scanned++;
-
 exit:
        spin_unlock_bh(&free_queue->lock);
 
@@ -175,7 +165,6 @@ static void _rtw_free_network(struct mlme_priv *pmlmepriv, struct wlan_network *
        spin_lock_bh(&free_queue->lock);
        list_del_init(&(pnetwork->list));
        list_add_tail(&(pnetwork->list), &(free_queue->queue));
-       pmlmepriv->num_of_scanned--;
        spin_unlock_bh(&free_queue->lock);
 }
 
@@ -189,7 +178,6 @@ void _rtw_free_network_nolock(struct        mlme_priv *pmlmepriv, struct wlan_network *
                return;
        list_del_init(&(pnetwork->list));
        list_add_tail(&(pnetwork->list), get_list_head(free_queue));
-       pmlmepriv->num_of_scanned--;
 }
 
 /*
@@ -732,7 +720,6 @@ static void free_scanqueue(struct   mlme_priv *pmlmepriv)
                list_del_init(plist);
                list_add_tail(plist, &free_queue->queue);
                plist = ptemp;
-               pmlmepriv->num_of_scanned--;
        }
 
        spin_unlock_bh(&free_queue->lock);
@@ -1935,7 +1922,6 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_
        u32 ielen, out_len;
        enum ht_cap_ampdu_factor max_rx_ampdu_factor;
        unsigned char *p;
-       struct rtw_ieee80211_ht_cap ht_capie;
        unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
        struct qos_priv         *pqospriv = &pmlmepriv->qospriv;
@@ -1948,6 +1934,8 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_
        p = rtw_get_ie(in_ie+12, _HT_CAPABILITY_IE_, &ielen, in_len-12);
 
        if (p && ielen > 0) {
+               struct ieee80211_ht_cap ht_cap;
+
                if (pqospriv->qos_option == 0) {
                        out_len = *pout_len;
                        rtw_set_ie(out_ie+out_len, _VENDOR_SPECIFIC_IE_,
@@ -1958,33 +1946,33 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_
 
                out_len = *pout_len;
 
-               memset(&ht_capie, 0, sizeof(struct rtw_ieee80211_ht_cap));
+               memset(&ht_cap, 0, sizeof(struct ieee80211_ht_cap));
 
-               ht_capie.cap_info = IEEE80211_HT_CAP_SUP_WIDTH |
-                                   IEEE80211_HT_CAP_SGI_20 |
-                                   IEEE80211_HT_CAP_SGI_40 |
-                                   IEEE80211_HT_CAP_TX_STBC |
-                                   IEEE80211_HT_CAP_DSSSCCK40;
+               ht_cap.cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH |
+                                             IEEE80211_HT_CAP_SGI_20 |
+                                             IEEE80211_HT_CAP_SGI_40 |
+                                             IEEE80211_HT_CAP_TX_STBC |
+                                             IEEE80211_HT_CAP_DSSSCCK40);
 
                rtw_hal_get_def_var(padapter, HAL_DEF_RX_PACKET_OFFSET, &rx_packet_offset);
                rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
 
                /*
-               AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
-               AMPDU_para [4:2]:Min MPDU Start Spacing
+               ampdu_params_info [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
+               ampdu_params_info [4:2]:Min MPDU Start Spacing
                */
 
                rtw_hal_get_def_var(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR, &max_rx_ampdu_factor);
-               ht_capie.ampdu_params_info = (max_rx_ampdu_factor&0x03);
+               ht_cap.ampdu_params_info = max_rx_ampdu_factor & 0x03;
 
                if (padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)
-                       ht_capie.ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
+                       ht_cap.ampdu_params_info |= IEEE80211_HT_CAP_AMPDU_DENSITY & (0x07 << 2);
                else
-                       ht_capie.ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
-
+                       ht_cap.ampdu_params_info |= IEEE80211_HT_CAP_AMPDU_DENSITY & 0x00;
 
                rtw_set_ie(out_ie+out_len, _HT_CAPABILITY_IE_,
-                          sizeof(struct rtw_ieee80211_ht_cap), (unsigned char *)&ht_capie, pout_len);
+                          sizeof(struct ieee80211_ht_cap),
+                          (unsigned char *)&ht_cap, pout_len);
 
                phtpriv->ht_option = true;
 
@@ -2000,9 +1988,6 @@ unsigned int rtw_restructure_ht_ie(struct adapter *padapter, u8 *in_ie, u8 *out_
 /* the function is > passive_level (in critical_section) */
 void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len)
 {
-       u8 *p, max_ampdu_sz;
-       int len;
-       struct rtw_ieee80211_ht_cap *pht_capie;
        struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
        struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
        struct registry_priv *pregistrypriv = &padapter->registrypriv;
@@ -2027,34 +2012,21 @@ void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len)
                phtpriv->ampdu_enable = true;
        }
 
-
-       /* check Max Rx A-MPDU Size */
-       len = 0;
-       p = rtw_get_ie(pie+sizeof(struct ndis_802_11_fixed_ie), _HT_CAPABILITY_IE_, &len, ie_len-sizeof(struct ndis_802_11_fixed_ie));
-       if (p && len > 0) {
-               pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
-               max_ampdu_sz = pht_capie->ampdu_params_info & IEEE80211_HT_CAP_AMPDU_FACTOR;
-               max_ampdu_sz = 1 << (max_ampdu_sz+3); /*  max_ampdu_sz (kbytes); */
-               phtpriv->rx_ampdu_maxlen = max_ampdu_sz;
-       }
-       len = 0;
-       p = rtw_get_ie(pie+sizeof(struct ndis_802_11_fixed_ie), _HT_ADD_INFO_IE_, &len, ie_len-sizeof(struct ndis_802_11_fixed_ie));
-
        /* update cur_bwmode & cur_ch_offset */
        if ((pregistrypriv->cbw40_enable) &&
-           (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & BIT(1)) &&
+           (le16_to_cpu(pmlmeinfo->HT_caps.cap_info) & BIT(1)) &&
            (pmlmeinfo->HT_info.infos[0] & BIT(2))) {
                int i;
                u8      rf_type;
 
-               padapter->HalFunc.GetHwRegHandler(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
+               rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
 
                /* update the MCS rates */
                for (i = 0; i < 16; i++) {
                        if ((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
-                               pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
+                               ((u8 *)&pmlmeinfo->HT_caps.mcs)[i] &= MCS_rate_1R[i];
                        else
-                               pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
+                               ((u8 *)&pmlmeinfo->HT_caps.mcs)[i] &= MCS_rate_2R[i];
                }
                /* switch to the 40M Hz mode according to the AP */
                pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
@@ -2072,7 +2044,7 @@ void rtw_update_ht_cap(struct adapter *padapter, u8 *pie, uint ie_len)
        }
 
        /*  Config SM Power Save setting */
-       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info) & 0x0C) >> 2;
+       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->HT_caps.cap_info) & 0x0C) >> 2;
        if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
                DBG_88E("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
 
index 7f32b39e58691391dfa75ad9cb4b7b8f0b31df5b..9544e55fc894ac5eae732ef9e68bbfbf6294f980 100644 (file)
@@ -320,7 +320,7 @@ static void issue_beacon(struct adapter *padapter, int timeout_ms)
        struct xmit_frame       *pmgntframe;
        struct pkt_attrib       *pattrib;
        unsigned char   *pframe;
-       struct rtw_ieee80211_hdr *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned int    rate_len;
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);
@@ -347,10 +347,10 @@ static void issue_beacon(struct adapter *padapter, int timeout_ms)
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
@@ -361,8 +361,8 @@ static void issue_beacon(struct adapter *padapter, int timeout_ms)
        /* pmlmeext->mgnt_seq++; */
        SetFrameSubType(pframe, WIFI_BEACON);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) {
                int len_diff;
@@ -377,8 +377,8 @@ static void issue_beacon(struct adapter *padapter, int timeout_ms)
                        );
                pframe += (cur_network->IELength+len_diff);
                pattrib->pktlen += (cur_network->IELength+len_diff);
-               wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof(struct rtw_ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_,
-                       pattrib->pktlen-sizeof(struct rtw_ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen);
+               wps_ie = rtw_get_wps_ie(pmgntframe->buf_addr+TXDESC_OFFSET+sizeof(struct ieee80211_hdr_3addr)+_BEACON_IE_OFFSET_,
+                       pattrib->pktlen-sizeof(struct ieee80211_hdr_3addr)-_BEACON_IE_OFFSET_, NULL, &wps_ielen);
                if (wps_ie && wps_ielen > 0)
                        rtw_get_wps_attr_content(wps_ie,  wps_ielen, WPS_ATTR_SELECTED_REGISTRAR, (u8 *)(&sr), NULL);
                if (sr != 0)
@@ -461,7 +461,7 @@ static void issue_probersp(struct adapter *padapter, unsigned char *da)
        struct xmit_frame                       *pmgntframe;
        struct pkt_attrib                       *pattrib;
        unsigned char                                   *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned char                                   *mac, *bssid;
        struct xmit_priv        *pxmitpriv = &(padapter->xmitpriv);
@@ -488,12 +488,12 @@ static void issue_probersp(struct adapter *padapter, unsigned char *da)
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
        mac = myid(&(padapter->eeprompriv));
        bssid = cur_network->MacAddress;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
        memcpy(pwlanhdr->addr1, da, ETH_ALEN);
        memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
@@ -503,7 +503,7 @@ static void issue_probersp(struct adapter *padapter, unsigned char *da)
        pmlmeext->mgnt_seq++;
        SetFrameSubType(fctrl, WIFI_PROBERSP);
 
-       pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
        pattrib->pktlen = pattrib->hdrlen;
        pframe += pattrib->hdrlen;
 
@@ -609,7 +609,7 @@ static int issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pss
        struct xmit_frame               *pmgntframe;
        struct pkt_attrib               *pattrib;
        unsigned char                   *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned char                   *mac;
        unsigned char                   bssrate[NumRates];
@@ -633,11 +633,11 @@ static int issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pss
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
        mac = myid(&(padapter->eeprompriv));
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        if (da) {
@@ -656,8 +656,8 @@ static int issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pss
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_PROBEREQ);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        if (pssid)
                pframe = rtw_set_ie(pframe, _SSID_IE_, pssid->SsidLength, pssid->Ssid, &(pattrib->pktlen));
@@ -745,7 +745,7 @@ static void issue_auth(struct adapter *padapter, struct sta_info *psta,
        struct xmit_frame *pmgntframe;
        struct pkt_attrib *pattrib;
        unsigned char *pframe;
-       struct rtw_ieee80211_hdr *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned int val32;
        u16 val16;
@@ -769,17 +769,17 @@ static void issue_auth(struct adapter *padapter, struct sta_info *psta,
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_AUTH);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
 
        if (psta) {/*  for AP mode */
@@ -866,7 +866,7 @@ static void issue_auth(struct adapter *padapter, struct sta_info *psta,
 
                        SetPrivacy(fctrl);
 
-                       pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+                       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
 
                        pattrib->encrypt = _WEP40_;
 
@@ -889,7 +889,7 @@ static void issue_asocrsp(struct adapter *padapter, unsigned short status,
                          struct sta_info *pstat, int pkt_type)
 {
        struct xmit_frame       *pmgntframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        struct pkt_attrib *pattrib;
        unsigned char   *pbuf, *pframe;
        unsigned short val;
@@ -916,9 +916,9 @@ static void issue_asocrsp(struct adapter *padapter, unsigned short status,
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy((void *)GetAddr1Ptr(pwlanhdr), pstat->hwaddr, ETH_ALEN);
@@ -933,7 +933,7 @@ static void issue_asocrsp(struct adapter *padapter, unsigned short status,
        else
                return;
 
-       pattrib->hdrlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
        pattrib->pktlen += pattrib->hdrlen;
        pframe += pattrib->hdrlen;
 
@@ -1017,7 +1017,7 @@ static void issue_assocreq(struct adapter *padapter)
        struct xmit_frame       *pmgntframe;
        struct pkt_attrib       *pattrib;
        unsigned char           *pframe, *p;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned int    i, j, ie_len, index = 0;
        unsigned char   rf_type, bssrate[NumRates], sta_bssrate[NumRates];
@@ -1040,9 +1040,9 @@ static void issue_assocreq(struct adapter *padapter)
 
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
        memcpy(pwlanhdr->addr1, pnetwork->MacAddress, ETH_ALEN);
        memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
@@ -1052,8 +1052,8 @@ static void issue_assocreq(struct adapter *padapter)
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_ASSOCREQ);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        /* caps */
 
@@ -1132,23 +1132,23 @@ static void issue_assocreq(struct adapter *padapter)
        if (padapter->mlmepriv.htpriv.ht_option) {
                p = rtw_get_ie((pmlmeinfo->network.IEs + sizeof(struct ndis_802_11_fixed_ie)), _HT_CAPABILITY_IE_, &ie_len, (pmlmeinfo->network.IELength - sizeof(struct ndis_802_11_fixed_ie)));
                if ((p != NULL) && (!(is_ap_in_tkip(padapter)))) {
-                       memcpy(&(pmlmeinfo->HT_caps), (p + 2), sizeof(struct HT_caps_element));
+                       memcpy(&pmlmeinfo->HT_caps, p + 2, sizeof(struct ieee80211_ht_cap));
 
                        /* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
                        if (pregpriv->cbw40_enable == 0)
-                               pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= cpu_to_le16(~(BIT(6) | BIT(1)));
+                               pmlmeinfo->HT_caps.cap_info &= cpu_to_le16(~(BIT(6) | BIT(1)));
                        else
-                               pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(BIT(1));
+                               pmlmeinfo->HT_caps.cap_info |= cpu_to_le16(BIT(1));
 
                        /* todo: disable SM power save mode */
-                       pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x000c);
+                       pmlmeinfo->HT_caps.cap_info |= cpu_to_le16(0x000c);
 
                        rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
                        switch (rf_type) {
                        case RF_1T1R:
                                if (pregpriv->rx_stbc)
-                                       pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);/* RX STBC One spatial stream */
-                               memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R, 16);
+                                       pmlmeinfo->HT_caps.cap_info |= cpu_to_le16(0x0100);/* RX STBC One spatial stream */
+                               memcpy((u8 *)&pmlmeinfo->HT_caps.mcs, MCS_rate_1R, 16);
                                break;
                        case RF_2T2R:
                        case RF_1T2R:
@@ -1157,9 +1157,9 @@ static void issue_assocreq(struct adapter *padapter)
                                    ((pmlmeext->cur_wireless_mode & WIRELESS_11_24N) && (pregpriv->rx_stbc == 0x1)) || /* enable for 2.4GHz */
                                    (pregpriv->wifi_spec == 1)) {
                                        DBG_88E("declare supporting RX STBC\n");
-                                       pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */
+                                       pmlmeinfo->HT_caps.cap_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */
                                }
-                               memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R, 16);
+                               memcpy(&pmlmeinfo->HT_caps.mcs, MCS_rate_2R, 16);
                                break;
                        }
                        pframe = rtw_set_ie(pframe, _HT_CAPABILITY_IE_, ie_len , (u8 *)(&(pmlmeinfo->HT_caps)), &(pattrib->pktlen));
@@ -1212,7 +1212,7 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned
        struct xmit_frame                       *pmgntframe;
        struct pkt_attrib                       *pattrib;
        unsigned char                                   *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        struct xmit_priv        *pxmitpriv;
        struct mlme_ext_priv    *pmlmeext;
@@ -1239,9 +1239,9 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
@@ -1260,8 +1260,8 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da, unsigned
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_DATA_NULL);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        pattrib->last_txcmdsz = pattrib->pktlen;
 
@@ -1332,7 +1332,7 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16
        struct xmit_frame                       *pmgntframe;
        struct pkt_attrib                       *pattrib;
        unsigned char                                   *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        unsigned short *qc;
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);
@@ -1359,9 +1359,9 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
@@ -1388,8 +1388,8 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da, u16
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr_qos);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
+       pframe += sizeof(struct ieee80211_qos_hdr);
+       pattrib->pktlen = sizeof(struct ieee80211_qos_hdr);
 
        pattrib->last_txcmdsz = pattrib->pktlen;
 
@@ -1457,7 +1457,7 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s
        struct xmit_frame                       *pmgntframe;
        struct pkt_attrib                       *pattrib;
        unsigned char                                   *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);
        struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
@@ -1478,9 +1478,9 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy(pwlanhdr->addr1, da, ETH_ALEN);
@@ -1491,8 +1491,8 @@ static int _issue_deauth(struct adapter *padapter, unsigned char *da, unsigned s
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_DEAUTH);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        le_tmp = cpu_to_le16(reason);
        pframe = rtw_set_fixed_ie(pframe, _RSON_CODE_, &le_tmp,
@@ -1559,66 +1559,6 @@ exit:
        return ret;
 }
 
-void issue_action_spct_ch_switch(struct adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset)
-{
-       struct xmit_frame                       *pmgntframe;
-       struct pkt_attrib                       *pattrib;
-       unsigned char                           *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
-       __le16 *fctrl;
-       struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);
-       struct mlme_ext_priv    *pmlmeext = &(padapter->mlmeextpriv);
-
-
-       DBG_88E(FUNC_NDEV_FMT" ra =%pM, ch:%u, offset:%u\n",
-               FUNC_NDEV_ARG(padapter->pnetdev), ra, new_ch, ch_offset);
-
-       pmgntframe = alloc_mgtxmitframe(pxmitpriv);
-       if (pmgntframe == NULL)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
-
-       fctrl = &(pwlanhdr->frame_ctl);
-       *(fctrl) = 0;
-
-       memcpy(pwlanhdr->addr1, ra, ETH_ALEN); /* RA */
-       memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN); /* TA */
-       memcpy(pwlanhdr->addr3, ra, ETH_ALEN); /* DA = RA */
-
-       SetSeqNum(pwlanhdr, pmlmeext->mgnt_seq);
-       pmlmeext->mgnt_seq++;
-       SetFrameSubType(pframe, WIFI_ACTION);
-
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
-
-       /* category, action */
-       {
-               u8 category, action;
-               category = RTW_WLAN_CATEGORY_SPECTRUM_MGMT;
-               action = RTW_WLAN_ACTION_SPCT_CHL_SWITCH;
-
-               pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
-               pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
-       }
-
-       pframe = rtw_set_ie_ch_switch(pframe, &(pattrib->pktlen), 0, new_ch, 0);
-       pframe = rtw_set_ie_secondary_ch_offset(pframe, &(pattrib->pktlen),
-               hal_ch_offset_to_secondary_ch_offset(ch_offset));
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe(padapter, pmgntframe);
-}
-
 static void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
                            unsigned char action, unsigned short status)
 {
@@ -1633,7 +1573,7 @@ static void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
        struct xmit_frame *pmgntframe;
        struct pkt_attrib *pattrib;
        u8 *pframe;
-       struct rtw_ieee80211_hdr *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
        struct mlme_ext_priv *pmlmeext = &(padapter->mlmeextpriv);
@@ -1656,9 +1596,9 @@ static void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy(pwlanhdr->addr1, raddr, ETH_ALEN);
@@ -1669,8 +1609,8 @@ static void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_ACTION);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
        pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
@@ -1779,7 +1719,7 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter)
        struct xmit_frame                       *pmgntframe;
        struct pkt_attrib                       *pattrib;
        unsigned char                           *pframe;
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        struct  wlan_network    *pnetwork = NULL;
        struct xmit_priv                        *pxmitpriv = &(padapter->xmitpriv);
@@ -1815,9 +1755,9 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter)
        memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
 
        pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy(pwlanhdr->addr1, cur_network->MacAddress, ETH_ALEN);
@@ -1828,8 +1768,8 @@ static void issue_action_BSSCoexistPacket(struct adapter *padapter)
        pmlmeext->mgnt_seq++;
        SetFrameSubType(pframe, WIFI_ACTION);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        pframe = rtw_set_fixed_ie(pframe, 1, &(category), &(pattrib->pktlen));
        pframe = rtw_set_fixed_ie(pframe, 1, &(action), &(pattrib->pktlen));
@@ -2112,7 +2052,7 @@ static u8 collect_bss_info(struct adapter *padapter,
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
 
-       len = packet_len - sizeof(struct rtw_ieee80211_hdr_3addr);
+       len = packet_len - sizeof(struct ieee80211_hdr_3addr);
 
        if (len > MAX_IE_SZ)
                return _FAIL;
@@ -2142,7 +2082,7 @@ static u8 collect_bss_info(struct adapter *padapter,
 
        /* below is to copy the information element */
        bssid->IELength = len;
-       memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
+       memcpy(bssid->IEs, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->IELength);
 
        /* get the signal strength in dBM.raw data */
        bssid->Rssi = precv_frame->attrib.phy_info.recvpower;
@@ -2249,10 +2189,10 @@ static u8 collect_bss_info(struct adapter *padapter,
                struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
                p = rtw_get_ie(bssid->IEs + ie_offset, _HT_CAPABILITY_IE_, &len, bssid->IELength - ie_offset);
                if (p && len > 0) {
-                       struct HT_caps_element  *pHT_caps;
-                       pHT_caps = (struct HT_caps_element *)(p + 2);
+                       struct ieee80211_ht_cap *pHT_caps =
+                               (struct ieee80211_ht_cap *)(p + 2);
 
-                       if (le16_to_cpu(pHT_caps->u.HT_cap_element.HT_caps_info)&BIT(14))
+                       if (le16_to_cpu(pHT_caps->cap_info) & BIT(14))
                                pmlmepriv->num_FortyMHzIntolerant++;
                } else {
                        pmlmepriv->num_sta_no_ht++;
@@ -2684,7 +2624,7 @@ static unsigned int OnBeacon(struct adapter *padapter,
                        }
 
                        /* check the vendor of the assoc AP */
-                       pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pframe+sizeof(struct rtw_ieee80211_hdr_3addr), len-sizeof(struct rtw_ieee80211_hdr_3addr));
+                       pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pframe+sizeof(struct ieee80211_hdr_3addr), len-sizeof(struct ieee80211_hdr_3addr));
 
                        /* update TSF Value */
                        update_TSF(pmlmeext, pframe, len);
@@ -3296,13 +3236,15 @@ static unsigned int OnAssocReq(struct adapter *padapter,
        }
 
        /* save HT capabilities in the sta object */
-       memset(&pstat->htpriv.ht_cap, 0, sizeof(struct rtw_ieee80211_ht_cap));
-       if (elems.ht_capabilities && elems.ht_capabilities_len >= sizeof(struct rtw_ieee80211_ht_cap)) {
+       memset(&pstat->htpriv.ht_cap, 0, sizeof(struct ieee80211_ht_cap));
+       if (elems.ht_capabilities &&
+           elems.ht_capabilities_len >= sizeof(struct ieee80211_ht_cap)) {
                pstat->flags |= WLAN_STA_HT;
 
                pstat->flags |= WLAN_STA_WME;
 
-               memcpy(&pstat->htpriv.ht_cap, elems.ht_capabilities, sizeof(struct rtw_ieee80211_ht_cap));
+               memcpy(&pstat->htpriv.ht_cap,
+                      elems.ht_capabilities, sizeof(struct ieee80211_ht_cap));
        } else {
                pstat->flags &= ~WLAN_STA_HT;
        }
@@ -3639,7 +3581,7 @@ static unsigned int on_action_spct(struct adapter *padapter,
        struct sta_info *psta = NULL;
        struct sta_priv *pstapriv = &padapter->stapriv;
        u8 *pframe = precv_frame->rx_data;
-       u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+       u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
        u8 category;
        u8 action;
 
@@ -3713,7 +3655,7 @@ static unsigned int OnAction_back(struct adapter *padapter,
        if (psta == NULL)
                return _SUCCESS;
 
-       frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
+       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
 
        category = frame_body[0];
        if (category == RTW_WLAN_CATEGORY_BACK) { /*  representing Block Ack */
@@ -3800,7 +3742,7 @@ static unsigned int on_action_public_p2p(struct recv_frame *precv_frame)
        u8 *pframe = precv_frame->rx_data;
        u8 *frame_body;
        u8 dialogToken = 0;
-       frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
+       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
 
        dialogToken = frame_body[7];
 
@@ -3814,7 +3756,7 @@ static unsigned int on_action_public_vendor(struct recv_frame *precv_frame)
 {
        unsigned int ret = _FAIL;
        u8 *pframe = precv_frame->rx_data;
-       u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+       u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
 
        if (!memcmp(frame_body + 2, P2P_OUI, 4))
                ret = on_action_public_p2p(precv_frame);
@@ -3826,7 +3768,7 @@ static unsigned int on_action_public_default(struct recv_frame *precv_frame, u8
 {
        unsigned int ret = _FAIL;
        u8 *pframe = precv_frame->rx_data;
-       u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+       u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
        u8 token;
 
        token = frame_body[2];
@@ -3845,7 +3787,7 @@ static unsigned int on_action_public(struct adapter *padapter,
 {
        unsigned int ret = _FAIL;
        u8 *pframe = precv_frame->rx_data;
-       u8 *frame_body = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+       u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
        u8 category, action;
 
        /* check RA matches or not */
@@ -3917,7 +3859,7 @@ static unsigned int OnAction(struct adapter *padapter,
        unsigned char   *frame_body;
        u8 *pframe = precv_frame->rx_data;
 
-       frame_body = (unsigned char *)(pframe + sizeof(struct rtw_ieee80211_hdr_3addr));
+       frame_body = (unsigned char *)(pframe + sizeof(struct ieee80211_hdr_3addr));
 
        category = frame_body[0];
 
@@ -4537,7 +4479,7 @@ void update_sta_info(struct adapter *padapter, struct sta_info *psta)
 
                psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
 
-               if (support_short_GI(padapter, &(pmlmeinfo->HT_caps)))
+               if (support_short_GI(padapter, &pmlmeinfo->HT_caps))
                        psta->htpriv.sgi = true;
 
                psta->qos_option = true;
index 59c6d8ab60f67f40609b77b87d4dcce714b95a96..0b70fe7d3b7265395108a7a748b8381e5455a3ae 100644 (file)
@@ -38,7 +38,7 @@ static int rtw_hw_suspend(struct adapter *padapter)
        LeaveAllPowerSaveMode(padapter);
 
        DBG_88E("==> rtw_hw_suspend\n");
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        pwrpriv->bips_processing = true;
        /* s1. */
        if (pnetdev) {
@@ -73,7 +73,7 @@ static int rtw_hw_suspend(struct adapter *padapter)
        pwrpriv->rf_pwrstate = rf_off;
        pwrpriv->bips_processing = false;
 
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 
        return 0;
 
@@ -90,12 +90,12 @@ static int rtw_hw_resume(struct adapter *padapter)
 
        /* system resume */
        DBG_88E("==> rtw_hw_resume\n");
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        pwrpriv->bips_processing = true;
        rtw_reset_drv_sw(padapter);
 
        if (pm_netdev_open(pnetdev, false) != 0) {
-               _exit_pwrlock(&pwrpriv->lock);
+               mutex_unlock(&pwrpriv->mutex_lock);
                goto error_exit;
        }
 
@@ -113,7 +113,7 @@ static int rtw_hw_resume(struct adapter *padapter)
        pwrpriv->rf_pwrstate = rf_on;
        pwrpriv->bips_processing = false;
 
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 
 
        return 0;
@@ -138,7 +138,7 @@ void ips_enter(struct adapter *padapter)
                return;
        }
 
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
 
        pwrpriv->bips_processing = true;
 
@@ -159,7 +159,7 @@ void ips_enter(struct adapter *padapter)
        }
        pwrpriv->bips_processing = false;
 
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 }
 
 int ips_leave(struct adapter *padapter)
@@ -171,7 +171,7 @@ int ips_leave(struct adapter *padapter)
        int keyid;
 
 
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
 
        if ((pwrpriv->rf_pwrstate == rf_off) && (!pwrpriv->bips_processing)) {
                pwrpriv->bips_processing = true;
@@ -205,7 +205,7 @@ int ips_leave(struct adapter *padapter)
                pwrpriv->bpower_saving = false;
        }
 
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 
        return result;
 }
@@ -504,7 +504,7 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter)
 {
        struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
 
-       _init_pwrlock(&pwrctrlpriv->lock);
+       mutex_init(&pwrctrlpriv->mutex_lock);
        pwrctrlpriv->rf_pwrstate = rf_on;
        pwrctrlpriv->ips_enter_cnts = 0;
        pwrctrlpriv->ips_leave_cnts = 0;
index 977bb2532c3e7fc80b77b47c7f6057aee8e301d1..1063617b0ce40cb13f8815bf8a8f99108056f1bd 100644 (file)
@@ -39,7 +39,7 @@ static u8 rtw_rfc1042_header[] = {
        0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00
 };
 
-void rtw_signal_stat_timer_hdl(unsigned long data);
+static void rtw_signal_stat_timer_hdl(unsigned long data);
 
 void _rtw_init_sta_recv_priv(struct sta_recv_priv *psta_recvpriv)
 {
@@ -2088,7 +2088,7 @@ _recv_entry_drop:
        return ret;
 }
 
-void rtw_signal_stat_timer_hdl(unsigned long data)
+static void rtw_signal_stat_timer_hdl(unsigned long data)
 {
        struct adapter *adapter = (struct adapter *)data;
        struct recv_priv *recvpriv = &adapter->recvpriv;
index 13a5bf4730abd9a5ddca7805ead734393274d4bc..5d631c515bf0c547e4c9b28d4f33ca89acba41ee 100644 (file)
@@ -16,7 +16,7 @@
 #include <rtw_sreset.h>
 #include <usb_ops_linux.h>
 
-void sreset_init_value(struct adapter *padapter)
+void rtw_hal_sreset_init(struct adapter *padapter)
 {
        struct hal_data_8188e   *pHalData = GET_HAL_DATA(padapter);
        struct sreset_priv *psrtpriv = &pHalData->srestpriv;
index 4410fe8d7c68b07a6ec5a4d6728c7032496cf044..2a65ac70212955fac783f0e217e122357c679f7b 100644 (file)
@@ -341,9 +341,6 @@ void set_channel_bwmode(struct adapter *padapter, unsigned char channel, unsigne
 {
        u8 center_ch;
 
-       if (padapter->bNotifyChannelChange)
-               DBG_88E("[%s] ch = %d, offset = %d, bwmode = %d\n", __func__, channel, channel_offset, bwmode);
-
        if ((bwmode == HT_CHANNEL_WIDTH_20) ||
            (channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)) {
                /* SelectChannel(padapter, channel); */
@@ -716,6 +713,7 @@ void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        struct mlme_priv                *pmlmepriv = &padapter->mlmepriv;
        struct ht_priv                  *phtpriv = &pmlmepriv->htpriv;
+       u8 *HT_cap = (u8 *)(&pmlmeinfo->HT_caps);
 
        if (pIE == NULL)
                return;
@@ -728,20 +726,20 @@ void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
        for (i = 0; i < (pIE->Length); i++) {
                if (i != 2) {
                        /*      Got the endian issue here. */
-                       pmlmeinfo->HT_caps.u.HT_cap[i] &= (pIE->data[i]);
+                       HT_cap[i] &= (pIE->data[i]);
                } else {
                        /* modify from  fw by Thomas 2010/11/17 */
-                       if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3) > (pIE->data[i] & 0x3))
+                       if ((pmlmeinfo->HT_caps.ampdu_params_info & 0x3) > (pIE->data[i] & 0x3))
                                max_AMPDU_len = pIE->data[i] & 0x3;
                        else
-                               max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3;
+                               max_AMPDU_len = pmlmeinfo->HT_caps.ampdu_params_info & 0x3;
 
-                       if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) > (pIE->data[i] & 0x1c))
-                               min_MPDU_spacing = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c;
+                       if ((pmlmeinfo->HT_caps.ampdu_params_info & 0x1c) > (pIE->data[i] & 0x1c))
+                               min_MPDU_spacing = pmlmeinfo->HT_caps.ampdu_params_info & 0x1c;
                        else
                                min_MPDU_spacing = pIE->data[i] & 0x1c;
 
-                       pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para = max_AMPDU_len | min_MPDU_spacing;
+                       pmlmeinfo->HT_caps.ampdu_params_info = max_AMPDU_len | min_MPDU_spacing;
                }
        }
 
@@ -750,9 +748,9 @@ void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE)
        /* update the MCS rates */
        for (i = 0; i < 16; i++) {
                if ((rf_type == RF_1T1R) || (rf_type == RF_1T2R))
-                       pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R[i];
+                       ((u8 *)&pmlmeinfo->HT_caps.mcs)[i] &= MCS_rate_1R[i];
                else
-                       pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R[i];
+                       ((u8 *)&pmlmeinfo->HT_caps.mcs)[i] &= MCS_rate_2R[i];
        }
 }
 
@@ -798,9 +796,9 @@ void HTOnAssocRsp(struct adapter *padapter)
                AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
                AMPDU_para [4:2]:Min MPDU Start Spacing
        */
-       max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
+       max_AMPDU_len = pmlmeinfo->HT_caps.ampdu_params_info & 0x03;
 
-       min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
+       min_MPDU_spacing = (pmlmeinfo->HT_caps.ampdu_params_info & 0x1c) >> 2;
 
        rtw_hal_set_hwreg(padapter, HW_VAR_AMPDU_MIN_SPACE, (u8 *)(&min_MPDU_spacing));
 
@@ -872,7 +870,6 @@ int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len)
        u32 wpa_ielen = 0;
        u8 *pbssid = GetAddr3Ptr(pframe);
        struct HT_info_element *pht_info = NULL;
-       struct rtw_ieee80211_ht_cap *pht_cap = NULL;
        u32 bcn_channel;
        unsigned short  ht_cap_info;
        unsigned char   ht_info_infos_0;
@@ -881,7 +878,7 @@ int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len)
        if (is_client_associated_to_ap(Adapter) == false)
                return true;
 
-       len = packet_len - sizeof(struct rtw_ieee80211_hdr_3addr);
+       len = packet_len - sizeof(struct ieee80211_hdr_3addr);
 
        if (len > MAX_IE_SZ) {
                DBG_88E("%s IE too long for survey event\n", __func__);
@@ -907,14 +904,16 @@ int rtw_check_bcn_info(struct adapter  *Adapter, u8 *pframe, u32 packet_len)
 
        /* below is to copy the information element */
        bssid->IELength = len;
-       memcpy(bssid->IEs, (pframe + sizeof(struct rtw_ieee80211_hdr_3addr)), bssid->IELength);
+       memcpy(bssid->IEs, (pframe + sizeof(struct ieee80211_hdr_3addr)), bssid->IELength);
 
        /* check bw and channel offset */
        /* parsing HT_CAP_IE */
        p = rtw_get_ie(bssid->IEs + _FIXED_IE_LENGTH_, _HT_CAPABILITY_IE_, &len, bssid->IELength - _FIXED_IE_LENGTH_);
        if (p && len > 0) {
-               pht_cap = (struct rtw_ieee80211_ht_cap *)(p + 2);
-               ht_cap_info = pht_cap->cap_info;
+               struct ieee80211_ht_cap *ht_cap =
+                       (struct ieee80211_ht_cap *)(p + 2);
+
+               ht_cap_info = le16_to_cpu(ht_cap->cap_info);
        } else {
                ht_cap_info = 0;
        }
@@ -1243,16 +1242,17 @@ unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz)
        return mask;
 }
 
-unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps)
+unsigned int update_MSC_rate(struct ieee80211_ht_cap *pHT_caps)
 {
        unsigned int mask = 0;
 
-       mask = (pHT_caps->u.HT_cap_element.MCS_rate[0] << 12) | (pHT_caps->u.HT_cap_element.MCS_rate[1] << 20);
+       mask = (pHT_caps->mcs.rx_mask[0] << 12) |
+              (pHT_caps->mcs.rx_mask[1] << 20);
 
        return mask;
 }
 
-int support_short_GI(struct adapter *padapter, struct HT_caps_element *pHT_caps)
+int support_short_GI(struct adapter *padapter, struct ieee80211_ht_cap *pHT_caps)
 {
        unsigned char                                   bit_offset;
        struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
@@ -1266,7 +1266,7 @@ int support_short_GI(struct adapter *padapter, struct HT_caps_element *pHT_caps)
 
        bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40) ? 6 : 5;
 
-       if (__le16_to_cpu(pHT_caps->u.HT_cap_element.HT_caps_info) & (0x1 << bit_offset))
+       if (__le16_to_cpu(pHT_caps->cap_info) & (0x1 << bit_offset))
                return _SUCCESS;
        else
                return _FAIL;
@@ -1508,7 +1508,7 @@ void update_wireless_mode(struct adapter *padapter)
        SIFS_Timer = 0x0a0a0808;/* 0x0808 -> for CCK, 0x0a0a -> for OFDM */
                                /* change this value if having IOT issues. */
 
-       padapter->HalFunc.SetHwRegHandler(padapter, HW_VAR_RESP_SIFS,  (u8 *)&SIFS_Timer);
+       rtw_hal_set_hwreg(padapter, HW_VAR_RESP_SIFS,  (u8 *)&SIFS_Timer);
 
        if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
                update_mgnt_tx_rate(padapter, IEEE80211_CCK_RATE_1MB);
@@ -1584,7 +1584,7 @@ void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len)
        u8 *pIE;
        __le32 *pbuf;
 
-       pIE = pframe + sizeof(struct rtw_ieee80211_hdr_3addr);
+       pIE = pframe + sizeof(struct ieee80211_hdr_3addr);
        pbuf = (__le32 *)pIE;
 
        pmlmeext->TSFValue = le32_to_cpu(*(pbuf+1));
index e0a5567f59425d8d1549dd5677e364e90080af35..be7fe742a1bfd347a598218e653d4814b7cd8c7c 100644 (file)
@@ -57,8 +57,6 @@ s32   _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter)
        /*  We don't need to memset padapter->XXX to zero, because adapter is allocated by vzalloc(). */
 
        spin_lock_init(&pxmitpriv->lock);
-       sema_init(&pxmitpriv->xmit_sema, 0);
-       sema_init(&pxmitpriv->terminate_xmitthread_sema, 0);
 
        /*
        Please insert all the queue initializaiton using _rtw_init_queue below
@@ -199,8 +197,6 @@ s32 _rtw_init_xmit_priv(struct xmit_priv *pxmitpriv, struct adapter *padapter)
 
        pxmitpriv->txirp_cnt = 1;
 
-       sema_init(&(pxmitpriv->tx_retevt), 0);
-
        /* per AC pending irp */
        pxmitpriv->beq_cnt = 0;
        pxmitpriv->bkq_cnt = 0;
@@ -769,13 +765,13 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
 {
        u16 *qc;
 
-       struct rtw_ieee80211_hdr *pwlanhdr = (struct rtw_ieee80211_hdr *)hdr;
+       struct ieee80211_hdr *pwlanhdr = (struct ieee80211_hdr *)hdr;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct qos_priv *pqospriv = &pmlmepriv->qospriv;
        u8 qos_option = false;
 
        int res = _SUCCESS;
-       __le16 *fctrl = &pwlanhdr->frame_ctl;
+       __le16 *fctrl = &pwlanhdr->frame_control;
 
        struct sta_info *psta;
 
@@ -1658,16 +1654,6 @@ u32 rtw_get_ff_hwaddr(struct xmit_frame *pxmitframe)
        return addr;
 }
 
-static void do_queue_select(struct adapter *padapter, struct pkt_attrib *pattrib)
-{
-       u8 qsel;
-
-       qsel = pattrib->priority;
-       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, ("### do_queue_select priority=%d , qsel = %d\n", pattrib->priority, qsel));
-
-       pattrib->qsel = qsel;
-}
-
 /*
  * The main transmit(tx) entry
  *
@@ -1700,7 +1686,7 @@ s32 rtw_xmit(struct adapter *padapter, struct sk_buff **ppkt)
 
        rtw_led_control(padapter, LED_CTL_TX);
 
-       do_queue_select(padapter, &pxmitframe->attrib);
+       pxmitframe->attrib.qsel = pxmitframe->attrib.priority;
 
 #ifdef CONFIG_88EU_AP_MODE
        spin_lock_bh(&pxmitpriv->lock);
index 085f0fbd0c43e673896d40718708ab9a013621ca..12fde452fc21708b94cc09464aba1eb6563f3769 100644 (file)
 #include <hal_intf.h>
 #include <usb_hal.h>
 
-void rtw_hal_chip_configure(struct adapter *adapt)
-{
-       if (adapt->HalFunc.intf_chip_configure)
-               adapt->HalFunc.intf_chip_configure(adapt);
-}
-
-void rtw_hal_read_chip_info(struct adapter *adapt)
-{
-       if (adapt->HalFunc.read_adapter_info)
-               adapt->HalFunc.read_adapter_info(adapt);
-}
-
-void rtw_hal_read_chip_version(struct adapter *adapt)
-{
-       if (adapt->HalFunc.read_chip_version)
-               adapt->HalFunc.read_chip_version(adapt);
-}
-
-void rtw_hal_def_value_init(struct adapter *adapt)
-{
-       if (adapt->HalFunc.init_default_value)
-               adapt->HalFunc.init_default_value(adapt);
-}
-
-void rtw_hal_free_data(struct adapter *adapt)
-{
-       if (adapt->HalFunc.free_hal_data)
-               adapt->HalFunc.free_hal_data(adapt);
-}
-
-void rtw_hal_dm_init(struct adapter *adapt)
-{
-       if (adapt->HalFunc.dm_init)
-               adapt->HalFunc.dm_init(adapt);
-}
-
-void rtw_hal_sw_led_init(struct adapter *adapt)
-{
-       if (adapt->HalFunc.InitSwLeds)
-               adapt->HalFunc.InitSwLeds(adapt);
-}
-
-void rtw_hal_sw_led_deinit(struct adapter *adapt)
-{
-       if (adapt->HalFunc.DeInitSwLeds)
-               adapt->HalFunc.DeInitSwLeds(adapt);
-}
-
-u32 rtw_hal_power_on(struct adapter *adapt)
-{
-       if (adapt->HalFunc.hal_power_on)
-               return adapt->HalFunc.hal_power_on(adapt);
-       return _FAIL;
-}
-
 uint    rtw_hal_init(struct adapter *adapt)
 {
        uint    status = _SUCCESS;
 
        adapt->hw_init_completed = false;
 
-       status = adapt->HalFunc.hal_init(adapt);
+       status = rtl8188eu_hal_init(adapt);
 
        if (status == _SUCCESS) {
                adapt->hw_init_completed = true;
 
                if (adapt->registrypriv.notch_filter == 1)
                        rtw_hal_notch_filter(adapt, 1);
-
-               rtw_hal_reset_security_engine(adapt);
        } else {
                adapt->hw_init_completed = false;
                DBG_88E("rtw_hal_init: hal__init fail\n");
@@ -104,7 +47,7 @@ uint rtw_hal_deinit(struct adapter *adapt)
 {
        uint    status = _SUCCESS;
 
-       status = adapt->HalFunc.hal_deinit(adapt);
+       status = rtl8188eu_hal_deinit(adapt);
 
        if (status == _SUCCESS)
                adapt->hw_init_completed = false;
@@ -114,92 +57,6 @@ uint rtw_hal_deinit(struct adapter *adapt)
        return status;
 }
 
-void rtw_hal_set_hwreg(struct adapter *adapt, u8 variable, u8 *val)
-{
-       if (adapt->HalFunc.SetHwRegHandler)
-               adapt->HalFunc.SetHwRegHandler(adapt, variable, val);
-}
-
-void rtw_hal_get_hwreg(struct adapter *adapt, u8 variable, u8 *val)
-{
-       if (adapt->HalFunc.GetHwRegHandler)
-               adapt->HalFunc.GetHwRegHandler(adapt, variable, val);
-}
-
-u8 rtw_hal_get_def_var(struct adapter *adapt,
-                      enum hal_def_variable var, void *val)
-{
-       if (adapt->HalFunc.GetHalDefVarHandler)
-               return adapt->HalFunc.GetHalDefVarHandler(adapt, var, val);
-       return _FAIL;
-}
-
-void rtw_hal_set_odm_var(struct adapter *adapt,
-                        enum hal_odm_variable var, void *val1,
-                        bool set)
-{
-       if (adapt->HalFunc.SetHalODMVarHandler)
-               adapt->HalFunc.SetHalODMVarHandler(adapt, var,
-                                                     val1, set);
-}
-
-u32 rtw_hal_inirp_init(struct adapter *adapt)
-{
-       u32 rst = _FAIL;
-
-       if (adapt->HalFunc.inirp_init)
-               rst = adapt->HalFunc.inirp_init(adapt);
-       else
-               DBG_88E(" %s HalFunc.inirp_init is NULL!!!\n", __func__);
-       return rst;
-}
-
-u32 rtw_hal_inirp_deinit(struct adapter *adapt)
-{
-       if (adapt->HalFunc.inirp_deinit)
-               return adapt->HalFunc.inirp_deinit(adapt);
-
-       return _FAIL;
-}
-
-s32 rtw_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       if (adapt->HalFunc.hal_xmit)
-               return adapt->HalFunc.hal_xmit(adapt, pxmitframe);
-
-       return false;
-}
-
-s32 rtw_hal_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
-{
-       s32 ret = _FAIL;
-
-       if (adapt->HalFunc.mgnt_xmit)
-               ret = adapt->HalFunc.mgnt_xmit(adapt, pmgntframe);
-       return ret;
-}
-
-s32 rtw_hal_init_xmit_priv(struct adapter *adapt)
-{
-       if (adapt->HalFunc.init_xmit_priv)
-               return adapt->HalFunc.init_xmit_priv(adapt);
-       return _FAIL;
-}
-
-s32 rtw_hal_init_recv_priv(struct adapter *adapt)
-{
-       if (adapt->HalFunc.init_recv_priv)
-               return adapt->HalFunc.init_recv_priv(adapt);
-
-       return _FAIL;
-}
-
-void rtw_hal_free_recv_priv(struct adapter *adapt)
-{
-       if (adapt->HalFunc.free_recv_priv)
-               adapt->HalFunc.free_recv_priv(adapt);
-}
-
 void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
 {
        struct mlme_priv *pmlmepriv = &(adapt->mlmepriv);
@@ -215,86 +72,6 @@ void rtw_hal_update_ra_mask(struct adapter *adapt, u32 mac_id, u8 rssi_level)
                        add_RATid(adapt, psta, 0);/* todo: based on rssi_level*/
 #endif
        } else {
-               if (adapt->HalFunc.UpdateRAMaskHandler)
-                       adapt->HalFunc.UpdateRAMaskHandler(adapt, mac_id,
-                                                             rssi_level);
+               UpdateHalRAMask8188EUsb(adapt, mac_id, rssi_level);
        }
 }
-
-void rtw_hal_add_ra_tid(struct adapter *adapt, u32 bitmap, u8 arg,
-                       u8 rssi_level)
-{
-       if (adapt->HalFunc.Add_RateATid)
-               adapt->HalFunc.Add_RateATid(adapt, bitmap, arg,
-                                              rssi_level);
-}
-
-u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rfpath,
-                      u32 regaddr, u32 bitmask)
-{
-       u32 data = 0;
-
-       if (adapt->HalFunc.read_rfreg)
-               data = adapt->HalFunc.read_rfreg(adapt, rfpath, regaddr,
-                                                   bitmask);
-       return data;
-}
-
-void rtw_hal_set_bwmode(struct adapter *adapt,
-                       enum ht_channel_width bandwidth, u8 offset)
-{
-       if (adapt->HalFunc.set_bwmode_handler)
-               adapt->HalFunc.set_bwmode_handler(adapt, bandwidth,
-                                                    offset);
-}
-
-void rtw_hal_set_chan(struct adapter *adapt, u8 channel)
-{
-       if (adapt->HalFunc.set_channel_handler)
-               adapt->HalFunc.set_channel_handler(adapt, channel);
-}
-
-void rtw_hal_dm_watchdog(struct adapter *adapt)
-{
-       if (adapt->HalFunc.hal_dm_watchdog)
-               adapt->HalFunc.hal_dm_watchdog(adapt);
-}
-
-void rtw_hal_bcn_related_reg_setting(struct adapter *adapt)
-{
-       if (adapt->HalFunc.SetBeaconRelatedRegistersHandler)
-               adapt->HalFunc.SetBeaconRelatedRegistersHandler(adapt);
-}
-
-u8 rtw_hal_antdiv_before_linked(struct adapter *adapt)
-{
-       if (adapt->HalFunc.AntDivBeforeLinkHandler)
-               return adapt->HalFunc.AntDivBeforeLinkHandler(adapt);
-       return false;
-}
-
-void rtw_hal_antdiv_rssi_compared(struct adapter *adapt,
-                                 struct wlan_bssid_ex *dst,
-                                 struct wlan_bssid_ex *src)
-{
-       if (adapt->HalFunc.AntDivCompareHandler)
-               adapt->HalFunc.AntDivCompareHandler(adapt, dst, src);
-}
-
-void rtw_hal_sreset_init(struct adapter *adapt)
-{
-       if (adapt->HalFunc.sreset_init_value)
-               adapt->HalFunc.sreset_init_value(adapt);
-}
-
-void rtw_hal_notch_filter(struct adapter *adapter, bool enable)
-{
-       if (adapter->HalFunc.hal_notch_filter)
-               adapter->HalFunc.hal_notch_filter(adapter, enable);
-}
-
-void rtw_hal_reset_security_engine(struct adapter *adapter)
-{
-       if (adapter->HalFunc.hal_reset_security_engine)
-               adapter->HalFunc.hal_reset_security_engine(adapter);
-}
index a83bbea9be93b8e3a2c2b5faa5e3e9b7f3931cc6..776e5b83b99ffaaf340e0794353d67c5889cfbd7 100644 (file)
@@ -118,7 +118,7 @@ static void rf_serial_write(struct adapter *adapt,
        phy_set_bb_reg(adapt, phyreg->rf3wireOffset, bMaskDWord, data_and_addr);
 }
 
-u32 phy_query_rf_reg(struct adapter *adapt, enum rf_radio_path rf_path,
+u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rf_path,
                     u32 reg_addr, u32 bit_mask)
 {
        u32 original_value, readback_value, bit_shift;
@@ -274,7 +274,7 @@ static void phy_set_bw_mode_callback(struct adapter *adapt)
                rtl88eu_phy_rf6052_set_bandwidth(adapt, hal_data->CurrentChannelBW);
 }
 
-void phy_set_bw_mode(struct adapter *adapt, enum ht_channel_width bandwidth,
+void rtw_hal_set_bwmode(struct adapter *adapt, enum ht_channel_width bandwidth,
                     unsigned char offset)
 {
        struct hal_data_8188e   *hal_data = GET_HAL_DATA(adapt);
@@ -295,9 +295,6 @@ static void phy_sw_chnl_callback(struct adapter *adapt, u8 channel)
        u32 param1, param2;
        struct hal_data_8188e *hal_data = GET_HAL_DATA(adapt);
 
-       if (adapt->bNotifyChannelChange)
-               DBG_88E("[%s] ch = %d\n", __func__, channel);
-
        phy_set_tx_power_level(adapt, channel);
 
        param1 = RF_CHNLBW;
@@ -310,7 +307,7 @@ static void phy_sw_chnl_callback(struct adapter *adapt, u8 channel)
        }
 }
 
-void phy_sw_chnl(struct adapter *adapt, u8 channel)
+void rtw_hal_set_chan(struct adapter *adapt, u8 channel)
 {
        struct hal_data_8188e *hal_data = GET_HAL_DATA(adapt);
        u8 tmpchannel = hal_data->CurrentChannel;
@@ -439,7 +436,7 @@ void rtl88eu_dm_txpower_tracking_callback_thermalmeter(struct adapter *adapt)
 
        dm_odm->RFCalibrateInfo.RegA24 = 0x090e1317;
 
-       thermal_val = (u8)phy_query_rf_reg(adapt, RF_PATH_A,
+       thermal_val = (u8)rtw_hal_read_rfreg(adapt, RF_PATH_A,
                                           RF_T_METER_88E, 0xfc00);
 
        if (is2t)
@@ -1232,12 +1229,12 @@ static void phy_lc_calibrate(struct adapter *adapt, bool is2t)
        if ((tmpreg&0x70) != 0) {
                /* 1. Read original RF mode */
                /* Path-A */
-               rf_a_mode = phy_query_rf_reg(adapt, RF_PATH_A, RF_AC,
+               rf_a_mode = rtw_hal_read_rfreg(adapt, RF_PATH_A, RF_AC,
                                             bMask12Bits);
 
                /* Path-B */
                if (is2t)
-                       rf_b_mode = phy_query_rf_reg(adapt, RF_PATH_B, RF_AC,
+                       rf_b_mode = rtw_hal_read_rfreg(adapt, RF_PATH_B, RF_AC,
                                                     bMask12Bits);
 
                /* 2. Set RF mode = standby mode */
@@ -1252,7 +1249,7 @@ static void phy_lc_calibrate(struct adapter *adapt, bool is2t)
        }
 
        /* 3. Read RF reg18 */
-       lc_cal = phy_query_rf_reg(adapt, RF_PATH_A, RF_CHNLBW, bMask12Bits);
+       lc_cal = rtw_hal_read_rfreg(adapt, RF_PATH_A, RF_CHNLBW, bMask12Bits);
 
        /* 4. Set LC calibration begin bit15 */
        phy_set_rf_reg(adapt, RF_PATH_A, RF_CHNLBW, bMask12Bits,
index 2422c0297a50bcb4bd8e34703a53569556f67221..18f69b83506f4ee0c7a32a63a89ee4bbe7144d3b 100644 (file)
@@ -126,7 +126,7 @@ exit:
 /* bitmap[28:31]= Rate Adaptive id */
 /* arg[0:4] = macid */
 /* arg[5] = Short GI */
-void rtl8188e_Add_RateATid(struct adapter *pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
+void rtw_hal_add_ra_tid(struct adapter *pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
 {
        struct hal_data_8188e *haldata = GET_HAL_DATA(pAdapter);
 
@@ -219,7 +219,7 @@ void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt)
 
 static void ConstructBeacon(struct adapter *adapt, u8 *pframe, u32 *pLength)
 {
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        u32 rate_len, pktlen;
        struct mlme_ext_priv *pmlmeext = &(adapt->mlmeextpriv);
@@ -227,9 +227,9 @@ static void ConstructBeacon(struct adapter *adapt, u8 *pframe, u32 *pLength)
        struct wlan_bssid_ex            *cur_network = &(pmlmeinfo->network);
        u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
 
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
 
        memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
@@ -239,8 +239,8 @@ static void ConstructBeacon(struct adapter *adapt, u8 *pframe, u32 *pLength)
        SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
        SetFrameSubType(pframe, WIFI_BEACON);
 
-       pframe += sizeof(struct rtw_ieee80211_hdr_3addr);
-       pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pframe += sizeof(struct ieee80211_hdr_3addr);
+       pktlen = sizeof(struct ieee80211_hdr_3addr);
 
        /* timestamp will be inserted by hardware */
        pframe += 8;
@@ -304,16 +304,16 @@ _ConstructBeacon:
 
 static void ConstructPSPoll(struct adapter *adapt, u8 *pframe, u32 *pLength)
 {
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        struct mlme_ext_priv *pmlmeext = &(adapt->mlmeextpriv);
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        __le16 *fctrl;
        struct wlan_bssid_ex *pnetwork = &(pmlmeinfo->network);
 
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
        /*  Frame control. */
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
        SetPwrMgt(fctrl);
        SetFrameSubType(pframe, WIFI_PSPOLL);
@@ -338,7 +338,7 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe,
        u8 bEosp,
        u8 bForcePowerSave)
 {
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        u32 pktlen;
        struct mlme_priv *pmlmepriv = &adapt->mlmepriv;
@@ -347,9 +347,9 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe,
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        struct wlan_bssid_ex *pnetwork = &(pmlmeinfo->network);
 
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &pwlanhdr->frame_ctl;
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
        if (bForcePowerSave)
                SetPwrMgt(fctrl);
@@ -378,19 +378,19 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe,
        SetSeqNum(pwlanhdr, 0);
 
        if (bQoS) {
-               struct rtw_ieee80211_hdr_3addr_qos *pwlanqoshdr;
+               struct ieee80211_qos_hdr *pwlanqoshdr;
 
                SetFrameSubType(pframe, WIFI_QOS_DATA_NULL);
 
-               pwlanqoshdr = (struct rtw_ieee80211_hdr_3addr_qos *)pframe;
-               SetPriority(&pwlanqoshdr->qc, AC);
-               SetEOSP(&pwlanqoshdr->qc, bEosp);
+               pwlanqoshdr = (struct ieee80211_qos_hdr *)pframe;
+               SetPriority(&pwlanqoshdr->qos_ctrl, AC);
+               SetEOSP(&pwlanqoshdr->qos_ctrl, bEosp);
 
-               pktlen = sizeof(struct rtw_ieee80211_hdr_3addr_qos);
+               pktlen = sizeof(struct ieee80211_qos_hdr);
        } else {
                SetFrameSubType(pframe, WIFI_DATA_NULL);
 
-               pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+               pktlen = sizeof(struct ieee80211_hdr_3addr);
        }
 
        *pLength = pktlen;
@@ -398,7 +398,7 @@ static void ConstructNullFunctionData(struct adapter *adapt, u8 *pframe,
 
 static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID)
 {
-       struct rtw_ieee80211_hdr        *pwlanhdr;
+       struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        u8 *mac, *bssid;
        u32 pktlen;
@@ -406,12 +406,12 @@ static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u
        struct mlme_ext_info    *pmlmeinfo = &(pmlmeext->mlmext_info);
        struct wlan_bssid_ex    *cur_network = &(pmlmeinfo->network);
 
-       pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
+       pwlanhdr = (struct ieee80211_hdr *)pframe;
 
        mac = myid(&(adapt->eeprompriv));
        bssid = cur_network->MacAddress;
 
-       fctrl = &(pwlanhdr->frame_ctl);
+       fctrl = &pwlanhdr->frame_control;
        *(fctrl) = 0;
        memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
        memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
@@ -420,7 +420,7 @@ static void ConstructProbeRsp(struct adapter *adapt, u8 *pframe, u32 *pLength, u
        SetSeqNum(pwlanhdr, 0);
        SetFrameSubType(fctrl, WIFI_PROBERSP);
 
-       pktlen = sizeof(struct rtw_ieee80211_hdr_3addr);
+       pktlen = sizeof(struct ieee80211_hdr_3addr);
        pframe += pktlen;
 
        if (cur_network->IELength > MAX_IE_SZ)
index 81f2931876f8b9f64cf53951a3d54b5bb3c98133..11e72463045666de958d46abe9bf27ea9187359e 100644 (file)
@@ -139,12 +139,10 @@ void rtl8188e_InitHalDm(struct adapter *Adapter)
        pdmpriv->DMFlag = DYNAMIC_FUNC_DISABLE;
        Update_ODM_ComInfo_88E(Adapter);
        ODM_DMInit(dm_odm);
-       Adapter->fix_rate = 0xFF;
 }
 
-void rtl8188e_HalDmWatchDog(struct adapter *Adapter)
+void rtw_hal_dm_watchdog(struct adapter *Adapter)
 {
-       bool fw_ps_awake = true;
        u8 hw_init_completed = false;
        struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
        struct mlme_priv *pmlmepriv = NULL;
@@ -155,13 +153,6 @@ void rtl8188e_HalDmWatchDog(struct adapter *Adapter)
        if (!hw_init_completed)
                goto skip_dm;
 
-       rtw_hal_get_hwreg(Adapter, HW_VAR_FWLPS_RF_ON, (u8 *)(&fw_ps_awake));
-
-       /*  Fw is under p2p powersaving mode, driver should stop dynamic mechanism. */
-       /*  modifed by thomas. 2011.06.11. */
-       if (Adapter->wdinfo.p2p_ps_mode)
-               fw_ps_awake = false;
-
        /* ODM */
        pmlmepriv = &Adapter->mlmepriv;
 
@@ -183,7 +174,7 @@ skip_dm:
        return;
 }
 
-void rtl8188e_init_dm_priv(struct adapter *Adapter)
+void rtw_hal_dm_init(struct adapter *Adapter)
 {
        struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
        struct dm_priv  *pdmpriv = &hal_data->dmpriv;
@@ -196,7 +187,7 @@ void rtl8188e_init_dm_priv(struct adapter *Adapter)
 
 /*  Add new function to reset the state of antenna diversity before link. */
 /*  Compare RSSI for deciding antenna */
-void AntDivCompare8188E(struct adapter *Adapter, struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src)
+void rtw_hal_antdiv_rssi_compared(struct adapter *Adapter, struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src)
 {
        struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
 
@@ -210,7 +201,7 @@ void AntDivCompare8188E(struct adapter *Adapter, struct wlan_bssid_ex *dst, stru
 }
 
 /*  Add new function to reset the state of antenna diversity before link. */
-u8 AntDivBeforeLink8188E(struct adapter *Adapter)
+u8 rtw_hal_antdiv_before_linked(struct adapter *Adapter)
 {
        struct hal_data_8188e *hal_data = GET_HAL_DATA(Adapter);
        struct odm_dm_struct *dm_odm = &hal_data->odmpriv;
index 0b444fd3e5506200e8f76e890282aa6e5767adc3..938d6f55857f24a9b1caa4cb05414814eb0437c9 100644 (file)
@@ -117,13 +117,13 @@ void rtl8188e_InitializeFirmwareVars(struct adapter *padapter)
        pHalData->LastHMEBoxNum = 0;
 }
 
-static void rtl8188e_free_hal_data(struct adapter *padapter)
+void rtw_hal_free_data(struct adapter *padapter)
 {
        kfree(padapter->HalData);
        padapter->HalData = NULL;
 }
 
-static void ReadChipVersion8188E(struct adapter *padapter)
+void rtw_hal_read_chip_version(struct adapter *padapter)
 {
        u32                             value32;
        struct HAL_VERSION              ChipVersion;
@@ -145,7 +145,7 @@ static void ReadChipVersion8188E(struct adapter *padapter)
        MSG_88E("RF_Type is %x!!\n", pHalData->rf_type);
 }
 
-static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet)
+void rtw_hal_set_odm_var(struct adapter *Adapter, enum hal_odm_variable eVariable, void *pValue1, bool bSet)
 {
        struct hal_data_8188e   *pHalData = GET_HAL_DATA(Adapter);
        struct odm_dm_struct *podmpriv = &pHalData->odmpriv;
@@ -175,7 +175,7 @@ static void rtl8188e_SetHalODMVar(struct adapter *Adapter, enum hal_odm_variable
        }
 }
 
-static void hal_notch_filter_8188e(struct adapter *adapter, bool enable)
+void rtw_hal_notch_filter(struct adapter *adapter, bool enable)
 {
        if (enable) {
                DBG_88E("Enable notch filter\n");
@@ -185,32 +185,6 @@ static void hal_notch_filter_8188e(struct adapter *adapter, bool enable)
                usb_write8(adapter, rOFDM0_RxDSP+1, usb_read8(adapter, rOFDM0_RxDSP+1) & ~BIT(1));
        }
 }
-void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc)
-{
-       pHalFunc->free_hal_data = &rtl8188e_free_hal_data;
-
-       pHalFunc->dm_init = &rtl8188e_init_dm_priv;
-
-       pHalFunc->read_chip_version = &ReadChipVersion8188E;
-
-       pHalFunc->set_bwmode_handler = &phy_set_bw_mode;
-       pHalFunc->set_channel_handler = &phy_sw_chnl;
-
-       pHalFunc->hal_dm_watchdog = &rtl8188e_HalDmWatchDog;
-
-       pHalFunc->Add_RateATid = &rtl8188e_Add_RateATid;
-
-       pHalFunc->AntDivBeforeLinkHandler = &AntDivBeforeLink8188E;
-       pHalFunc->AntDivCompareHandler = &AntDivCompare8188E;
-       pHalFunc->read_rfreg = &phy_query_rf_reg;
-
-       pHalFunc->sreset_init_value = &sreset_init_value;
-       pHalFunc->sreset_get_wifi_status  = &sreset_get_wifi_status;
-
-       pHalFunc->SetHalODMVarHandler = &rtl8188e_SetHalODMVar;
-
-       pHalFunc->hal_notch_filter = &hal_notch_filter_8188e;
-}
 
 /*  */
 /*  */
index d9e677ef8f84e58f962340284ce50e5b301db2e0..becf5b5eb192efb5ec1772ae73f253a44cadda2d 100644 (file)
@@ -66,7 +66,7 @@ exit:
 
 /*     Description: */
 /*             Initialize all LED_871x objects. */
-void rtl8188eu_InitSwLeds(struct adapter *padapter)
+void rtw_hal_sw_led_init(struct adapter *padapter)
 {
        struct led_priv *pledpriv = &(padapter->ledpriv);
        struct hal_data_8188e   *haldata = GET_HAL_DATA(padapter);
@@ -80,7 +80,7 @@ void rtl8188eu_InitSwLeds(struct adapter *padapter)
 
 /*     Description: */
 /*             DeInitialize all LED_819xUsb objects. */
-void rtl8188eu_DeInitSwLeds(struct adapter *padapter)
+void rtw_hal_sw_led_deinit(struct adapter *padapter)
 {
        struct led_priv *ledpriv = &(padapter->ledpriv);
 
index 255d6f215091d0f0ff6ce6db225ffa4f321350d6..d0495a16ff798eb8d225ac074c80983b35f2977b 100644 (file)
@@ -13,6 +13,7 @@
  *
  ******************************************************************************/
 #define _RTL8188EU_RECV_C_
+#include <linux/kmemleak.h>
 #include <osdep_service.h>
 #include <drv_types.h>
 #include <recv_osdep.h>
@@ -23,7 +24,7 @@
 
 #include <rtl8188e_hal.h>
 
-int    rtl8188eu_init_recv_priv(struct adapter *padapter)
+int    rtw_hal_init_recv_priv(struct adapter *padapter)
 {
        struct recv_priv        *precvpriv = &padapter->recvpriv;
        int     i, res = _SUCCESS;
@@ -72,6 +73,7 @@ int   rtl8188eu_init_recv_priv(struct adapter *padapter)
                                        MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ,
                                        GFP_KERNEL);
                        if (pskb) {
+                               kmemleak_not_leak(pskb);
                                pskb->dev = padapter->pnetdev;
                                tmpaddr = (size_t)pskb->data;
                                alignm = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
@@ -87,7 +89,7 @@ exit:
        return res;
 }
 
-void rtl8188eu_free_recv_priv(struct adapter *padapter)
+void rtw_hal_free_recv_priv(struct adapter *padapter)
 {
        int     i;
        struct recv_buf *precvbuf;
index ec21d8c82eba535464915c4ea3e8795b90dae75f..3e6f5ca5e5c22fbb65600582313545d3f3d3a3db 100644 (file)
@@ -21,7 +21,7 @@
 #include <usb_ops_linux.h>
 #include <rtl8188e_hal.h>
 
-s32    rtl8188eu_init_xmit_priv(struct adapter *adapt)
+s32 rtw_hal_init_xmit_priv(struct adapter *adapt)
 {
        struct xmit_priv        *pxmitpriv = &adapt->xmitpriv;
 
@@ -424,11 +424,12 @@ static u32 xmitframe_need_length(struct xmit_frame *pxmitframe)
        return len;
 }
 
-s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
+s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitpriv)
 {
        struct hal_data_8188e   *haldata = GET_HAL_DATA(adapt);
        struct xmit_frame *pxmitframe = NULL;
        struct xmit_frame *pfirstframe = NULL;
+       struct xmit_buf *pxmitbuf;
 
        /*  aggregate variable */
        struct hw_xmit *phwxmit;
@@ -450,12 +451,9 @@ s32 rtl8188eu_xmitframe_complete(struct adapter *adapt, struct xmit_priv *pxmitp
 
        RT_TRACE(_module_rtl8192c_xmit_c_, _drv_info_, ("+xmitframe_complete\n"));
 
-       /*  check xmitbuffer is ok */
-       if (pxmitbuf == NULL) {
-               pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
-               if (pxmitbuf == NULL)
-                       return false;
-       }
+       pxmitbuf = rtw_alloc_xmitbuf(pxmitpriv);
+       if (pxmitbuf == NULL)
+               return false;
 
        /* 3 1. pick up first frame */
        rtw_free_xmitframe(pxmitpriv, pxmitframe);
@@ -624,7 +622,7 @@ static s32 xmitframe_direct(struct adapter *adapt, struct xmit_frame *pxmitframe
  *     true    dump packet directly
  *     false   enqueue packet
  */
-static s32 pre_xmitframe(struct adapter *adapt, struct xmit_frame *pxmitframe)
+s32 rtw_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
 {
        s32 res;
        struct xmit_buf *pxmitbuf = NULL;
@@ -674,20 +672,10 @@ enqueue:
        return false;
 }
 
-s32 rtl8188eu_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
+s32 rtw_hal_mgnt_xmit(struct adapter *adapt, struct xmit_frame *pmgntframe)
 {
        struct xmit_priv *xmitpriv = &adapt->xmitpriv;
 
        rtl88eu_mon_xmit_hook(adapt->pmondev, pmgntframe, xmitpriv->frag_len);
        return rtw_dump_xframe(adapt, pmgntframe);
 }
-
-/*
- * Return
- *     true    dump packet directly ok
- *     false   temporary can't transmit packets to hardware
- */
-s32 rtl8188eu_hal_xmit(struct adapter *adapt, struct xmit_frame *pxmitframe)
-{
-       return pre_xmitframe(adapt, pxmitframe);
-}
index 363f3a34ddce48abb4ccac7c7a09edbe45107c48..cc27d641550b6baec0d10490b24fc84f807c5e5f 100644 (file)
@@ -69,7 +69,7 @@ static bool HalUsbSetQueuePipeMapping8188EUsb(struct adapter *adapt, u8 NumInPip
        return result;
 }
 
-static void rtl8188eu_interface_configure(struct adapter *adapt)
+void rtw_hal_chip_configure(struct adapter *adapt)
 {
        struct hal_data_8188e   *haldata        = GET_HAL_DATA(adapt);
        struct dvobj_priv       *pdvobjpriv = adapter_to_dvobj(adapt);
@@ -94,7 +94,7 @@ static void rtl8188eu_interface_configure(struct adapter *adapt)
                                pdvobjpriv->RtNumInPipes, pdvobjpriv->RtNumOutPipes);
 }
 
-static u32 rtl8188eu_InitPowerOn(struct adapter *adapt)
+u32 rtw_hal_power_on(struct adapter *adapt)
 {
        u16 value16;
        /*  HW Power on sequence */
@@ -672,7 +672,7 @@ enum rt_rf_power_state RfOnOffDetect(struct adapter *adapt)
        return rfpowerstate;
 }      /*  HalDetectPwrDownMode */
 
-static u32 rtl8188eu_hal_init(struct adapter *Adapter)
+u32 rtl8188eu_hal_init(struct adapter *Adapter)
 {
        u8 value8 = 0;
        u16  value16;
@@ -702,7 +702,7 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter)
        }
 
        HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_INIT_PW_ON);
-       status = rtl8188eu_InitPowerOn(Adapter);
+       status = rtw_hal_power_on(Adapter);
        if (status == _FAIL) {
                RT_TRACE(_module_hci_hal_init_c_, _drv_err_, ("Failed to init power on!\n"));
                goto exit;
@@ -810,8 +810,8 @@ static u32 rtl8188eu_hal_init(struct adapter *Adapter)
        usb_write16(Adapter, REG_PKT_BE_BK_LIFE_TIME, 0x0400);  /*  unit: 256us. 256ms */
 
        /* Keep RfRegChnlVal for later use. */
-       haldata->RfRegChnlVal[0] = phy_query_rf_reg(Adapter, (enum rf_radio_path)0, RF_CHNLBW, bRFRegOffsetMask);
-       haldata->RfRegChnlVal[1] = phy_query_rf_reg(Adapter, (enum rf_radio_path)1, RF_CHNLBW, bRFRegOffsetMask);
+       haldata->RfRegChnlVal[0] = rtw_hal_read_rfreg(Adapter, (enum rf_radio_path)0, RF_CHNLBW, bRFRegOffsetMask);
+       haldata->RfRegChnlVal[1] = rtw_hal_read_rfreg(Adapter, (enum rf_radio_path)1, RF_CHNLBW, bRFRegOffsetMask);
 
 HAL_INIT_PROFILE_TAG(HAL_INIT_STAGES_TURN_ON_BLOCK);
        _BBTurnOnBlock(Adapter);
@@ -972,7 +972,7 @@ static void rtl8192cu_hw_power_down(struct adapter *adapt)
        usb_write16(adapt, REG_APS_FSMCO, 0x8812);
 }
 
-static u32 rtl8188eu_hal_deinit(struct adapter *Adapter)
+u32 rtl8188eu_hal_deinit(struct adapter *Adapter)
 {
        DBG_88E("==> %s\n", __func__);
 
@@ -994,7 +994,7 @@ static u32 rtl8188eu_hal_deinit(struct adapter *Adapter)
        return _SUCCESS;
 }
 
-static unsigned int rtl8188eu_inirp_init(struct adapter *Adapter)
+u32 rtw_hal_inirp_init(struct adapter *Adapter)
 {
        u8 i;
        struct recv_buf *precvbuf;
@@ -1029,17 +1029,6 @@ exit:
        return status;
 }
 
-static unsigned int rtl8188eu_inirp_deinit(struct adapter *Adapter)
-{
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("\n ===> usb_rx_deinit\n"));
-
-       usb_read_port_cancel(Adapter);
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_, ("\n <=== usb_rx_deinit\n"));
-
-       return _SUCCESS;
-}
-
 /*  */
 /*  */
 /*     EEPROM/EFUSE Content Parsing */
@@ -1137,7 +1126,7 @@ static void _ReadRFType(struct adapter *Adapter)
        haldata->rf_chip = RF_6052;
 }
 
-static void _ReadAdapterInfo8188EU(struct adapter *Adapter)
+void rtw_hal_read_chip_info(struct adapter *Adapter)
 {
        unsigned long start = jiffies;
 
@@ -1276,7 +1265,7 @@ static void hw_var_set_bcn_func(struct adapter *Adapter, u8 variable, u8 *val)
                usb_write8(Adapter, bcn_ctrl_reg, usb_read8(Adapter, bcn_ctrl_reg)&(~(EN_BCN_FUNCTION | EN_TXBCN_RPT)));
 }
 
-static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
+void rtw_hal_set_hwreg(struct adapter *Adapter, u8 variable, u8 *val)
 {
        struct hal_data_8188e   *haldata = GET_HAL_DATA(Adapter);
        struct dm_priv  *pdmpriv = &haldata->dmpriv;
@@ -1426,17 +1415,8 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
                                /* enable update TSF */
                                usb_write8(Adapter, REG_BCN_CTRL, usb_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
                        }
-                       if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) {
-                               usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
-                       } else {
-                               if (Adapter->in_cta_test) {
-                                       u32 v = usb_read32(Adapter, REG_RCR);
-                                       v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/*  RCR_ADF */
-                                       usb_write32(Adapter, REG_RCR, v);
-                               } else {
-                                       usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
-                               }
-                       }
+
+                       usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
                }
                break;
        case HW_VAR_MLME_JOIN:
@@ -1449,13 +1429,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
                                /* enable to rx data frame.Accept all data frame */
                                usb_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
 
-                               if (Adapter->in_cta_test) {
-                                       u32 v = usb_read32(Adapter, REG_RCR);
-                                       v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);/*  RCR_ADF */
-                                       usb_write32(Adapter, REG_RCR, v);
-                               } else {
-                                       usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
-                               }
+                               usb_write32(Adapter, REG_RCR, usb_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
 
                                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
                                        RetryLimit = (haldata->CustomerID == RT_CID_CCX) ? 7 : 48;
@@ -1793,7 +1767,7 @@ static void SetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
        }
 }
 
-static void GetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
+void rtw_hal_get_hwreg(struct adapter *Adapter, u8 variable, u8 *val)
 {
        struct hal_data_8188e   *haldata = GET_HAL_DATA(Adapter);
        struct odm_dm_struct *podmpriv = &haldata->odmpriv;
@@ -1853,8 +1827,7 @@ static void GetHwReg8188EU(struct adapter *Adapter, u8 variable, u8 *val)
 /*     Description: */
 /*             Query setting of specified variable. */
 /*  */
-static u8
-GetHalDefVar8188EUsb(
+u8 rtw_hal_get_def_var(
                struct adapter *Adapter,
                enum hal_def_variable eVariable,
                void *pValue
@@ -1948,7 +1921,7 @@ GetHalDefVar8188EUsb(
        return bResult;
 }
 
-static void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level)
+void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level)
 {
        u8 init_rate = 0;
        u8 networkType, raid;
@@ -2011,7 +1984,7 @@ static void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_l
        psta->init_rate = init_rate;
 }
 
-static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt)
+void rtw_hal_bcn_related_reg_setting(struct adapter *adapt)
 {
        u32 value32;
        struct mlme_ext_priv    *pmlmeext = &adapt->mlmeextpriv;
@@ -2045,7 +2018,7 @@ static void SetBeaconRelatedRegisters8188EUsb(struct adapter *adapt)
        usb_write8(adapt, bcn_ctrl_reg, usb_read8(adapt, bcn_ctrl_reg) | BIT(1));
 }
 
-static void rtl8188eu_init_default_value(struct adapter *adapt)
+void rtw_hal_def_value_init(struct adapter *adapt)
 {
        struct hal_data_8188e *haldata;
        struct pwrctrl_priv *pwrctrlpriv;
@@ -2070,40 +2043,7 @@ static void rtl8188eu_init_default_value(struct adapter *adapt)
 
 void rtl8188eu_set_hal_ops(struct adapter *adapt)
 {
-       struct hal_ops  *halfunc = &adapt->HalFunc;
-
-
        adapt->HalData = kzalloc(sizeof(struct hal_data_8188e), GFP_KERNEL);
        if (!adapt->HalData)
                DBG_88E("cant not alloc memory for HAL DATA\n");
-
-       halfunc->hal_power_on = rtl8188eu_InitPowerOn;
-       halfunc->hal_init = &rtl8188eu_hal_init;
-       halfunc->hal_deinit = &rtl8188eu_hal_deinit;
-
-       halfunc->inirp_init = &rtl8188eu_inirp_init;
-       halfunc->inirp_deinit = &rtl8188eu_inirp_deinit;
-
-       halfunc->init_xmit_priv = &rtl8188eu_init_xmit_priv;
-
-       halfunc->init_recv_priv = &rtl8188eu_init_recv_priv;
-       halfunc->free_recv_priv = &rtl8188eu_free_recv_priv;
-       halfunc->InitSwLeds = &rtl8188eu_InitSwLeds;
-       halfunc->DeInitSwLeds = &rtl8188eu_DeInitSwLeds;
-
-       halfunc->init_default_value = &rtl8188eu_init_default_value;
-       halfunc->intf_chip_configure = &rtl8188eu_interface_configure;
-       halfunc->read_adapter_info = &_ReadAdapterInfo8188EU;
-
-       halfunc->SetHwRegHandler = &SetHwReg8188EU;
-       halfunc->GetHwRegHandler = &GetHwReg8188EU;
-       halfunc->GetHalDefVarHandler = &GetHalDefVar8188EUsb;
-
-       halfunc->UpdateRAMaskHandler = &UpdateHalRAMask8188EUsb;
-       halfunc->SetBeaconRelatedRegistersHandler = &SetBeaconRelatedRegisters8188EUsb;
-
-       halfunc->hal_xmit = &rtl8188eu_hal_xmit;
-       halfunc->mgnt_xmit = &rtl8188eu_mgnt_xmit;
-
-       rtl8188e_set_hal_ops(halfunc);
 }
index 8990748a19195c5677d0eac35a352379be5e0e33..0976a761b280893bb62f586da8486e269bae5ca4 100644 (file)
@@ -158,24 +158,6 @@ struct bb_reg_def {
                                 * Path A and B */
 };
 
-struct ant_sel_ofdm {
-       u32 r_tx_antenna:4;
-       u32 r_ant_l:4;
-       u32 r_ant_non_ht:4;
-       u32 r_ant_ht1:4;
-       u32 r_ant_ht2:4;
-       u32 r_ant_ht_s1:4;
-       u32 r_ant_non_ht_s1:4;
-       u32 OFDM_TXSC:2;
-       u32 reserved:2;
-};
-
-struct ant_sel_cck {
-       u8 r_cckrx_enable_2:2;
-       u8 r_cckrx_enable:2;
-       u8 r_ccktx_enable:4;
-};
-
 /*------------------------------Define structure----------------------------*/
 
 
diff --git a/drivers/staging/rtl8188eu/include/HalHWImg8188E_FW.h b/drivers/staging/rtl8188eu/include/HalHWImg8188E_FW.h
deleted file mode 100644 (file)
index dbb5524..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-******************************************************************************/
-
-#ifndef __INC_FW_8188E_HW_IMG_H
-#define __INC_FW_8188E_HW_IMG_H
-
-
-/******************************************************************************
-*                           FW_AP.TXT
-******************************************************************************/
-/******************************************************************************
-*                           FW_WoWLAN.TXT
-******************************************************************************/
-#define ArrayLength_8188E_FW_WoWLAN 15764
-extern const u8 Array_8188E_FW_WoWLAN[ArrayLength_8188E_FW_WoWLAN];
-
-#endif
index 55506a7da1a4bd22d47f12c84e9a5fc8e3b93b84..7af690ed2f0114025d548d3d4aa5ab7ed81e6927 100644 (file)
 #define SPEC_DEV_ID_ASSIGN_IFNAME      BIT(5)
 
 struct registry_priv {
-       u8      chip_version;
-       u8      rfintfs;
-       u8      lbkmode;
-       u8      hci;
        struct ndis_802_11_ssid ssid;
-       u8      network_mode;   /* infra, ad-hoc, auto */
        u8      channel;/* ad-hoc support requirement */
        u8      wireless_mode;/* A, B, G, auto */
-       u8      scan_mode;/* active, passive */
-       u8      radio_enable;
        u8      preamble;/* long, short, auto */
        u8      vrtl_carrier_sense;/* Enable, Disable, Auto */
        u8      vcs_type;/* RTS/CTS, CTS-to-self */
        u16     rts_thresh;
        u16     frag_thresh;
-       u8      adhoc_tx_pwr;
-       u8      soft_ap;
        u8      power_mgnt;
        u8      ips_mode;
        u8      smart_ps;
-       u8      long_retry_lmt;
-       u8      short_retry_lmt;
-       u16     busy_thresh;
-       u8      ack_policy;
        u8      mp_mode;
        u8      software_encrypt;
        u8      software_decrypt;
@@ -84,11 +71,6 @@ struct registry_priv {
          /* UAPSD */
        u8      wmm_enable;
        u8      uapsd_enable;
-       u8      uapsd_max_sp;
-       u8      uapsd_acbk_en;
-       u8      uapsd_acbe_en;
-       u8      uapsd_acvi_en;
-       u8      uapsd_acvo_en;
 
        struct wlan_bssid_ex    dev_network;
 
@@ -97,10 +79,6 @@ struct registry_priv {
        u8      ampdu_enable;/* for tx */
        u8      rx_stbc;
        u8      ampdu_amsdu;/* A-MPDU Supports A-MSDU is permitted */
-       u8      lowrate_two_xmit;
-
-       u8      rf_config;
-       u8      low_power;
 
        u8      wifi_spec;/*  !turbo_mode */
 
@@ -112,9 +90,6 @@ struct registry_priv {
 
        u8      usbss_enable;/* 0:disable,1:enable */
        u8      hwpdn_mode;/* 0:disable,1:enable,2:decide by EFUSE config */
-       u8      hwpwrp_detect;/* 0:disable,1:enable */
-
-       u8      hw_wps_pbc;/* 0:disable,1:enable */
 
        u8      max_roaming_times; /*  the max number driver will try */
 
@@ -149,16 +124,11 @@ struct dvobj_priv {
        u8      Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
 
 /*-------- below is for USB INTERFACE --------*/
-
-       u8      nr_endpoint;
        u8      ishighspeed;
        u8      RtNumInPipes;
        u8      RtNumOutPipes;
-       int     ep_num[5]; /* endpoint number */
        struct mutex  usb_vendor_req_mutex;
 
-       u8 *usb_vendor_req_buf;
-
        struct usb_interface *pusbintf;
        struct usb_device *pusbdev;
 };
@@ -184,14 +154,7 @@ struct adapter {
        struct  eeprom_priv eeprompriv;
        struct  led_priv        ledpriv;
 
-#ifdef CONFIG_88EU_AP_MODE
-       struct  hostapd_priv    *phostapdpriv;
-#endif
-
-       struct wifidirect_info  wdinfo;
-
        void *HalData;
-       struct hal_ops  HalFunc;
 
        s32     bDriverStopped;
        s32     bSurpriseRemoved;
@@ -199,20 +162,11 @@ struct adapter {
        u8      hw_init_completed;
 
        void *cmdThread;
-       void *evtThread;
        void (*intf_start)(struct adapter *adapter);
        void (*intf_stop)(struct adapter *adapter);
        struct  net_device *pnetdev;
        struct  net_device *pmondev;
 
-       /*  used by rtw_rereg_nd_name related function */
-       struct rereg_nd_name_data {
-               struct  net_device *old_pnetdev;
-               char old_ifname[IFNAMSIZ];
-               u8 old_ips_mode;
-               u8 old_bRegUseLed;
-       } rereg_nd_name_priv;
-
        int bup;
        struct net_device_stats stats;
        struct iw_statistics iwstats;
@@ -223,17 +177,8 @@ struct adapter {
        u8 bReadPortCancel;
        u8 bWritePortCancel;
        u8 bRxRSSIDisplay;
-       /* The driver will show up the desired channel number
-        * when this flag is 1. */
-       u8 bNotifyChannelChange;
 
        struct mutex hw_init_mutex;
-
-       spinlock_t br_ext_lock;
-
-       u8      fix_rate;
-
-       unsigned char     in_cta_test;
 };
 
 #define adapter_to_dvobj(adapter) (adapter->dvobj)
index eaf939bd4103c85dc4b7511199c5f1f13f8a4f41..0c0fa3551570b9d73ea43ebe2ef714e0b73c246d 100644 (file)
@@ -139,81 +139,6 @@ enum hal_intf_ps_func {
        HAL_MAX_ID,
 };
 
-struct hal_ops {
-       u32     (*hal_power_on)(struct adapter *padapter);
-       u32     (*hal_init)(struct adapter *padapter);
-       u32     (*hal_deinit)(struct adapter *padapter);
-
-       void    (*free_hal_data)(struct adapter *padapter);
-
-       u32     (*inirp_init)(struct adapter *padapter);
-       u32     (*inirp_deinit)(struct adapter *padapter);
-
-       s32     (*init_xmit_priv)(struct adapter *padapter);
-
-       s32     (*init_recv_priv)(struct adapter *padapter);
-       void    (*free_recv_priv)(struct adapter *padapter);
-
-       void    (*InitSwLeds)(struct adapter *padapter);
-       void    (*DeInitSwLeds)(struct adapter *padapter);
-
-       void    (*dm_init)(struct adapter *padapter);
-       void    (*read_chip_version)(struct adapter *padapter);
-
-       void    (*init_default_value)(struct adapter *padapter);
-
-       void    (*intf_chip_configure)(struct adapter *padapter);
-
-       void    (*read_adapter_info)(struct adapter *padapter);
-
-       s32     (*interrupt_handler)(struct adapter *padapter);
-
-       void    (*set_bwmode_handler)(struct adapter *padapter,
-                                     enum ht_channel_width Bandwidth,
-                                     u8 Offset);
-       void    (*set_channel_handler)(struct adapter *padapter, u8 channel);
-
-       void    (*hal_dm_watchdog)(struct adapter *padapter);
-
-       void    (*SetHwRegHandler)(struct adapter *padapter, u8 variable,
-                                  u8 *val);
-       void    (*GetHwRegHandler)(struct adapter *padapter, u8 variable,
-                                  u8 *val);
-
-       u8      (*GetHalDefVarHandler)(struct adapter *padapter,
-                                      enum hal_def_variable eVariable,
-                                      void *pValue);
-
-       void    (*SetHalODMVarHandler)(struct adapter *padapter,
-                                      enum hal_odm_variable eVariable,
-                                      void *pValue1, bool bSet);
-
-       void    (*UpdateRAMaskHandler)(struct adapter *padapter,
-                                      u32 mac_id, u8 rssi_level);
-       void    (*SetBeaconRelatedRegistersHandler)(struct adapter *padapter);
-
-       void    (*Add_RateATid)(struct adapter *adapter, u32 bitmap, u8 arg,
-                               u8 rssi_level);
-
-       u8      (*AntDivBeforeLinkHandler)(struct adapter *adapter);
-       void    (*AntDivCompareHandler)(struct adapter *adapter,
-                                       struct wlan_bssid_ex *dst,
-                                       struct wlan_bssid_ex *src);
-       s32     (*hal_xmit)(struct adapter *padapter,
-                           struct xmit_frame *pxmitframe);
-       s32 (*mgnt_xmit)(struct adapter *padapter,
-                        struct xmit_frame *pmgntframe);
-       u32     (*read_rfreg)(struct adapter *padapter,
-                             enum rf_radio_path eRFPath, u32 RegAddr,
-                             u32 BitMask);
-
-       void (*sreset_init_value)(struct adapter *padapter);
-       u8 (*sreset_get_wifi_status)(struct adapter *padapter);
-
-       void (*hal_notch_filter)(struct adapter *adapter, bool enable);
-       void (*hal_reset_security_engine)(struct adapter *adapter);
-};
-
 enum rt_eeprom_type {
        EEPROM_93C46,
        EEPROM_93C56,
@@ -235,6 +160,9 @@ enum hardware_type {
 
 #define is_boot_from_eeprom(adapter) (adapter->eeprompriv.EepromOrEfuse)
 
+void UpdateHalRAMask8188EUsb(struct adapter *adapt, u32 mac_id, u8 rssi_level);
+u32 rtl8188eu_hal_deinit(struct adapter *Adapter);
+u32 rtl8188eu_hal_init(struct adapter *Adapter);
 void rtw_hal_def_value_init(struct adapter *padapter);
 
 void   rtw_hal_free_data(struct adapter *padapter);
@@ -262,7 +190,7 @@ void rtw_hal_set_odm_var(struct adapter *padapter,
                         bool bSet);
 
 u32    rtw_hal_inirp_init(struct adapter *padapter);
-u32    rtw_hal_inirp_deinit(struct adapter *padapter);
+void   rtw_hal_inirp_deinit(struct adapter *padapter);
 
 s32    rtw_hal_xmit(struct adapter *padapter, struct xmit_frame *pxmitframe);
 s32    rtw_hal_mgnt_xmit(struct adapter *padapter,
@@ -270,7 +198,7 @@ s32 rtw_hal_mgnt_xmit(struct adapter *padapter,
 
 s32    rtw_hal_init_xmit_priv(struct adapter *padapter);
 
-s32    rtw_hal_init_recv_priv(struct adapter *padapter);
+int    rtw_hal_init_recv_priv(struct adapter *padapter);
 void   rtw_hal_free_recv_priv(struct adapter *padapter);
 
 void rtw_hal_update_ra_mask(struct adapter *padapter, u32 mac_id, u8 level);
@@ -296,7 +224,6 @@ void        rtw_hal_antdiv_rssi_compared(struct adapter *padapter,
 void rtw_hal_sreset_init(struct adapter *padapter);
 
 void rtw_hal_notch_filter(struct adapter *adapter, bool enable);
-void rtw_hal_reset_security_engine(struct adapter *adapter);
 
 void indicate_wx_scan_complete_event(struct adapter *padapter);
 u8 rtw_do_join(struct adapter *padapter);
index d8284c84f09c8d3e942d538524f78e835028c825..fc58621368c1550a88859d051bd40db46129c567 100644 (file)
@@ -239,7 +239,7 @@ struct ieee_param {
                        u16 capability;
                        int flags;
                        u8 tx_supp_rates[16];
-                       struct rtw_ieee80211_ht_cap ht_cap;
+                       struct ieee80211_ht_cap ht_cap;
                } add_sta;
                struct {
                        u8      reserved[2];/* for set max_num_sta */
@@ -264,7 +264,7 @@ struct sta_data {
        u32 sta_set;
        u8 tx_supp_rates[16];
        u32 tx_supp_rates_len;
-       struct rtw_ieee80211_ht_cap ht_cap;
+       struct ieee80211_ht_cap ht_cap;
        u64     rx_pkts;
        u64     rx_bytes;
        u64     rx_drops;
@@ -291,62 +291,6 @@ struct sta_data {
 /* this is stolen from ipw2200 driver */
 #define IEEE_IBSS_MAC_HASH_SIZE 31
 
-struct ieee_ibss_seq {
-       u8 mac[ETH_ALEN];
-       u16 seq_num;
-       u16 frag_num;
-       unsigned long packet_time;
-       struct list_head list;
-};
-
-struct rtw_ieee80211_hdr {
-       __le16 frame_ctl;
-       __le16 duration_id;
-       u8 addr1[ETH_ALEN];
-       u8 addr2[ETH_ALEN];
-       u8 addr3[ETH_ALEN];
-       u16 seq_ctl;
-       u8 addr4[ETH_ALEN];
-} __packed;
-
-struct rtw_ieee80211_hdr_3addr {
-       __le16 frame_ctl;
-       __le16 duration_id;
-       u8 addr1[ETH_ALEN];
-       u8 addr2[ETH_ALEN];
-       u8 addr3[ETH_ALEN];
-       u16 seq_ctl;
-} __packed;
-
-struct rtw_ieee80211_hdr_qos {
-       __le16 frame_ctl;
-       __le16 duration_id;
-       u8 addr1[ETH_ALEN];
-       u8 addr2[ETH_ALEN];
-       u8 addr3[ETH_ALEN];
-       u16 seq_ctl;
-       u8 addr4[ETH_ALEN];
-       u16     qc;
-}  __packed;
-
-struct rtw_ieee80211_hdr_3addr_qos {
-       __le16 frame_ctl;
-       __le16 duration_id;
-       u8 addr1[ETH_ALEN];
-       u8 addr2[ETH_ALEN];
-       u8 addr3[ETH_ALEN];
-       u16 seq_ctl;
-       u16     qc;
-}  __packed;
-
-struct eapol {
-       u8 snap[6];
-       u16 ethertype;
-       u8 version;
-       u8 type;
-       u16 length;
-} __packed;
-
 enum eap_type {
        EAP_PACKET = 0,
        EAPOL_START,
@@ -552,83 +496,12 @@ struct ieee80211_snap_hdr {
 #define IEEE80211_NUM_CCK_RATES                4
 #define IEEE80211_OFDM_SHIFT_MASK_A    4
 
-/* NOTE: This data is for statistical purposes; not all hardware provides this
- *       information for frames received.  Not setting these will not cause
- *       any adverse affects. */
-struct ieee80211_rx_stats {
-       /* u32 mac_time[2]; */
-       s8 rssi;
-       u8 signal;
-       u8 noise;
-       u8 received_channel;
-       u16 rate; /* in 100 kbps */
-       /* u8 control; */
-       u8 mask;
-       u8 freq;
-       u16 len;
-};
-
 /* IEEE 802.11 requires that STA supports concurrent reception of at least
  * three fragmented frames. This define can be increased to support more
  * concurrent frames, but it should be noted that each entry can consume about
  * 2 kB of RAM and increasing cache size will slow down frame reassembly. */
 #define IEEE80211_FRAG_CACHE_LEN 4
 
-struct ieee80211_frag_entry {
-       u32 first_frag_time;
-       uint seq;
-       uint last_frag;
-       uint qos;   /* jackson */
-       uint tid;       /* jackson */
-       struct sk_buff *skb;
-       u8 src_addr[ETH_ALEN];
-       u8 dst_addr[ETH_ALEN];
-};
-
-struct ieee80211_stats {
-       uint tx_unicast_frames;
-       uint tx_multicast_frames;
-       uint tx_fragments;
-       uint tx_unicast_octets;
-       uint tx_multicast_octets;
-       uint tx_deferred_transmissions;
-       uint tx_single_retry_frames;
-       uint tx_multiple_retry_frames;
-       uint tx_retry_limit_exceeded;
-       uint tx_discards;
-       uint rx_unicast_frames;
-       uint rx_multicast_frames;
-       uint rx_fragments;
-       uint rx_unicast_octets;
-       uint rx_multicast_octets;
-       uint rx_fcs_errors;
-       uint rx_discards_no_buffer;
-       uint tx_discards_wrong_sa;
-       uint rx_discards_undecryptable;
-       uint rx_message_in_msg_fragments;
-       uint rx_message_in_bad_msg_fragments;
-};
-
-struct ieee80211_softmac_stats {
-       uint rx_ass_ok;
-       uint rx_ass_err;
-       uint rx_probe_rq;
-       uint tx_probe_rs;
-       uint tx_beacons;
-       uint rx_auth_rq;
-       uint rx_auth_rs_ok;
-       uint rx_auth_rs_err;
-       uint tx_auth_rq;
-       uint no_auth_rs;
-       uint no_ass_rs;
-       uint tx_ass_rq;
-       uint rx_ass_rq;
-       uint tx_probe_rq;
-       uint reassoc;
-       uint swtxstop;
-       uint swtxawake;
-};
-
 #define SEC_KEY_1      (1<<0)
 #define SEC_KEY_2      (1<<1)
 #define SEC_KEY_3      (1<<2)
@@ -648,42 +521,6 @@ struct ieee80211_softmac_stats {
 #define WEP_KEYS 4
 #define WEP_KEY_LEN 13
 
-struct ieee80211_security {
-       u16 active_key:2,
-       enabled:1,
-       auth_mode:2,
-       auth_algo:4,
-       unicast_uses_group:1;
-       u8 key_sizes[WEP_KEYS];
-       u8 keys[WEP_KEYS][WEP_KEY_LEN];
-       u8 level;
-       u16 flags;
-} __packed;
-
-/*
-
- 802.11 data frame from AP
-
-      ,-------------------------------------------------------------------.
-Bytes |  2   |  2   |    6    |    6    |    6    |  2   | 0..2312 |   4  |
-      |------|------|---------|---------|---------|------|---------|------|
-Desc. | ctrl | dura |  DA/RA  |   TA    |    SA   | Sequ |  frame  |  fcs |
-      |      | tion | (BSSID) |         |       | ence |  data   |      |
-      `-------------------------------------------------------------------'
-
-Total: 28-2340 bytes
-
-*/
-
-struct ieee80211_header_data {
-       u16 frame_ctl;
-       u16 duration_id;
-       u8 addr1[6];
-       u8 addr2[6];
-       u8 addr3[6];
-       u16 seq_ctrl;
-};
-
 #define BEACON_PROBE_SSID_ID_POSITION 12
 
 /* Management Frame Information Element Types */
@@ -700,81 +537,9 @@ struct ieee80211_header_data {
 #define MFIE_TYPE_RATES_EX     50
 #define MFIE_TYPE_GENERIC      221
 
-struct ieee80211_info_element_hdr {
-       u8 id;
-       u8 len;
-} __packed;
-
-struct ieee80211_info_element {
-       u8 id;
-       u8 len;
-       u8 data[0];
-} __packed;
-
-/*
- * These are the data types that can make up management packets
- *
-       u16 auth_algorithm;
-       u16 auth_sequence;
-       u16 beacon_interval;
-       u16 capability;
-       u8 current_ap[ETH_ALEN];
-       u16 listen_interval;
-       struct {
-               u16 association_id:14, reserved:2;
-       } __packed;
-       u32 time_stamp[2];
-       u16 reason;
-       u16 status;
-*/
-
 #define IEEE80211_DEFAULT_TX_ESSID "Penguin"
 #define IEEE80211_DEFAULT_BASIC_RATE 10
 
-struct ieee80211_authentication {
-       struct ieee80211_header_data header;
-       u16 algorithm;
-       u16 transaction;
-       u16 status;
-       /* struct ieee80211_info_element_hdr info_element; */
-} __packed;
-
-struct ieee80211_probe_response {
-       struct ieee80211_header_data header;
-       u32 time_stamp[2];
-       u16 beacon_interval;
-       u16 capability;
-       struct ieee80211_info_element info_element;
-} __packed;
-
-struct ieee80211_probe_request {
-       struct ieee80211_header_data header;
-} __packed;
-
-struct ieee80211_assoc_request_frame {
-       struct rtw_ieee80211_hdr_3addr header;
-       u16 capability;
-       u16 listen_interval;
-       struct ieee80211_info_element_hdr info_element;
-} __packed;
-
-struct ieee80211_assoc_response_frame {
-       struct rtw_ieee80211_hdr_3addr header;
-       u16 capability;
-       u16 status;
-       u16 aid;
-} __packed;
-
-struct ieee80211_txb {
-       u8 nr_frags;
-       u8 encrypted;
-       u16 reserved;
-       u16 frag_size;
-       u16 payload_size;
-       struct sk_buff *fragments[0];
-};
-
-
 /* SWEEP TABLE ENTRIES NUMBER*/
 #define MAX_SWEEP_TAB_ENTRIES            42
 #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
@@ -872,11 +637,6 @@ static inline int is_broadcast_mac_addr(const u8 *addr)
 #define CFG_IEEE80211_RESERVE_FCS (1<<0)
 #define CFG_IEEE80211_COMPUTE_FCS (1<<1)
 
-struct tx_pending {
-       int frag;
-       struct ieee80211_txb *txb;
-};
-
 #define MAXTID 16
 
 #define IEEE_A     (1<<0)
@@ -1096,20 +856,8 @@ enum secondary_ch_offset {
        SCA = 1, /* secondary channel above */
        SCB = 3,  /* secondary channel below */
 };
-u8 secondary_ch_offset_to_hal_ch_offset(u8 ch_offset);
-u8 hal_ch_offset_to_secondary_ch_offset(u8 ch_offset);
-u8 *rtw_set_ie_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode,
-                        u8 new_ch, u8 ch_switch_cnt);
-u8 *rtw_set_ie_secondary_ch_offset(u8 *buf, u32 *buf_len,
-                                  u8 secondary_ch_offset);
-u8 *rtw_set_ie_mesh_ch_switch_parm(u8 *buf, u32 *buf_len, u8 ttl,
-                                  u8 flags, u16 reason, u16 precedence);
 
 u8 *rtw_get_ie(u8 *pbuf, int index, int *len, int limit);
-u8 *rtw_get_ie_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui,
-                 u8 oui_len, u8 *ie, uint *ielen);
-int rtw_ies_remove_ie(u8 *ies, uint *ies_len, uint offset,
-                     u8 eid, u8 *oui, u8 oui_len);
 
 void rtw_set_supported_rate(u8 *SupportedRates, uint mode);
 
@@ -1133,19 +881,6 @@ u8 *rtw_get_wps_attr(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
 u8 *rtw_get_wps_attr_content(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
                             u8 *buf_content, uint *len_content);
 
-/**
- * for_each_ie - iterate over continuous IEs
- * @ie:
- * @buf:
- * @buf_len:
- */
-#define for_each_ie(ie, buf, buf_len) \
-       for (ie = (void *)buf; (((u8 *)ie) - ((u8 *)buf) + 1) < buf_len;        \
-               ie = (void *)(((u8 *)ie) + *(((u8 *)ie)+1) + 2))
-
-void dump_ies(u8 *buf, u32 buf_len);
-void dump_wps_ie(u8 *ie, u32 ie_len);
-
 uint   rtw_get_rateset_len(u8  *rateset);
 
 struct registry_priv;
@@ -1167,8 +902,4 @@ void rtw_macaddr_cfg(u8 *mac_addr);
 u16 rtw_mcs_rate(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
                 unsigned char *MCS_rate);
 
-int rtw_action_frame_parse(const u8 *frame, u32 frame_len, u8 *category,
-                          u8 *action);
-const char *action_public_str(u8 action);
-
 #endif /* IEEE80211_H */
index dbebf17f36d392368b82d3b656e75fd832cb7ce6..21fb4225e42da7c8e15fd722e1b949c4a970cd17 100644 (file)
@@ -315,22 +315,6 @@ enum odm_ability {
        ODM_PSD2AFH             = 0x00000800
 };
 
-/*  2011/20/20 MH For MP driver RT_WLAN_STA =  struct sta_info */
-/*  Please declare below ODM relative info in your STA info structure. */
-
-struct odm_sta_info {
-       /*  Driver Write */
-       bool    bUsed;          /*  record the sta status link or not? */
-       u8      IOTPeer;        /*  Enum value. HT_IOT_PEER_E */
-
-       /*  ODM Write */
-       /* 1 PHY_STATUS_INFO */
-       u8      RSSI_Path[4];           /*  */
-       u8      RSSI_Ave;
-       u8      RXEVM[4];
-       u8      RXSNR[4];
-};
-
 /*  2011/10/20 MH Define Common info enum for all team. */
 
 enum odm_common_info_def {
index 54fca79827e335682914013edd3bcbf8e1a850d0..dbd7dc4f87dd4dbbf3cf80dbc3f7fff8a95ba544 100644 (file)
@@ -34,7 +34,6 @@ int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
 struct net_device *rtw_init_netdev(struct adapter *padapter);
 u16 rtw_recv_select_queue(struct sk_buff *skb);
-void rtw_proc_remove_one(struct net_device *dev);
 
 int pm_netdev_open(struct net_device *pnetdev, u8 bnormal);
 void rtw_ips_dev_unload(struct adapter *padapter);
index 5475956c5ee5ce96a001695323046503bcdf4448..9047b6dec9ed013795079bb993bf31f72ab3b896 100644 (file)
@@ -35,7 +35,7 @@
 #include <asm/byteorder.h>
 #include <linux/atomic.h>
 #include <linux/io.h>
-#include <linux/semaphore.h>
+#include <linux/mutex.h>
 #include <linux/sem.h>
 #include <linux/sched.h>
 #include <linux/etherdevice.h>
@@ -44,7 +44,6 @@
 #include <linux/if_arp.h>
 #include <linux/rtnetlink.h>
 #include <linux/delay.h>
-#include <linux/proc_fs.h>     /*  Necessary because we use the proc fs */
 #include <linux/interrupt.h>   /*  for struct tasklet_struct */
 #include <linux/ip.h>
 #include <linux/kthread.h>
@@ -78,16 +77,12 @@ u8 *_rtw_malloc(u32 sz);
 
 void *rtw_malloc2d(int h, int w, int size);
 
-u32  _rtw_down_sema(struct semaphore *sema);
-
 void _rtw_init_queue(struct __queue *pqueue);
 
 struct rtw_netdev_priv_indicator {
        void *priv;
-       u32 sizeof_priv;
 };
-struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
-                                                   void *old_priv);
+struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv);
 
 #define rtw_netdev_priv(netdev)                                        \
        (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
index 9a9ab82a8ed3611e505828073237f188e62425df..cd387e998574ebad7c5b6655ec51c5261f8f5821 100644 (file)
@@ -11,17 +11,13 @@ bool rtl88eu_phy_bb_config(struct adapter *adapt);
 
 u32 phy_query_bb_reg(struct adapter *adapt, u32 regaddr, u32 bitmask);
 void phy_set_bb_reg(struct adapter *adapt, u32 regaddr, u32 bitmask, u32 data);
-u32 phy_query_rf_reg(struct adapter *adapt, enum rf_radio_path rf_path,
+u32 rtw_hal_read_rfreg(struct adapter *adapt, enum rf_radio_path rf_path,
                     u32 reg_addr, u32 bit_mask);
 void phy_set_rf_reg(struct adapter *adapt, enum rf_radio_path rf_path,
                    u32 reg_addr, u32 bit_mask, u32 data);
 
 void phy_set_tx_power_level(struct adapter *adapt, u8 channel);
 
-void phy_set_bw_mode(struct adapter *adapt, enum ht_channel_width bandwidth,
-                    unsigned char offset);
-void phy_sw_chnl(struct adapter *adapt, u8 channel);
-
 void rtl88eu_dm_txpower_track_adjust(struct odm_dm_struct *dm_odm,
                                     u8 type, u8 *dir, u32 *out_write);
 
index cad31587c30a418f505538ad2e23f52bad8f324c..7550d58f6b5b23cbbd51b75cc02aed2b050388a4 100644 (file)
@@ -26,13 +26,9 @@ void _rtw_free_recv_priv(struct recv_priv *precvpriv);
 s32  rtw_recv_entry(struct recv_frame *precv_frame);
 int rtw_recv_indicatepkt(struct adapter *adapter,
                         struct recv_frame *recv_frame);
-void rtw_recv_returnpacket(struct  net_device *cnxt, struct sk_buff *retpkt);
 
 void rtw_handle_tkip_mic_err(struct adapter *padapter, u8 bgroup);
 
-int rtw_init_recv_priv(struct recv_priv *precvpriv, struct adapter *padapter);
-void rtw_free_recv_priv(struct recv_priv *precvpriv);
-
 void rtw_os_recv_resource_alloc(struct recv_frame *recvfr);
 
 int rtw_os_recvbuf_resource_alloc(struct adapter *adapt, struct recv_buf *buf);
index 4d7d804658c2ba0c75a851550c679c417ae1fcdd..042b4ec656c889446915b2bd3c57e18d66d3337c 100644 (file)
@@ -49,12 +49,6 @@ enum RTL8188E_H2C_CMD_ID {
         H2C_RESET_TSF                  = 0xc0,
 };
 
-struct cmd_msg_parm {
-       u8 eid; /* element id */
-       u8 sz; /*  sz */
-       u8 buf[6];
-};
-
 enum {
        PWRS
 };
@@ -67,15 +61,6 @@ struct setpwrmode_parm {
        u8 PwrState;/* AllON(0x0c),RFON(0x04),RFOFF(0x00) */
 };
 
-struct H2C_SS_RFOFF_PARAM {
-       u8 ROFOn; /*  1: on, 0:off */
-       u16 gpio_period; /*  unit: 1024 us */
-} __packed;
-
-struct joinbssrpt_parm {
-       u8 OpMode;      /*  RT_MEDIA_STATUS */
-};
-
 struct rsvdpage_loc {
        u8 LocProbeRsp;
        u8 LocPsPoll;
@@ -84,26 +69,9 @@ struct rsvdpage_loc {
        u8 LocBTQosNull;
 };
 
-struct P2P_PS_Offload_t {
-       u8 Offload_En:1;
-       u8 role:1; /*  1: Owner, 0: Client */
-       u8 CTWindow_En:1;
-       u8 NoA0_En:1;
-       u8 NoA1_En:1;
-       u8 AllStaSleep:1; /*  Only valid in Owner */
-       u8 discovery:1;
-       u8 rsvd:1;
-};
-
-struct P2P_PS_CTWPeriod_t {
-       u8 CTWPeriod;   /* TU */
-};
-
 /*  host message to firmware cmd */
 void rtl8188e_set_FwPwrMode_cmd(struct adapter *padapter, u8 Mode);
 void rtl8188e_set_FwJoinBssReport_cmd(struct adapter *padapter, u8 mstatus);
-void rtl8188e_Add_RateATid(struct adapter *padapter, u32 bitmap, u8 arg,
-                          u8 rssi_level);
 
 void rtl8188e_set_FwMediaStatus_cmd(struct adapter *adapt, __le16 mstatus_rpt);
 
index 4190112a50bf6997febeb1b6b2d6a1377394986b..c0ffd98d7617b60fb629573d462010dcff870a52 100644 (file)
@@ -45,12 +45,9 @@ struct       dm_priv {
        u8      PowerIndex_backup[6];
 };
 
-void rtl8188e_init_dm_priv(struct adapter *adapt);
 void rtl8188e_InitHalDm(struct adapter *adapt);
-void rtl8188e_HalDmWatchDog(struct adapter *adapt);
 
 void AntDivCompare8188E(struct adapter *adapt, struct wlan_bssid_ex *dst,
                        struct wlan_bssid_ex *src);
-u8 AntDivBeforeLink8188E(struct adapter *adapt);
 
 #endif
index 9dd5c293a54bc53666345b147edfed448cbddc83..418bdb981b1cfc13f5836c030a7bfe7018c801be 100644 (file)
@@ -385,8 +385,6 @@ void Hal_EfuseParseBoardType88E(struct adapter *pAdapter, u8 *hwinfo,
 void Hal_ReadPowerSavingMode88E(struct adapter *pAdapter, u8 *hwinfo,
                                bool AutoLoadFail);
 
-void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc);
-
 /*  register */
 
 void rtl8188e_start_thread(struct adapter *padapter);
index fca6d8c81e907a4f04988cd4eaf90cd6cfddaced..d1ad6aa8c1e0060c7ac29adfb42e7cf1ac56e8fd 100644 (file)
@@ -22,8 +22,6 @@
 /*  */
 /*  Interface to manipulate LED objects. */
 /*  */
-void rtl8188eu_InitSwLeds(struct adapter *padapter);
-void rtl8188eu_DeInitSwLeds(struct adapter *padapter);
 void SwLedOn(struct adapter *padapter, struct LED_871x *pLed);
 void SwLedOff(struct adapter *padapter, struct LED_871x *pLed);
 
index 54048bc826e5ab1eb5c421800a003a192d9f91a5..516c6d767c1ba5f3738babd75b06baee76286d5c 100644 (file)
@@ -51,8 +51,6 @@ enum rx_packet_type {
 };
 
 #define INTERRUPT_MSG_FORMAT_LEN 60
-s32 rtl8188eu_init_recv_priv(struct adapter *padapter);
-void rtl8188eu_free_recv_priv(struct adapter *padapter);
 void rtl8188eu_recv_hdl(struct adapter *padapter, struct recv_buf *precvbuf);
 void rtl8188eu_recv_tasklet(void *priv);
 void rtl8188e_query_rx_phy_status(struct recv_frame *fr, struct phy_stat *phy);
index 65a63df2077f38df4bdfae09669583fde4023aef..66205b78272129f1de71c9d09c175b5d5dd6690d 100644 (file)
@@ -154,14 +154,11 @@ struct txrpt_ccx_88e {
 void rtl8188e_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc,
                               u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);
 s32 rtl8188eu_init_xmit_priv(struct adapter *padapter);
-s32 rtl8188eu_hal_xmit(struct adapter *padapter, struct xmit_frame *frame);
-s32 rtl8188eu_mgnt_xmit(struct adapter *padapter, struct xmit_frame *frame);
 s32 rtl8188eu_xmit_buf_handler(struct adapter *padapter);
 #define hal_xmit_handler rtl8188eu_xmit_buf_handler
 void rtl8188eu_xmit_tasklet(void *priv);
 s32 rtl8188eu_xmitframe_complete(struct adapter *padapter,
-                                struct xmit_priv *pxmitpriv,
-                                struct xmit_buf *pxmitbuf);
+                                struct xmit_priv *pxmitpriv);
 
 void dump_txrpt_ccx_88e(void *buf);
 void handle_txrpt_ccx_88e(struct adapter *adapter, u8 *buf);
index b820684bc3fe2295a54aa267603644d3c27212d0..e8dd6d4407aa153603b5e16ef09c430899d80ff0 100644 (file)
@@ -50,7 +50,6 @@ void ap_sta_info_defer_update(struct adapter *padapter, struct sta_info *psta);
 u8 ap_free_sta(struct adapter *padapter, struct sta_info *psta,
               bool active, u16 reason);
 int rtw_sta_flush(struct adapter *padapter);
-int rtw_ap_inform_ch_switch(struct adapter *padapter, u8 new_ch, u8 ch_offset);
 void start_ap_mode(struct adapter *padapter);
 void stop_ap_mode(struct adapter *padapter);
 #endif /* end of CONFIG_88EU_AP_MODE */
index 08ca59217cb716bbf908e02c2a0b2d12a8c2f5e8..e8e75f34d9b8f30658794623ed7359250c8e392f 100644 (file)
@@ -39,8 +39,8 @@ struct cmd_obj {
 };
 
 struct cmd_priv {
-       struct semaphore cmd_queue_sema;
-       struct semaphore terminate_cmdthread_sema;
+       struct completion cmd_queue_comp;
+       struct completion terminate_cmdthread_comp;
        struct __queue cmd_queue;
        u8 cmdthd_running;
        struct adapter *padapter;
@@ -209,34 +209,6 @@ struct set_assocsta_rsp {
        u8      rsvd[3];
 };
 
-/*
-       Caller Ad-Hoc/AP
-
-       Command mode
-
-       This is to force fw to del an sta_data entry per driver's request
-
-       FW will invalidate the cam entry associated with it.
-
-*/
-struct del_assocsta_parm {
-       u8      addr[ETH_ALEN];
-};
-
-/*
-Caller Mode: AP/Ad-HoC(M)
-
-Notes: To notify fw that given staid has changed its power state
-
-Command Mode
-
-*/
-struct setstapwrstate_parm {
-       u8      staid;
-       u8      status;
-       u8      hwaddr[6];
-};
-
 /*
        Notes: This command is used for H2C/C2H loopback testing
 
index 7ed4cada7efaf13c207aef9524d2d1cb82f16417..95590a1a7b1b92ca9b2f495e2b6877acc70cd0e1 100644 (file)
@@ -129,133 +129,12 @@ int proc_get_read_reg(char *page, char **start,
 int proc_set_read_reg(struct file *file, const char __user *buffer,
                      unsigned long count, void *data);
 
-int proc_get_fwstate(char *page, char **start,
-                    off_t offset, int count,
-                    int *eof, void *data);
-int proc_get_sec_info(char *page, char **start,
-                     off_t offset, int count,
-                     int *eof, void *data);
-int proc_get_mlmext_state(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_qos_option(char *page, char **start,
-                       off_t offset, int count,
-                       int *eof, void *data);
-int proc_get_ht_option(char *page, char **start,
-                      off_t offset, int count,
-                      int *eof, void *data);
-int proc_get_rf_info(char *page, char **start,
-                    off_t offset, int count,
-                    int *eof, void *data);
-int proc_get_ap_info(char *page, char **start,
-                    off_t offset, int count,
-                    int *eof, void *data);
-
 int proc_get_adapter_state(char *page, char **start,
                           off_t offset, int count,
                           int *eof, void *data);
 
-int proc_get_trx_info(char *page, char **start,
-                     off_t offset, int count,
-                     int *eof, void *data);
-
-int proc_get_mac_reg_dump1(char *page, char **start,
-                          off_t offset, int count,
-                          int *eof, void *data);
-
-int proc_get_mac_reg_dump2(char *page, char **start,
-                          off_t offset, int count,
-                          int *eof, void *data);
-
-int proc_get_mac_reg_dump3(char *page, char **start,
-                          off_t offset, int count,
-                          int *eof, void *data);
-
-int proc_get_bb_reg_dump1(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_bb_reg_dump2(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_bb_reg_dump3(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_rf_reg_dump1(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_rf_reg_dump2(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_rf_reg_dump3(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_get_rf_reg_dump4(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-#ifdef CONFIG_88EU_AP_MODE
-
-int proc_get_all_sta_info(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-#endif
-
 int proc_get_best_channel(char *page, char **start,
                          off_t offset, int count,
                          int *eof, void *data);
 
-int proc_get_rx_signal(char *page, char **start,
-                      off_t offset, int count,
-                      int *eof, void *data);
-
-int proc_set_rx_signal(struct file *file, const char __user *buffer,
-                      unsigned long count, void *data);
-
-int proc_get_ht_enable(char *page, char **start,
-                      off_t offset, int count,
-                      int *eof, void *data);
-
-int proc_set_ht_enable(struct file *file, const char __user *buffer,
-                      unsigned long count, void *data);
-
-int proc_get_cbw40_enable(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_set_cbw40_enable(struct file *file, const char __user *buffer,
-                         unsigned long count, void *data);
-
-int proc_get_ampdu_enable(char *page, char **start,
-                         off_t offset, int count,
-                         int *eof, void *data);
-
-int proc_set_ampdu_enable(struct file *file, const char __user *buffer,
-                         unsigned long count, void *data);
-
-int proc_get_rx_stbc(char *page, char **start,
-                    off_t offset, int count,
-                    int *eof, void *data);
-
-int proc_set_rx_stbc(struct file *file, const char __user *buffer,
-                    unsigned long count, void *data);
-
-int proc_get_two_path_rssi(char *page, char **start,
-                          off_t offset, int count,
-                          int *eof, void *data);
-
-int proc_get_rssi_disp(char *page, char **start,
-                      off_t offset, int count,
-                      int *eof, void *data);
-
-int proc_set_rssi_disp(struct file *file, const char __user *buffer,
-                      unsigned long count, void *data);
-
 #endif /* __RTW_DEBUG_H__ */
index 9bfb10c302b501dee65527c5a577f01acbb0ae92..168c12d3c0b43717095a578ad8bf8221530591eb 100644 (file)
 #define        EFUSE_WIFI                              0
 #define        EFUSE_BT                                1
 
-enum _EFUSE_DEF_TYPE {
-       TYPE_EFUSE_MAX_SECTION                          = 0,
-       TYPE_EFUSE_REAL_CONTENT_LEN                     = 1,
-       TYPE_AVAILABLE_EFUSE_BYTES_BANK         = 2,
-       TYPE_AVAILABLE_EFUSE_BYTES_TOTAL        = 3,
-       TYPE_EFUSE_MAP_LEN                                      = 4,
-       TYPE_EFUSE_PROTECT_BYTES_BANK           = 5,
-       TYPE_EFUSE_CONTENT_LEN_BANK                     = 6,
-};
-
 /* E-Fuse */
 #define EFUSE_MAP_SIZE      512
 #define EFUSE_MAX_SIZE      256
@@ -95,8 +85,6 @@ struct efuse_hal {
 };
 
 u8 Efuse_CalculateWordCnts(u8 word_en);
-void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1,
-                             void *out);
 u8 efuse_OneByteRead(struct adapter *adapter, u16 addr, u8 *data);
 u8 efuse_OneByteWrite(struct adapter *adapter, u16 addr, u8 data);
 
index 5c34e567d3417a2027439c369c441fb228cfdff9..df689483644be9eefbec5f1946139278357861db 100644 (file)
@@ -18,7 +18,7 @@
 #include <osdep_service.h>
 
 #include <wlan_bssdef.h>
-#include <linux/semaphore.h>
+#include <linux/mutex.h>
 #include <linux/sem.h>
 
 /*
@@ -71,10 +71,6 @@ struct stadel_event {
        int mac_id;
 };
 
-struct addba_event {
-       unsigned int tid;
-};
-
 #define GEN_EVT_CODE(event)    event ## _EVT_
 
 struct fwevent {
@@ -84,21 +80,6 @@ struct fwevent {
 
 #define C2HEVENT_SZ                    32
 
-struct event_node {
-       unsigned char *node;
-       unsigned char evt_code;
-       unsigned short evt_sz;
-       int     *caller_ff_tail;
-       int     caller_ff_sz;
-};
-
-struct c2hevent_queue {
-       int     head;
-       int     tail;
-       struct  event_node      nodes[C2HEVENT_SZ];
-       unsigned char   seq;
-};
-
 #define NETWORK_QUEUE_SZ       4
 
 struct network_queue {
index b45483fd069fab07afd58a6d7c2ae8fb08d37d19..d842eade7f57329147b3fbce9282e821cb015d2d 100644 (file)
 #ifndef _RTW_HT_H_
 #define _RTW_HT_H_
 
-#include <osdep_service.h>
-#include "wifi.h"
+#include <linux/ieee80211.h>
 
 struct ht_priv {
        u32     ht_option;
        u32     ampdu_enable;/* for enable Tx A-MPDU */
-       u32     tx_amsdu_enable;/* for enable Tx A-MSDU */
-       u32     tx_amdsu_maxlen; /*  1: 8k, 0:4k ; default:8k, for tx */
-       u32     rx_ampdu_maxlen; /* for rx reordering ctrl win_sz,
-                                 * updated when join_callback. */
        u8      bwmode;/*  */
        u8      ch_offset;/* PRIME_CHNL_OFFSET */
        u8      sgi;/* short GI */
@@ -33,7 +28,7 @@ struct ht_priv {
        u8      agg_enable_bitmap;
        u8      candidate_tid_bitmap;
 
-       struct rtw_ieee80211_ht_cap ht_cap;
+       struct ieee80211_ht_cap ht_cap;
 };
 
 #endif /* _RTL871X_HT_H_ */
index 3a652df4b26ce0603d83712a3d0e0eb35806be2d..a6b1c854a0612279deba31852e6c501a6cb12b0b 100644 (file)
@@ -69,15 +69,6 @@ enum oid_type {
        SET_OID
 };
 
-struct oid_funs_node {
-       unsigned int oid_start; /* the starting number for OID */
-       unsigned int oid_end; /* the ending number for OID */
-       struct oid_obj_priv *node_array;
-       unsigned int array_sz; /* the size of node_array */
-       int query_counter; /* count the number of query hits for this segment */
-       int set_counter; /* count the number of set hits for this segment */
-};
-
 struct oid_par_priv {
        void            *adapter_context;
        NDIS_OID        oid;
@@ -89,12 +80,6 @@ struct oid_par_priv {
        u32             dbg;
 };
 
-struct oid_obj_priv {
-       unsigned char   dbg; /*  0: without OID debug message
-                             *  1: with OID debug message */
-       int (*oidfuns)(struct oid_par_priv *poid_par_priv);
-};
-
 #if defined(_RTW_MP_IOCTL_C_)
 static int oid_null_function(struct oid_par_priv *poid_par_priv) {
        return NDIS_STATUS_SUCCESS;
index 5d8bce0f58db79d7f9ac747289b6e7c1de406751..9434b869c5e9d1737254a9e14becce3e0b9d4b42 100644 (file)
@@ -301,12 +301,10 @@ struct mlme_priv {
 
        u8 *nic_hdl;
 
-       u8 not_indic_disco;
        struct list_head *pscanned;
        struct __queue free_bss_pool;
        struct __queue scanned_queue;
        u8 *free_bss_buf;
-       u32     num_of_scanned;
 
        struct ndis_802_11_ssid assoc_ssid;
        u8      assoc_bssid[6];
@@ -318,10 +316,8 @@ struct mlme_priv {
        struct timer_list assoc_timer;
 
        uint assoc_by_bssid;
-       uint assoc_by_rssi;
 
        struct timer_list scan_to_timer; /*  driver itself handles scan_timeout status. */
-       u32 scan_start_time; /*  used to evaluate the time spent in scanning */
 
        struct qos_priv qospriv;
 
@@ -387,17 +383,6 @@ struct mlme_priv {
        u32 wps_probe_resp_ie_len;
        u32 wps_assoc_resp_ie_len;
 
-       u8 *p2p_beacon_ie;
-       u8 *p2p_probe_req_ie;
-       u8 *p2p_probe_resp_ie;
-       u8 *p2p_go_probe_resp_ie; /* for GO */
-       u8 *p2p_assoc_req_ie;
-
-       u32 p2p_beacon_ie_len;
-       u32 p2p_probe_req_ie_len;
-       u32 p2p_probe_resp_ie_len;
-       u32 p2p_go_probe_resp_ie_len; /* for GO */
-       u32 p2p_assoc_req_ie_len;
        spinlock_t bcn_update_lock;
        u8              update_bcn;
 #endif /* if defined (CONFIG_88EU_AP_MODE) */
@@ -500,27 +485,6 @@ static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
        spin_unlock_bh(&pmlmepriv->lock);
 }
 
-static inline void up_scanned_network(struct mlme_priv *pmlmepriv)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned++;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void down_scanned_network(struct mlme_priv *pmlmepriv)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned--;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void set_scanned_network_val(struct mlme_priv *pmlmepriv, int val)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       pmlmepriv->num_of_scanned = val;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
 u16 rtw_get_capability(struct wlan_bssid_ex *bss);
 void rtw_update_scanned_network(struct adapter *adapter,
                                struct wlan_bssid_ex *target);
index 27382ff24a84a49106130d25934c37be0412c1de..5ee63661b26faa91c79dd35ec3293fab578e760b 100644 (file)
@@ -349,7 +349,7 @@ struct mlme_ext_info {
 
        struct ADDBA_request    ADDBA_req;
        struct WMM_para_element WMM_param;
-       struct HT_caps_element  HT_caps;
+       struct ieee80211_ht_cap HT_caps;
        struct HT_info_element  HT_info;
        struct wlan_bssid_ex    network;/* join network or bss_network,
                                         * if in ap mode, it is the same
@@ -529,12 +529,12 @@ int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie,
 void update_sta_info(struct adapter *padapter, struct sta_info *psta);
 unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
 unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps);
+unsigned int update_MSC_rate(struct ieee80211_ht_cap *pHT_caps);
 void Update_RA_Entry(struct adapter *padapter, u32 mac_id);
 void set_sta_rate(struct adapter *padapter, struct sta_info *psta);
 
 unsigned char get_highest_rate_idx(u32 mask);
-int support_short_GI(struct adapter *padapter, struct HT_caps_element *caps);
+int support_short_GI(struct adapter *padapter, struct ieee80211_ht_cap *caps);
 unsigned int is_ap_in_tkip(struct adapter *padapter);
 unsigned int is_ap_in_wep(struct adapter *padapter);
 unsigned int should_forbid_n_rate(struct adapter *padapter);
@@ -562,8 +562,6 @@ int issue_qos_nulldata(struct adapter *padapter, unsigned char *da,
                       u16 tid, int try_cnt, int wait_ms);
 int issue_deauth(struct adapter *padapter, unsigned char *da,
                 unsigned short reason);
-void issue_action_spct_ch_switch(struct adapter *padapter, u8 *ra, u8 new_ch,
-                                u8 ch_offset);
 unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr);
 unsigned int send_beacon(struct adapter *padapter);
 
index 9680e2eab62facba7a7ce9eb251b304c306c34ef..18a9e744fcbe781b392f1fc950eb93d8e610d091 100644 (file)
@@ -92,21 +92,6 @@ struct reportpwrstate_parm {
        unsigned short rsvd;
 };
 
-static inline void _init_pwrlock(struct semaphore  *plock)
-{
-       sema_init(plock, 1);
-}
-
-static inline void _enter_pwrlock(struct semaphore  *plock)
-{
-       _rtw_down_sema(plock);
-}
-
-static inline void _exit_pwrlock(struct semaphore  *plock)
-{
-       up(plock);
-}
-
 #define LPS_DELAY_TIME 1*HZ /*  1 sec */
 
 #define EXE_PWR_NONE   0x01
@@ -157,7 +142,7 @@ enum { /*  for ips_mode */
 };
 
 struct pwrctrl_priv {
-       struct semaphore lock;
+       struct mutex mutex_lock;
        volatile u8 rpwm; /*  requested power state for fw */
        volatile u8 cpwm; /*  fw current power state. updated when
                           * 1. read from HCPWM 2. driver lowers power level */
index b0373b6216d6e25f67847b574b93f1756eefccdb..758cd1627495d9e4d77c9e0183c1c4c251101cb8 100644 (file)
@@ -65,13 +65,6 @@ struct       stainfo_rxcache {
 */
 };
 
-struct smooth_rssi_data {
-       u32     elements[100];  /* array to store values */
-       u32     index;                  /* index to current array to store */
-       u32     total_num;              /* num of valid elements */
-       u32     total_val;              /* sum of valid elements */
-};
-
 struct signal_stat {
        u8      update_req;             /* used to indicate */
        u8      avg_val;                /* avg of valid elements */
index ca1247bce6e337d1a7b0a105e9b8cd6cf06ab96c..2663e60bb6c681d0ed26285dc68babe2327abb73 100644 (file)
@@ -164,12 +164,6 @@ struct security_priv {
        u8 bWepDefaultKeyIdxSet;
 };
 
-struct sha256_state {
-       u64 length;
-       u32 state[8], curlen;
-       u8 buf[64];
-};
-
 #define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)         \
 do {                                                                   \
        switch (psecuritypriv->dot11AuthAlgrthm) {                      \
index ce027dfdecc58d2907e8a606054e5613b0e7573d..4c4ccd5648634a297e3da7d15a18aaefcad369ea 100644 (file)
@@ -33,7 +33,6 @@ struct sreset_priv {
 #define        WIFI_RX_HANG                    BIT(5)
 #define                WIFI_IF_NOT_EXIST       BIT(6)
 
-void sreset_init_value(struct adapter *padapter);
 u8 sreset_get_wifi_status(struct adapter *padapter);
 void sreset_set_wifi_error_status(struct adapter *padapter, u32 status);
 
index a0853bab3edb62ef257fa8dd6ec0623a00541617..cb49aca0adced0adda8e145c27b81914dc44324a 100644 (file)
@@ -256,15 +256,8 @@ struct     hw_txqueue {
        int     ac_tag;
 };
 
-struct agg_pkt_info {
-       u16 offset;
-       u16 pkt_len;
-};
-
 struct xmit_priv {
        spinlock_t lock;
-       struct semaphore xmit_sema;
-       struct semaphore terminate_xmitthread_sema;
        struct __queue be_pending;
        struct __queue bk_pending;
        struct __queue vi_pending;
@@ -289,7 +282,6 @@ struct      xmit_priv {
        u8      wmm_para_seq[4];/* sequence for wmm ac parameter strength
                                 * from large to small. it's value is 0->vo,
                                 * 1->vi, 2->be, 3->bk. */
-       struct semaphore tx_retevt;/* all tx return event; */
        u8              txirp_cnt;/*  */
        struct tasklet_struct xmit_tasklet;
        /* per AC pending irp */
index b1bf07a9013e9657bef17ccd8de637f4f3f30e31..fd9921f22848c71a56420735d442f4ac9d6400fd 100644 (file)
@@ -16,6 +16,5 @@
 #define __USB_HAL_H__
 
 void rtl8188eu_set_hal_ops(struct adapter *padapter);
-#define hal_set_hal_ops        rtl8188eu_set_hal_ops
 
 #endif /* __USB_HAL_H__ */
index e7c512183619e9bbec52dc6dd748cad2ae98b866..9e08e6842ecab3090a50e04b87e798d4b7b3b2f3 100644 (file)
@@ -508,22 +508,6 @@ struct rtw_ieee80211_bar {
 #define IEEE80211_BAR_CTRL_ACK_POLICY_NORMAL     0x0000
 #define IEEE80211_BAR_CTRL_CBMTID_COMPRESSED_BA  0x0004
 
- /**
- * struct rtw_ieee80211_ht_cap - HT capabilities
- *
- * This structure refers to "HT capabilities element" as
- * described in 802.11n draft section 7.3.2.52
- */
-
-struct rtw_ieee80211_ht_cap {
-       unsigned short  cap_info;
-       unsigned char   ampdu_params_info;
-       unsigned char   supp_mcs_set[16];
-       unsigned short  extended_ht_cap_info;
-       unsigned int    tx_BF_cap_info;
-       unsigned char   antenna_selection_info;
-} __packed;
-
 /**
  * struct rtw_ieee80211_ht_cap - HT additional information
  *
@@ -538,20 +522,6 @@ struct ieee80211_ht_addt_info {
        unsigned char   basic_set[16];
 } __packed;
 
-struct HT_caps_element {
-       union {
-               struct {
-                       __le16  HT_caps_info;
-                       unsigned char   AMPDU_para;
-                       unsigned char   MCS_rate[16];
-                       unsigned short  HT_ext_caps;
-                       unsigned int    Beamforming_caps;
-                       unsigned char   ASEL_caps;
-               } HT_cap_element;
-               unsigned char HT_cap[26];
-       } u;
-} __packed;
-
 struct HT_info_element {
        unsigned char   primary_channel;
        unsigned char   infos[5];
index 560966cd7dfeacfa9fa563231941fe6df330e57f..e1931dd04da00323d98203904a00251b4767b44b 100644 (file)
@@ -123,40 +123,10 @@ enum ndis_802_11_wep_status {
 #define NDIS_802_11_AI_RESFI_STATUSCODE        2
 #define NDIS_802_11_AI_RESFI_ASSOCIATIONID     4
 
-struct ndis_802_11_ai_reqfi {
-    u16 Capabilities;
-    u16 ListenInterval;
-    unsigned char CurrentAPAddress[ETH_ALEN];
-};
-
-struct ndis_802_11_ai_resfi {
-    u16 Capabilities;
-    u16 StatusCode;
-    u16 AssociationId;
-};
-
-struct ndis_802_11_assoc_info {
-       u32  Length;
-       u16 AvailableRequestFixedIEs;
-       struct ndis_802_11_ai_reqfi    RequestFixedIEs;
-       u32  RequestIELength;
-       u32  OffsetRequestIEs;
-       u16 AvailableResponseFixedIEs;
-       struct ndis_802_11_ai_resfi    ResponseFixedIEs;
-       u32  ResponseIELength;
-       u32  OffsetResponseIEs;
-};
-
 enum ndis_802_11_reload_def {
        Ndis802_11ReloadWEPKeys
 };
 
-struct ndis_802_11_remove_key {
-       u32                   Length;        /*  Length */
-       u32                   KeyIndex;
-       unsigned char BSSID[ETH_ALEN];
-};
-
 struct ndis_802_11_wep {
        u32     Length;        /*  Length of this structure */
        u32     KeyIndex;      /*  0 is the per-client key,
@@ -165,12 +135,6 @@ struct ndis_802_11_wep {
        u8     KeyMaterial[16];/*  variable len depending on above field */
 };
 
-struct ndis_802_11_auth_req {
-       u32 Length;            /*  Length of structure */
-       unsigned char Bssid[ETH_ALEN];
-       u32 Flags;
-};
-
 enum ndis_802_11_status_type {
        Ndis802_11StatusType_Authentication,
        Ndis802_11StatusType_MediaStreamMode,
@@ -179,10 +143,6 @@ enum ndis_802_11_status_type {
                                    * an upper bound */
 };
 
-struct ndis_802_11_status_ind {
-       enum ndis_802_11_status_type StatusType;
-};
-
 /*  mask for authentication/integrity fields */
 #define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS           0x0f
 #define NDIS_802_11_AUTH_REQUEST_REAUTH                        0x01
@@ -193,21 +153,6 @@ struct ndis_802_11_status_ind {
 /*  MIC check time, 60 seconds. */
 #define MIC_CHECK_TIME 60000000
 
-struct ndis_802_11_auth_evt {
-       struct ndis_802_11_status_ind       Status;
-       struct ndis_802_11_auth_req  Request[1];
-};
-
-struct ndis_802_11_test {
-       u32 Length;
-       u32 Type;
-       union {
-               struct ndis_802_11_auth_evt AuthenticationEvent;
-               NDIS_802_11_RSSI RssiTrigger;
-       } tt;
-};
-
-
 #ifndef Ndis802_11APMode
 #define Ndis802_11APMode (Ndis802_11InfrastructureMax+1)
 #endif
@@ -297,32 +242,4 @@ enum UAPSD_MAX_SP {
 #define NUM_PRE_AUTH_KEY 16
 #define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
 
-/*
-*      WPA2
-*/
-
-struct pmkid_candidate {
-       unsigned char BSSID[ETH_ALEN];
-       u32 Flags;
-};
-
-struct ndis_802_11_pmkid_list {
-       u32 Version;       /*  Version of the structure */
-       u32 NumCandidates; /*  No. of pmkid candidates */
-       struct pmkid_candidate CandidateList[1];
-};
-
-struct ndis_802_11_auth_encrypt {
-       enum ndis_802_11_auth_mode AuthModeSupported;
-       enum ndis_802_11_wep_status EncryptStatusSupported;
-};
-
-struct ndis_802_11_cap {
-       u32  Length;
-       u32  Version;
-       u32  NoOfPMKIDs;
-       u32  NoOfAuthEncryptPairsSupported;
-       struct ndis_802_11_auth_encrypt AuthenticationEncryptionSupported[1];
-};
-
 #endif /* ifndef WLAN_BSSDEF_H_ */
index 5672f014cc46dd5f4eaad94c67366e5514f8bd3e..4de9dbc93380e8af46a1fb6eb60b1a6b5311da9e 100644 (file)
@@ -132,12 +132,15 @@ static char *translate_scan(struct adapter *padapter,
        p = rtw_get_ie(&pnetwork->network.IEs[12], _HT_CAPABILITY_IE_, &ht_ielen, pnetwork->network.IELength-12);
 
        if (p && ht_ielen > 0) {
-               struct rtw_ieee80211_ht_cap *pht_capie;
+               struct ieee80211_ht_cap *pht_capie;
                ht_cap = true;
-               pht_capie = (struct rtw_ieee80211_ht_cap *)(p+2);
-               memcpy(&mcs_rate, pht_capie->supp_mcs_set, 2);
-               bw_40MHz = (pht_capie->cap_info&IEEE80211_HT_CAP_SUP_WIDTH) ? 1 : 0;
-               short_GI = (pht_capie->cap_info&(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0;
+               pht_capie = (struct ieee80211_ht_cap *)(p + 2);
+               memcpy(&mcs_rate, pht_capie->mcs.rx_mask, 2);
+               bw_40MHz = !!(le16_to_cpu(pht_capie->cap_info) &
+                             IEEE80211_HT_CAP_SUP_WIDTH);
+               short_GI = !!(le16_to_cpu(pht_capie->cap_info) &
+                             (IEEE80211_HT_CAP_SGI_20 |
+                              IEEE80211_HT_CAP_SGI_40));
        }
 
        /* Add the protocol name */
@@ -400,7 +403,7 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param,
                        wep_key_len = wep_key_len <= 5 ? 5 : 13;
                        wep_total_len = wep_key_len + offsetof(struct ndis_802_11_wep, KeyMaterial);
                        pwep = (struct ndis_802_11_wep *)rtw_malloc(wep_total_len);
-                       if (pwep == NULL) {
+                       if (!pwep) {
                                RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, (" wpa_set_encryption: pwep allocate fail !!!\n"));
                                goto exit;
                        }
@@ -441,7 +444,7 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param,
 
                if (check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_MP_STATE)) { /* sta mode */
                        psta = rtw_get_stainfo(pstapriv, get_bssid(pmlmepriv));
-                       if (psta == NULL) {
+                       if (!psta) {
                                ;
                        } else {
                                if (strcmp(param->u.crypt.alg, "none") != 0)
@@ -476,7 +479,7 @@ static int wpa_set_encryption(struct net_device *dev, struct ieee_param *param,
                                }
                        }
                        pbcmc_sta = rtw_get_bcmc_stainfo(padapter);
-                       if (pbcmc_sta == NULL) {
+                       if (!pbcmc_sta) {
                                ;
                        } else {
                                /* Jeff: don't disable ieee8021x_blocked while clearing key */
@@ -502,9 +505,9 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie
        int group_cipher = 0, pairwise_cipher = 0;
        int ret = 0;
 
-       if ((ielen > MAX_WPA_IE_LEN) || (pie == NULL)) {
+       if ((ielen > MAX_WPA_IE_LEN) || (!pie)) {
                _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-               if (pie == NULL)
+               if (!pie)
                        return ret;
                else
                        return -EINVAL;
@@ -512,7 +515,7 @@ static int rtw_set_wpa_ie(struct adapter *padapter, char *pie, unsigned short ie
 
        if (ielen) {
                buf = kmemdup(pie, ielen, GFP_KERNEL);
-               if (buf == NULL) {
+               if (!buf) {
                        ret =  -ENOMEM;
                        goto exit;
                }
@@ -1049,7 +1052,7 @@ static int rtw_wx_set_mlme(struct net_device *dev,
        struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
        struct iw_mlme *mlme = (struct iw_mlme *)extra;
 
-       if (mlme == NULL)
+       if (!mlme)
                return -1;
 
        DBG_88E("%s\n", __func__);
@@ -1896,7 +1899,7 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
 
        param_len = sizeof(struct ieee_param) + pext->key_len;
        param = (struct ieee_param *)rtw_malloc(param_len);
-       if (param == NULL)
+       if (!param)
                return -1;
 
        memset(param, 0, param_len);
@@ -2061,7 +2064,7 @@ static int wpa_supplicant_ioctl(struct net_device *dev, struct iw_point *p)
        }
 
        param = (struct ieee_param *)rtw_malloc(p->length);
-       if (param == NULL) {
+       if (!param) {
                ret = -ENOMEM;
                goto out;
        }
@@ -2254,13 +2257,13 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
                }
        }
 
-       if (strcmp(param->u.crypt.alg, "none") == 0 && (psta == NULL)) {
+       if (strcmp(param->u.crypt.alg, "none") == 0 && (!psta)) {
                /* todo:clear default encryption keys */
 
                DBG_88E("clear default encryption keys, keyid =%d\n", param->u.crypt.idx);
                goto exit;
        }
-       if (strcmp(param->u.crypt.alg, "WEP") == 0 && (psta == NULL)) {
+       if (strcmp(param->u.crypt.alg, "WEP") == 0 && (!psta)) {
                DBG_88E("r871x_set_encryption, crypt.alg = WEP\n");
                wep_key_idx = param->u.crypt.idx;
                wep_key_len = param->u.crypt.key_len;
@@ -2274,7 +2277,7 @@ static int rtw_set_encryption(struct net_device *dev, struct ieee_param *param,
                        wep_key_len = wep_key_len <= 5 ? 5 : 13;
                        wep_total_len = wep_key_len + offsetof(struct ndis_802_11_wep, KeyMaterial);
                        pwep = (struct ndis_802_11_wep *)rtw_malloc(wep_total_len);
-                       if (pwep == NULL) {
+                       if (!pwep) {
                                DBG_88E(" r871x_set_encryption: pwep allocate fail !!!\n");
                                goto exit;
                        }
@@ -2528,7 +2531,8 @@ static int rtw_add_sta(struct net_device *dev, struct ieee_param *param)
                if (WLAN_STA_HT&flags) {
                        psta->htpriv.ht_option = true;
                        psta->qos_option = 1;
-                       memcpy((void *)&psta->htpriv.ht_cap, (void *)&param->u.add_sta.ht_cap, sizeof(struct rtw_ieee80211_ht_cap));
+                       memcpy(&psta->htpriv.ht_cap, &param->u.add_sta.ht_cap,
+                              sizeof(struct ieee80211_ht_cap));
                } else {
                        psta->htpriv.ht_option = false;
                }
@@ -2624,7 +2628,8 @@ static int rtw_ioctl_get_sta_data(struct net_device *dev, struct ieee_param *par
                                      (psta->ht_20mhz_set << 5));
                psta_data->tx_supp_rates_len =  psta->bssratelen;
                memcpy(psta_data->tx_supp_rates, psta->bssrateset, psta->bssratelen);
-               memcpy(&psta_data->ht_cap, &psta->htpriv.ht_cap, sizeof(struct rtw_ieee80211_ht_cap));
+               memcpy(&psta_data->ht_cap,
+                      &psta->htpriv.ht_cap, sizeof(struct ieee80211_ht_cap));
                psta_data->rx_pkts = psta->sta_stats.rx_data_pkts;
                psta_data->rx_bytes = psta->sta_stats.rx_bytes;
                psta_data->rx_drops = psta->sta_stats.rx_drops;
@@ -2699,7 +2704,7 @@ static int rtw_set_wps_beacon(struct net_device *dev, struct ieee_param *param,
        if (ie_len > 0) {
                pmlmepriv->wps_beacon_ie = rtw_malloc(ie_len);
                pmlmepriv->wps_beacon_ie_len = ie_len;
-               if (pmlmepriv->wps_beacon_ie == NULL) {
+               if (!pmlmepriv->wps_beacon_ie) {
                        DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__);
                        return -EINVAL;
                }
@@ -2734,7 +2739,7 @@ static int rtw_set_wps_probe_resp(struct net_device *dev, struct ieee_param *par
        if (ie_len > 0) {
                pmlmepriv->wps_probe_resp_ie = rtw_malloc(ie_len);
                pmlmepriv->wps_probe_resp_ie_len = ie_len;
-               if (pmlmepriv->wps_probe_resp_ie == NULL) {
+               if (!pmlmepriv->wps_probe_resp_ie) {
                        DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__);
                        return -EINVAL;
                }
@@ -2764,7 +2769,7 @@ static int rtw_set_wps_assoc_resp(struct net_device *dev, struct ieee_param *par
        if (ie_len > 0) {
                pmlmepriv->wps_assoc_resp_ie = rtw_malloc(ie_len);
                pmlmepriv->wps_assoc_resp_ie_len = ie_len;
-               if (pmlmepriv->wps_assoc_resp_ie == NULL) {
+               if (!pmlmepriv->wps_assoc_resp_ie) {
                        DBG_88E("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__);
                        return -EINVAL;
                }
@@ -2866,7 +2871,7 @@ static int rtw_hostapd_ioctl(struct net_device *dev, struct iw_point *p)
        }
 
        param = (struct ieee_param *)rtw_malloc(p->length);
-       if (param == NULL) {
+       if (!param) {
                ret = -ENOMEM;
                goto out;
        }
@@ -2976,7 +2981,7 @@ static int rtw_wx_set_priv(struct net_device *dev,
                        pmlmepriv->wps_probe_req_ie = NULL;
 
                        pmlmepriv->wps_probe_req_ie = rtw_malloc(cp_sz);
-                       if (pmlmepriv->wps_probe_req_ie == NULL) {
+                       if (!pmlmepriv->wps_probe_req_ie) {
                                pr_info("%s()-%d: rtw_malloc() ERROR!\n", __func__, __LINE__);
                                ret =  -EINVAL;
                                goto FREE_EXT;
index ae2caff030f16902587334969b9c2f83a9b404dc..79b1755a947682fa156d1c020815b9946b73ee00 100644 (file)
@@ -33,11 +33,7 @@ MODULE_VERSION(DRIVERVERSION);
 #define RTW_NOTCH_FILTER 0 /* 0:Disable, 1:Enable, */
 
 /* module param defaults */
-static int rtw_chip_version;
-static int rtw_rfintfs = HWPI;
-static int rtw_lbkmode;/* RTL8712_AIR_TRX; */
 /* Ndis802_11Infrastructure; infra, ad-hoc, auto */
-static int rtw_network_mode = Ndis802_11IBSS;
 static int rtw_channel = 1;/* ad-hoc support requirement */
 static int rtw_wireless_mode = WIRELESS_11BG_24N;
 static int rtw_vrtl_carrier_sense = AUTO_VCS;
@@ -45,9 +41,6 @@ static int rtw_vcs_type = RTS_CTS;/*  */
 static int rtw_rts_thresh = 2347;/*  */
 static int rtw_frag_thresh = 2346;/*  */
 static int rtw_preamble = PREAMBLE_LONG;/* long, short, auto */
-static int rtw_scan_mode = 1;/* active, passive */
-static int rtw_adhoc_tx_pwr = 1;
-static int rtw_soft_ap;
 static int rtw_power_mgnt = 1;
 static int rtw_ips_mode = IPS_NORMAL;
 
@@ -57,11 +50,6 @@ module_param(rtw_ips_mode, int, 0644);
 MODULE_PARM_DESC(rtw_ips_mode, "The default IPS mode");
 
 static int rtw_debug = 1;
-static int rtw_radio_enable = 1;
-static int rtw_long_retry_lmt = 7;
-static int rtw_short_retry_lmt = 7;
-static int rtw_busy_thresh = 40;
-static int rtw_ack_policy = NORMAL_ACK;
 
 static int rtw_software_encrypt;
 static int rtw_software_decrypt;
@@ -70,11 +58,6 @@ static int rtw_acm_method;/*  0:By SW 1:By HW. */
 
 static int rtw_wmm_enable = 1;/*  default is set to enable the wmm. */
 static int rtw_uapsd_enable;
-static int rtw_uapsd_max_sp = NO_LIMIT;
-static int rtw_uapsd_acbk_en;
-static int rtw_uapsd_acbe_en;
-static int rtw_uapsd_acvi_en;
-static int rtw_uapsd_acvo_en;
 
 static int rtw_ht_enable = 1;
 /* 0 :disable, bit(0): enable 2.4g, bit(1): enable 5g */
@@ -89,11 +72,6 @@ static int rtw_ampdu_enable = 1;/* for enable tx_ampdu */
 static int rtw_rx_stbc = 1;
 static int rtw_ampdu_amsdu;/*  0: disabled, 1:enabled, 2:auto */
 
-/* Use 2 path Tx to transmit MCS0~7 and legacy mode */
-static int rtw_lowrate_two_xmit = 1;
-
-static int rtw_rf_config = RF_819X_MAX_TYPE;  /* auto */
-static int rtw_low_power;
 static int rtw_wifi_spec;
 static int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
 
@@ -111,10 +89,6 @@ static int rtw_enusbss;/* 0:disable, 1:enable */
 
 static int rtw_hwpdn_mode = 2;/* 0:disable, 1:enable, 2: by EFUSE config */
 
-static int rtw_hwpwrp_detect; /* HW power  ping detect 0:disable , 1:enable */
-
-static int rtw_hw_wps_pbc = 1;
-
 int rtw_mc2u_disable;
 
 static int rtw_80211d;
@@ -132,32 +106,22 @@ char *rtw_initmac;
 
 module_param(rtw_initmac, charp, 0644);
 module_param(rtw_channel_plan, int, 0644);
-module_param(rtw_chip_version, int, 0644);
-module_param(rtw_rfintfs, int, 0644);
-module_param(rtw_lbkmode, int, 0644);
-module_param(rtw_network_mode, int, 0644);
 module_param(rtw_channel, int, 0644);
 module_param(rtw_wmm_enable, int, 0644);
 module_param(rtw_vrtl_carrier_sense, int, 0644);
 module_param(rtw_vcs_type, int, 0644);
-module_param(rtw_busy_thresh, int, 0644);
 module_param(rtw_ht_enable, int, 0644);
 module_param(rtw_cbw40_enable, int, 0644);
 module_param(rtw_ampdu_enable, int, 0644);
 module_param(rtw_rx_stbc, int, 0644);
 module_param(rtw_ampdu_amsdu, int, 0644);
-module_param(rtw_lowrate_two_xmit, int, 0644);
-module_param(rtw_rf_config, int, 0644);
 module_param(rtw_power_mgnt, int, 0644);
 module_param(rtw_smart_ps, int, 0644);
-module_param(rtw_low_power, int, 0644);
 module_param(rtw_wifi_spec, int, 0644);
 module_param(rtw_antdiv_cfg, int, 0644);
 module_param(rtw_antdiv_type, int, 0644);
 module_param(rtw_enusbss, int, 0644);
 module_param(rtw_hwpdn_mode, int, 0644);
-module_param(rtw_hwpwrp_detect, int, 0644);
-module_param(rtw_hw_wps_pbc, int, 0644);
 
 static uint rtw_max_roaming_times = 2;
 module_param(rtw_max_roaming_times, uint, 0644);
@@ -185,361 +149,11 @@ MODULE_PARM_DESC(monitor_enable, "Enable monitor inferface (default: false)");
 static int netdev_open(struct net_device *pnetdev);
 static int netdev_close(struct net_device *pnetdev);
 
-/* dummy routines */
-void rtw_proc_remove_one(struct net_device *dev)
-{
-}
-
-static void rtw_proc_init_one(struct net_device *dev)
-{
-}
-
-#if 0  /* TODO: Convert these to /sys */
-static void rtw_proc_init_one(struct net_device *dev)
-{
-       struct proc_dir_entry *dir_dev = NULL;
-       struct proc_dir_entry *entry = NULL;
-       struct adapter  *padapter = rtw_netdev_priv(dev);
-       u8 rf_type;
-
-       if (rtw_proc == NULL) {
-               memcpy(rtw_proc_name, DRV_NAME, sizeof(DRV_NAME));
-
-               rtw_proc = create_proc_entry(rtw_proc_name, S_IFDIR,
-                                            init_net.proc_net);
-               if (rtw_proc == NULL) {
-                       DBG_88E(KERN_ERR "Unable to create rtw_proc directory\n");
-                       return;
-               }
-
-               entry = create_proc_read_entry("ver_info", S_IFREG | S_IRUGO,
-                                              rtw_proc, proc_get_drv_version,
-                                              dev);
-               if (!entry) {
-                       pr_info("Unable to create_proc_read_entry!\n");
-                       return;
-               }
-       }
-
-       if (padapter->dir_dev == NULL) {
-               padapter->dir_dev = create_proc_entry(dev->name,
-                                         S_IFDIR | S_IRUGO | S_IXUGO,
-                                         rtw_proc);
-               dir_dev = padapter->dir_dev;
-               if (dir_dev == NULL) {
-                       if (rtw_proc_cnt == 0 && rtw_proc) {
-                               remove_proc_entry(rtw_proc_name, init_net.proc_net);
-                               rtw_proc = NULL;
-                       }
-
-                       pr_info("Unable to create dir_dev directory\n");
-                       return;
-               }
-       } else {
-               return;
-       }
-
-       rtw_proc_cnt++;
-
-       entry = create_proc_read_entry("write_reg", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_write_reg, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_write_reg;
-
-       entry = create_proc_read_entry("read_reg", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_read_reg, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_read_reg;
-
-
-       entry = create_proc_read_entry("fwstate", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_fwstate, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("sec_info", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_sec_info, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("mlmext_state", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_mlmext_state, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("qos_option", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_qos_option, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("ht_option", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_ht_option, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("rf_info", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rf_info, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("ap_info", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_ap_info, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("adapter_state", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_getstruct adapter_state, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("trx_info", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_trx_info, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("mac_reg_dump1", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_mac_reg_dump1, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("mac_reg_dump2", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_mac_reg_dump2, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("mac_reg_dump3", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_mac_reg_dump3, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("bb_reg_dump1", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_bb_reg_dump1, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("bb_reg_dump2", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_bb_reg_dump2, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("bb_reg_dump3", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_bb_reg_dump3, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("rf_reg_dump1", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rf_reg_dump1, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("rf_reg_dump2", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rf_reg_dump2, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-       if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) {
-               entry = create_proc_read_entry("rf_reg_dump3",
-                                              S_IFREG | S_IRUGO, dir_dev,
-                                              proc_get_rf_reg_dump3, dev);
-               if (!entry) {
-                       pr_info("Unable to create_proc_read_entry!\n");
-                       return;
-               }
-
-               entry = create_proc_read_entry("rf_reg_dump4",
-                                              S_IFREG | S_IRUGO, dir_dev,
-                                              proc_get_rf_reg_dump4, dev);
-               if (!entry) {
-                       pr_info("Unable to create_proc_read_entry!\n");
-                       return;
-               }
-       }
-
-#ifdef CONFIG_88EU_AP_MODE
-
-       entry = create_proc_read_entry("all_sta_info", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_all_sta_info, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-#endif
-
-       entry = create_proc_read_entry("best_channel", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_best_channel, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-
-       entry = create_proc_read_entry("rx_signal", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rx_signal, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_rx_signal;
-       entry = create_proc_read_entry("ht_enable", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_ht_enable, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_ht_enable;
-
-       entry = create_proc_read_entry("cbw40_enable", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_cbw40_enable, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_cbw40_enable;
-
-       entry = create_proc_read_entry("ampdu_enable", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_ampdu_enable, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_ampdu_enable;
-
-       entry = create_proc_read_entry("rx_stbc", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rx_stbc, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_rx_stbc;
-
-       entry = create_proc_read_entry("path_rssi", S_IFREG | S_IRUGO,
-                                       dir_dev, proc_get_two_path_rssi, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry = create_proc_read_entry("rssi_disp", S_IFREG | S_IRUGO,
-                                  dir_dev, proc_get_rssi_disp, dev);
-       if (!entry) {
-               pr_info("Unable to create_proc_read_entry!\n");
-               return;
-       }
-       entry->write_proc = proc_set_rssi_disp;
-}
-
-void rtw_proc_remove_one(struct net_device *dev)
-{
-       struct proc_dir_entry *dir_dev = NULL;
-       struct adapter  *padapter = rtw_netdev_priv(dev);
-       u8 rf_type;
-
-       dir_dev = padapter->dir_dev;
-       padapter->dir_dev = NULL;
-
-       if (dir_dev) {
-               remove_proc_entry("write_reg", dir_dev);
-               remove_proc_entry("read_reg", dir_dev);
-               remove_proc_entry("fwstate", dir_dev);
-               remove_proc_entry("sec_info", dir_dev);
-               remove_proc_entry("mlmext_state", dir_dev);
-               remove_proc_entry("qos_option", dir_dev);
-               remove_proc_entry("ht_option", dir_dev);
-               remove_proc_entry("rf_info", dir_dev);
-               remove_proc_entry("ap_info", dir_dev);
-               remove_proc_entry("adapter_state", dir_dev);
-               remove_proc_entry("trx_info", dir_dev);
-               remove_proc_entry("mac_reg_dump1", dir_dev);
-               remove_proc_entry("mac_reg_dump2", dir_dev);
-               remove_proc_entry("mac_reg_dump3", dir_dev);
-               remove_proc_entry("bb_reg_dump1", dir_dev);
-               remove_proc_entry("bb_reg_dump2", dir_dev);
-               remove_proc_entry("bb_reg_dump3", dir_dev);
-               remove_proc_entry("rf_reg_dump1", dir_dev);
-               remove_proc_entry("rf_reg_dump2", dir_dev);
-               rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
-               if ((RF_1T2R == rf_type) || (RF_1T1R == rf_type)) {
-                       remove_proc_entry("rf_reg_dump3", dir_dev);
-                       remove_proc_entry("rf_reg_dump4", dir_dev);
-               }
-#ifdef CONFIG_88EU_AP_MODE
-               remove_proc_entry("all_sta_info", dir_dev);
-#endif
-
-               remove_proc_entry("best_channel", dir_dev);
-               remove_proc_entry("rx_signal", dir_dev);
-               remove_proc_entry("cbw40_enable", dir_dev);
-               remove_proc_entry("ht_enable", dir_dev);
-               remove_proc_entry("ampdu_enable", dir_dev);
-               remove_proc_entry("rx_stbc", dir_dev);
-               remove_proc_entry("path_rssi", dir_dev);
-               remove_proc_entry("rssi_disp", dir_dev);
-               remove_proc_entry(dev->name, rtw_proc);
-               dir_dev = NULL;
-       } else {
-               return;
-       }
-       rtw_proc_cnt--;
-
-       if (rtw_proc_cnt == 0) {
-               if (rtw_proc) {
-                       remove_proc_entry("ver_info", rtw_proc);
-
-                       remove_proc_entry(rtw_proc_name, init_net.proc_net);
-                       rtw_proc = NULL;
-               }
-       }
-}
-#endif
-
 static void loadparam(struct adapter *padapter, struct net_device *pnetdev)
 {
        struct registry_priv  *registry_par = &padapter->registrypriv;
 
        GlobalDebugLevel = rtw_debug;
-       registry_par->chip_version = (u8)rtw_chip_version;
-       registry_par->rfintfs = (u8)rtw_rfintfs;
-       registry_par->lbkmode = (u8)rtw_lbkmode;
-       registry_par->network_mode  = (u8)rtw_network_mode;
 
        memcpy(registry_par->ssid.Ssid, "ANY", 3);
        registry_par->ssid.SsidLength = 3;
@@ -551,17 +165,9 @@ static void loadparam(struct adapter *padapter, struct net_device *pnetdev)
        registry_par->rts_thresh = (u16)rtw_rts_thresh;
        registry_par->frag_thresh = (u16)rtw_frag_thresh;
        registry_par->preamble = (u8)rtw_preamble;
-       registry_par->scan_mode = (u8)rtw_scan_mode;
-       registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
-       registry_par->soft_ap =  (u8)rtw_soft_ap;
        registry_par->smart_ps =  (u8)rtw_smart_ps;
        registry_par->power_mgnt = (u8)rtw_power_mgnt;
        registry_par->ips_mode = (u8)rtw_ips_mode;
-       registry_par->radio_enable = (u8)rtw_radio_enable;
-       registry_par->long_retry_lmt = (u8)rtw_long_retry_lmt;
-       registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
-       registry_par->busy_thresh = (u16)rtw_busy_thresh;
-       registry_par->ack_policy = (u8)rtw_ack_policy;
        registry_par->mp_mode = 0;
        registry_par->software_encrypt = (u8)rtw_software_encrypt;
        registry_par->software_decrypt = (u8)rtw_software_decrypt;
@@ -570,28 +176,18 @@ static void loadparam(struct adapter *padapter, struct net_device *pnetdev)
         /* UAPSD */
        registry_par->wmm_enable = (u8)rtw_wmm_enable;
        registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
-       registry_par->uapsd_max_sp = (u8)rtw_uapsd_max_sp;
-       registry_par->uapsd_acbk_en = (u8)rtw_uapsd_acbk_en;
-       registry_par->uapsd_acbe_en = (u8)rtw_uapsd_acbe_en;
-       registry_par->uapsd_acvi_en = (u8)rtw_uapsd_acvi_en;
-       registry_par->uapsd_acvo_en = (u8)rtw_uapsd_acvo_en;
 
        registry_par->ht_enable = (u8)rtw_ht_enable;
        registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
        registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
        registry_par->rx_stbc = (u8)rtw_rx_stbc;
        registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
-       registry_par->lowrate_two_xmit = (u8)rtw_lowrate_two_xmit;
-       registry_par->rf_config = (u8)rtw_rf_config;
-       registry_par->low_power = (u8)rtw_low_power;
        registry_par->wifi_spec = (u8)rtw_wifi_spec;
        registry_par->channel_plan = (u8)rtw_channel_plan;
        registry_par->accept_addba_req = true;
        registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
        registry_par->antdiv_type = (u8)rtw_antdiv_type;
        registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;
-       registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;
-       registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
 
        registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
 
@@ -732,7 +328,7 @@ struct net_device *rtw_init_netdev(struct adapter *old_padapter)
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+init_net_dev\n"));
 
        if (old_padapter != NULL)
-               pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(struct adapter), (void *)old_padapter);
+               pnetdev = rtw_alloc_etherdev_with_old_priv((void *)old_padapter);
 
        if (!pnetdev)
                return NULL;
@@ -762,7 +358,7 @@ static int rtw_start_drv_threads(struct adapter *padapter)
                err = PTR_ERR(padapter->cmdThread);
        else
                /* wait for cmd_thread to run */
-               _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
+               wait_for_completion_interruptible(&padapter->cmdpriv.terminate_cmdthread_comp);
 
        return err;
 }
@@ -772,9 +368,9 @@ void rtw_stop_drv_threads(struct adapter *padapter)
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+rtw_stop_drv_threads\n"));
 
        /* Below is to terminate rtw_cmd_thread & event_thread... */
-       up(&padapter->cmdpriv.cmd_queue_sema);
+       complete(&padapter->cmdpriv.cmd_queue_comp);
        if (padapter->cmdThread)
-               _rtw_down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
+               wait_for_completion_interruptible(&padapter->cmdpriv.terminate_cmdthread_comp);
 
 }
 
@@ -821,7 +417,6 @@ static u8 rtw_init_default_value(struct adapter *padapter)
        padapter->bReadPortCancel = false;
        padapter->bWritePortCancel = false;
        padapter->bRxRSSIDisplay = 0;
-       padapter->bNotifyChannelChange = 0;
        return _SUCCESS;
 }
 
@@ -912,8 +507,6 @@ u8 rtw_init_drv_sw(struct adapter *padapter)
 
        rtw_hal_sreset_init(padapter);
 
-       spin_lock_init(&padapter->br_ext_lock);
-
 exit:
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_init_drv_sw\n"));
 
@@ -961,12 +554,6 @@ u8 rtw_free_drv_sw(struct adapter *padapter)
 
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("<== rtw_free_drv_sw\n"));
 
-       /* free the old_pnetdev */
-       if (padapter->rereg_nd_name_priv.old_pnetdev) {
-               free_netdev(padapter->rereg_nd_name_priv.old_pnetdev);
-               padapter->rereg_nd_name_priv.old_pnetdev = NULL;
-       }
-
        mutex_destroy(&padapter->hw_init_mutex);
 
        RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_free_drv_sw\n"));
@@ -1013,7 +600,6 @@ static int _netdev_open(struct net_device *pnetdev)
                }
                if (padapter->intf_start)
                        padapter->intf_start(padapter);
-               rtw_proc_init_one(pnetdev);
 
                rtw_led_control(padapter, LED_CTL_NO_LINK);
 
index 764250b4ba861b7b512ff72dbaeb9e8585ab25ba..7cd2655f27fe1952e28e92c28f90e0f96ecfce72 100644 (file)
@@ -55,21 +55,13 @@ void *rtw_malloc2d(int h, int w, int size)
        return a;
 }
 
-u32 _rtw_down_sema(struct semaphore *sema)
-{
-       if (down_interruptible(sema))
-               return _FAIL;
-       return _SUCCESS;
-}
-
 void   _rtw_init_queue(struct __queue *pqueue)
 {
        INIT_LIST_HEAD(&(pqueue->queue));
        spin_lock_init(&(pqueue->lock));
 }
 
-struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
-                                                   void *old_priv)
+struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv)
 {
        struct net_device *pnetdev;
        struct rtw_netdev_priv_indicator *pnpi;
@@ -80,7 +72,6 @@ struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
 
        pnpi = netdev_priv(pnetdev);
        pnpi->priv = old_priv;
-       pnpi->sizeof_priv = sizeof_priv;
 
 RETURN:
        return pnetdev;
index 11d51a30170ffbd1a4d12b7ed7465461e3106555..cf33f65df8ff5b1c34f0763ee5fc50c2c1294f22 100644 (file)
@@ -79,9 +79,8 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
 
        pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
        pdvobjpriv->InterfaceNumber = piface_desc->bInterfaceNumber;
-       pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
 
-       for (i = 0; i < pdvobjpriv->nr_endpoint; i++) {
+       for (i = 0; i < piface_desc->bNumEndpoints; i++) {
                int ep_num;
                pendp_desc = &phost_iface->endpoint[i].desc;
 
@@ -98,7 +97,6 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
                                ep_num;
                        pdvobjpriv->RtNumOutPipes++;
                }
-               pdvobjpriv->ep_num[i] = ep_num;
        }
 
        if (pusbd->speed == USB_SPEED_HIGH)
@@ -107,13 +105,6 @@ static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
                pdvobjpriv->ishighspeed = false;
 
        mutex_init(&pdvobjpriv->usb_vendor_req_mutex);
-       pdvobjpriv->usb_vendor_req_buf = kzalloc(MAX_USB_IO_CTL_SIZE, GFP_KERNEL);
-
-       if (!pdvobjpriv->usb_vendor_req_buf) {
-               usb_set_intfdata(usb_intf, NULL);
-               kfree(pdvobjpriv);
-               return NULL;
-       }
        usb_get_dev(pusbd);
 
        return pdvobjpriv;
@@ -141,7 +132,6 @@ static void usb_dvobj_deinit(struct usb_interface *usb_intf)
                        }
                }
 
-               kfree(dvobj->usb_vendor_req_buf);
                mutex_destroy(&dvobj->usb_vendor_req_mutex);
                kfree(dvobj);
        }
@@ -238,7 +228,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
        rtw_cancel_all_timer(padapter);
        LeaveAllPowerSaveMode(padapter);
 
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        /* s1. */
        if (pnetdev) {
                netif_carrier_off(pnetdev);
@@ -267,7 +257,7 @@ static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
        rtw_free_network_queue(padapter, true);
 
        rtw_dev_unload(padapter);
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 
        if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
                rtw_indicate_scan_done(padapter, 1);
@@ -298,7 +288,7 @@ static int rtw_resume_process(struct adapter *padapter)
                goto exit;
        }
 
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        rtw_reset_drv_sw(padapter);
        pwrpriv->bkeepfwalive = false;
 
@@ -309,14 +299,16 @@ static int rtw_resume_process(struct adapter *padapter)
        netif_device_attach(pnetdev);
        netif_carrier_on(pnetdev);
 
-       _exit_pwrlock(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 
        rtw_roaming(padapter, NULL);
 
        ret = 0;
 exit:
-       if (pwrpriv)
+       if (pwrpriv) {
                pwrpriv->bInSuspend = false;
+               mutex_unlock(&pwrpriv->mutex_lock);
+       }
        pr_debug("<===  %s return %d.............. in %dms\n", __func__,
                ret, jiffies_to_msecs(jiffies - start_time));
 
@@ -370,7 +362,7 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
        }
 
        /* step 2. hook HalFunc, allocate HalData */
-       hal_set_hal_ops(padapter);
+       rtl8188eu_set_hal_ops(padapter);
 
        padapter->intf_start = &usb_intf_start;
        padapter->intf_stop = &usb_intf_stop;
@@ -456,11 +448,9 @@ static void rtw_usb_if1_deinit(struct adapter *if1)
        free_mlme_ap_info(if1);
 #endif
 
-       if (pnetdev) {
-               /* will call netdev_close() */
-               unregister_netdev(pnetdev);
-               rtw_proc_remove_one(pnetdev);
-       }
+       if (pnetdev)
+               unregister_netdev(pnetdev); /* will call netdev_close() */
+
        rtl88eu_mon_deinit(if1->pmondev);
        rtw_cancel_all_timer(if1);
 
index ce1e1a135f1b8737ed58f5348a574a8f7bb6031a..9359cc7c7a493b792ca4000444bef3042531feee 100644 (file)
@@ -251,7 +251,7 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i
        }
 
        /*  Acquire IO memory for vendorreq */
-       pIo_buf = dvobjpriv->usb_vendor_req_buf;
+       pIo_buf = kmalloc(MAX_USB_IO_CTL_SIZE, GFP_ATOMIC);
 
        if (pIo_buf == NULL) {
                DBG_88E("[%s] pIo_buf == NULL\n", __func__);
@@ -303,6 +303,8 @@ static int usbctrl_vendorreq(struct adapter *adapt, u8 request, u16 value, u16 i
                if ((value >= FW_8188E_START_ADDRESS && value <= FW_8188E_END_ADDRESS) || status == len)
                        break;
        }
+       kfree(pIo_buf);
+
 release_mutex:
        mutex_unlock(&dvobjpriv->usb_vendor_req_mutex);
 exit:
@@ -525,7 +527,7 @@ u32 usb_read_port(struct adapter *adapter, u32 addr, u32 cnt, u8 *rmem)
        return ret;
 }
 
-void usb_read_port_cancel(struct adapter *padapter)
+void rtw_hal_inirp_deinit(struct adapter *padapter)
 {
        int i;
        struct recv_buf *precvbuf;
@@ -846,7 +848,7 @@ void rtl8188eu_xmit_tasklet(void *priv)
                        break;
                }
 
-               ret = rtl8188eu_xmitframe_complete(adapt, pxmitpriv, NULL);
+               ret = rtl8188eu_xmitframe_complete(adapt, pxmitpriv);
 
                if (!ret)
                        break;
index ba64a4f1b3a8ff2bf786d48b788f71c447286772..8d6bca61e7aadd2cc108611483e58509dcb15604 100644 (file)
@@ -1487,8 +1487,8 @@ static void _rtl92e_query_rxphystatus(
        struct phy_ofdm_rx_status_rxsc_sgien_exintfflag *prxsc;
        u8 *prxpkt;
        u8 i, max_spatial_stream, tmp_rxsnr, tmp_rxevm, rxsc_sgien_exflg;
-       char rx_pwr[4], rx_pwr_all = 0;
-       char rx_snrX, rx_evmX;
+       s8 rx_pwr[4], rx_pwr_all = 0;
+       s8 rx_snrX, rx_evmX;
        u8 evm, pwdb_all;
        u32 RSSI, total_rssi = 0;
        u8 is_cck_rate = 0;
@@ -1613,7 +1613,7 @@ static void _rtl92e_query_rxphystatus(
                                     2) - 110;
 
                        tmp_rxsnr = pofdm_buf->rxsnr_X[i];
-                       rx_snrX = (char)(tmp_rxsnr);
+                       rx_snrX = (s8)(tmp_rxsnr);
                        rx_snrX /= 2;
                        priv->stats.rxSNRdB[i] = (long)rx_snrX;
 
@@ -1643,7 +1643,7 @@ static void _rtl92e_query_rxphystatus(
 
                for (i = 0; i < max_spatial_stream; i++) {
                        tmp_rxevm = pofdm_buf->rxevm_X[i];
-                       rx_evmX = (char)(tmp_rxevm);
+                       rx_evmX = (s8)(tmp_rxevm);
 
                        rx_evmX /= 2;
 
index 5e3bbe5c3ca499f63da7566ade3356dbf9d159d4..dde4922614511adfcd73af7865ce14487aa98362 100644 (file)
@@ -256,7 +256,7 @@ u32 rtl92e_get_rf_reg(struct net_device *dev, enum rf90_radio_path eRFPath,
                return 0;
        if (priv->rtllib->eRFPowerState != eRfOn && !priv->being_init_adapter)
                return  0;
-       down(&priv->rf_sem);
+       mutex_lock(&priv->rf_mutex);
        if (priv->Rf_Mode == RF_OP_By_FW) {
                Original_Value = _rtl92e_phy_rf_fw_read(dev, eRFPath, RegAddr);
                udelay(200);
@@ -265,7 +265,7 @@ u32 rtl92e_get_rf_reg(struct net_device *dev, enum rf90_radio_path eRFPath,
        }
        BitShift =  _rtl92e_calculate_bit_shift(BitMask);
        Readback_Value = (Original_Value & BitMask) >> BitShift;
-       up(&priv->rf_sem);
+       mutex_unlock(&priv->rf_mutex);
        return Readback_Value;
 }
 
@@ -630,7 +630,7 @@ void rtl92e_set_tx_power(struct net_device *dev, u8 channel)
 {
        struct r8192_priv *priv = rtllib_priv(dev);
        u8      powerlevel = 0, powerlevelOFDM24G = 0;
-       char ant_pwr_diff;
+       s8      ant_pwr_diff;
        u32     u4RegValue;
 
        if (priv->epromtype == EEPROM_93C46) {
index 803c8b02a0c81a3eb9c0a7bfa5215a6e4737b1f1..30f65af4d614635675077ea6d00fcf052978093f 100644 (file)
@@ -107,9 +107,9 @@ void rtl92e_set_key(struct net_device *dev, u8 EntryNo, u8 KeyIndex,
                                            __func__);
                                return;
                        }
-                       down(&priv->rtllib->ips_sem);
+                       mutex_lock(&priv->rtllib->ips_mutex);
                        rtl92e_ips_leave(dev);
-                       up(&priv->rtllib->ips_sem);
+                       mutex_unlock(&priv->rtllib->ips_mutex);
                }
        }
        priv->rtllib->is_set_key = true;
index 13a5ddc2bea577c68d17ebf930893194341f27a1..4c30eea45f89df5792217aa4594b17bd54773e13 100644 (file)
@@ -38,7 +38,7 @@ static int channels = 0x3fff;
 static char *ifname = "wlan%d";
 
 
-static struct rtl819x_ops rtl819xp_ops = {
+static const struct rtl819x_ops rtl819xp_ops = {
        .nic_type                       = NIC_8192E,
        .get_eeprom_size                = rtl92e_get_eeprom_size,
        .init_adapter_variable          = rtl92e_init_variables,
@@ -993,8 +993,8 @@ static void _rtl92e_init_priv_lock(struct r8192_priv *priv)
        spin_lock_init(&priv->irq_th_lock);
        spin_lock_init(&priv->rf_ps_lock);
        spin_lock_init(&priv->ps_lock);
-       sema_init(&priv->wx_sem, 1);
-       sema_init(&priv->rf_sem, 1);
+       mutex_init(&priv->wx_mutex);
+       mutex_init(&priv->rf_mutex);
        mutex_init(&priv->mutex);
 }
 
@@ -1247,7 +1247,7 @@ static void _rtl92e_if_silent_reset(struct net_device *dev)
 
 RESET_START:
 
-               down(&priv->wx_sem);
+               mutex_lock(&priv->wx_mutex);
 
                if (priv->rtllib->state == RTLLIB_LINKED)
                        rtl92e_leisure_ps_leave(dev);
@@ -1255,7 +1255,7 @@ RESET_START:
                if (priv->up) {
                        netdev_info(dev, "%s():the driver is not up.\n",
                                    __func__);
-                       up(&priv->wx_sem);
+                       mutex_unlock(&priv->wx_mutex);
                        return;
                }
                priv->up = 0;
@@ -1277,14 +1277,14 @@ RESET_START:
                rtllib_stop_scan_syncro(ieee);
 
                if (ieee->state == RTLLIB_LINKED) {
-                       SEM_DOWN_IEEE_WX(&ieee->wx_sem);
+                       mutex_lock(&ieee->wx_mutex);
                        netdev_info(dev, "ieee->state is RTLLIB_LINKED\n");
                        rtllib_stop_send_beacons(priv->rtllib);
                        del_timer_sync(&ieee->associate_timer);
                        cancel_delayed_work(&ieee->associate_retry_wq);
                        rtllib_stop_scan(ieee);
                        netif_carrier_off(dev);
-                       SEM_UP_IEEE_WX(&ieee->wx_sem);
+                       mutex_unlock(&ieee->wx_mutex);
                } else {
                        netdev_info(dev, "ieee->state is NOT LINKED\n");
                        rtllib_softmac_stop_protocol(priv->rtllib, 0, true);
@@ -1292,7 +1292,7 @@ RESET_START:
 
                rtl92e_dm_backup_state(dev);
 
-               up(&priv->wx_sem);
+               mutex_unlock(&priv->wx_mutex);
                RT_TRACE(COMP_RESET,
                         "%s():<==========down process is finished\n",
                         __func__);
@@ -1982,7 +1982,7 @@ void rtl92e_update_rx_statistics(struct r8192_priv *priv,
                                        weighting) / 6;
 }
 
-u8 rtl92e_rx_db_to_percent(char antpower)
+u8 rtl92e_rx_db_to_percent(s8 antpower)
 {
        if ((antpower <= -100) || (antpower >= 20))
                return  0;
@@ -1993,9 +1993,9 @@ u8 rtl92e_rx_db_to_percent(char antpower)
 
 }      /* QueryRxPwrPercentage */
 
-u8 rtl92e_evm_db_to_percent(char value)
+u8 rtl92e_evm_db_to_percent(s8 value)
 {
-       char ret_val;
+       s8 ret_val;
 
        ret_val = value;
 
@@ -2179,9 +2179,9 @@ static int _rtl92e_open(struct net_device *dev)
        struct r8192_priv *priv = rtllib_priv(dev);
        int ret;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = _rtl92e_try_up(dev);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 
 }
@@ -2206,11 +2206,11 @@ static int _rtl92e_close(struct net_device *dev)
                rtllib_stop_scan(priv->rtllib);
        }
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = _rtl92e_down(dev, true);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
@@ -2242,11 +2242,11 @@ static void _rtl92e_restart(void *data)
                                  reset_wq);
        struct net_device *dev = priv->rtllib->dev;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        rtl92e_commit(dev);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 }
 
 static void _rtl92e_set_multicast(struct net_device *dev)
@@ -2265,12 +2265,12 @@ static int _rtl92e_set_mac_adr(struct net_device *dev, void *mac)
        struct r8192_priv *priv = rtllib_priv(dev);
        struct sockaddr *addr = mac;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ether_addr_copy(dev->dev_addr, addr->sa_data);
 
        schedule_work(&priv->reset_wq);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }
@@ -2287,7 +2287,7 @@ static int _rtl92e_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        struct iw_point *p = &wrq->u.data;
        struct ieee_param *ipw = NULL;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        switch (cmd) {
        case RTL_IOCTL_WPA_SUPPLICANT:
@@ -2393,7 +2393,7 @@ static int _rtl92e_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
        }
 
 out:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
index f627fdc15a58c49e6ed1e28d0f0f70af33b90360..babc0b3bce953972d1eeffc159cba85050a0d450 100644 (file)
@@ -375,8 +375,8 @@ struct r8192_priv {
        struct tasklet_struct           irq_tx_tasklet;
        struct tasklet_struct           irq_prepare_beacon_tasklet;
 
-       struct semaphore                        wx_sem;
-       struct semaphore                        rf_sem;
+       struct mutex                            wx_mutex;
+       struct mutex                            rf_mutex;
        struct mutex                            mutex;
 
        struct rt_stats stats;
@@ -503,8 +503,8 @@ struct r8192_priv {
        u32 Pwr_Track;
        u8 CCKPresentAttentuation_20Mdefault;
        u8 CCKPresentAttentuation_40Mdefault;
-       char CCKPresentAttentuation_difference;
-       char CCKPresentAttentuation;
+       s8 CCKPresentAttentuation_difference;
+       s8 CCKPresentAttentuation;
        long undecorated_smoothed_pwdb;
 
        u32 MCSTxPowerLevelOriginalOffset[6];
@@ -604,8 +604,8 @@ void rtl92e_update_rx_pkt_timestamp(struct net_device *dev,
 long rtl92e_translate_to_dbm(struct r8192_priv *priv, u8 signal_strength_index);
 void rtl92e_update_rx_statistics(struct r8192_priv *priv,
                                 struct rtllib_rx_stats *pprevious_stats);
-u8 rtl92e_evm_db_to_percent(char value);
-u8 rtl92e_rx_db_to_percent(char antpower);
+u8 rtl92e_evm_db_to_percent(s8 value);
+u8 rtl92e_rx_db_to_percent(s8 antpower);
 void rtl92e_copy_mpdu_stats(struct rtllib_rx_stats *psrc_stats,
                            struct rtllib_rx_stats *ptarget_stats);
 bool rtl92e_enable_nic(struct net_device *dev);
index 98e4d88d0e738ea9d5af8a28bd472c4fd13ccd61..aa4b015c3cc787449807c0a4f7a09535e4c1e327 100644 (file)
@@ -179,9 +179,9 @@ void rtl92e_ips_leave_wq(void *data)
        struct net_device *dev = ieee->dev;
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
-       down(&priv->rtllib->ips_sem);
+       mutex_lock(&priv->rtllib->ips_mutex);
        rtl92e_ips_leave(dev);
-       up(&priv->rtllib->ips_sem);
+       mutex_unlock(&priv->rtllib->ips_mutex);
 }
 
 void rtl92e_rtllib_ips_leave_wq(struct net_device *dev)
@@ -209,9 +209,9 @@ void rtl92e_rtllib_ips_leave(struct net_device *dev)
 {
        struct r8192_priv *priv = (struct r8192_priv *)rtllib_priv(dev);
 
-       down(&priv->rtllib->ips_sem);
+       mutex_lock(&priv->rtllib->ips_mutex);
        rtl92e_ips_leave(dev);
-       up(&priv->rtllib->ips_sem);
+       mutex_unlock(&priv->rtllib->ips_mutex);
 }
 
 static bool _rtl92e_ps_set_mode(struct net_device *dev, u8 rtPsMode)
index 70df6a1485d6fb0e0a05fff203b4f92d41fe2ec0..7413a100ca1977e9dea421eefbbe98bea5279a57 100644 (file)
@@ -65,11 +65,11 @@ static int _rtl92e_wx_set_rate(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rate(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -84,11 +84,11 @@ static int _rtl92e_wx_set_rts(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rts(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -114,11 +114,11 @@ static int _rtl92e_wx_set_power(struct net_device *dev,
                            __func__);
                return 0;
        }
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_power(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -142,11 +142,11 @@ static int _rtl92e_wx_set_rawtx(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_rawtx(priv->rtllib, info, wrqu, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
@@ -158,12 +158,12 @@ static int _rtl92e_wx_force_reset(struct net_device *dev,
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_DBG, "%s(): force reset ! extra is %d\n",
                 __func__, *extra);
        priv->force_reset = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
@@ -177,7 +177,7 @@ static int _rtl92e_wx_adapter_power_status(struct net_device *dev,
                                        (&(priv->rtllib->PowerSaveControl));
        struct rtllib_device *ieee = priv->rtllib;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_POWER, "%s(): %s\n", __func__, (*extra == 6) ?
                 "DC power" : "AC power");
@@ -193,7 +193,7 @@ static int _rtl92e_wx_adapter_power_status(struct net_device *dev,
                ieee->ps = *extra;
        }
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }
@@ -207,13 +207,13 @@ static int _rtl92e_wx_set_lps_awake_interval(struct net_device *dev,
        struct rt_pwr_save_ctrl *pPSC = (struct rt_pwr_save_ctrl *)
                                        (&(priv->rtllib->PowerSaveControl));
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        netdev_info(dev, "%s(): set lps awake interval ! extra is %d\n",
                    __func__, *extra);
 
        pPSC->RegMaxLPSAwakeIntvl = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 }
 
@@ -223,13 +223,13 @@ static int _rtl92e_wx_set_force_lps(struct net_device *dev,
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        netdev_info(dev,
                    "%s(): force LPS ! extra is %d (1 is open 0 is close)\n",
                    __func__, *extra);
        priv->force_lps = *extra;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
@@ -266,7 +266,7 @@ static int _rtl92e_wx_set_mode(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
        rtState = priv->rtllib->eRFPowerState;
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        if (wrqu->mode == IW_MODE_ADHOC || wrqu->mode == IW_MODE_MONITOR ||
            ieee->bNetPromiscuousMode) {
                if (priv->rtllib->PowerSaveControl.bInactivePs) {
@@ -275,21 +275,21 @@ static int _rtl92e_wx_set_mode(struct net_device *dev,
                                    RF_CHANGE_BY_IPS) {
                                        netdev_warn(dev, "%s(): RF is OFF.\n",
                                                    __func__);
-                                       up(&priv->wx_sem);
+                                       mutex_unlock(&priv->wx_mutex);
                                        return -1;
                                }
                                netdev_info(dev,
                                            "=========>%s(): rtl92e_ips_leave\n",
                                            __func__);
-                               down(&priv->rtllib->ips_sem);
+                               mutex_lock(&priv->rtllib->ips_mutex);
                                rtl92e_ips_leave(dev);
-                               up(&priv->rtllib->ips_sem);
+                               mutex_unlock(&priv->rtllib->ips_mutex);
                        }
                }
        }
        ret = rtllib_wx_set_mode(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -425,7 +425,7 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,
                }
        }
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        priv->rtllib->FirstIe_InScan = true;
 
@@ -436,15 +436,15 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,
                                    RF_CHANGE_BY_IPS) {
                                        netdev_warn(dev, "%s(): RF is OFF.\n",
                                                    __func__);
-                                       up(&priv->wx_sem);
+                                       mutex_unlock(&priv->wx_mutex);
                                        return -1;
                                }
                                RT_TRACE(COMP_PS,
                                         "=========>%s(): rtl92e_ips_leave\n",
                                         __func__);
-                               down(&priv->rtllib->ips_sem);
+                               mutex_lock(&priv->rtllib->ips_mutex);
                                rtl92e_ips_leave(dev);
-                               up(&priv->rtllib->ips_sem);
+                               mutex_unlock(&priv->rtllib->ips_mutex);
                        }
                }
                rtllib_stop_scan(priv->rtllib);
@@ -471,7 +471,7 @@ static int _rtl92e_wx_set_scan(struct net_device *dev,
                ret = rtllib_wx_set_scan(priv->rtllib, a, wrqu, b);
        }
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -491,11 +491,11 @@ static int _rtl92e_wx_get_scan(struct net_device *dev,
                return 0;
 
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_get_scan(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -513,10 +513,10 @@ static int _rtl92e_wx_set_essid(struct net_device *dev,
                            __func__);
                return 0;
        }
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_essid(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -528,11 +528,11 @@ static int _rtl92e_wx_get_essid(struct net_device *dev,
        int ret;
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_get_essid(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 }
@@ -545,12 +545,12 @@ static int _rtl92e_wx_set_nick(struct net_device *dev,
 
        if (wrqu->data.length > IW_ESSID_MAX_SIZE)
                return -E2BIG;
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        wrqu->data.length = min_t(size_t, wrqu->data.length,
                                  sizeof(priv->nick));
        memset(priv->nick, 0, sizeof(priv->nick));
        memcpy(priv->nick, extra, wrqu->data.length);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 
 }
@@ -561,11 +561,11 @@ static int _rtl92e_wx_get_nick(struct net_device *dev,
 {
        struct r8192_priv *priv = rtllib_priv(dev);
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        wrqu->data.length = strlen(priv->nick);
        memcpy(extra, priv->nick, wrqu->data.length);
        wrqu->data.flags = 1;   /* active */
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return 0;
 }
 
@@ -579,11 +579,11 @@ static int _rtl92e_wx_set_freq(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_freq(priv->rtllib, a, wrqu, b);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -644,11 +644,11 @@ static int _rtl92e_wx_set_wap(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        ret = rtllib_wx_set_wap(priv->rtllib, info, awrq, extra);
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return ret;
 
@@ -698,14 +698,14 @@ static int _rtl92e_wx_set_enc(struct net_device *dev,
                return -ENETDOWN;
 
        priv->rtllib->wx_set_enc = 1;
-       down(&priv->rtllib->ips_sem);
+       mutex_lock(&priv->rtllib->ips_mutex);
        rtl92e_ips_leave(dev);
-       up(&priv->rtllib->ips_sem);
-       down(&priv->wx_sem);
+       mutex_unlock(&priv->rtllib->ips_mutex);
+       mutex_lock(&priv->wx_mutex);
 
        RT_TRACE(COMP_SEC, "Setting SW wep key");
        ret = rtllib_wx_set_encode(priv->rtllib, info, wrqu, key);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
 
        if (wrqu->encoding.flags & IW_ENCODE_DISABLED) {
@@ -799,7 +799,7 @@ static int _rtl92e_wx_set_retry(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        if (wrqu->retry.flags & IW_RETRY_LIFETIME ||
            wrqu->retry.disabled) {
@@ -822,7 +822,7 @@ static int _rtl92e_wx_set_retry(struct net_device *dev,
 
        rtl92e_commit(dev);
 exit:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return err;
 }
@@ -875,7 +875,7 @@ static int _rtl92e_wx_set_sens(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        if (priv->rf_set_sens == NULL) {
                err = -1; /* we have not this support for this radio */
                goto exit;
@@ -886,7 +886,7 @@ static int _rtl92e_wx_set_sens(struct net_device *dev,
                err = -EINVAL;
 
 exit:
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return err;
 }
@@ -902,12 +902,12 @@ static int _rtl92e_wx_set_encode_ext(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        priv->rtllib->wx_set_enc = 1;
-       down(&priv->rtllib->ips_sem);
+       mutex_lock(&priv->rtllib->ips_mutex);
        rtl92e_ips_leave(dev);
-       up(&priv->rtllib->ips_sem);
+       mutex_unlock(&priv->rtllib->ips_mutex);
 
        ret = rtllib_wx_set_encode_ext(ieee, info, wrqu, extra);
        {
@@ -969,7 +969,7 @@ static int _rtl92e_wx_set_encode_ext(struct net_device *dev,
 
 end_hw_sec:
        priv->rtllib->wx_set_enc = 0;
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 
 }
@@ -985,9 +985,9 @@ static int _rtl92e_wx_set_auth(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_auth(priv->rtllib, info, &(data->param), extra);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -1003,9 +1003,9 @@ static int _rtl92e_wx_set_mlme(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_mlme(priv->rtllib, info, wrqu, extra);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -1020,9 +1020,9 @@ static int _rtl92e_wx_set_gen_ie(struct net_device *dev,
        if (priv->bHwRadioOff)
                return 0;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
        ret = rtllib_wx_set_gen_ie(priv->rtllib, extra, data->data.length);
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
        return ret;
 }
 
@@ -1097,14 +1097,14 @@ static int _rtl92e_wx_get_promisc_mode(struct net_device *dev,
        struct r8192_priv *priv = rtllib_priv(dev);
        struct rtllib_device *ieee = priv->rtllib;
 
-       down(&priv->wx_sem);
+       mutex_lock(&priv->wx_mutex);
 
        snprintf(extra, 45, "PromiscuousMode:%d, FilterSrcSTAFrame:%d",
                 ieee->IntelPromiscuousModeInfo.bPromiscuousOn,
                 ieee->IntelPromiscuousModeInfo.bFilterSourceStationFrame);
        wrqu->data.length = strlen(extra) + 1;
 
-       up(&priv->wx_sem);
+       mutex_unlock(&priv->wx_mutex);
 
        return 0;
 }
index 463122db6d2965149d6fa2f2b4f11bbd67607c31..61da8f7475bbfb10394916ff38daeeea6c69f1b4 100644 (file)
@@ -169,9 +169,6 @@ union qos_tclas {
        } TYPE2_8021Q;
 };
 
-#define IsACValid(ac)          ((ac >= 0 && ac <= 7) ? true : false)
-
-
 union aci_aifsn {
        u8      charData;
 
index 2c8a526773ed7460528ba58ad7d2dfd7da30b792..a966a8e490abfe3ba9aca46107b30bf765b62560 100644 (file)
@@ -306,6 +306,11 @@ static void MakeTSEntry(struct ts_common_info *pTsCommonInfo, u8 *Addr,
        pTsCommonInfo->TClasNum = TCLAS_Num;
 }
 
+static bool IsACValid(unsigned int tid)
+{
+       return tid < 7;
+}
+
 bool GetTs(struct rtllib_device *ieee, struct ts_common_info **ppTS,
           u8 *Addr, u8 TID, enum tr_select TxRxSelect, bool bAddNewTs)
 {
index 776e179d5bfd120169ab6b81916ed7124ad12330..38247fad76f8fb6271258a1e8787300cc92266ee 100644 (file)
@@ -30,7 +30,7 @@
 #include <linux/jiffies.h>
 #include <linux/timer.h>
 #include <linux/sched.h>
-#include <linux/semaphore.h>
+#include <linux/mutex.h>
 
 #include <linux/delay.h>
 #include <linux/wireless.h>
@@ -1651,9 +1651,9 @@ struct rtllib_device {
        short proto_started;
        short proto_stoppping;
 
-       struct semaphore wx_sem;
-       struct semaphore scan_sem;
-       struct semaphore ips_sem;
+       struct mutex wx_mutex;
+       struct mutex scan_mutex;
+       struct mutex ips_mutex;
 
        spinlock_t mgmt_tx_lock;
        spinlock_t beacon_lock;
@@ -2212,7 +2212,5 @@ void rtllib_indicate_packets(struct rtllib_device *ieee,
 void HTUseDefaultSetting(struct rtllib_device *ieee);
 #define RT_ASOC_RETRY_LIMIT    5
 u8 MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee);
-#define SEM_DOWN_IEEE_WX(psem) down(psem)
-#define SEM_UP_IEEE_WX(psem) up(psem)
 
 #endif /* RTLLIB_H */
index 62154e3f4463d906f2f48afb88cd70ce06991c17..da74dc49b95ec7fa498c3225447b4f3875dbdc47 100644 (file)
@@ -276,8 +276,9 @@ inline void softmac_mgmt_xmit(struct sk_buff *skb, struct rtllib_device *ieee)
        }
 }
 
-inline void softmac_ps_mgmt_xmit(struct sk_buff *skb,
-               struct rtllib_device *ieee)
+static inline void
+softmac_ps_mgmt_xmit(struct sk_buff *skb,
+                    struct rtllib_device *ieee)
 {
        short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE;
        struct rtllib_hdr_3addr  *header =
@@ -513,7 +514,7 @@ static void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
 
        ieee->be_scan_inprogress = true;
 
-       down(&ieee->scan_sem);
+       mutex_lock(&ieee->scan_mutex);
 
        while (1) {
                do {
@@ -566,7 +567,7 @@ out:
                if (IS_DOT11D_ENABLE(ieee))
                        DOT11D_ScanComplete(ieee);
        }
-       up(&ieee->scan_sem);
+       mutex_unlock(&ieee->scan_mutex);
 
        ieee->be_scan_inprogress = false;
 
@@ -587,7 +588,7 @@ static void rtllib_softmac_scan_wq(void *data)
        if (rtllib_act_scanning(ieee, true))
                return;
 
-       down(&ieee->scan_sem);
+       mutex_lock(&ieee->scan_mutex);
 
        if (ieee->eRFPowerState == eRfOff) {
                netdev_info(ieee->dev,
@@ -618,7 +619,7 @@ static void rtllib_softmac_scan_wq(void *data)
        schedule_delayed_work(&ieee->softmac_scan_wq,
                              msecs_to_jiffies(RTLLIB_SOFTMAC_SCAN_TIME));
 
-       up(&ieee->scan_sem);
+       mutex_unlock(&ieee->scan_mutex);
        return;
 
 out:
@@ -630,7 +631,7 @@ out1:
        ieee->actscanning = false;
        ieee->scan_watch_dog = 0;
        ieee->scanning_continue = 0;
-       up(&ieee->scan_sem);
+       mutex_unlock(&ieee->scan_mutex);
 }
 
 
@@ -683,7 +684,7 @@ EXPORT_SYMBOL(rtllib_start_send_beacons);
 
 static void rtllib_softmac_stop_scan(struct rtllib_device *ieee)
 {
-       down(&ieee->scan_sem);
+       mutex_lock(&ieee->scan_mutex);
        ieee->scan_watch_dog = 0;
        if (ieee->scanning_continue == 1) {
                ieee->scanning_continue = 0;
@@ -692,7 +693,7 @@ static void rtllib_softmac_stop_scan(struct rtllib_device *ieee)
                cancel_delayed_work_sync(&ieee->softmac_scan_wq);
        }
 
-       up(&ieee->scan_sem);
+       mutex_unlock(&ieee->scan_mutex);
 }
 
 void rtllib_stop_scan(struct rtllib_device *ieee)
@@ -753,7 +754,7 @@ static void rtllib_start_scan(struct rtllib_device *ieee)
        }
 }
 
-/* called with wx_sem held */
+/* called with wx_mutex held */
 void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
 {
        if (IS_DOT11D_ENABLE(ieee)) {
@@ -770,8 +771,10 @@ void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh)
 }
 EXPORT_SYMBOL(rtllib_start_scan_syncro);
 
-inline struct sk_buff *rtllib_authentication_req(struct rtllib_network *beacon,
-       struct rtllib_device *ieee, int challengelen, u8 *daddr)
+static inline struct sk_buff *
+rtllib_authentication_req(struct rtllib_network *beacon,
+                         struct rtllib_device *ieee,
+                         int challengelen, u8 *daddr)
 {
        struct sk_buff *skb;
        struct rtllib_authentication *auth;
@@ -1130,7 +1133,7 @@ static void rtllib_resp_to_probe(struct rtllib_device *ieee, u8 *dest)
 }
 
 
-inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid)
+static inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid)
 {
        int i = 0;
 
@@ -1146,8 +1149,9 @@ inline int SecIsInPMKIDList(struct rtllib_device *ieee, u8 *bssid)
        return i;
 }
 
-inline struct sk_buff *rtllib_association_req(struct rtllib_network *beacon,
-                                             struct rtllib_device *ieee)
+static inline struct sk_buff *
+rtllib_association_req(struct rtllib_network *beacon,
+                      struct rtllib_device *ieee)
 {
        struct sk_buff *skb;
        struct rtllib_assoc_request_frame *hdr;
@@ -1590,7 +1594,7 @@ static void rtllib_associate_procedure_wq(void *data)
        rtllib_stop_scan_syncro(ieee);
        if (ieee->rtllib_ips_leave != NULL)
                ieee->rtllib_ips_leave(ieee->dev);
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (ieee->data_hard_stop)
                ieee->data_hard_stop(ieee->dev);
@@ -1605,14 +1609,14 @@ static void rtllib_associate_procedure_wq(void *data)
                         __func__);
                if (ieee->rtllib_ips_leave_wq != NULL)
                        ieee->rtllib_ips_leave_wq(ieee->dev);
-               up(&ieee->wx_sem);
+               mutex_unlock(&ieee->wx_mutex);
                return;
        }
        ieee->associate_seq = 1;
 
        rtllib_associate_step1(ieee, ieee->current_network.bssid);
 
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 }
 
 inline void rtllib_softmac_new_net(struct rtllib_device *ieee,
@@ -2209,8 +2213,9 @@ static void rtllib_process_action(struct rtllib_device *ieee,
        }
 }
 
-inline int rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
-                               struct rtllib_rx_stats *rx_stats)
+static inline int
+rtllib_rx_assoc_resp(struct rtllib_device *ieee, struct sk_buff *skb,
+                    struct rtllib_rx_stats *rx_stats)
 {
        u16 errcode;
        int aid;
@@ -2344,8 +2349,9 @@ static void rtllib_rx_auth_resp(struct rtllib_device *ieee, struct sk_buff *skb)
        }
 }
 
-inline int rtllib_rx_auth(struct rtllib_device *ieee, struct sk_buff *skb,
-                         struct rtllib_rx_stats *rx_stats)
+static inline int
+rtllib_rx_auth(struct rtllib_device *ieee, struct sk_buff *skb,
+              struct rtllib_rx_stats *rx_stats)
 {
 
        if (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) {
@@ -2361,7 +2367,8 @@ inline int rtllib_rx_auth(struct rtllib_device *ieee, struct sk_buff *skb,
        return 0;
 }
 
-inline int rtllib_rx_deauth(struct rtllib_device *ieee, struct sk_buff *skb)
+static inline int
+rtllib_rx_deauth(struct rtllib_device *ieee, struct sk_buff *skb)
 {
        struct rtllib_hdr_3addr *header = (struct rtllib_hdr_3addr *) skb->data;
        u16 frame_ctl;
@@ -2582,16 +2589,16 @@ static void rtllib_start_ibss_wq(void *data)
                                     struct rtllib_device, start_ibss_wq);
        /* iwconfig mode ad-hoc will schedule this and return
         * on the other hand this will block further iwconfig SET
-        * operations because of the wx_sem hold.
+        * operations because of the wx_mutex hold.
         * Anyway some most set operations set a flag to speed-up
         * (abort) this wq (when syncro scanning) before sleeping
-        * on the semaphore
+        * on the mutex
         */
        if (!ieee->proto_started) {
                netdev_info(ieee->dev, "==========oh driver down return\n");
                return;
        }
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (ieee->current_network.ssid_len == 0) {
                strcpy(ieee->current_network.ssid, RTLLIB_DEFAULT_TX_ESSID);
@@ -2703,7 +2710,7 @@ static void rtllib_start_ibss_wq(void *data)
 
        netif_carrier_on(ieee->dev);
 
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 }
 
 inline void rtllib_start_ibss(struct rtllib_device *ieee)
@@ -2711,7 +2718,7 @@ inline void rtllib_start_ibss(struct rtllib_device *ieee)
        schedule_delayed_work(&ieee->start_ibss_wq, msecs_to_jiffies(150));
 }
 
-/* this is called only in user context, with wx_sem held */
+/* this is called only in user context, with wx_mutex held */
 static void rtllib_start_bss(struct rtllib_device *ieee)
 {
        unsigned long flags;
@@ -2773,7 +2780,7 @@ static void rtllib_associate_retry_wq(void *data)
                                     struct rtllib_device, associate_retry_wq);
        unsigned long flags;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        if (!ieee->proto_started)
                goto exit;
 
@@ -2806,7 +2813,7 @@ static void rtllib_associate_retry_wq(void *data)
 
        ieee->beinretry = false;
 exit:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 }
 
 static struct sk_buff *rtllib_get_beacon_(struct rtllib_device *ieee)
@@ -2853,9 +2860,9 @@ void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, u8 mesh_flag,
                                  u8 shutdown)
 {
        rtllib_stop_scan_syncro(ieee);
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        rtllib_stop_protocol(ieee, shutdown);
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 }
 EXPORT_SYMBOL(rtllib_softmac_stop_protocol);
 
@@ -2902,9 +2909,9 @@ void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown)
 
 void rtllib_softmac_start_protocol(struct rtllib_device *ieee, u8 mesh_flag)
 {
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        rtllib_start_protocol(ieee);
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 }
 EXPORT_SYMBOL(rtllib_softmac_start_protocol);
 
@@ -3034,9 +3041,9 @@ void rtllib_softmac_init(struct rtllib_device *ieee)
        INIT_WORK_RSL(&ieee->wx_sync_scan_wq, (void *)rtllib_wx_sync_scan_wq,
                      ieee);
 
-       sema_init(&ieee->wx_sem, 1);
-       sema_init(&ieee->scan_sem, 1);
-       sema_init(&ieee->ips_sem, 1);
+       mutex_init(&ieee->wx_mutex);
+       mutex_init(&ieee->scan_mutex);
+       mutex_init(&ieee->ips_mutex);
 
        spin_lock_init(&ieee->mgmt_tx_lock);
        spin_lock_init(&ieee->beacon_lock);
@@ -3049,7 +3056,7 @@ void rtllib_softmac_init(struct rtllib_device *ieee)
 
 void rtllib_softmac_free(struct rtllib_device *ieee)
 {
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        kfree(ieee->pDot11dInfo);
        ieee->pDot11dInfo = NULL;
        del_timer_sync(&ieee->associate_timer);
@@ -3064,7 +3071,7 @@ void rtllib_softmac_free(struct rtllib_device *ieee)
        cancel_work_sync(&ieee->associate_complete_wq);
        cancel_work_sync(&ieee->ips_leave_wq);
        cancel_work_sync(&ieee->wx_sync_scan_wq);
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        tasklet_kill(&ieee->ps_task);
 }
 
@@ -3397,8 +3404,9 @@ static int rtllib_wpa_set_encryption(struct rtllib_device *ieee,
        return ret;
 }
 
-inline struct sk_buff *rtllib_disauth_skb(struct rtllib_network *beacon,
-               struct rtllib_device *ieee, u16 asRsn)
+static inline struct sk_buff *
+rtllib_disauth_skb(struct rtllib_network *beacon,
+                  struct rtllib_device *ieee, u16 asRsn)
 {
        struct sk_buff *skb;
        struct rtllib_disauth *disauth;
@@ -3423,8 +3431,9 @@ inline struct sk_buff *rtllib_disauth_skb(struct rtllib_network *beacon,
        return skb;
 }
 
-inline struct sk_buff *rtllib_disassociate_skb(struct rtllib_network *beacon,
-               struct rtllib_device *ieee, u16 asRsn)
+static inline struct sk_buff *
+rtllib_disassociate_skb(struct rtllib_network *beacon,
+                       struct rtllib_device *ieee, u16 asRsn)
 {
        struct sk_buff *skb;
        struct rtllib_disassoc *disass;
@@ -3499,7 +3508,7 @@ int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p,
        struct ieee_param *param;
        int ret = 0;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (p->length < sizeof(struct ieee_param) || !p->pointer) {
                ret = -EINVAL;
@@ -3543,7 +3552,7 @@ int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, struct iw_point *p,
 
        kfree(param);
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 
        return ret;
 }
index 61ed8b0413e4131756dfce65c334ec6cf747f098..5f1412fc410d12bb793f6dd48e91628747478402 100644 (file)
@@ -35,7 +35,7 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a,
        int ret;
        struct iw_freq *fwrq = &wrqu->freq;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (ieee->iw_mode == IW_MODE_INFRA) {
                ret = 0;
@@ -81,7 +81,7 @@ int rtllib_wx_set_freq(struct rtllib_device *ieee, struct iw_request_info *a,
 
        ret = 0;
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return ret;
 }
 EXPORT_SYMBOL(rtllib_wx_set_freq);
@@ -146,7 +146,7 @@ int rtllib_wx_set_wap(struct rtllib_device *ieee,
 
        rtllib_stop_scan_syncro(ieee);
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        /* use ifconfig hw ether */
        if (ieee->iw_mode == IW_MODE_MASTER) {
                ret = -1;
@@ -185,7 +185,7 @@ int rtllib_wx_set_wap(struct rtllib_device *ieee,
        if (ifup)
                rtllib_start_protocol(ieee);
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return ret;
 }
 EXPORT_SYMBOL(rtllib_wx_set_wap);
@@ -287,7 +287,7 @@ int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a,
        int set_mode_status = 0;
 
        rtllib_stop_scan_syncro(ieee);
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        switch (wrqu->mode) {
        case IW_MODE_MONITOR:
        case IW_MODE_ADHOC:
@@ -322,7 +322,7 @@ int rtllib_wx_set_mode(struct rtllib_device *ieee, struct iw_request_info *a,
        }
 
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return set_mode_status;
 }
 EXPORT_SYMBOL(rtllib_wx_set_mode);
@@ -412,7 +412,7 @@ void rtllib_wx_sync_scan_wq(void *data)
        rtllib_wake_all_queues(ieee);
 
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 
 }
 
@@ -421,7 +421,7 @@ int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a,
 {
        int ret = 0;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (ieee->iw_mode == IW_MODE_MONITOR || !(ieee->proto_started)) {
                ret = -1;
@@ -435,7 +435,7 @@ int rtllib_wx_set_scan(struct rtllib_device *ieee, struct iw_request_info *a,
        }
 
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return ret;
 }
 EXPORT_SYMBOL(rtllib_wx_set_scan);
@@ -450,7 +450,7 @@ int rtllib_wx_set_essid(struct rtllib_device *ieee,
        unsigned long flags;
 
        rtllib_stop_scan_syncro(ieee);
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        proto_started = ieee->proto_started;
 
@@ -492,7 +492,7 @@ int rtllib_wx_set_essid(struct rtllib_device *ieee,
        if (proto_started)
                rtllib_start_protocol(ieee);
 out:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return ret;
 }
 EXPORT_SYMBOL(rtllib_wx_set_essid);
@@ -514,7 +514,7 @@ int rtllib_wx_set_rawtx(struct rtllib_device *ieee,
        int enable = (parms[0] > 0);
        short prev = ieee->raw_tx;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (enable)
                ieee->raw_tx = 1;
@@ -536,7 +536,7 @@ int rtllib_wx_set_rawtx(struct rtllib_device *ieee,
                        netif_carrier_off(ieee->dev);
        }
 
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 
        return 0;
 }
@@ -575,7 +575,7 @@ int rtllib_wx_set_power(struct rtllib_device *ieee,
                return -1;
        }
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (wrqu->power.disabled) {
                RT_TRACE(COMP_DBG, "===>%s(): power disable\n", __func__);
@@ -611,7 +611,7 @@ int rtllib_wx_set_power(struct rtllib_device *ieee,
 
        }
 exit:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return ret;
 
 }
@@ -622,7 +622,7 @@ int rtllib_wx_get_power(struct rtllib_device *ieee,
                                 struct iw_request_info *info,
                                 union iwreq_data *wrqu, char *extra)
 {
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        if (ieee->ps == RTLLIB_PS_DISABLED) {
                wrqu->power.disabled = 1;
@@ -648,7 +648,7 @@ int rtllib_wx_get_power(struct rtllib_device *ieee,
                wrqu->power.flags |= IW_POWER_UNICAST_R;
 
 exit:
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        return 0;
 
 }
index 84e6272f28cd7105e8ac7bd2067446efcd9a87f0..b1500ee9a5cf8f97a2345324429fb119064116de 100644 (file)
@@ -263,7 +263,7 @@ int rtllib_wx_get_scan(struct rtllib_device *ieee,
        int err = 0;
 
        netdev_dbg(ieee->dev, "Getting scan\n");
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
        spin_lock_irqsave(&ieee->lock, flags);
 
        list_for_each_entry(network, &ieee->network_list, list) {
@@ -287,7 +287,7 @@ int rtllib_wx_get_scan(struct rtllib_device *ieee,
        }
 
        spin_unlock_irqrestore(&ieee->lock, flags);
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
        wrqu->data.length = ev -  extra;
        wrqu->data.flags = 0;
 
@@ -689,7 +689,7 @@ int rtllib_wx_set_mlme(struct rtllib_device *ieee,
        if (ieee->state != RTLLIB_LINKED)
                return -ENOLINK;
 
-       down(&ieee->wx_sem);
+       mutex_lock(&ieee->wx_mutex);
 
        switch (mlme->cmd) {
        case IW_MLME_DEAUTH:
@@ -716,11 +716,11 @@ int rtllib_wx_set_mlme(struct rtllib_device *ieee,
                ieee->current_network.ssid_len = 0;
                break;
        default:
-               up(&ieee->wx_sem);
+               mutex_unlock(&ieee->wx_mutex);
                return -EOPNOTSUPP;
        }
 
-       up(&ieee->wx_sem);
+       mutex_unlock(&ieee->wx_mutex);
 
        return 0;
 }
index b5d0c2eb045b99350d6b9cb40dbf7cfd6fa5d97d..9e3f432e5355fca2826baf0dddbfe522df2ba1c6 100644 (file)
@@ -1,7 +1,6 @@
 NIC_SELECT = RTL8192U
 
-ccflags-y := -I$(TOPDIR)/drivers/net/wireless
-ccflags-y += -O2
+ccflags-y := -O2
 ccflags-y += -DJACKSON_NEW_8187 -DJACKSON_NEW_RX
 
 ieee80211-rsl-objs := ieee80211_rx.o \
index 09e9499b7f9d79b6805c684ff5d6a617e1fcf250..077ea13eb1e74a847a05a865be76ce18c6ca7b57 100644 (file)
@@ -746,7 +746,7 @@ struct ieee80211_rx_stats {
        bool              bisrxaggrsubframe;
        bool              bPacketBeacon;        //cosa add for rssi
        bool              bToSelfBA;            //cosa add for rssi
-       char      cck_adc_pwdb[4];      //cosa add for rx path selection
+       s8                cck_adc_pwdb[4];      //cosa add for rx path selection
        u16               Seq_Num;
 
 };
@@ -1814,7 +1814,7 @@ struct ieee80211_device {
        u32 wpax_type_notify; //{added by David, 2006.9.26}
 
        /* QoS related flag */
-       char init_wmmparam_flag;
+       s8  init_wmmparam_flag;
        /* set on initialization */
        u8  qos_support;
 
index 821afc0ddac5c5dbff612c9024d6c9cfcde9f156..0b7b04ea09102e8be8b00dc9329c543de8100a9c 100644 (file)
@@ -533,7 +533,7 @@ typedef struct _rt_9x_tx_rate_history {
        u32             ht_mcs[4][16];
 } rt_tx_rahis_t, *prt_tx_rahis_t;
 typedef struct _RT_SMOOTH_DATA_4RF {
-       char    elements[4][100]; /* array to store values */
+       s8    elements[4][100]; /* array to store values */
        u32     index;            /* index to current array to store */
        u32     TotalNum;         /* num of valid elements */
        u32     TotalVal[4];      /* sum of valid elements */
@@ -1031,7 +1031,7 @@ typedef struct r8192_priv {
        s8 cck_present_attentuation;
        u8 cck_present_attentuation_20Mdefault;
        u8 cck_present_attentuation_40Mdefault;
-       char cck_present_attentuation_difference;
+       s8 cck_present_attentuation_difference;
        bool btxpower_tracking;
        bool bcck_in_ch14;
        bool btxpowerdata_readfromEEPORM;
index dd0970facdf5bd5bfbe80fdd48bb30faab178d08..b86b28ae7d7bf1aa959be7e9fedda5d7cca429c8 100644 (file)
@@ -1702,11 +1702,8 @@ short rtl8192_tx(struct net_device *dev, struct sk_buff *skb)
                }
                if (bSend0Byte) {
                        tx_urb_zero = usb_alloc_urb(0, GFP_ATOMIC);
-                       if (!tx_urb_zero) {
-                               RT_TRACE(COMP_ERR,
-                                        "can't alloc urb for zero byte\n");
+                       if (!tx_urb_zero)
                                return -ENOMEM;
-                       }
                        usb_fill_bulk_urb(tx_urb_zero, udev,
                                          usb_sndbulkpipe(udev, idx_pipe),
                                          &zero, 0, tx_zero_isr, dev);
@@ -4209,7 +4206,7 @@ static void rtl8192_process_phyinfo(struct r8192_priv *priv, u8 *buffer,
  *
  * Return:             0-100 percentage
  *---------------------------------------------------------------------------*/
-static u8 rtl819x_query_rxpwrpercentage(char antpower)
+static u8 rtl819x_query_rxpwrpercentage(s8 antpower)
 {
        if ((antpower <= -100) || (antpower >= 20))
                return  0;
@@ -4220,9 +4217,9 @@ static u8 rtl819x_query_rxpwrpercentage(char antpower)
 
 }      /* QueryRxPwrPercentage */
 
-static u8 rtl819x_evm_dbtopercentage(char value)
+static u8 rtl819x_evm_dbtopercentage(s8 value)
 {
-       char ret_val;
+       s8 ret_val;
 
        ret_val = value;
 
@@ -4297,8 +4294,8 @@ static void rtl8192_query_rxphystatus(struct r8192_priv *priv,
        phy_ofdm_rx_status_rxsc_sgien_exintfflag *prxsc;
        u8      *prxpkt;
        u8      i, max_spatial_stream, tmp_rxsnr, tmp_rxevm, rxsc_sgien_exflg;
-       char    rx_pwr[4], rx_pwr_all = 0;
-       char    rx_snrX, rx_evmX;
+       s8      rx_pwr[4], rx_pwr_all = 0;
+       s8      rx_snrX, rx_evmX;
        u8      evm, pwdb_all;
        u32     RSSI, total_rssi = 0;
        u8      is_cck_rate = 0;
@@ -4423,7 +4420,7 @@ static void rtl8192_query_rxphystatus(struct r8192_priv *priv,
 
                        /* Get Rx snr value in DB */
                        tmp_rxsnr =     pofdm_buf->rxsnr_X[i];
-                       rx_snrX = (char)(tmp_rxsnr);
+                       rx_snrX = (s8)(tmp_rxsnr);
                        rx_snrX /= 2;
                        priv->stats.rxSNRdB[i] = (long)rx_snrX;
 
@@ -4457,7 +4454,7 @@ static void rtl8192_query_rxphystatus(struct r8192_priv *priv,
 
                for (i = 0; i < max_spatial_stream; i++) {
                        tmp_rxevm =     pofdm_buf->rxevm_X[i];
-                       rx_evmX = (char)(tmp_rxevm);
+                       rx_evmX = (s8)(tmp_rxevm);
 
                        /* Do not use shift operation like "rx_evmX >>= 1"
                         * because the compiler of free build environment will
index 8918654b44ed7edbf87d06329b6049caf902d45f..5dc3b5b9bfff7f1fc6ac26fe362b5f69606d552d 100644 (file)
@@ -145,7 +145,7 @@ static void set_supported_rate(u8 *rates, uint mode)
        case WIRELESS_11BG:
                memcpy(rates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
                memcpy(rates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES,
-                       IEEE80211_NUM_OFDM_RATESLEN);
+                      IEEE80211_NUM_OFDM_RATESLEN);
                break;
        }
 }
@@ -188,24 +188,24 @@ int r8712_generate_ie(struct registry_priv *pregistrypriv)
        ie += 2;
        /*SSID*/
        ie = r8712_set_ie(ie, _SSID_IE_, pdev_network->Ssid.SsidLength,
-                   pdev_network->Ssid.Ssid, &sz);
+                         pdev_network->Ssid.Ssid, &sz);
        /*supported rates*/
        set_supported_rate(pdev_network->rates, pregistrypriv->wireless_mode);
        rateLen = r8712_get_rateset_len(pdev_network->rates);
        if (rateLen > 8) {
                ie = r8712_set_ie(ie, _SUPPORTEDRATES_IE_, 8,
-                           pdev_network->rates, &sz);
+                                 pdev_network->rates, &sz);
                ie = r8712_set_ie(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8),
-                           (pdev_network->rates + 8), &sz);
+                                 (pdev_network->rates + 8), &sz);
        } else
                ie = r8712_set_ie(ie, _SUPPORTEDRATES_IE_,
-                           rateLen, pdev_network->rates, &sz);
+                                 rateLen, pdev_network->rates, &sz);
        /*DS parameter set*/
        ie = r8712_set_ie(ie, _DSSET_IE_, 1,
-                   (u8 *)&(pdev_network->Configuration.DSConfig), &sz);
+                         (u8 *)&(pdev_network->Configuration.DSConfig), &sz);
        /*IBSS Parameter Set*/
        ie = r8712_set_ie(ie, _IBSS_PARA_IE_, 2,
-                   (u8 *)&(pdev_network->Configuration.ATIMWindow), &sz);
+                         (u8 *)&(pdev_network->Configuration.ATIMWindow), &sz);
        return sz;
 }
 
@@ -220,8 +220,7 @@ unsigned char *r8712_get_wpa_ie(unsigned char *pie, int *wpa_ie_len, int limit)
                pbuf = r8712_get_ie(pbuf, _WPA_IE_ID_, &len, limit);
                if (pbuf) {
                        /*check if oui matches...*/
-                       if (memcmp((pbuf + 2), wpa_oui_type,
-                           sizeof(wpa_oui_type)))
+                       if (memcmp((pbuf + 2), wpa_oui_type, sizeof(wpa_oui_type)))
                                goto check_next_ie;
                        /*check version...*/
                        memcpy((u8 *)&val16, (pbuf + 6), sizeof(val16));
@@ -279,7 +278,7 @@ static int r8712_get_wpa2_cipher_suite(u8 *s)
 }
 
 int r8712_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
-                int *pairwise_cipher)
+                      int *pairwise_cipher)
 {
        int i;
        int left, count;
@@ -322,7 +321,7 @@ int r8712_parse_wpa_ie(u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
 }
 
 int r8712_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher,
-                 int *pairwise_cipher)
+                       int *pairwise_cipher)
 {
        int i;
        int left, count;
@@ -365,7 +364,7 @@ int r8712_parse_wpa2_ie(u8 *rsn_ie, int rsn_ie_len, int *group_cipher,
 }
 
 int r8712_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
-              u8 *wpa_ie, u16 *wpa_len)
+                    u8 *wpa_ie, u16 *wpa_len)
 {
        u8 authmode;
        u8 wpa_oui[4] = {0x0, 0x50, 0xf2, 0x01};
@@ -383,7 +382,7 @@ int r8712_get_sec_ie(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
                } else {
                        if (authmode == _WPA2_IE_ID_) {
                                memcpy(rsn_ie, &in_ie[cnt],
-                                       in_ie[cnt + 1] + 2);
+                                      in_ie[cnt + 1] + 2);
                                *rsn_len = in_ie[cnt + 1] + 2;
                                cnt += in_ie[cnt + 1] + 2;  /*get next*/
                        } else {
index 57211f7e68a5e2917aefc435178a00f39c0b53dc..cbe4de05d26b9a83d1beec9e72d427244f1552e7 100644 (file)
@@ -243,9 +243,9 @@ static u32 start_drv_threads(struct _adapter *padapter)
 void r8712_stop_drv_threads(struct _adapter *padapter)
 {
        /*Below is to terminate r8712_cmd_thread & event_thread...*/
-       up(&padapter->cmdpriv.cmd_queue_sema);
+       complete(&padapter->cmdpriv.cmd_queue_comp);
        if (padapter->cmdThread)
-               _down_sema(&padapter->cmdpriv.terminate_cmdthread_sema);
+               wait_for_completion_interruptible(&padapter->cmdpriv.terminate_cmdthread_comp);
        padapter->cmdpriv.cmd_seq = 1;
 }
 
@@ -425,7 +425,7 @@ static int netdev_open(struct net_device *pnetdev)
        else
                netif_wake_queue(pnetdev);
 
-        if (video_mode)
+       if (video_mode)
                enable_video_mode(padapter, cbw40_enable);
        /* start driver mlme relation timer */
        start_drv_timers(padapter);
index aa0ec74af51121442f8100645782ef4f75fcf2e4..5d37e1f951cf58a8473b46d18f90995ca631d623 100644 (file)
@@ -36,7 +36,7 @@ struct intf_priv {
        /* when in USB, IO is through interrupt in/out endpoints */
        struct usb_device *udev;
        struct urb *piorw_urb;
-       struct semaphore io_retevt;
+       struct completion io_retevt_comp;
 };
 
 int r871x_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
index ad041c96fdb84817a6e7e19cb60b33d197f535ef..c9ea50daffff0a28ca919404cc270380d45ee676 100644 (file)
@@ -57,13 +57,6 @@ struct       __queue {
                spin_lock_init(&((pqueue)->lock));      \
        } while (0)
 
-static inline u32 _down_sema(struct semaphore *sema)
-{
-       if (down_interruptible(sema))
-               return _FAIL;
-       return _SUCCESS;
-}
-
 static inline u32 end_of_queue_search(struct list_head *head,
                struct list_head *plist)
 {
index 735a0eadd98c013f42972036a7905a8814c14690..576c15d25a0f80a53c0891f40331400d8f0b4c47 100644 (file)
@@ -60,7 +60,6 @@ int r8712_os_recvbuf_resource_alloc(struct _adapter *padapter,
        if (!precvbuf->purb)
                res = _FAIL;
        precvbuf->pskb = NULL;
-       precvbuf->reuse = false;
        precvbuf->pallocated_buf = NULL;
        precvbuf->pbuf = NULL;
        precvbuf->pdata = NULL;
index 13c018340ff2710f85d97cb906937080547cb578..9f61583af15016bb5900a1c9f2ba13dae5659c2e 100644 (file)
@@ -264,9 +264,9 @@ static struct cmd_obj *cmd_hdl_filter(struct _adapter *padapter,
                 */
                if (padapter->pwrctrlpriv.pwr_mode > PS_MODE_ACTIVE) {
                        padapter->pwrctrlpriv.pwr_mode = PS_MODE_ACTIVE;
-                       _enter_pwrlock(&(padapter->pwrctrlpriv.lock));
+                       mutex_lock(&padapter->pwrctrlpriv.mutex_lock);
                        r8712_set_rpwm(padapter, PS_STATE_S4);
-                       up(&(padapter->pwrctrlpriv.lock));
+                       mutex_unlock(&padapter->pwrctrlpriv.mutex_lock);
                }
                pcmd_r = pcmd;
                break;
@@ -322,7 +322,7 @@ int r8712_cmd_thread(void *context)
 
        allow_signal(SIGTERM);
        while (1) {
-               if ((_down_sema(&(pcmdpriv->cmd_queue_sema))) == _FAIL)
+               if (wait_for_completion_interruptible(&pcmdpriv->cmd_queue_comp))
                        break;
                if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
                        break;
@@ -395,10 +395,10 @@ _next:
                        }
                        if (pcmd->cmdcode == GEN_CMD_CODE(_SetPwrMode)) {
                                if (padapter->pwrctrlpriv.bSleep) {
-                                       _enter_pwrlock(&(padapter->
-                                                      pwrctrlpriv.lock));
+                                       mutex_lock(&padapter->
+                                                      pwrctrlpriv.mutex_lock);
                                        r8712_set_rpwm(padapter, PS_STATE_S2);
-                                       up(&padapter->pwrctrlpriv.lock);
+                                       mutex_unlock(&padapter->pwrctrlpriv.mutex_lock);
                                }
                        }
                        r8712_free_cmd_obj(pcmd);
@@ -420,7 +420,7 @@ _next:
                        break;
                r8712_free_cmd_obj(pcmd);
        } while (1);
-       up(&pcmdpriv->terminate_cmdthread_sema);
+       complete(&pcmdpriv->terminate_cmdthread_comp);
        thread_exit();
 }
 
index 9055827cccf8d883d47f04e388a6530fdde7cd0c..76d05351306684476df8b3a5a9ff4ebd96f75f83 100644 (file)
@@ -58,10 +58,12 @@ enum _LED_STATE_871x {
        LED_POWER_ON_BLINK = 5,
        LED_SCAN_BLINK = 6, /* LED is blinking during scanning period,
                             * the # of times to blink is depend on time
-                            * for scanning. */
+                            * for scanning.
+                            */
        LED_NO_LINK_BLINK = 7, /* LED is blinking during no link state. */
        LED_BLINK_StartToBlink = 8,/* Customized for Sercomm Printer
-                                   * Server case */
+                                   * Server case
+                                   */
        LED_BLINK_WPS = 9,      /* LED is blinkg during WPS communication */
        LED_TXRX_BLINK = 10,
        LED_BLINK_WPS_STOP = 11,        /*for ALPHA */
@@ -110,7 +112,8 @@ static void DeInitLed871x(struct LED_871x *pLed)
 {
        del_timer_sync(&pLed->BlinkTimer);
        /* We should reset bLedBlinkInProgress if we cancel
-        * the LedControlTimer, */
+        * the LedControlTimer,
+        */
        pLed->bLedBlinkInProgress = false;
 }
 
@@ -827,7 +830,8 @@ static void BlinkTimerCallback(unsigned long data)
        struct LED_871x  *pLed = (struct LED_871x *)data;
 
        /* This fixed the crash problem on Fedora 12 when trying to do the
-        * insmod;ifconfig up;rmmod commands. */
+        * insmod;ifconfig up;rmmod commands.
+        */
        if (pLed->padapter->bSurpriseRemoved || pLed->padapter->bDriverStopped)
                return;
        schedule_work(&pLed->BlinkWorkItem);
index f25b34c7d11520765096bc5cb7af890882270de5..4027d1a18415eebe9f6226f34a531f04153670e3 100644 (file)
@@ -163,7 +163,8 @@ static void update_recvframe_attrib_from_recvstat(struct rx_pkt_attrib *pattrib,
        drvinfo_sz = (le32_to_cpu(prxstat->rxdw0) & 0x000f0000) >> 16;
        drvinfo_sz <<= 3;
        /*TODO:
-        * Offset 0 */
+        * Offset 0
+        */
        pattrib->bdecrypted = ((le32_to_cpu(prxstat->rxdw0) & BIT(27)) >> 27)
                                 ? 0 : 1;
        pattrib->crc_err = (le32_to_cpu(prxstat->rxdw0) & BIT(14)) >> 14;
@@ -210,7 +211,8 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter,
        curfragnum = 0;
        if (curfragnum != pfhdr->attrib.frag_num) {
                /*the first fragment number must be 0
-                *free the whole queue*/
+                *free the whole queue
+                */
                r8712_free_recvframe(prframe, pfree_recv_queue);
                r8712_free_recvframe_queue(defrag_q, pfree_recv_queue);
                return NULL;
@@ -224,18 +226,21 @@ static union recv_frame *recvframe_defrag(struct _adapter *adapter,
                /*check the fragment sequence  (2nd ~n fragment frame) */
                if (curfragnum != pnfhdr->attrib.frag_num) {
                        /* the fragment number must increase  (after decache)
-                        * release the defrag_q & prframe */
+                        * release the defrag_q & prframe
+                        */
                        r8712_free_recvframe(prframe, pfree_recv_queue);
                        r8712_free_recvframe_queue(defrag_q, pfree_recv_queue);
                        return NULL;
                }
                curfragnum++;
                /* copy the 2nd~n fragment frame's payload to the first fragment
-                * get the 2nd~last fragment frame's payload */
+                * get the 2nd~last fragment frame's payload
+                */
                wlanhdr_offset = pnfhdr->attrib.hdrlen + pnfhdr->attrib.iv_len;
                recvframe_pull(pnextrframe, wlanhdr_offset);
                /* append  to first fragment frame's tail (if privacy frame,
-                * pull the ICV) */
+                * pull the ICV)
+                */
                recvframe_pull_tail(prframe, pfhdr->attrib.icv_len);
                memcpy(pfhdr->rx_tail, pnfhdr->rx_data, pnfhdr->len);
                recvframe_put(prframe, pnfhdr->len);
@@ -278,7 +283,8 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter,
                prtnframe = precv_frame;/*isn't a fragment frame*/
        if (ismfrag == 1) {
                /* 0~(n-1) fragment frame
-                * enqueue to defraf_g */
+                * enqueue to defraf_g
+                */
                if (pdefrag_q != NULL) {
                        if (fragnum == 0) {
                                /*the first fragment*/
@@ -294,7 +300,8 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter,
                        prtnframe = NULL;
                } else {
                        /* can't find this ta's defrag_queue, so free this
-                        * recv_frame */
+                        * recv_frame
+                        */
                        r8712_free_recvframe(precv_frame, pfree_recv_queue);
                        prtnframe = NULL;
                }
@@ -302,7 +309,8 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter,
        }
        if ((ismfrag == 0) && (fragnum != 0)) {
                /* the last fragment frame
-                * enqueue the last fragment */
+                * enqueue the last fragment
+                */
                if (pdefrag_q != NULL) {
                        phead = &pdefrag_q->queue;
                        list_add_tail(&pfhdr->list, phead);
@@ -311,7 +319,8 @@ union recv_frame *r8712_recvframe_chk_defrag(struct _adapter *padapter,
                        prtnframe = precv_frame;
                } else {
                        /* can't find this ta's defrag_queue, so free this
-                        *  recv_frame */
+                        *  recv_frame
+                        */
                        r8712_free_recvframe(precv_frame, pfree_recv_queue);
                        prtnframe = NULL;
                }
@@ -391,7 +400,8 @@ static int amsdu_to_msdu(struct _adapter *padapter, union recv_frame *prframe)
                   eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
                   !memcmp(sub_skb->data, bridge_tunnel_header, SNAP_SIZE))) {
                        /* remove RFC1042 or Bridge-Tunnel encapsulation and
-                        * replace EtherType */
+                        * replace EtherType
+                        */
                        skb_pull(sub_skb, SNAP_SIZE);
                        memcpy(skb_push(sub_skb, ETH_ALEN), pattrib->src,
                                ETH_ALEN);
@@ -530,7 +540,8 @@ int r8712_recv_indicatepkts_in_order(struct _adapter *padapter,
                preorder_ctrl->indicate_seq = pattrib->seq_num;
        }
        /* Prepare indication list and indication.
-        * Check if there is any packet need indicate. */
+        * Check if there is any packet need indicate.
+        */
        while (!list_empty(phead)) {
                prframe = container_of(plist, union recv_frame, u.list);
                pattrib = &prframe->u.hdr.attrib;
@@ -757,7 +768,8 @@ static void query_rx_phy_status(struct _adapter *padapter,
                        /* Modify the RF RNA gain value to -40, -20,
                         * -2, 14 by Jenyu's suggestion
                         * Note: different RF with the different
-                        * RNA gain. */
+                        * RNA gain.
+                        */
                        case 0x3:
                                rx_pwr_all = -40 - (pcck_buf->cck_agc_rpt &
                                             0x3e);
@@ -842,7 +854,8 @@ static void query_rx_phy_status(struct _adapter *padapter,
                        total_rssi += rssi;
                }
                /* (2)PWDB, Average PWDB cacluated by hardware (for
-                * rate adaptive) */
+                * rate adaptive)
+                */
                rx_pwr_all = (((pphy_head[PHY_STAT_PWDB_ALL_SHT]) >> 1) & 0x7f)
                             - 106;
                pwdb_all = query_rx_pwr_percentage(rx_pwr_all);
@@ -870,7 +883,8 @@ static void query_rx_phy_status(struct _adapter *padapter,
        }
        /* UI BSS List signal strength(in percentage), make it good looking,
         * from 0~100. It is assigned to the BSS List in
-        * GetValueFromBeaconOrProbeRsp(). */
+        * GetValueFromBeaconOrProbeRsp().
+        */
        if (bcck_rate)
                prframe->u.hdr.attrib.signal_strength =
                         (u8)r8712_signal_scale_mapping(pwdb_all);
@@ -1027,10 +1041,12 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
        transfer_len = pskb->len;
        /* Test throughput with Netgear 3700 (No security) with Chariot 3T3R
         * pairs. The packet count will be a big number so that the containing
-        * packet will effect the Rx reordering. */
+        * packet will effect the Rx reordering.
+        */
        if (transfer_len < pkt_len) {
                /* In this case, it means the MAX_RECVBUF_SZ is too small to
-                * get the data from 8712u. */
+                * get the data from 8712u.
+                */
                return _FAIL;
        }
        do {
@@ -1057,14 +1073,16 @@ static int recvbuf2recvframe(struct _adapter *padapter, struct sk_buff *pskb)
                tmp_len = pkt_len + drvinfo_sz + RXDESC_SIZE;
                pkt_offset = (u16)round_up(tmp_len, 128);
                /* for first fragment packet, driver need allocate 1536 +
-                * drvinfo_sz + RXDESC_SIZE to defrag packet. */
+                * drvinfo_sz + RXDESC_SIZE to defrag packet.
+                */
                if ((mf == 1) && (frag == 0))
                        /*1658+6=1664, 1664 is 128 alignment.*/
                        alloc_sz = max_t(u16, tmp_len, 1658);
                else
                        alloc_sz = tmp_len;
                /* 2 is for IP header 4 bytes alignment in QoS packet case.
-                * 4 is for skb->data 4 bytes alignment. */
+                * 4 is for skb->data 4 bytes alignment.
+                */
                alloc_sz += 6;
                pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
                if (pkt_copy) {
index fd9e3fc4c226d5986a7b13715b9ae631b2c4df73..96ca3e2740735f7b5664b66ba9d1487bf4401584 100644 (file)
@@ -61,7 +61,8 @@ struct recv_stat {
 struct phy_cck_rx_status {
        /* For CCK rate descriptor. This is a unsigned 8:1 variable.
         * LSB bit present 0.5. And MSB 7 bts present a signed value.
-        * Range from -64~+63.5. */
+        * Range from -64~+63.5.
+        */
        u8      adc_pwdb_X[4];
        u8      sq_rpt;
        u8      cck_agc_rpt;
@@ -103,7 +104,6 @@ struct recv_buf {
        struct _adapter  *adapter;
        struct urb *purb;
        _pkt *pskb;
-       u8 reuse;
        u8  irp_pending;
        u32  transfer_len;
        uint  len;
index af11b44b114064ffac509d6c74ed3a715a64a3ac..51e042815cc967941180ad80bba1107e3daefe23 100644 (file)
@@ -83,7 +83,8 @@
 
 #define CMD_ADDR_MAPPING_SHIFT         2       /*SDIO CMD ADDR MAPPING,
                                                 *shift 2 bit for match
-                                                * offset[14:2]*/
+                                                * offset[14:2]
+                                                */
 
 /*Offset for SDIO LOCAL*/
 #define        OFFSET_SDIO_LOCAL                               0x0FFF
index eed09c872fc9e4a76569ab59b1ea6117a857a573..2e66d28d6918ab6485312023f349f0e697ff114d 100644 (file)
 #define SYS_CLKSEL             BIT(SYS_CLKSEL_SHT) /* System Clock 80MHz*/
 #define PS_CLKSEL_SHT          1
 #define PS_CLKSEL              BIT(PS_CLKSEL_SHT) /*System power save
-                                                   * clock select.*/
+                                                   * clock select.
+                                                   */
 #define CPU_CLKSEL_SHT         2
 #define CPU_CLKSEL             BIT(CPU_CLKSEL_SHT) /* System Clock select,
                                                     * 1: AFE source,
-                                                    * 0: System clock(L-Bus)*/
+                                                    * 0: System clock(L-Bus)
+                                                    */
 #define INT32K_EN_SHT          3
 #define INT32K_EN              BIT(INT32K_EN_SHT)
 #define MACSLP_SHT             4
 #define RING_CLK_EN            BIT(RING_CLK_EN_SHT)
 #define SWHW_SEL_SHT           14
 #define SWHW_SEL               BIT(SWHW_SEL_SHT) /* Load done,
-                                                  * control path switch.*/
+                                                  * control path switch.
+                                                  */
 #define FWHW_SEL_SHT           15
 #define FWHW_SEL               BIT(FWHW_SEL_SHT) /* Sleep exit,
-                                                  * control path switch.*/
+                                                  * control path switch.
+                                                  */
 
 /*9346CR*/
 #define        _VPDIDX_MSK             0xFF00
 #define        AFE_MISC_E32_EN         BIT(AFE_MISC_E32_EN_SHT)
 #define        AFE_MISC_MBEN_SHT       1
 #define        AFE_MISC_MBEN           BIT(AFE_MISC_MBEN_SHT)/* Enable AFE Macro
-                                                      * Block's Mbias.*/
+                                                      * Block's Mbias.
+                                                      */
 #define        AFE_MISC_BGEN_SHT       0
 #define        AFE_MISC_BGEN           BIT(AFE_MISC_BGEN_SHT)/* Enable AFE Macro
-                                                      * Block's Bandgap.*/
+                                                      * Block's Bandgap.
+                                                      */
 
 
 /*--------------------------------------------------------------------------*/
 
 /* EFUSE_CTRL*/
 #define EF_FLAG                        BIT(31)         /* Access Flag, Write:1;
-                                                *              Read:0*/
+                                                *              Read:0
+                                                */
 #define EF_PGPD                        0x70000000      /* E-fuse Program time*/
 #define EF_RDT                 0x0F000000      /* E-fuse read time: in the
-                                                * unit of cycle time*/
+                                                * unit of cycle time
+                                                */
 #define EF_PDN_EN              BIT(19)         /* EFuse Power down enable*/
 #define ALD_EN                 BIT(18)         /* Autoload Enable*/
 #define EF_ADDR                        0x0003FF00      /* Access Address*/
 /* EFUSE_CLK_CTRL*/
 #define EFUSE_CLK_EN           BIT(1)          /* E-Fuse Clock Enable*/
 #define EFUSE_CLK_SEL          BIT(0)          /* E-Fuse Clock Select,
-                                                * 0:500K, 1:40M*/
+                                                * 0:500K, 1:40M
+                                                */
 
 #endif /*__RTL8712_SYSCFG_BITDEF_H__*/
 
index 7e0b94503dfc4f2d9ee791238e1f2d535f3b506b..4bbf76f27ad0b3ed280ee5e252db107f7ec40034 100644 (file)
@@ -535,7 +535,8 @@ static void update_txdesc(struct xmit_frame *pxmitframe, uint *pmem, int sz)
                 * seqnum per tid. about usb using 4-endpoint, qsel points out
                 * the correct mapping between AC&Endpoint,
                 * the purpose is that correct mapping lets the MAC release
-                * the AC Queue list correctly. */
+                * the AC Queue list correctly.
+                */
                ptxdesc->txdw3 = cpu_to_le32((pattrib->priority << SEQ_SHT) &
                                 0x0fff0000);
                if ((pattrib->ether_type != 0x888e) &&
@@ -586,7 +587,8 @@ static void update_txdesc(struct xmit_frame *pxmitframe, uint *pmem, int sz)
                 * per tid. about usb using 4-endpoint, qsel points out the
                 * correct mapping between AC&Endpoint,
                 * the purpose is that correct mapping let the MAC releases
-                * the AC Queue list correctly. */
+                * the AC Queue list correctly.
+                */
                ptxdesc->txdw3 = cpu_to_le32((pattrib->priority << SEQ_SHT) &
                                              0x0fff0000);
                /* offset 16 */
@@ -686,7 +688,8 @@ int r8712_xmitframe_complete(struct _adapter *padapter,
                                res = r8712_xmitframe_coalesce(padapter,
                                        pxmitframe->pkt, pxmitframe);
                        /* always return ndis_packet after
-                        * r8712_xmitframe_coalesce */
+                        * r8712_xmitframe_coalesce
+                        */
                        r8712_xmit_complete(padapter, pxmitframe);
                }
                if (res == _SUCCESS)
index aed03cfbb1ba3af16ede44cb8dce82823c7547cc..51b6959fc9d8ffb209a4bae6bc4027ce2cf0513b 100644 (file)
 #include "mlme_osdep.h"
 
 /*
-Caller and the r8712_cmd_thread can protect cmd_q by spin_lock.
-No irqsave is necessary.
-*/
+ * Caller and the r8712_cmd_thread can protect cmd_q by spin_lock.
+ * No irqsave is necessary.
+ */
 
 static sint _init_cmd_priv(struct cmd_priv *pcmdpriv)
 {
-       sema_init(&(pcmdpriv->cmd_queue_sema), 0);
-       sema_init(&(pcmdpriv->terminate_cmdthread_sema), 0);
+       init_completion(&pcmdpriv->cmd_queue_comp);
+       init_completion(&pcmdpriv->terminate_cmdthread_comp);
 
        _init_queue(&(pcmdpriv->cmd_queue));
 
@@ -110,14 +110,14 @@ static void _free_cmd_priv(struct cmd_priv *pcmdpriv)
 }
 
 /*
-Calling Context:
-
-_enqueue_cmd can only be called between kernel thread,
-since only spin_lock is used.
-
-ISR/Call-Back functions can't call this sub-function.
-
-*/
+ * Calling Context:
+ *
+ * _enqueue_cmd can only be called between kernel thread,
+ * since only spin_lock is used.
+ *
+ * ISR/Call-Back functions can't call this sub-function.
+ *
+ */
 
 static sint _enqueue_cmd(struct  __queue *queue, struct cmd_obj *obj)
 {
@@ -172,7 +172,7 @@ u32 r8712_enqueue_cmd(struct cmd_priv *pcmdpriv, struct cmd_obj *obj)
        if (pcmdpriv->padapter->eeprompriv.bautoload_fail_flag)
                return _FAIL;
        res = _enqueue_cmd(&pcmdpriv->cmd_queue, obj);
-       up(&pcmdpriv->cmd_queue_sema);
+       complete(&pcmdpriv->cmd_queue_comp);
        return res;
 }
 
@@ -189,7 +189,7 @@ u32 r8712_enqueue_cmd_ex(struct cmd_priv *pcmdpriv, struct cmd_obj *obj)
        spin_lock_irqsave(&queue->lock, irqL);
        list_add_tail(&obj->list, &queue->queue);
        spin_unlock_irqrestore(&queue->lock, irqL);
-       up(&pcmdpriv->cmd_queue_sema);
+       complete(&pcmdpriv->cmd_queue_comp);
        return _SUCCESS;
 }
 
@@ -211,11 +211,11 @@ void r8712_free_cmd_obj(struct cmd_obj *pcmd)
 }
 
 /*
-r8712_sitesurvey_cmd(~)
-       ### NOTE:#### (!!!!)
-       MUST TAKE CARE THAT BEFORE CALLING THIS FUNC,
-        YOU SHOULD HAVE LOCKED pmlmepriv->lock
-*/
+ *     r8712_sitesurvey_cmd(~)
*             ### NOTE:#### (!!!!)
*             MUST TAKE CARE THAT BEFORE CALLING THIS FUNC,
*             YOU SHOULD HAVE LOCKED pmlmepriv->lock
+ */
 u8 r8712_sitesurvey_cmd(struct _adapter *padapter,
                        struct ndis_802_11_ssid *pssid)
 {
@@ -491,8 +491,9 @@ u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
                memcpy(&psecuritypriv->authenticator_ie[1],
                        &psecnetwork->IEs[12], (256 - 1));
        psecnetwork->IELength = 0;
-       /* If the driver wants to use the bssid to create the connection.
-        * If not,  we copy the connecting AP's MAC address to it so that
+       /*
+        * If the driver wants to use the bssid to create the connection.
+        * If not, we copy the connecting AP's MAC address to it so that
         * the driver just has the bssid information for PMKIDList searching.
         */
        if (!pmlmepriv->assoc_by_bssid)
@@ -519,7 +520,8 @@ u8 r8712_joinbss_cmd(struct _adapter  *padapter, struct wlan_network *pnetwork)
                }
        }
        if (pregistrypriv->ht_enable) {
-               /* For WEP mode, we will use the bg mode to do the connection
+               /*
+                * For WEP mode, we will use the bg mode to do the connection
                 * to avoid some IOT issues, especially for Realtek 8192u
                 * SoftAP.
                 */
@@ -904,8 +906,10 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter,
                        (r8712_get_wlan_bssid_ex_sz(pnetwork)));
                if (pmlmepriv->fw_state & _FW_UNDER_LINKING)
                        pmlmepriv->fw_state ^= _FW_UNDER_LINKING;
-               /* we will set _FW_LINKED when there is one more sat to
-                * join us (stassoc_event_callback) */
+               /*
+                * we will set _FW_LINKED when there is one more sat to
+                * join us (stassoc_event_callback)
+                */
        }
 createbss_cmd_fail:
        spin_unlock_irqrestore(&pmlmepriv->lock, irqL);
index e4a2a50c85de792cdf056d57369766c4e6e8d2fb..a2cee36cc347b2b5406b4aeef6021834d382aad8 100644 (file)
@@ -50,8 +50,8 @@ struct cmd_obj {
 };
 
 struct cmd_priv {
-       struct semaphore cmd_queue_sema;
-       struct semaphore terminate_cmdthread_sema;
+       struct completion cmd_queue_comp;
+       struct completion terminate_cmdthread_comp;
        struct  __queue cmd_queue;
        u8 cmd_seq;
        u8 *cmd_buf;    /*shall be non-paged, and 4 bytes aligned*/
@@ -185,10 +185,12 @@ struct setauth_parm {
  */
 struct setkey_parm {
        u8      algorithm;      /* encryption algorithm, could be none, wep40,
-                                * TKIP, CCMP, wep104 */
+                                * TKIP, CCMP, wep104
+                                */
        u8      keyid;
        u8      grpkey;         /* 1: this is the grpkey for 802.1x.
-                                * 0: this is the unicast key for 802.1x */
+                                * 0: this is the unicast key for 802.1x
+                                */
        u8      key[16];        /* this could be 40 or 104 */
 };
 
@@ -570,7 +572,8 @@ struct setpwrmode_parm  {
        u8      bcn_rx_en;
        u8      bcn_pass_cnt;     /* fw report one beacon information to
                                   * driver  when it receives bcn_pass_cnt
-                                  *  beacons. */
+                                  * beacons.
+                                  */
        u8      bcn_to;           /* beacon TO (ms). ¡§=0¡¨ no limit.*/
        u16     bcn_itv;
        u8      app_itv; /* only for VOIP mode. */
index 41872d9374081f38e8f62015dabada0c30528e3b..513f458ea07caf5b6c2c9d65db289d65675d4836 100644 (file)
@@ -36,7 +36,8 @@ struct ht_priv {
        unsigned int    tx_amsdu_enable;/*for enable Tx A-MSDU */
        unsigned int    tx_amdsu_maxlen; /* 1: 8k, 0:4k ; default:8k, for tx */
        unsigned int    rx_ampdu_maxlen; /* for rx reordering ctrl win_sz,
-                                         *  updated when join_callback. */
+                                         * updated when join_callback.
+                                         */
        struct ieee80211_ht_cap ht_cap;
 };
 
index c9218be5bb4ffe2f2372d7f60f5e92ebcdbcccf4..08bcb3b41bbd4888d195828b5ff8a8a3d5c3187b 100644 (file)
@@ -68,7 +68,8 @@ struct oid_par_priv {
 
 struct oid_obj_priv {
        unsigned char   dbg; /* 0: without OID debug message
-                             * 1: with OID debug message */
+                             * 1: with OID debug message
+                             */
        uint (*oidfuns)(struct oid_par_priv *poid_par_priv);
 };
 
index 56760cda8e893da58e1b05a053a708b3dca379c8..0aaf2aab6dd09bf5e94447b297a2fa1bb550ad3d 100644 (file)
@@ -140,7 +140,8 @@ u8 r8712_set_802_11_bssid(struct _adapter *padapter, u8 *bssid)
                    ETH_ALEN)) {
                        if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE))
                                goto _Abort_Set_BSSID; /* driver is in
-                                               * WIFI_ADHOC_MASTER_STATE */
+                                               * WIFI_ADHOC_MASTER_STATE
+                                               */
                } else {
                        r8712_disassoc_cmd(padapter);
                        if (check_fwstate(pmlmepriv, _FW_LINKED))
@@ -203,7 +204,8 @@ void r8712_set_802_11_ssid(struct _adapter *padapter,
                                        }
                                } else {
                                        goto _Abort_Set_SSID; /* driver is in
-                                                 * WIFI_ADHOC_MASTER_STATE */
+                                               * WIFI_ADHOC_MASTER_STATE
+                                               */
                                }
                        }
                } else {
@@ -254,12 +256,14 @@ void r8712_set_802_11_infrastructure_mode(struct _adapter *padapter,
                    (*pold_state == Ndis802_11IBSS)) {
                        /* will clr Linked_state before this function,
                         * we must have checked whether issue dis-assoc_cmd or
-                        * not */
+                        * not
+                        */
                        r8712_ind_disconnect(padapter);
                }
                *pold_state = networktype;
                /* clear WIFI_STATION_STATE; WIFI_AP_STATE; WIFI_ADHOC_STATE;
-                * WIFI_ADHOC_MASTER_STATE */
+                * WIFI_ADHOC_MASTER_STATE
+                */
                _clr_fwstate_(pmlmepriv, WIFI_STATION_STATE | WIFI_AP_STATE |
                              WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE);
                switch (networktype) {
index eb612053a3ddee69e3c6da8dc15f7112f77f15b8..adfbc400a18d92b36801d2ff34727d024068d131 100644 (file)
@@ -72,14 +72,17 @@ enum LED_STRATEGY_871x {
        SW_LED_MODE0, /* SW control 1 LED via GPIO0. It is default option. */
        SW_LED_MODE1, /* 2 LEDs, through LED0 and LED1. For ALPHA. */
        SW_LED_MODE2, /* SW control 1 LED via GPIO0,
-                      * custom for AzWave 8187 minicard. */
+                      * custom for AzWave 8187 minicard.
+                      */
        SW_LED_MODE3, /* SW control 1 LED via GPIO0,
-                      *  customized for Sercomm Printer Server case.*/
+                      * customized for Sercomm Printer Server case.
+                      */
        SW_LED_MODE4, /*for Edimax / Belkin*/
        SW_LED_MODE5, /*for Sercomm / Belkin*/
        SW_LED_MODE6, /*for WNC / Corega*/
        HW_LED, /* HW control 2 LEDs, LED0 and LED1 (there are 4 different
-                * control modes, see MAC.CONFIG1 for details.)*/
+                * control modes, see MAC.CONFIG1 for details.)
+                */
 };
 
 struct LED_871x {
@@ -96,7 +99,8 @@ struct LED_871x {
        u8                      bLedWPSBlinkInProgress;
        u32                     BlinkTimes; /* No. times to toggle for blink.*/
        u32                     BlinkingLedState; /* Next state for blinking,
-                                                  * either LED_ON or OFF.*/
+                                                  * either LED_ON or OFF.
+                                                  */
 
        struct timer_list       BlinkTimer; /* Timer object for led blinking.*/
        struct work_struct      BlinkWorkItem; /* Workitem used by BlinkTimer */
@@ -115,7 +119,8 @@ struct led_priv {
 
 /*===========================================================================
  * Interface to manipulate LED objects.
- *===========================================================================*/
+ *===========================================================================
+ */
 void r8712_InitSwLeds(struct _adapter *padapter);
 void r8712_DeInitSwLeds(struct _adapter *padapter);
 void LedControl871x(struct _adapter *padapter, enum LED_CTL_MODE LedAction);
index 772bf9fa95920e7cb3c973743a4ab777a5f63b03..c1feef3da26c4d651b856e9aa3da5ba553fb5001 100644 (file)
@@ -403,7 +403,8 @@ static void update_scanned_network(struct _adapter *adapter,
 
 
        /* If we didn't find a match, then get a new network slot to initialize
-        * with this beacon's information */
+        * with this beacon's information
+        */
        if (end_of_queue_search(phead, plist)) {
                if (list_empty(&pmlmepriv->free_bss_pool.queue)) {
                        /* If there are no more slots, expire the oldest */
@@ -926,7 +927,8 @@ void r8712_stassoc_event_callback(struct _adapter *adapter, u8 *pbuf)
        if (psta != NULL) {
                /*the sta have been in sta_info_queue => do nothing
                 *(between drv has received this event before and
-                *  fw have not yet to set key to CAM_ENTRY) */
+                * fw have not yet to set key to CAM_ENTRY)
+                */
                return;
        }
 
@@ -1171,7 +1173,8 @@ int r8712_select_and_join_from_scan(struct mlme_priv *pmlmepriv)
                     pmlmepriv->assoc_ssid.SsidLength))) {
                        if (pmlmepriv->assoc_by_rssi) {
                                /* if the ssid is the same, select the bss
-                                *  which has the max rssi*/
+                                * which has the max rssi
+                                */
                                if (pnetwork_max_rssi) {
                                        if (pnetwork->network.Rssi >
                                            pnetwork_max_rssi->network.Rssi)
@@ -1352,7 +1355,8 @@ static int SecIsInPMKIDList(struct _adapter *Adapter, u8 *bssid)
                i = -1; /* Could not find. */
        } else {
                ; /* There is one Pre-Authentication Key for the
-                  * specific BSSID. */
+                  * specific BSSID.
+                  */
        }
        return i;
 }
@@ -1430,7 +1434,8 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie,
        if (match) {
                if (sec_ie[0] == _WPA_IE_ID_) {
                        /* parsing SSN IE to select required encryption
-                        * algorithm, and set the bc/mc encryption algorithm */
+                        * algorithm, and set the bc/mc encryption algorithm
+                        */
                        while (true) {
                                /*check wpa_oui tag*/
                                if (memcmp(&sec_ie[2], &wpa_oui[0], 4)) {
@@ -1444,7 +1449,8 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie,
                                }
                                if (!memcmp(&sec_ie[8], &wpa_oui[0], 3)) {
                                        /* get bc/mc encryption type (group
-                                        * key type)*/
+                                        * key type)
+                                        */
                                        switch (sec_ie[11]) {
                                        case 0x0: /*none*/
                                                psecuritypriv->XGrpPrivacy =
@@ -1482,7 +1488,8 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie,
                                        } /*else the uncst_oui is match*/
                                } else { /*mixed mode, unicast_enc_type > 1*/
                                        /*select the uncst_oui and remove
-                                        * the other uncst_oui*/
+                                        * the other uncst_oui
+                                        */
                                        cnt = sec_ie[12];
                                        remove_cnt = (cnt - 1) * 4;
                                        sec_ie[12] = 0x01;
@@ -1499,7 +1506,8 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie,
                }
                if (authmode == _WPA2_IE_ID_) {
                        /* parsing RSN IE to select required encryption
-                        * algorithm, and set the bc/mc encryption algorithm */
+                        * algorithm, and set the bc/mc encryption algorithm
+                        */
                        while (true) {
                                if ((sec_ie[2] != 0x01) || (sec_ie[3] != 0x0)) {
                                        /*IE Ver error*/
@@ -1543,7 +1551,8 @@ sint r8712_restruct_sec_ie(struct _adapter *adapter, u8 *in_ie,
                                        } /*else the uncst_oui is match*/
                                } else { /*mixed mode, unicast_enc_type > 1*/
                                        /*select the uncst_oui and remove the
-                                        * other uncst_oui*/
+                                        * other uncst_oui
+                                        */
                                        cnt = sec_ie[8];
                                        remove_cnt = (cnt - 1) * 4;
                                        sec_ie[8] = 0x01;
@@ -1667,7 +1676,8 @@ void r8712_joinbss_reset(struct _adapter *padapter)
        struct ht_priv          *phtpriv = &pmlmepriv->htpriv;
 
        /* todo: if you want to do something io/reg/hw setting before join_bss,
-        * please add code here */
+        * please add code here
+        */
        phtpriv->ampdu_enable = false;/*reset to disabled*/
        for (i = 0; i < 16; i++)
                phtpriv->baddbareq_issued[i] = false;/*reset it*/
index 61e0eb745d21f6c18553d43f6804809959ff3b8c..ddaaab058b2f020ca03f61d6c0454e8b74505f36 100644 (file)
 #define   WIFI_ADHOC_MASTER_STATE 0x00000040
 #define   WIFI_UNDER_LINKING   0x00000080
 #define WIFI_SITE_MONITOR      0x00000800      /* to indicate the station
-                                                * is under site surveying*/
+                                                * is under site surveying
+                                                */
 #define        WIFI_MP_STATE           0x00010000
 #define        WIFI_MP_CTX_BACKGROUND  0x00020000      /* in cont. tx background*/
 #define        WIFI_MP_CTX_ST          0x00040000      /* in cont. tx with
-                                                *  single-tone*/
+                                                * single-tone
+                                                */
 #define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000 /* pending in cont, tx
-                                       * background due to out of skb*/
+                                                   * background due to out of skb
+                                                   */
 #define        WIFI_MP_CTX_CCK_HW      0x00100000      /* in continuous tx*/
 #define        WIFI_MP_CTX_CCK_CS      0x00200000      /* in cont, tx with carrier
-                                                * suppression*/
+                                                * suppression
+                                                */
 #define   WIFI_MP_LPBK_STATE   0x00400000
 
 #define _FW_UNDER_LINKING      WIFI_UNDER_LINKING
index 5e4fda1890f5005de3521bc6db627ae0de3763cf..3c10a2c848c8f577fc9a8dce5edc5e29e152042f 100644 (file)
@@ -376,7 +376,8 @@ void r8712_SwitchBandwidth(struct _adapter *pAdapter)
                /* Use PHY_REG.txt default value. Do not need to change.
                 * Correct the tx power for CCK rate in 40M.
                 * Set Control channel to upper or lower. These settings are
-                * required only for 40MHz */
+                * required only for 40MHz
+                */
                set_bb_reg(pAdapter, rCCK0_System, bCCKSideBand,
                           (HAL_PRIME_CHNL_OFFSET_DONT_CARE >> 1));
                set_bb_reg(pAdapter, rOFDM1_LSTF, 0xC00,
index 3f3b2e73b7d266dc48f548a907fcc2515813e16f..8df452e3e3cef84a48fa7c5447bff043d50c1e32 100644 (file)
@@ -108,7 +108,8 @@ struct mp_priv {
        unsigned char network_macaddr[6];
        /*Testing Flag*/
        u32 mode;/*0 for normal type packet,
-                 * 1 for loopback packet (16bytes TXCMD)*/
+                 * 1 for loopback packet (16bytes TXCMD)
+                 */
        sint prev_fw_state;
        u8 *pallocated_mp_xmitframe_buf;
        u8 *pmp_xmtframe_buf;
index 8dc898024e07f793022f92936e4d622be4ae0f85..1102451a733d60212070d423c6f2e378a99e9c1c 100644 (file)
@@ -158,28 +158,37 @@ static const struct oid_obj_priv oid_rtl_seg_81_80_00[] = {
        {1, oid_null_function},         /*0x05  OID_RT_PRO_SET_SCRAMBLER*/
        {1, oid_null_function},         /*0x06  OID_RT_PRO_SET_FILTER_BB*/
        {1, oid_null_function},         /*0x07
-                                        * OID_RT_PRO_SET_MANUAL_DIVERS_BB*/
+                                        * OID_RT_PRO_SET_MANUAL_DIVERS_BB
+                                        */
        {1, oid_rt_pro_set_channel_direct_call_hdl},    /*0x08*/
        {1, oid_null_function},         /*0x09
-                               * OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL*/
+                               * OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL
+                               */
        {1, oid_null_function},         /*0x0A
-                               * OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL*/
+                               * OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL
+                               */
        {1, oid_rt_pro_set_continuous_tx_hdl},  /*0x0B
-                               * OID_RT_PRO_SET_TX_CONTINUOUS_DIRECT_CALL*/
+                               * OID_RT_PRO_SET_TX_CONTINUOUS_DIRECT_CALL
+                               */
        {1, oid_rt_pro_set_single_carrier_tx_hdl}, /*0x0C
-                               * OID_RT_PRO_SET_SINGLE_CARRIER_TX_CONTINUOUS*/
+                               * OID_RT_PRO_SET_SINGLE_CARRIER_TX_CONTINUOUS
+                               */
        {1, oid_null_function},         /*0x0D
-                               * OID_RT_PRO_SET_TX_ANTENNA_BB*/
+                               * OID_RT_PRO_SET_TX_ANTENNA_BB
+                               */
        {1, oid_rt_pro_set_antenna_bb_hdl},             /*0x0E*/
        {1, oid_null_function},         /*0x0F  OID_RT_PRO_SET_CR_SCRAMBLER*/
        {1, oid_null_function},         /*0x10  OID_RT_PRO_SET_CR_NEW_FILTER*/
        {1, oid_rt_pro_set_tx_power_control_hdl}, /*0x11
-                               * OID_RT_PRO_SET_TX_POWER_CONTROL*/
+                               * OID_RT_PRO_SET_TX_POWER_CONTROL
+                               */
        {1, oid_null_function},         /*0x12  OID_RT_PRO_SET_CR_TX_CONFIG*/
        {1, oid_null_function},         /*0x13
-                                        * OID_RT_PRO_GET_TX_POWER_CONTROL*/
+                                        * OID_RT_PRO_GET_TX_POWER_CONTROL
+                                        */
        {1, oid_null_function},         /*0x14
-                                        * OID_RT_PRO_GET_CR_SIGNAL_QUALITY*/
+                                        * OID_RT_PRO_GET_CR_SIGNAL_QUALITY
+                                        */
        {1, oid_null_function},         /*0x15  OID_RT_PRO_SET_CR_SETPOINT*/
        {1, oid_null_function},         /*0x16  OID_RT_PRO_SET_INTEGRATOR*/
        {1, oid_null_function},         /*0x17  OID_RT_PRO_SET_SIGNAL_QUALITY*/
@@ -203,13 +212,17 @@ static const struct oid_obj_priv oid_rtl_seg_81_80_20[] = {
        {1, oid_rt_pro_query_rx_packet_received_hdl},   /*0x26*/
        {1, oid_rt_pro_query_rx_packet_crc32_error_hdl},/*0x27*/
        {1, oid_null_function},         /*0x28
-                                        *OID_RT_PRO_QUERY_CURRENT_ADDRESS*/
+                                        *OID_RT_PRO_QUERY_CURRENT_ADDRESS
+                                        */
        {1, oid_null_function},         /*0x29
-                                        *OID_RT_PRO_QUERY_PERMANENT_ADDRESS*/
+                                        *OID_RT_PRO_QUERY_PERMANENT_ADDRESS
+                                        */
        {1, oid_null_function},         /*0x2A
-                                *OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS*/
+                                *OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS
+                                */
        {1, oid_rt_pro_set_carrier_suppression_tx_hdl},/*0x2B
-                                *OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX*/
+                                *OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX
+                                */
        {1, oid_null_function},         /*0x2C  OID_RT_PRO_RECEIVE_PACKET*/
        {1, oid_null_function},         /*0x2D  OID_RT_PRO_WRITE_EEPROM_BYTE*/
        {1, oid_null_function},         /*0x2E  OID_RT_PRO_READ_EEPROM_BYTE*/
index 2e9120a21a0be890cc3ad07359d274618d801c72..11bcfb7bf77cd4aaa5616887bec16ad20b6664de 100644 (file)
@@ -82,7 +82,8 @@
  * 3. Page8(0x800)
  */
 #define        rFPGA0_RFMOD                    0x800   /*RF mode & CCK TxSC RF
-                                                * BW Setting?? */
+                                                * BW Setting??
+                                                */
 #define        rFPGA0_TxInfo                   0x804   /* Status report?? */
 #define        rFPGA0_PSDFunction              0x808
 #define        rFPGA0_TxGainStage              0x80c   /* Set TX PWR init gain? */
 
 #define        rFPGA0_AnalogParameter1         0x880   /* Crystal cap setting
                                                 * RF-R/W protection
-                                                * for parameter4?? */
+                                                * for parameter4??
+                                                */
 #define        rFPGA0_AnalogParameter2         0x884
 #define        rFPGA0_AnalogParameter3         0x888   /* Useless now */
 #define        rFPGA0_AnalogParameter4         0x88c
  * 5. PageA(0xA00)
  *
  * Set Control channel to upper or lower.
- * These settings are required only for 40MHz */
+ * These settings are required only for 40MHz
+ */
 #define        rCCK0_System                    0xa00
 
 #define        rCCK0_AFESetting                0xa04   /* Disable init gain now */
 #define        rCCK0_RxAGC1                    0xa0c
 /* AGC default value, saturation level
  * Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now.
- * Not the same as 90 series */
+ * Not the same as 90 series
+ */
 #define        rCCK0_RxAGC2                    0xa10   /* AGC & DAGC */
 
 #define        rCCK0_RxHP                      0xa14
 
 #define        rCCK0_DSPParameter1             0xa18   /* Timing recovery & Channel
-                                                * estimation threshold */
+                                                * estimation threshold
+                                                */
 #define        rCCK0_DSPParameter2             0xa1c   /* SQ threshold */
 
 #define        rCCK0_TxFilter1                 0xa20
 #define        rCCK0_TxFilter2                 0xa24
 #define        rCCK0_DebugPort                 0xa28   /* debug port and Tx filter3 */
 #define        rCCK0_FalseAlarmReport          0xa2c   /* 0xa2d useless now 0xa30-a4f
-                                                * channel report */
+                                                * channel report
+                                                */
 #define        rCCK0_TRSSIReport               0xa50
 #define        rCCK0_RxReport                  0xa54   /* 0xa57 */
 #define        rCCK0_FACounterLower            0xa5c   /* 0xa5b */
 #define        rOFDM0_XDRxIQImbalance          0xc2c
 
 #define        rOFDM0_RxDetector1              0xc30  /* PD,BW & SBD DM tune
-                                               * init gain */
+                                               * init gain
+                                               */
 #define        rOFDM0_RxDetector2              0xc34  /* SBD & Fame Sync. */
 #define        rOFDM0_RxDetector3              0xc38  /* Frame Sync. */
 #define        rOFDM0_RxDetector4              0xc3c  /* PD, SBD, Frame Sync &
-                                               * Short-GI */
+                                               * Short-GI
+                                               */
 
 #define        rOFDM0_RxDSP                    0xc40  /* Rx Sync Path */
 #define        rOFDM0_CFOandDAGC               0xc44  /* CFO & DAGC */
 #define        rTxAGC_Mcs15_Mcs12              0xe1c
 
 /* Analog- control in RX_WAIT_CCA : REG: EE0
- * [Analog- Power & Control Register] */
+ * [Analog- Power & Control Register]
+ */
 #define                rRx_Wait_CCCA           0xe70
 #define        rAnapar_Ctrl_BB                 0xee0
 
 /*
  * Bit Mask
  *
- * 1. Page1(0x100) */
+ * 1. Page1(0x100)
+ */
 #define        bBBResetB                       0x100   /* Useless now? */
 #define        bGlobalResetB                   0x200
 #define        bOFDMTxStart                    0x4
 #define        bPesudoNoiseState_D      0xffff0000
 
 /* 7. RF Register
- * Zebra1 */
+ * Zebra1
+ */
 #define        bZebra1_HSSIEnable        0x8           /* Useless */
 #define        bZebra1_TRxControl        0xc00
 #define        bZebra1_TRxGainSetting    0x07f
index bf10d6db50e8ba1e638cd3124d83710477d5203d..8f82d85178ab4af33f4d382636c7854a8ff4b152 100644 (file)
@@ -52,7 +52,8 @@ void r8712_set_rpwm(struct _adapter *padapter, u8 val8)
                pwrpriv->cpwm = val8;
                break;
        case PS_STATE_S2:/* only for USB normal powersave mode use,
-                         * temp mark some code. */
+                         * temp mark some code.
+                         */
        case PS_STATE_S3:
        case PS_STATE_S4:
                pwrpriv->cpwm = val8;
@@ -103,14 +104,14 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,
        if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80))
                return;
        del_timer(&padapter->pwrctrlpriv.rpwm_check_timer);
-       _enter_pwrlock(&pwrpriv->lock);
+       mutex_lock(&pwrpriv->mutex_lock);
        pwrpriv->cpwm = (preportpwrstate->state) & 0xf;
        if (pwrpriv->cpwm >= PS_STATE_S2) {
                if (pwrpriv->alives & CMD_ALIVE)
-                       up(&(pcmdpriv->cmd_queue_sema));
+                       complete(&(pcmdpriv->cmd_queue_comp));
        }
        pwrpriv->cpwm_tog = (preportpwrstate->state) & 0x80;
-       up(&pwrpriv->lock);
+       mutex_unlock(&pwrpriv->mutex_lock);
 }
 
 static inline void register_task_alive(struct pwrctrl_priv *pwrctrl, uint tag)
@@ -141,10 +142,10 @@ static void SetPSModeWorkItemCallback(struct work_struct *work)
        struct _adapter *padapter = container_of(pwrpriv,
                                    struct _adapter, pwrctrlpriv);
        if (!pwrpriv->bSleep) {
-               _enter_pwrlock(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
                if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
                        r8712_set_rpwm(padapter, PS_STATE_S4);
-               up(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
        }
 }
 
@@ -155,11 +156,11 @@ static void rpwm_workitem_callback(struct work_struct *work)
        struct _adapter *padapter = container_of(pwrpriv,
                                    struct _adapter, pwrctrlpriv);
        if (pwrpriv->cpwm != pwrpriv->rpwm) {
-               _enter_pwrlock(&pwrpriv->lock);
+               mutex_lock(&pwrpriv->mutex_lock);
                r8712_read8(padapter, SDIO_HCPWM);
                pwrpriv->rpwm_retry = 1;
                r8712_set_rpwm(padapter, pwrpriv->rpwm);
-               up(&pwrpriv->lock);
+               mutex_unlock(&pwrpriv->mutex_lock);
        }
 }
 
@@ -175,7 +176,7 @@ void r8712_init_pwrctrl_priv(struct _adapter *padapter)
        struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
 
        memset((unsigned char *)pwrctrlpriv, 0, sizeof(struct pwrctrl_priv));
-       sema_init(&pwrctrlpriv->lock, 1);
+       mutex_init(&pwrctrlpriv->mutex_lock);
        pwrctrlpriv->cpwm = PS_STATE_S4;
        pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
        pwrctrlpriv->smart_ps = 0;
@@ -207,13 +208,13 @@ sint r8712_register_cmd_alive(struct _adapter *padapter)
        uint res = _SUCCESS;
        struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
 
-       _enter_pwrlock(&pwrctrl->lock);
+       mutex_lock(&pwrctrl->mutex_lock);
        register_task_alive(pwrctrl, CMD_ALIVE);
        if (pwrctrl->cpwm < PS_STATE_S2) {
                r8712_set_rpwm(padapter, PS_STATE_S3);
                res = _FAIL;
        }
-       up(&pwrctrl->lock);
+       mutex_unlock(&pwrctrl->mutex_lock);
        return res;
 }
 
@@ -229,7 +230,7 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
 {
        struct pwrctrl_priv *pwrctrl = &padapter->pwrctrlpriv;
 
-       _enter_pwrlock(&pwrctrl->lock);
+       mutex_lock(&pwrctrl->mutex_lock);
        unregister_task_alive(pwrctrl, CMD_ALIVE);
        if ((pwrctrl->cpwm > PS_STATE_S2) &&
           (pwrctrl->pwr_mode > PS_MODE_ACTIVE)) {
@@ -239,5 +240,5 @@ void r8712_unregister_cmd_alive(struct _adapter *padapter)
                        r8712_set_rpwm(padapter, PS_STATE_S0);
                }
        }
-       up(&pwrctrl->lock);
+       mutex_unlock(&pwrctrl->mutex_lock);
 }
index dbfb555235450c8aa369d66c9d7baa0ee94ed597..c82fdf85d474c633aa2284b370c09917957275a8 100644 (file)
@@ -87,16 +87,12 @@ struct reportpwrstate_parm {
        unsigned short rsvd;
 };
 
-static inline void _enter_pwrlock(struct semaphore *plock)
-{
-       _down_sema(plock);
-}
-
 struct pwrctrl_priv {
-       struct semaphore lock;
+       struct mutex mutex_lock;
        /*volatile*/ u8 rpwm; /* requested power state for fw */
        /* fw current power state. updated when 1. read from HCPWM or
-        * 2. driver lowers power level */
+        * 2. driver lowers power level
+        */
        /*volatile*/ u8 cpwm;
        /*volatile*/ u8 tog; /* toggling */
        /*volatile*/ u8 cpwm_tog; /* toggling */
index 23c1438902523837d21e95f1522331d944ad1746..cbd2e51ba42ba64972cdd72b9a937c96518bb625 100644 (file)
@@ -265,7 +265,8 @@ union recv_frame *r8712_portctrl(struct _adapter *adapter,
 
                if ((psta != NULL) && (psta->ieee8021x_blocked)) {
                        /* blocked
-                        * only accept EAPOL frame */
+                        * only accept EAPOL frame
+                        */
                        if (ether_type == 0x888e) {
                                prtnframe = precv_frame;
                        } else {
@@ -277,7 +278,8 @@ union recv_frame *r8712_portctrl(struct _adapter *adapter,
                } else {
                        /* allowed
                         * check decryption status, and decrypt the
-                        * frame if needed */
+                        * frame if needed
+                        */
                        prtnframe = precv_frame;
                        /* check is the EAPOL frame or not (Rekey) */
                        if (ether_type == 0x888e) {
@@ -334,19 +336,22 @@ static sint sta2sta_data_frame(struct _adapter *adapter,
                sta_addr = pattrib->src;
        } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
                /* For Station mode, sa and bssid should always be BSSID,
-                * and DA is my mac-address */
+                * and DA is my mac-address
+                */
                if (memcmp(pattrib->bssid, pattrib->src, ETH_ALEN))
                        return _FAIL;
               sta_addr = pattrib->bssid;
        } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
                if (bmcast) {
                        /* For AP mode, if DA == MCAST, then BSSID should
-                        * be also MCAST */
+                        * be also MCAST
+                        */
                        if (!IS_MCAST(pattrib->bssid))
                                return _FAIL;
                } else { /* not mc-frame */
                        /* For AP mode, if DA is non-MCAST, then it must be
-                        *  BSSID, and bssid == BSSID */
+                        * BSSID, and bssid == BSSID
+                        */
                        if (memcmp(pattrib->bssid, pattrib->dst, ETH_ALEN))
                                return _FAIL;
                        sta_addr = pattrib->src;
@@ -391,7 +396,8 @@ static sint ap2sta_data_frame(struct _adapter *adapter,
                if ((GetFrameSubType(ptr)) == WIFI_DATA_NULL)
                        return _FAIL;
                /* drop QoS-SubType Data, including QoS NULL,
-                * excluding QoS-Data */
+                * excluding QoS-Data
+                */
                if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) ==
                     WIFI_QOS_DATA_TYPE) {
                        if (GetFrameSubType(ptr) & (BIT(4) | BIT(5) | BIT(6)))
@@ -445,7 +451,8 @@ static sint sta2ap_data_frame(struct _adapter *adapter,
        if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
                /* For AP mode, if DA is non-MCAST, then it must be BSSID,
                 * and bssid == BSSID
-                * For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR */
+                * For AP mode, RA=BSSID, TX=STA(SRC_ADDR), A3=DST_ADDR
+                */
                if (memcmp(pattrib->bssid, mybssid, ETH_ALEN))
                        return _FAIL;
                *psta = r8712_get_stainfo(pstapriv, pattrib->src);
@@ -619,7 +626,8 @@ sint r8712_wlanhdr_to_ethhdr(union recv_frame *precvframe)
            (memcmp(psnap_type, (void *)SNAP_ETH_TYPE_APPLETALK_AARP, 2))) ||
             !memcmp(psnap, (void *)bridge_tunnel_header, SNAP_SIZE)) {
                /* remove RFC1042 or Bridge-Tunnel encapsulation and
-                * replace EtherType */
+                * replace EtherType
+                */
                bsnaphdr = true;
        } else {
                /* Leave Ethernet header part of hdr and full payload */
index 77487bb9d3c00f6f8dca355cd7078ccf281b77e8..f419943ad75da5af35a94f4f52c712bf58e91611 100644 (file)
@@ -153,7 +153,8 @@ static inline u8 *get_recvframe_data(union recv_frame *precvframe)
 static inline u8 *recvframe_pull(union recv_frame *precvframe, sint sz)
 {
        /* used for extract sz bytes from rx_data, update rx_data and return
-        *  the updated rx_data to the caller */
+        * the updated rx_data to the caller
+        */
        if (precvframe == NULL)
                return NULL;
        precvframe->u.hdr.rx_data += sz;
@@ -169,7 +170,8 @@ static inline u8 *recvframe_put(union recv_frame *precvframe, sint sz)
 {
        /* used for append sz bytes from ptr to rx_tail, update rx_tail and
         * return the updated rx_tail to the caller
-        * after putting, rx_tail must be still larger than rx_end. */
+        * after putting, rx_tail must be still larger than rx_end.
+        */
        if (precvframe == NULL)
                return NULL;
        precvframe->u.hdr.rx_tail += sz;
@@ -186,7 +188,8 @@ static inline u8 *recvframe_pull_tail(union recv_frame *precvframe, sint sz)
        /* rmv data from rx_tail (by yitsen)
         * used for extract sz bytes from rx_end, update rx_end and return the
         * updated rx_end to the caller
-        * after pulling, rx_end must be still larger than rx_data. */
+        * after pulling, rx_end must be still larger than rx_data.
+        */
        if (precvframe == NULL)
                return NULL;
        precvframe->u.hdr.rx_tail -= sz;
index 2295f0e64dc2c7d0ef867903324caf6cf379db65..fa952e17975b4142973018721a215f2fa4025e2a 100644 (file)
@@ -90,18 +90,23 @@ struct RT_PMKID_LIST {
 
 struct security_priv {
        u32 AuthAlgrthm;                /* 802.11 auth, could be open, shared,
-                                        * 8021x and authswitch */
+                                        * 8021x and authswitch
+                                        */
        u32 PrivacyAlgrthm;             /* This specify the privacy for shared
-                                        * auth. algorithm. */
+                                        * auth. algorithm.
+                                        */
        u32 PrivacyKeyIndex;            /* this is only valid for legendary
-                                        * wep, 0~3 for key id. */
+                                        * wep, 0~3 for key id.
+                                        */
        union Keytype DefKey[4];        /* this is only valid for def. key */
        u32 DefKeylen[4];
        u32 XGrpPrivacy;                /* This specify the privacy algthm.
-                                        * used for Grp key */
+                                        * used for Grp key
+                                        */
        u32 XGrpKeyid;                  /* key id used for Grp Key */
        union Keytype   XGrpKey[2];     /* 802.1x Group Key, for
-                                        * inx0 and inx1 */
+                                        * inx0 and inx1
+                                        */
        union Keytype   XGrptxmickey[2];
        union Keytype   XGrprxmickey[2];
        union pn48 Grptxpn;             /* PN48 used for Grp Key xmit. */
@@ -118,9 +123,11 @@ struct security_priv {
        s32     sw_encrypt;     /* from registry_priv */
        s32     sw_decrypt;     /* from registry_priv */
        s32     hw_decrypted;   /* if the rx packets is hw_decrypted==false,
-                                * it means the hw has not been ready. */
+                                * it means the hw has not been ready.
+                                */
        u32 ndisauthtype;       /* keeps the auth_type & enc_status from upper
-                                * layer ioctl(wpa_supplicant or wzc) */
+                                * layer ioctl(wpa_supplicant or wzc)
+                                */
        u32 ndisencryptstatus;
        struct wlan_bssid_ex sec_bss;  /* for joinbss (h2c buffer) usage */
        struct NDIS_802_11_WEP ndiswep;
@@ -136,7 +143,8 @@ struct security_priv {
        u32 btkip_countermeasure_time;
        /*-------------------------------------------------------------------
         * For WPA2 Pre-Authentication.
-        *------------------------------------------------------------------ */
+        *------------------------------------------------------------------
+        **/
        struct RT_PMKID_LIST            PMKIDList[NUM_PMKID_CACHE];
        u8                              PMKIDIndex;
 };
index e11ce2896893648729b7aa6b80f6df847e1f26ef..e2d75e4c473f20a6742565daca59eff1d0d89e7a 100644 (file)
@@ -188,7 +188,8 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta)
        _r8712_init_sta_xmit_priv(&psta->sta_xmitpriv);
        _r8712_init_sta_recv_priv(&psta->sta_recvpriv);
        /* for A-MPDU Rx reordering buffer control,
-        * cancel reordering_ctrl_timer */
+        * cancel reordering_ctrl_timer
+        */
        for (i = 0; i < 16; i++) {
                preorder_ctrl = &psta->recvreorder_ctrl[i];
                del_timer(&preorder_ctrl->reordering_ctrl_timer);
index 99256baafd3885a0ee929ff64fabbeaf4ff158fc..be38364c8a7c6684139e24fe287ac215a8133b01 100644 (file)
@@ -204,7 +204,8 @@ sint r8712_update_attrib(struct _adapter *padapter, _pkt *pkt,
 
 {
        /*If driver xmit ARP packet, driver can set ps mode to initial
-        * setting. It stands for getting DHCP or fix IP.*/
+        * setting. It stands for getting DHCP or fix IP.
+        */
        if (pattrib->ether_type == 0x0806) {
                if (padapter->pwrctrlpriv.pwr_mode !=
                    padapter->registrypriv.power_mgnt) {
@@ -232,7 +233,8 @@ sint r8712_update_attrib(struct _adapter *padapter, _pkt *pkt,
                if (pattrib->ether_type != 0x8712)
                        return _FAIL;
                /* for mp storing the txcmd per packet,
-                * according to the info of txcmd to update pattrib */
+                * according to the info of txcmd to update pattrib
+                */
                /*get MP_TXDESC_SIZE bytes txcmd per packet*/
                _r8712_pktfile_read(&pktfile, (u8 *)&txdesc, TXDESC_SIZE);
                memcpy(pattrib->ra, pattrib->dst, ETH_ALEN);
@@ -244,7 +246,8 @@ sint r8712_update_attrib(struct _adapter *padapter, _pkt *pkt,
        if (pattrib->ether_type == ETH_P_IP) {
                /* The following is for DHCP and ARP packet, we use cck1M to
                 * tx these packets and let LPS awake some time
-                * to prevent DHCP protocol fail */
+                * to prevent DHCP protocol fail
+                */
                u8 tmp[24];
 
                _r8712_pktfile_read(&pktfile, &tmp[0], 24);
@@ -255,7 +258,8 @@ sint r8712_update_attrib(struct _adapter *padapter, _pkt *pkt,
                                        ((tmp[21] == 67) && (tmp[23] == 68))) {
                                        /* 68 : UDP BOOTP client
                                         * 67 : UDP BOOTP server
-                                        * Use low rate to send DHCP packet.*/
+                                        * Use low rate to send DHCP packet.
+                                        */
                                        pattrib->dhcp_pkt = 1;
                                }
                        }
@@ -337,7 +341,8 @@ sint r8712_update_attrib(struct _adapter *padapter, _pkt *pkt,
        else
                pattrib->bswenc = false;
        /* if in MP_STATE, update pkt_attrib from mp_txcmd, and overwrite
-        * some settings above.*/
+        * some settings above.
+        */
        if (check_fwstate(pmlmepriv, WIFI_MP_STATE))
                pattrib->priority = (txdesc.txdw1 >> QSEL_SHT) & 0x1f;
        return _SUCCESS;
@@ -438,7 +443,8 @@ static sint xmitframe_addmic(struct _adapter *padapter,
                        }
                        r8712_secgetmic(&micdata, &(mic[0]));
                        /* add mic code  and add the mic code length in
-                        * last_txcmdsz */
+                        * last_txcmdsz
+                        */
                        memcpy(payload, &(mic[0]), 8);
                        pattrib->last_txcmdsz += 8;
                        payload = payload - pattrib->last_txcmdsz + 8;
index a9633c3f73d014108f230add62e3d2ce50d94db5..d899d0c6d3a63eaf286842a8bfa1661a9e0dd22b 100644 (file)
@@ -58,7 +58,8 @@ do { \
 } while (0)
 
 /* Fixed the Big Endian bug when doing the Tx.
- * The Linksys WRH54G will check this.*/
+ * The Linksys WRH54G will check this.
+ */
 #define TKIP_IV(pattrib_iv, txpn, keyidx)\
 do { \
        pattrib_iv[0] = txpn._byte_.TSC1;\
@@ -105,7 +106,8 @@ struct pkt_attrib {
        u16     seqnum;
        u16     ether_type;
        u16     pktlen;         /* the original 802.3 pkt raw_data len
-                                * (not include ether_hdr data) */
+                                * (not include ether_hdr data)
+                                */
        u16     last_txcmdsz;
 
        u8      pkt_hdrlen;     /*the original 802.3 pkt header len*/
@@ -119,7 +121,8 @@ struct pkt_attrib {
 
        u8      priority;
        u8      encrypt;        /* when 0 indicate no encrypt. when non-zero,
-                                * indicate the encrypt algorithm*/
+                                * indicate the encrypt algorithm
+                                */
        u8      iv_len;
        u8      icv_len;
        unsigned char iv[8];
@@ -176,7 +179,8 @@ struct sta_xmit_priv {
        spinlock_t lock;
        sint    option;
        sint    apsd_setting;   /* When bit mask is on, the associated edca
-                                * queue supports APSD.*/
+                                * queue supports APSD.
+                                */
        struct tx_servq be_q;   /* priority == 0,3 */
        struct tx_servq bk_q;   /* priority == 1,2*/
        struct tx_servq vi_q;   /*priority == 4,5*/
index ad21df16c2bd0600d548bdaf00b0f32adf472119..0b159850f5a2613d5165e81bfdc7b0fe272cffc2 100644 (file)
@@ -196,7 +196,8 @@ u8 r8712_usb_hal_bus_init(struct _adapter *padapter)
                msleep(20);
                /* Revised POS, */
                /* Enable AFE Macro Block's Bandgap and Enable AFE Macro
-                * Block's Mbias */
+                * Block's Mbias
+                */
                r8712_write8(padapter, SPS0_CTRL + 1, 0x53);
                r8712_write8(padapter, SPS0_CTRL, 0x57);
                val8 = r8712_read8(padapter, AFE_MISC);
index c1a0ca49054663abcbae1a96be244729920dc8ba..3fc65b2c0178b536c15e25e60ec4f02e021a42c8 100644 (file)
@@ -301,7 +301,8 @@ void rtl871x_intf_stop(struct _adapter *padapter)
        /*disable_hw_interrupt*/
        if (!padapter->bSurpriseRemoved) {
                /*device still exists, so driver can do i/o operation
-                * TODO: */
+                * TODO:
+                */
        }
 
        /* cancel in irp */
@@ -611,7 +612,8 @@ error:
 }
 
 /* rmmod module & unplug(SurpriseRemoved) will call r871xu_dev_remove()
- * => how to recognize both */
+ * => how to recognize both
+ */
 static void r871xu_dev_remove(struct usb_interface *pusb_intf)
 {
        struct net_device *pnetdev = usb_get_intfdata(pusb_intf);
@@ -635,12 +637,14 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf)
                r8712_free_drv_sw(padapter);
 
                /* decrease the reference count of the usb device structure
-                * when disconnect */
+                * when disconnect
+                */
                usb_put_dev(udev);
        }
        /* If we didn't unplug usb dongle and remove/insert module, driver
         * fails on sitesurvey for the first time when device is up.
-        * Reset usb port for sitesurvey fail issue. */
+        * Reset usb port for sitesurvey fail issue.
+        */
        if (udev->state != USB_STATE_NOTATTACHED)
                usb_reset_device(udev);
 }
index 6f12345709c25ca83ec8aec4353f54332c4694c8..fc6bb0be2a28c69c377f69d4b20c46b71a0530d2 100644 (file)
@@ -50,7 +50,7 @@ uint r8712_usb_init_intf_priv(struct intf_priv *pintfpriv)
        pintfpriv->piorw_urb = usb_alloc_urb(0, GFP_ATOMIC);
        if (!pintfpriv->piorw_urb)
                return _FAIL;
-       sema_init(&(pintfpriv->io_retevt), 0);
+       init_completion(&pintfpriv->io_retevt_comp);
        return _SUCCESS;
 }
 
@@ -163,7 +163,7 @@ static void usb_write_mem_complete(struct urb *purb)
                else
                        padapter->bSurpriseRemoved = true;
        }
-       up(&pintfpriv->io_retevt);
+       complete(&pintfpriv->io_retevt_comp);
 }
 
 void r8712_usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
@@ -187,7 +187,7 @@ void r8712_usb_write_mem(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *wmem)
                          wmem, cnt, usb_write_mem_complete,
                          pio_queue);
        usb_submit_urb(piorw_urb, GFP_ATOMIC);
-       _down_sema(&pintfpriv->io_retevt);
+       wait_for_completion_interruptible(&pintfpriv->io_retevt_comp);
 }
 
 static void r8712_usb_read_port_complete(struct urb *purb)
@@ -202,26 +202,23 @@ static void r8712_usb_read_port_complete(struct urb *purb)
        if (purb->status == 0) { /* SUCCESS */
                if ((purb->actual_length > (MAX_RECVBUF_SZ)) ||
                    (purb->actual_length < RXDESC_SIZE)) {
-                       precvbuf->reuse = true;
                        r8712_read_port(padapter, precvpriv->ff_hwaddr, 0,
                                  (unsigned char *)precvbuf);
                } else {
+                       _pkt *pskb = precvbuf->pskb;
+
                        precvbuf->transfer_len = purb->actual_length;
                        pbuf = (uint *)precvbuf->pbuf;
                        isevt = le32_to_cpu(*(pbuf + 1)) & 0x1ff;
                        if ((isevt & 0x1ff) == 0x1ff) {
                                r8712_rxcmd_event_hdl(padapter, pbuf);
-                               precvbuf->reuse = true;
+                               skb_queue_tail(&precvpriv->rx_skb_queue, pskb);
                                r8712_read_port(padapter, precvpriv->ff_hwaddr,
                                                0, (unsigned char *)precvbuf);
                        } else {
-                               _pkt *pskb = precvbuf->pskb;
-
                                skb_put(pskb, purb->actual_length);
                                skb_queue_tail(&precvpriv->rx_skb_queue, pskb);
                                tasklet_hi_schedule(&precvpriv->recv_tasklet);
-                               precvbuf->pskb = NULL;
-                               precvbuf->reuse = false;
                                r8712_read_port(padapter, precvpriv->ff_hwaddr,
                                                0, (unsigned char *)precvbuf);
                        }
@@ -241,7 +238,6 @@ static void r8712_usb_read_port_complete(struct urb *purb)
                        }
                        /* Fall through. */
                case -EPROTO:
-                       precvbuf->reuse = true;
                        r8712_read_port(padapter, precvpriv->ff_hwaddr, 0,
                                  (unsigned char *)precvbuf);
                        break;
@@ -270,51 +266,43 @@ u32 r8712_usb_read_port(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *rmem)
        struct usb_device *pusbd = pdvobj->pusbdev;
 
        if (adapter->bDriverStopped || adapter->bSurpriseRemoved ||
-           adapter->pwrctrlpriv.pnp_bstop_trx)
+           adapter->pwrctrlpriv.pnp_bstop_trx || !precvbuf)
                return _FAIL;
-       if (precvbuf->reuse || !precvbuf->pskb) {
-               precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue);
-               if (precvbuf->pskb != NULL)
-                       precvbuf->reuse = true;
+       r8712_init_recvbuf(adapter, precvbuf);
+       /* Try to use skb from the free queue */
+       precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue);
+
+       if (!precvbuf->pskb) {
+               precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev,
+                                MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+               if (!precvbuf->pskb)
+                       return _FAIL;
+               tmpaddr = (addr_t)precvbuf->pskb->data;
+               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1);
+               skb_reserve(precvbuf->pskb,
+                           (RECVBUFF_ALIGN_SZ - alignment));
+               precvbuf->phead = precvbuf->pskb->head;
+               precvbuf->pdata = precvbuf->pskb->data;
+               precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
+               precvbuf->pend = skb_end_pointer(precvbuf->pskb);
+               precvbuf->pbuf = precvbuf->pskb->data;
+       } else { /* skb is reused */
+               precvbuf->phead = precvbuf->pskb->head;
+               precvbuf->pdata = precvbuf->pskb->data;
+               precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
+               precvbuf->pend = skb_end_pointer(precvbuf->pskb);
+               precvbuf->pbuf = precvbuf->pskb->data;
        }
-       if (precvbuf != NULL) {
-               r8712_init_recvbuf(adapter, precvbuf);
-               /* re-assign for linux based on skb */
-               if (!precvbuf->reuse || !precvbuf->pskb) {
-                       precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev,
-                                        MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-                       if (!precvbuf->pskb)
-                               return _FAIL;
-                       tmpaddr = (addr_t)precvbuf->pskb->data;
-                       alignment = tmpaddr & (RECVBUFF_ALIGN_SZ - 1);
-                       skb_reserve(precvbuf->pskb,
-                                   (RECVBUFF_ALIGN_SZ - alignment));
-                       precvbuf->phead = precvbuf->pskb->head;
-                       precvbuf->pdata = precvbuf->pskb->data;
-                       precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
-                       precvbuf->pend = skb_end_pointer(precvbuf->pskb);
-                       precvbuf->pbuf = precvbuf->pskb->data;
-               } else { /* reuse skb */
-                       precvbuf->phead = precvbuf->pskb->head;
-                       precvbuf->pdata = precvbuf->pskb->data;
-                       precvbuf->ptail = skb_tail_pointer(precvbuf->pskb);
-                       precvbuf->pend = skb_end_pointer(precvbuf->pskb);
-                       precvbuf->pbuf = precvbuf->pskb->data;
-                       precvbuf->reuse = false;
-               }
-               purb = precvbuf->purb;
-               /* translate DMA FIFO addr to pipehandle */
-               pipe = ffaddr2pipehdl(pdvobj, addr);
-               usb_fill_bulk_urb(purb, pusbd, pipe,
-                                 precvbuf->pbuf, MAX_RECVBUF_SZ,
-                                 r8712_usb_read_port_complete,
-                                 precvbuf);
-               err = usb_submit_urb(purb, GFP_ATOMIC);
-               if ((err) && (err != (-EPERM)))
-                       ret = _FAIL;
-       } else {
+       purb = precvbuf->purb;
+       /* translate DMA FIFO addr to pipehandle */
+       pipe = ffaddr2pipehdl(pdvobj, addr);
+       usb_fill_bulk_urb(purb, pusbd, pipe,
+                         precvbuf->pbuf, MAX_RECVBUF_SZ,
+                         r8712_usb_read_port_complete,
+                         precvbuf);
+       err = usb_submit_urb(purb, GFP_ATOMIC);
+       if ((err) && (err != (-EPERM)))
                ret = _FAIL;
-       }
        return ret;
 }
 
index 7a352c45344ff7e1e6915b716c9b5dc1463fbf0f..b8af9656e6da0bf0015c718c7da60d2cfa33c7cd 100644 (file)
@@ -376,7 +376,8 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 
 /*-----------------------------------------------------------------------------
                        Below is for the security related definition
-------------------------------------------------------------------------------*/
+ *-----------------------------------------------------------------------------
+ */
 #define _RESERVED_FRAME_TYPE_  0
 #define _SKB_FRAME_TYPE_       2
 #define _PRE_ALLOCMEM_         1
@@ -420,7 +421,8 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 
 /* ---------------------------------------------------------------------------
                                        Below is the fixed elements...
------------------------------------------------------------------------------*/
+ * ---------------------------------------------------------------------------
+ */
 #define _AUTH_ALGM_NUM_                        2
 #define _AUTH_SEQ_NUM_                 2
 #define _BEACON_ITERVAL_               2
@@ -448,20 +450,23 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 
 /*-----------------------------------------------------------------------------
                                Below is the definition for 802.11i / 802.1x
-------------------------------------------------------------------------------*/
+ *------------------------------------------------------------------------------
+ */
 #define _IEEE8021X_MGT_                        1       /*WPA */
 #define _IEEE8021X_PSK_                        2       /* WPA with pre-shared key */
 
 /*-----------------------------------------------------------------------------
                                Below is the definition for WMM
-------------------------------------------------------------------------------*/
+ *------------------------------------------------------------------------------
+ */
 #define _WMM_IE_Length_                                7  /* for WMM STA */
 #define _WMM_Para_Element_Length_              24
 
 
 /*-----------------------------------------------------------------------------
                                Below is the definition for 802.11n
-------------------------------------------------------------------------------*/
+ *------------------------------------------------------------------------------
+ */
 
 /* block-ack parameters */
 #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002
index fda5707c4acda0f383fccc9b29f1c70cfa6e058d..86a88b493a43df2acb0de5661aca7a3f2b99c136 100644 (file)
@@ -171,7 +171,8 @@ struct NDIS_802_11_REMOVE_KEY {
 struct NDIS_802_11_WEP {
        u32 Length;               /* Length of this structure */
        u32 KeyIndex;             /* 0 is the per-client key,
-                                  * 1-N are the global keys */
+                                  * 1-N are the global keys
+                                  */
        u32 KeyLength;            /* length of key in bytes */
        u8  KeyMaterial[16];      /* variable length depending on above field */
 };
@@ -194,7 +195,8 @@ struct      wlan_network {
        struct list_head list;
        int     network_type;   /*refer to ieee80211.h for WIRELESS_11A/B/G */
        int     fixed;          /* set to fixed when not to be removed asi
-                                * site-surveying */
+                                * site-surveying
+                                */
        unsigned int    last_scanned; /*timestamp for the network */
        int     aid;            /*will only be valid when a BSS is joined. */
        int     join_res;
index 695f9b9fc749af5766d93f3462ee8b9ef9763f62..4ee4136b5c28fa34d4af7aeb90ec043a238ce74c 100644 (file)
@@ -31,6 +31,7 @@
 #include <linux/usb.h>
 #include <linux/ip.h>
 #include <linux/if_ether.h>
+#include <linux/kmemleak.h>
 
 #include "osdep_service.h"
 #include "drv_types.h"
@@ -91,7 +92,8 @@ void r8712_set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
        } else {
                /* "When priority processing of data frames is supported,
                 * a STA's SME should send EAPOL-Key frames at the highest
-                * priority." */
+                * priority."
+                */
 
                if (pattrib->ether_type == 0x888e)
                        UserPriority = 7;
@@ -132,6 +134,7 @@ int r8712_xmit_resource_alloc(struct _adapter *padapter,
                        netdev_err(padapter->pnetdev, "pxmitbuf->pxmit_urb[i] == NULL\n");
                        return _FAIL;
                }
+               kmemleak_not_leak(pxmitbuf->pxmit_urb[i]);
        }
        return _SUCCESS;
 }
@@ -162,16 +165,16 @@ int r8712_xmit_entry(_pkt *pkt, struct  net_device *pnetdev)
        struct _adapter *padapter = netdev_priv(pnetdev);
        struct xmit_priv *pxmitpriv = &(padapter->xmitpriv);
 
-       if (!r8712_if_up(padapter)) {
+       if (!r8712_if_up(padapter))
                goto _xmit_entry_drop;
-       }
+
        pxmitframe = r8712_alloc_xmitframe(pxmitpriv);
-       if (!pxmitframe) {
+       if (!pxmitframe)
                goto _xmit_entry_drop;
-       }
-       if ((!r8712_update_attrib(padapter, pkt, &pxmitframe->attrib))) {
+
+       if ((!r8712_update_attrib(padapter, pkt, &pxmitframe->attrib)))
                goto _xmit_entry_drop;
-       }
+
        padapter->ledpriv.LedControlHandler(padapter, LED_CTL_TX);
        pxmitframe->pkt = pkt;
        if (r8712_pre_xmit(padapter, pxmitframe)) {
diff --git a/drivers/staging/rtl8723au/Kconfig b/drivers/staging/rtl8723au/Kconfig
deleted file mode 100644 (file)
index 277c1ab..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-config R8723AU
-       tristate "Realtek RTL8723AU Wireless LAN NIC driver (deprecated)"
-       depends on USB && WLAN && RFKILL
-       select WIRELESS_EXT
-       select WEXT_PRIV
-       select CFG80211
-       default n
-       ---help---
-       This option adds the Realtek RTL8723AU USB device such as found in
-       the Lenovo Yoga 13 tablet. If built as a module, it will be called r8723au.
-
-       Note: This driver is deprecated and scheduled to be removed in a
-       future kernel release. Please use rtl8xxxu instead.
-
-if R8723AU
-
-config 8723AU_AP_MODE
-       bool "Realtek RTL8723AU AP mode"
-       default y
-       ---help---
-       This option enables Access Point mode. Unless you know that your system
-       will never be used as an AP, or the target system has limited memory,
-       "Y" should be selected.
-
-config 8723AU_BT_COEXIST
-       bool "Realtek RTL8723AU BlueTooth Coexistence"
-       default y
-       ---help---
-       This option enables icoexistence with BlueTooth communications for the r8723au driver.
-       Unless you know that this driver will never by used with BT, or the target system has
-       limited memory, "Y" should be selected.
-
-endif
diff --git a/drivers/staging/rtl8723au/Makefile b/drivers/staging/rtl8723au/Makefile
deleted file mode 100644 (file)
index 3e89890..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-r8723au-y :=                           \
-               core/rtw_cmd.o          \
-               core/rtw_efuse.o        \
-               core/rtw_ieee80211.o    \
-               core/rtw_mlme.o         \
-               core/rtw_mlme_ext.o     \
-               core/rtw_pwrctrl.o      \
-               core/rtw_recv.o         \
-               core/rtw_security.o     \
-               core/rtw_sreset.o       \
-               core/rtw_sta_mgt.o      \
-               core/rtw_xmit.o         \
-               core/rtw_wlan_util.o    \
-               hal/hal_com.o           \
-               hal/hal_intf.o          \
-               hal/Hal8723PwrSeq.o     \
-               hal/Hal8723UHWImg_CE.o  \
-               hal/HalDMOutSrc8723A_CE.o \
-               hal/HalHWImg8723A_BB.o  \
-               hal/HalHWImg8723A_MAC.o \
-               hal/HalHWImg8723A_RF.o  \
-               hal/HalPwrSeqCmd.o      \
-               hal/odm_RegConfig8723A.o \
-               hal/odm_debug.o         \
-               hal/odm_interface.o     \
-               hal/odm_HWConfig.o      \
-               hal/odm.o               \
-               hal/rtl8723a_cmd.o      \
-               hal/rtl8723a_dm.o       \
-               hal/rtl8723a_hal_init.o \
-               hal/rtl8723a_phycfg.o   \
-               hal/rtl8723a_rf6052.o   \
-               hal/rtl8723a_rxdesc.o   \
-               hal/rtl8723a_sreset.o   \
-               hal/rtl8723au_recv.o    \
-               hal/rtl8723au_xmit.o    \
-               hal/usb_halinit.o       \
-               hal/usb_ops_linux.o     \
-               os_dep/ioctl_cfg80211.o \
-               os_dep/mlme_linux.o     \
-               os_dep/os_intfs.o       \
-               os_dep/recv_linux.o     \
-               os_dep/usb_intf.o       \
-               os_dep/usb_ops_linux.o  \
-               os_dep/xmit_linux.o
-
-r8723au-$(CONFIG_8723AU_BT_COEXIST) += hal/rtl8723a_bt-coexist.o
-r8723au-$(CONFIG_8723AU_AP_MODE) += core/rtw_ap.o
-
-obj-$(CONFIG_R8723AU)  := r8723au.o
-
-ccflags-y += $(call cc-option,-Wtype-limits,)
-ccflags-y += -D__CHECK_ENDIAN__ -I$(src)/include
diff --git a/drivers/staging/rtl8723au/TODO b/drivers/staging/rtl8723au/TODO
deleted file mode 100644 (file)
index 42b86e4..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-TODO:
-- find and remove code valid only for 5 HGz. Many of the obvious
-  ones have been removed, but things like channel > 14 still exist.
-- find and remove any code for other chips that is left over
-- convert any remaining unusual variable types
-- find codes that can use %pM and %Nph formatting
-- checkpatch.pl fixes - most of the remaining ones are lines too long. Many
-  of them will require refactoring
-- merge Realtek's bugfixes and new features into the driver
-- switch to use MAC80211
-
-A mac80211 driver for this hardware already was integrated at
-drivers/net/wireless/realtek/rtl8xxxu/
-
-Please send any patches to Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
-Jes Sorensen <Jes.Sorensen@redhat.com>, and Larry Finger <Larry.Finger@lwfinger.net>.
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
deleted file mode 100644 (file)
index aad686d..0000000
+++ /dev/null
@@ -1,1738 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_AP_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <linux/ieee80211.h>
-#include <wifi.h>
-#include <rtl8723a_cmd.h>
-#include <rtl8723a_hal.h>
-#include <asm/unaligned.h>
-#include <rtw_mlme_ext.h>
-
-void init_mlme_ap_info23a(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-       spin_lock_init(&pmlmepriv->bcn_update_lock);
-
-       /* for ACL */
-       _rtw_init_queue23a(&pacl_list->acl_node_q);
-
-       start_ap_mode23a(padapter);
-}
-
-void free_mlme_ap_info23a(struct rtw_adapter *padapter)
-{
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmlmepriv->update_bcn = false;
-       pmlmeext->bstart_bss = false;
-
-       rtw_sta_flush23a(padapter);
-
-       pmlmeinfo->state = MSR_NOLINK;
-
-       /* free_assoc_sta_resources */
-       rtw_free_all_stainfo23a(padapter);
-
-       /* free bc/mc sta_info */
-       psta = rtw_get_bcmc_stainfo23a(padapter);
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo23a(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-}
-
-static void update_BCNTIM(struct rtw_adapter *padapter)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
-       unsigned char *pie = pnetwork_mlmeext->IEs;
-       u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
-       uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
-
-       p = rtw_get_ie23a(pie, WLAN_EID_TIM, &tim_ielen,
-                         pnetwork_mlmeext->IELength);
-       if (p != NULL && tim_ielen > 0) {
-               tim_ielen += 2;
-
-               premainder_ie = p+tim_ielen;
-
-               tim_ie_offset = (int)(p - pie);
-
-               remainder_ielen = pnetwork_mlmeext->IELength - tim_ie_offset - tim_ielen;
-
-               /* append TIM IE from dst_ie offset */
-               dst_ie = p;
-       } else {
-               tim_ielen = 0;
-
-               /* calculate head_len */
-               offset = 0;
-
-               /* get ssid_ie len */
-               p = rtw_get_ie23a(pie, WLAN_EID_SSID,
-                                 &tmp_len, pnetwork_mlmeext->IELength);
-               if (p != NULL)
-                       offset += tmp_len+2;
-
-               /*  get supported rates len */
-               p = rtw_get_ie23a(pie, WLAN_EID_SUPP_RATES,
-                                 &tmp_len, pnetwork_mlmeext->IELength);
-               if (p !=  NULL)
-                       offset += tmp_len+2;
-
-               /* DS Parameter Set IE, len = 3 */
-               offset += 3;
-
-               premainder_ie = pie + offset;
-
-               remainder_ielen = pnetwork_mlmeext->IELength - offset - tim_ielen;
-
-               /* append TIM IE from offset */
-               dst_ie = pie + offset;
-       }
-
-       if (remainder_ielen > 0) {
-               pbackup_remainder_ie = kmalloc(remainder_ielen, GFP_ATOMIC);
-               if (pbackup_remainder_ie && premainder_ie)
-                       memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
-       }
-
-       *dst_ie++ = WLAN_EID_TIM;
-
-       if ((pstapriv->tim_bitmap&0xff00) && (pstapriv->tim_bitmap&0x00fc))
-               tim_ielen = 5;
-       else
-               tim_ielen = 4;
-
-       *dst_ie++ = tim_ielen;
-
-       *dst_ie++ = 0; /* DTIM count */
-       *dst_ie++ = 1; /* DTIM period */
-
-       if (pstapriv->tim_bitmap & BIT(0)) /* for bc/mc frames */
-               *dst_ie++ = BIT(0);        /* bitmap ctrl */
-       else
-               *dst_ie++ = 0;
-
-       if (tim_ielen == 4) {
-               *dst_ie++ = pstapriv->tim_bitmap & 0xff;
-       } else if (tim_ielen == 5) {
-               put_unaligned_le16(pstapriv->tim_bitmap, dst_ie);
-               dst_ie += 2;
-       }
-
-       /* copy remainder IE */
-       if (pbackup_remainder_ie) {
-               memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
-
-               kfree(pbackup_remainder_ie);
-       }
-
-       offset =  (uint)(dst_ie - pie);
-       pnetwork_mlmeext->IELength = offset + remainder_ielen;
-
-       set_tx_beacon_cmd23a(padapter);
-}
-
-static u8 chk_sta_is_alive(struct sta_info *psta)
-{
-       u8 ret = false;
-
-       if ((psta->sta_stats.last_rx_data_pkts +
-           psta->sta_stats.last_rx_ctrl_pkts) !=
-           (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
-               ret = true;
-
-       sta_update_last_rx_pkts(psta);
-
-       return ret;
-}
-
-void expire_timeout_chk23a(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       u8 updated = 0;
-       struct sta_info *psta, *ptmp;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 chk_alive_num = 0;
-       struct sta_info *chk_alive_list[NUM_STA];
-       int i;
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       phead = &pstapriv->auth_list;
-       /* check auth_queue */
-       list_for_each_entry_safe(psta, ptmp, phead, auth_list) {
-               if (psta->expire_to > 0) {
-                       psta->expire_to--;
-                       if (psta->expire_to == 0) {
-                               list_del_init(&psta->auth_list);
-                               pstapriv->auth_list_cnt--;
-
-                               DBG_8723A("auth expire %pM\n", psta->hwaddr);
-
-                               spin_unlock_bh(&pstapriv->auth_list_lock);
-
-                               spin_lock_bh(&pstapriv->sta_hash_lock);
-                               rtw_free_stainfo23a(padapter, psta);
-                               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-                               spin_lock_bh(&pstapriv->auth_list_lock);
-                       }
-               }
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       /* check asoc_queue */
-       list_for_each_entry_safe(psta, ptmp, phead, asoc_list) {
-               if (chk_sta_is_alive(psta) || !psta->expire_to) {
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->keep_alive_trycnt = 0;
-               } else {
-                       psta->expire_to--;
-               }
-
-               if (psta->expire_to <= 0) {
-                       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-                       if (padapter->registrypriv.wifi_spec == 1) {
-                               psta->expire_to = pstapriv->expire_to;
-                               continue;
-                       }
-
-                       if (psta->state & WIFI_SLEEP_STATE) {
-                               if (!(psta->state & WIFI_STA_ALIVE_CHK_STATE)) {
-                                       /*
-                                        * check if alive by another method
-                                        * if station is at ps mode.
-                                        */
-                                       psta->expire_to = pstapriv->expire_to;
-                                       psta->state |= WIFI_STA_ALIVE_CHK_STATE;
-                                       /*
-                                        * update bcn with tim_bitmap
-                                        * for this station
-                                        */
-                                       pstapriv->tim_bitmap |= CHKBIT(psta->aid);
-                                       update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-
-                                       if (!pmlmeext->active_keep_alive_check)
-                                               continue;
-                               }
-                       }
-
-                       if (pmlmeext->active_keep_alive_check) {
-                               chk_alive_list[chk_alive_num++] = psta;
-                               continue;
-                       }
-
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-
-                       DBG_8723A("asoc expire %pM, state = 0x%x\n",
-                                 psta->hwaddr, psta->state);
-                       updated = ap_free_sta23a(padapter, psta, false, WLAN_REASON_DEAUTH_LEAVING);
-               } else {
-                       /*
-                        * TODO: Aging mechanism to digest frames in
-                        * sleep_q to avoid running out of xmitframe
-                        */
-                       if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
-                               && padapter->xmitpriv.free_xmitframe_cnt < ((NR_XMITFRAME/pstapriv->asoc_list_cnt)/2)
-                       ) {
-                               DBG_8723A("%s sta:%pM, sleepq_len:%u, free_xmitframe_cnt:%u, asoc_list_cnt:%u, clear sleep_q\n",
-                                         __func__,
-                                         psta->hwaddr,
-                                         psta->sleepq_len,
-                                         padapter->xmitpriv.free_xmitframe_cnt,
-                                         pstapriv->asoc_list_cnt);
-                               wakeup_sta_to_xmit23a(padapter, psta);
-                       }
-               }
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       if (chk_alive_num) {
-
-               u8 backup_oper_channel = 0;
-               struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-               /*
-                * switch to correct channel of current
-                * network before issue keep-alive frames
-                */
-               if (rtw_get_oper_ch23a(padapter) != pmlmeext->cur_channel) {
-                       backup_oper_channel = rtw_get_oper_ch23a(padapter);
-                       SelectChannel23a(padapter, pmlmeext->cur_channel);
-               }
-
-       /* issue null data to check sta alive */
-       for (i = 0; i < chk_alive_num; i++) {
-
-               int ret = _FAIL;
-
-               psta = chk_alive_list[i];
-               if (!(psta->state & _FW_LINKED))
-                       continue;
-
-               if (psta->state & WIFI_SLEEP_STATE)
-                       ret = issue_nulldata23a(padapter, psta->hwaddr, 0, 1, 50);
-               else
-                       ret = issue_nulldata23a(padapter, psta->hwaddr, 0, 3, 50);
-
-               psta->keep_alive_trycnt++;
-               if (ret == _SUCCESS) {
-                       DBG_8723A("asoc check, sta(%pM) is alive\n",
-                                 psta->hwaddr);
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->keep_alive_trycnt = 0;
-                       continue;
-               } else if (psta->keep_alive_trycnt <= 3) {
-                       DBG_8723A("ack check for asoc expire, keep_alive_trycnt =%d\n", psta->keep_alive_trycnt);
-                       psta->expire_to = 1;
-                       continue;
-               }
-
-               psta->keep_alive_trycnt = 0;
-
-               DBG_8723A("asoc expire %pM, state = 0x%x\n",
-                         psta->hwaddr, psta->state);
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               if (!list_empty(&psta->asoc_list)) {
-                       list_del_init(&psta->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-                       updated = ap_free_sta23a(padapter, psta, false, WLAN_REASON_DEAUTH_LEAVING);
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       }
-
-       if (backup_oper_channel > 0) /* back to original operation channel */
-               SelectChannel23a(padapter, backup_oper_channel);
-}
-
-       associated_clients_update23a(padapter, updated);
-}
-
-void add_RATid23a(struct rtw_adapter *padapter, struct sta_info *psta, u8 rssi_level)
-{
-       int i;
-       u8 rf_type;
-       u32 init_rate = 0;
-       unsigned char sta_band = 0, raid, shortGIrate = false;
-       unsigned char limit;
-       unsigned int tx_ra_bitmap = 0;
-       struct ht_priv *psta_ht = NULL;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pcur_network = &pmlmepriv->cur_network.network;
-
-       if (psta)
-               psta_ht = &psta->htpriv;
-       else
-               return;
-
-       if (!(psta->state & _FW_LINKED))
-               return;
-
-       /* b/g mode ra_bitmap */
-       for (i = 0; i < sizeof(psta->bssrateset); i++) {
-               if (psta->bssrateset[i])
-                       tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value23a(psta->bssrateset[i]&0x7f);
-       }
-       /* n mode ra_bitmap */
-       if (psta_ht->ht_option) {
-               rf_type = rtl8723a_get_rf_type(padapter);
-
-               if (rf_type == RF_2T2R)
-                       limit = 16; /* 2R */
-               else
-                       limit = 8;  /* 1R */
-
-               for (i = 0; i < limit; i++) {
-                       if (psta_ht->ht_cap.mcs.rx_mask[i / 8] & BIT(i % 8))
-                               tx_ra_bitmap |= BIT(i + 12);
-               }
-
-               /* max short GI rate */
-               shortGIrate = psta_ht->sgi;
-       }
-
-       if (pcur_network->DSConfig > 14) {
-               /*  5G band */
-               if (tx_ra_bitmap & 0xffff000)
-                       sta_band |= WIRELESS_11_5N | WIRELESS_11A;
-               else
-                       sta_band |= WIRELESS_11A;
-       } else {
-               if (tx_ra_bitmap & 0xffff000)
-                       sta_band |= WIRELESS_11_24N | WIRELESS_11G | WIRELESS_11B;
-               else if (tx_ra_bitmap & 0xff0)
-                       sta_band |= WIRELESS_11G | WIRELESS_11B;
-               else
-                       sta_band |= WIRELESS_11B;
-       }
-
-       psta->wireless_mode = sta_band;
-
-       raid = networktype_to_raid23a(sta_band);
-       init_rate = get_highest_rate_idx23a(tx_ra_bitmap&0x0fffffff)&0x3f;
-
-       if (psta->aid < NUM_STA) {
-               u8 arg;
-
-               arg = psta->mac_id&0x1f;
-
-               arg |= BIT(7); /* support entry 2~31 */
-
-               if (shortGIrate == true)
-                       arg |= BIT(5);
-
-               tx_ra_bitmap |= ((raid<<28)&0xf0000000);
-
-               DBG_8723A("%s => mac_id:%d , raid:%d , bitmap = 0x%x, arg = "
-                         "0x%x\n",
-                         __func__, psta->mac_id, raid, tx_ra_bitmap, arg);
-
-               /* bitmap[0:27] = tx_rate_bitmap */
-               /* bitmap[28:31]= Rate Adaptive id */
-               /* arg[0:4] = macid */
-               /* arg[5] = Short GI */
-               rtl8723a_add_rateatid(padapter, tx_ra_bitmap, arg, rssi_level);
-
-               if (shortGIrate == true)
-                       init_rate |= BIT(6);
-
-               /* set ra_id, init_rate */
-               psta->raid = raid;
-               psta->init_rate = init_rate;
-
-       } else
-               DBG_8723A("station aid %d exceed the max number\n", psta->aid);
-}
-
-static void update_bmc_sta(struct rtw_adapter *padapter)
-{
-       u32 init_rate = 0;
-       unsigned char network_type, raid;
-       int i, supportRateNum = 0;
-       unsigned int tx_ra_bitmap = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pcur_network = &pmlmepriv->cur_network.network;
-       struct sta_info *psta = rtw_get_bcmc_stainfo23a(padapter);
-
-       if (psta) {
-               psta->aid = 0; /* default set to 0 */
-               psta->mac_id = psta->aid + 1;
-
-               psta->qos_option = 0;
-               psta->htpriv.ht_option = false;
-
-               psta->ieee8021x_blocked = 0;
-
-               memset((void *)&psta->sta_stats, 0,
-                      sizeof(struct stainfo_stats));
-
-               /* prepare for add_RATid23a */
-               supportRateNum = rtw_get_rateset_len23a((u8 *)&pcur_network->SupportedRates);
-               network_type = rtw_check_network_type23a((u8 *)&pcur_network->SupportedRates, supportRateNum, 1);
-
-               memcpy(psta->bssrateset, &pcur_network->SupportedRates, supportRateNum);
-               psta->bssratelen = supportRateNum;
-
-               /* b/g mode ra_bitmap */
-               for (i = 0; i < supportRateNum; i++) {
-                       if (psta->bssrateset[i])
-                               tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value23a(psta->bssrateset[i]&0x7f);
-               }
-
-               if (pcur_network->DSConfig > 14) {
-                       /* force to A mode. 5G doesn't support CCK rates */
-                       network_type = WIRELESS_11A;
-                       tx_ra_bitmap = 0x150; /* 6, 12, 24 Mbps */
-               } else {
-                       /* force to b mode */
-                       network_type = WIRELESS_11B;
-                       tx_ra_bitmap = 0xf;
-               }
-
-               raid = networktype_to_raid23a(network_type);
-               init_rate = get_highest_rate_idx23a(tx_ra_bitmap&0x0fffffff)&0x3f;
-
-               /* ap mode */
-               rtl8723a_SetHalODMVar(padapter, HAL_ODM_STA_INFO, psta, true);
-
-               {
-                       u8 arg;
-
-                       arg = psta->mac_id&0x1f;
-
-                       arg |= BIT(7);
-
-                       tx_ra_bitmap |= ((raid<<28)&0xf0000000);
-
-                       DBG_8723A("update_bmc_sta, mask = 0x%x, arg = 0x%x\n", tx_ra_bitmap, arg);
-
-                       /* bitmap[0:27] = tx_rate_bitmap */
-                       /* bitmap[28:31]= Rate Adaptive id */
-                       /* arg[0:4] = macid */
-                       /* arg[5] = Short GI */
-                       rtl8723a_add_rateatid(padapter, tx_ra_bitmap, arg, 0);
-               }
-
-               /* set ra_id, init_rate */
-               psta->raid = raid;
-               psta->init_rate = init_rate;
-
-               spin_lock_bh(&psta->lock);
-               psta->state = _FW_LINKED;
-               spin_unlock_bh(&psta->lock);
-
-       } else
-               DBG_8723A("add_RATid23a_bmc_sta error!\n");
-}
-
-/*
- * AID: 1~MAX for sta and 0 for bc/mc in ap/adhoc mode
- * MAC_ID = AID+1 for sta in ap/adhoc mode
- * MAC_ID = 1 for bc/mc for sta/ap/adhoc
- * MAC_ID = 0 for bssid for sta/ap/adhoc
- * CAM_ID = 0~3 for default key, cmd_id = macid + 3, macid = aid + 1;
- */
-void update_sta_info23a_apmode23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
-       struct ht_priv *phtpriv_sta = &psta->htpriv;
-       /* set intf_tag to if1 */
-
-       psta->mac_id = psta->aid+1;
-       DBG_8723A("%s\n", __func__);
-
-       /* ap mode */
-       rtl8723a_SetHalODMVar(padapter, HAL_ODM_STA_INFO, psta, true);
-
-       if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)
-               psta->ieee8021x_blocked = true;
-       else
-               psta->ieee8021x_blocked = false;
-
-       /* update sta's cap */
-
-       /* ERP */
-       VCS_update23a(padapter, psta);
-       /* HT related cap */
-       if (phtpriv_sta->ht_option) {
-               /* check if sta supports rx ampdu */
-               phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
-
-               /* check if sta support s Short GI */
-               if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
-                       phtpriv_sta->sgi = true;
-
-               /* bwmode */
-               if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40)) {
-                       /* phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40; */
-                       phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
-                       phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
-
-               }
-
-               psta->qos_option = true;
-
-       } else {
-               phtpriv_sta->ampdu_enable = false;
-
-               phtpriv_sta->sgi = false;
-               phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
-               phtpriv_sta->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       }
-
-       /* Rx AMPDU */
-       send_delba23a(padapter, 0, psta->hwaddr); /* recipient */
-
-       /* TX AMPDU */
-       send_delba23a(padapter, 1, psta->hwaddr); /* originator */
-       phtpriv_sta->agg_enable_bitmap = 0x0;/* reset */
-       phtpriv_sta->candidate_tid_bitmap = 0x0;/* reset */
-
-       /* todo: init other variables */
-
-       memset((void *)&psta->sta_stats, 0, sizeof(struct stainfo_stats));
-
-       spin_lock_bh(&psta->lock);
-       psta->state |= _FW_LINKED;
-       spin_unlock_bh(&psta->lock);
-}
-
-static void update_hw_ht_param(struct rtw_adapter *padapter)
-{
-       unsigned char max_AMPDU_len;
-       unsigned char min_MPDU_spacing;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       DBG_8723A("%s\n", __func__);
-       /*
-        * handle A-MPDU parameter field
-        * AMPDU_para [1:0]:Max AMPDU Len => 0:8k, 1:16k, 2:32k, 3:64k
-        * AMPDU_para [4:2]:Min MPDU Start Spacing
-       */
-       max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info &
-               IEEE80211_HT_AMPDU_PARM_FACTOR;
-
-       min_MPDU_spacing = (pmlmeinfo->ht_cap.ampdu_params_info &
-                           IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2;
-
-       rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing);
-       rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len);
-
-       /* Config SM Power Save setting */
-       pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) &
-                           IEEE80211_HT_CAP_SM_PS) >> 2;
-       if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
-               DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
-}
-
-static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
-{
-       const u8 *p;
-       u8 val8, cur_channel, cur_bwmode, cur_ch_offset;
-       u16 bcn_interval;
-       u32 acparm;
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct wlan_bssid_ex *pnetwork = &pmlmepriv->cur_network.network;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
-       struct ieee80211_ht_operation *pht_info = NULL;
-
-       bcn_interval = (u16)pnetwork->beacon_interval;
-       cur_channel = pnetwork->DSConfig;
-       cur_bwmode = HT_CHANNEL_WIDTH_20;
-       cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-       /*
-        * check if there is wps ie
-        * if there is wpsie in beacon the hostapd will
-        * update beacon twice when stating hostapd
-        * and at first time the security
-        * ie (RSN/WPA IE) will not include in beacon
-        */
-       if (!cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                    WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                    pnetwork->IEs,
-                                    pnetwork->IELength))
-               pmlmeext->bstart_bss = true;
-
-       /* todo: update wmm, ht cap */
-       /* pmlmeinfo->WMM_enable; */
-       /* pmlmeinfo->HT_enable; */
-       if (pmlmepriv->qos_option)
-               pmlmeinfo->WMM_enable = true;
-       if (pmlmepriv->htpriv.ht_option) {
-               pmlmeinfo->WMM_enable = true;
-               pmlmeinfo->HT_enable = true;
-
-               update_hw_ht_param(padapter);
-       }
-
-       if (pmlmepriv->cur_network.join_res != true) {
-               /*
-                * setting only at first time
-                * WEP Key will be set before this
-                * function, do not clear CAM.
-                */
-               if (psecuritypriv->dot11PrivacyAlgrthm !=
-                   WLAN_CIPHER_SUITE_WEP40 &&
-                   psecuritypriv->dot11PrivacyAlgrthm !=
-                   WLAN_CIPHER_SUITE_WEP104)
-                       flush_all_cam_entry23a(padapter);       /* clear CAM */
-       }
-
-       /* set MSR to AP_Mode */
-       rtl8723a_set_media_status(padapter, MSR_AP);
-
-       /* Set BSSID REG */
-       hw_var_set_bssid(padapter, pnetwork->MacAddress);
-
-       /* Set EDCA param reg */
-       acparm = 0x002F3217; /* VO */
-       rtl8723a_set_ac_param_vo(padapter, acparm);
-       acparm = 0x005E4317; /* VI */
-       rtl8723a_set_ac_param_vi(padapter, acparm);
-       acparm = 0x005ea42b;
-       rtl8723a_set_ac_param_be(padapter, acparm);
-       acparm = 0x0000A444; /* BK */
-       rtl8723a_set_ac_param_bk(padapter, acparm);
-
-       /* Set Security */
-       val8 = (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) ?
-               0xcc : 0xcf;
-       rtl8723a_set_sec_cfg(padapter, val8);
-
-       /* Beacon Control related register */
-       rtl8723a_set_beacon_interval(padapter, bcn_interval);
-
-       UpdateBrateTbl23a(padapter, pnetwork->SupportedRates);
-       HalSetBrateCfg23a(padapter, pnetwork->SupportedRates);
-
-       if (!pmlmepriv->cur_network.join_res) {
-               /* setting only at  first time */
-
-               /* disable dynamic functions, such as high power, DIG */
-
-               /* turn on all dynamic functions */
-               rtl8723a_odm_support_ability_set(padapter,
-                                                DYNAMIC_ALL_FUNC_ENABLE);
-       }
-       /* set channel, bwmode */
-
-       p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pnetwork->IEs,
-                            pnetwork->IELength);
-       if (p && p[1]) {
-               pht_info = (struct ieee80211_ht_operation *)(p + 2);
-
-               if (pregpriv->cbw40_enable && pht_info->ht_param &
-                   IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
-                       /* switch to the 40M Hz mode */
-                       cur_bwmode = HT_CHANNEL_WIDTH_40;
-                       switch (pht_info->ht_param &
-                               IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
-                       case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
-                               /*
-                                * pmlmeext->cur_ch_offset =
-                                * HAL_PRIME_CHNL_OFFSET_LOWER;
-                                */
-                               cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                               break;
-                       case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
-                               cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                               break;
-                       default:
-                               cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                               break;
-                       }
-               }
-       }
-       /*
-        * TODO: need to judge the phy parameters
-        * on concurrent mode for single phy
-        */
-       set_channel_bwmode23a(padapter, cur_channel, cur_ch_offset, cur_bwmode);
-
-       DBG_8723A("CH =%d, BW =%d, offset =%d\n", cur_channel, cur_bwmode,
-                 cur_ch_offset);
-
-       pmlmeext->cur_channel = cur_channel;
-       pmlmeext->cur_bwmode = cur_bwmode;
-       pmlmeext->cur_ch_offset = cur_ch_offset;
-       pmlmeext->cur_wireless_mode = pmlmepriv->cur_network.network_type;
-
-       /* update cur_wireless_mode */
-       update_wireless_mode23a(padapter);
-
-       /* update capability after cur_wireless_mode updated */
-       update_capinfo23a(padapter, pnetwork->capability);
-
-       /* let pnetwork_mlmeext == pnetwork_mlme. */
-       memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
-
-       if (pmlmeext->bstart_bss) {
-               update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-
-               /* issue beacon frame */
-               if (send_beacon23a(padapter) == _FAIL)
-                       DBG_8723A("issue_beacon23a, fail!\n");
-       }
-
-       /* update bc/mc sta_info */
-       update_bmc_sta(padapter);
-}
-
-int rtw_check_beacon_data23a(struct rtw_adapter *padapter,
-                            struct ieee80211_mgmt *mgmt, unsigned int len)
-{
-       int ret = _SUCCESS;
-       u8 *p;
-       u8 *pHT_caps_ie = NULL;
-       u8 *pHT_info_ie = NULL;
-       struct sta_info *psta = NULL;
-       u16 ht_cap = false;
-       uint ie_len = 0;
-       int group_cipher, pairwise_cipher;
-       u8 channel, network_type, supportRate[NDIS_802_11_LENGTH_RATES_EX];
-       int supportRateNum = 0;
-       u8 WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pbss_network = &pmlmepriv->cur_network.network;
-       u8 *ie = pbss_network->IEs;
-       u8 *pbuf = mgmt->u.beacon.variable;
-
-       len -= offsetof(struct ieee80211_mgmt, u.beacon.variable);
-       /* SSID */
-       /* Supported rates */
-       /* DS Params */
-       /* WLAN_EID_COUNTRY */
-       /* ERP Information element */
-       /* Extended supported rates */
-       /* WPA/WPA2 */
-       /* Wi-Fi Wireless Multimedia Extensions */
-       /* ht_capab, ht_oper */
-       /* WPS IE */
-
-       DBG_8723A("%s, len =%d\n", __func__, len);
-
-       if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return _FAIL;
-
-       if (len > MAX_IE_SZ)
-               return _FAIL;
-
-       pbss_network->IELength = len;
-
-       memset(ie, 0, MAX_IE_SZ);
-
-       memcpy(ie, pbuf, pbss_network->IELength);
-
-       if (pbss_network->ifmode != NL80211_IFTYPE_AP &&
-           pbss_network->ifmode != NL80211_IFTYPE_P2P_GO)
-               return _FAIL;
-
-       pbss_network->Rssi = 0;
-
-       memcpy(pbss_network->MacAddress, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       /* SSID */
-       p = rtw_get_ie23a(ie, WLAN_EID_SSID, &ie_len, pbss_network->IELength);
-       if (p && ie_len > 0) {
-               memset(&pbss_network->Ssid, 0, sizeof(struct cfg80211_ssid));
-               memcpy(pbss_network->Ssid.ssid, (p + 2), ie_len);
-               pbss_network->Ssid.ssid_len = ie_len;
-       }
-
-       /* channel */
-       channel = 0;
-       p = rtw_get_ie23a(ie, WLAN_EID_DS_PARAMS, &ie_len,
-                         pbss_network->IELength);
-       if (p && ie_len > 0)
-               channel = *(p + 2);
-
-       pbss_network->DSConfig = channel;
-
-       memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
-       /*  get supported rates */
-       p = rtw_get_ie23a(ie, WLAN_EID_SUPP_RATES, &ie_len,
-                         pbss_network->IELength);
-       if (p) {
-               memcpy(supportRate, p+2, ie_len);
-               supportRateNum = ie_len;
-       }
-
-       /* get ext_supported rates */
-       p = rtw_get_ie23a(ie, WLAN_EID_EXT_SUPP_RATES,
-                         &ie_len, pbss_network->IELength);
-       if (p) {
-               memcpy(supportRate+supportRateNum, p+2, ie_len);
-               supportRateNum += ie_len;
-       }
-
-       network_type = rtw_check_network_type23a(supportRate,
-                                                supportRateNum, channel);
-
-       rtw_set_supported_rate23a(pbss_network->SupportedRates, network_type);
-
-       /* parsing ERP_IE */
-       p = rtw_get_ie23a(ie, WLAN_EID_ERP_INFO, &ie_len,
-                         pbss_network->IELength);
-       if (p && ie_len > 0)
-               ERP_IE_handler23a(padapter, p);
-
-       /* update privacy/security */
-       if (pbss_network->capability & BIT(4))
-               pbss_network->Privacy = 1;
-       else
-               pbss_network->Privacy = 0;
-
-       psecuritypriv->wpa_psk = 0;
-
-       /* wpa2 */
-       group_cipher = 0; pairwise_cipher = 0;
-       psecuritypriv->wpa2_group_cipher = 0;
-       psecuritypriv->wpa2_pairwise_cipher = 0;
-       p = rtw_get_ie23a(ie, WLAN_EID_RSN, &ie_len,
-                         pbss_network->IELength);
-       if (p && ie_len > 0) {
-               if (rtw_parse_wpa2_ie23a(p, ie_len+2, &group_cipher,
-                                        &pairwise_cipher, NULL) == _SUCCESS) {
-                       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
-                       psecuritypriv->dot8021xalg = 1; /* psk, todo:802.1x */
-                       psecuritypriv->wpa_psk |= BIT(1);
-
-                       psecuritypriv->wpa2_group_cipher = group_cipher;
-                       psecuritypriv->wpa2_pairwise_cipher = pairwise_cipher;
-               }
-       }
-
-       /* wpa */
-       ie_len = 0;
-       group_cipher = 0;
-       pairwise_cipher = 0;
-       psecuritypriv->wpa_group_cipher = 0;
-       psecuritypriv->wpa_pairwise_cipher = 0;
-       for (p = ie; ; p += (ie_len + 2)) {
-               p = rtw_get_ie23a(p, WLAN_EID_VENDOR_SPECIFIC, &ie_len,
-                                 pbss_network->IELength - (ie_len + 2));
-               if ((p) && (!memcmp(p+2, RTW_WPA_OUI23A_TYPE, 4))) {
-                       if (rtw_parse_wpa_ie23a(p, ie_len+2, &group_cipher,
-                                               &pairwise_cipher, NULL) == _SUCCESS) {
-                               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
-                               /* psk,  todo:802.1x */
-                               psecuritypriv->dot8021xalg = 1;
-
-                               psecuritypriv->wpa_psk |= BIT(0);
-
-                               psecuritypriv->wpa_group_cipher = group_cipher;
-                               psecuritypriv->wpa_pairwise_cipher = pairwise_cipher;
-                       }
-                       break;
-               }
-
-               if (!p || !ie_len)
-                       break;
-       }
-
-       /* wmm */
-       ie_len = 0;
-       pmlmepriv->qos_option = 0;
-       if (pregistrypriv->wmm_enable) {
-               for (p = ie; ; p += (ie_len + 2)) {
-                       p = rtw_get_ie23a(p, WLAN_EID_VENDOR_SPECIFIC, &ie_len,
-                                         (pbss_network->IELength -
-                                          (ie_len + 2)));
-                       if ((p) && !memcmp(p+2, WMM_PARA_IE, 6)) {
-                               pmlmepriv->qos_option = 1;
-
-                               *(p + 8) |= BIT(7);/* QoS Info:support U-APSD */
-
-                               /* disable all ACM bits since the WMM admission
-                                * control is not supported
-                                */
-                               *(p + 10) &= ~BIT(4); /* BE */
-                               *(p + 14) &= ~BIT(4); /* BK */
-                               *(p + 18) &= ~BIT(4); /* VI */
-                               *(p + 22) &= ~BIT(4); /* VO */
-                               break;
-                       }
-                       if ((p == NULL) || (ie_len == 0))
-                               break;
-               }
-       }
-       /* parsing HT_CAP_IE */
-       p = rtw_get_ie23a(ie, WLAN_EID_HT_CAPABILITY, &ie_len,
-                         pbss_network->IELength);
-       if (p && ie_len > 0) {
-               u8 rf_type;
-
-               struct ieee80211_ht_cap *pht_cap = (struct ieee80211_ht_cap *)(p+2);
-
-               pHT_caps_ie = p;
-
-               ht_cap = true;
-               network_type |= WIRELESS_11_24N;
-
-               rf_type = rtl8723a_get_rf_type(padapter);
-
-               if ((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
-                   (psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
-                       pht_cap->ampdu_params_info |= (IEEE80211_HT_AMPDU_PARM_DENSITY & (0x07<<2));
-               else
-                       pht_cap->ampdu_params_info |= (IEEE80211_HT_AMPDU_PARM_DENSITY&0x00);
-
-               /* set  Max Rx AMPDU size  to 64K */
-               pht_cap->ampdu_params_info |= (IEEE80211_HT_AMPDU_PARM_FACTOR & 0x03);
-
-               if (rf_type == RF_1T1R) {
-                       pht_cap->mcs.rx_mask[0] = 0xff;
-                       pht_cap->mcs.rx_mask[1] = 0x0;
-               }
-
-               memcpy(&pmlmepriv->htpriv.ht_cap, p+2, ie_len);
-       }
-
-       /* parsing HT_INFO_IE */
-       p = rtw_get_ie23a(ie, WLAN_EID_HT_OPERATION, &ie_len,
-                         pbss_network->IELength);
-       if (p && ie_len > 0)
-               pHT_info_ie = p;
-
-       pmlmepriv->cur_network.network_type = network_type;
-
-       pmlmepriv->htpriv.ht_option = false;
-
-       /* ht_cap */
-       if (pregistrypriv->ht_enable && ht_cap) {
-               pmlmepriv->htpriv.ht_option = true;
-               pmlmepriv->qos_option = 1;
-
-               if (pregistrypriv->ampdu_enable == 1)
-                       pmlmepriv->htpriv.ampdu_enable = true;
-
-               HT_caps_handler23a(padapter, pHT_caps_ie);
-
-               HT_info_handler23a(padapter, pHT_info_ie);
-       }
-
-       pbss_network->Length = get_wlan_bssid_ex_sz(pbss_network);
-
-       /* issue beacon to start bss network */
-       start_bss_network(padapter, (u8 *)pbss_network);
-
-       /* alloc sta_info for ap itself */
-       psta = rtw_get_stainfo23a(&padapter->stapriv, pbss_network->MacAddress);
-       if (!psta) {
-               psta = rtw_alloc_stainfo23a(&padapter->stapriv,
-                                           pbss_network->MacAddress,
-                                           GFP_KERNEL);
-               if (!psta)
-                       return _FAIL;
-       }
-       /* fix bug of flush_cam_entry at STOP AP mode */
-       psta->state |= WIFI_AP_STATE;
-       rtw_indicate_connect23a(padapter);
-
-       /* for check if already set beacon */
-       pmlmepriv->cur_network.join_res = true;
-
-       return ret;
-}
-
-void rtw_set_macaddr_acl23a(struct rtw_adapter *padapter, int mode)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-       DBG_8723A("%s, mode =%d\n", __func__, mode);
-
-       pacl_list->mode = mode;
-}
-
-static void update_bcn_erpinfo_ie(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       unsigned char *p, *ie = pnetwork->IEs;
-       u32 len = 0;
-
-       DBG_8723A("%s, ERP_enable =%d\n", __func__, pmlmeinfo->ERP_enable);
-
-       if (!pmlmeinfo->ERP_enable)
-               return;
-
-       /* parsing ERP_IE */
-       p = rtw_get_ie23a(ie, WLAN_EID_ERP_INFO, &len, pnetwork->IELength);
-       if (p && len > 0) {
-               if (pmlmepriv->num_sta_non_erp == 1)
-                       p[2] |= WLAN_ERP_NON_ERP_PRESENT |
-                               WLAN_ERP_USE_PROTECTION;
-               else
-                       p[2] &= ~(WLAN_ERP_NON_ERP_PRESENT |
-                                 WLAN_ERP_USE_PROTECTION);
-
-               if (pmlmepriv->num_sta_no_short_preamble > 0)
-                       p[2] |= WLAN_ERP_BARKER_PREAMBLE;
-               else
-                       p[2] &= ~(WLAN_ERP_BARKER_PREAMBLE);
-
-               ERP_IE_handler23a(padapter, p);
-       }
-}
-
-static void update_bcn_wpa_ie(struct rtw_adapter *padapter)
-{
-       DBG_8723A("%s\n", __func__);
-}
-
-static void update_bcn_wmm_ie(struct rtw_adapter *padapter)
-{
-       DBG_8723A("%s\n", __func__);
-}
-
-static void update_bcn_wps_ie(struct rtw_adapter *padapter)
-{
-       DBG_8723A("%s\n", __func__);
-}
-
-static void update_bcn_p2p_ie(struct rtw_adapter *padapter)
-{
-}
-
-static void update_bcn_vendor_spec_ie(struct rtw_adapter *padapter, u8 *oui)
-{
-       DBG_8723A("%s\n", __func__);
-
-       if (!memcmp(RTW_WPA_OUI23A_TYPE, oui, 4))
-               update_bcn_wpa_ie(padapter);
-       else if (!memcmp(WMM_OUI23A, oui, 4))
-               update_bcn_wmm_ie(padapter);
-       else if (!memcmp(WPS_OUI23A, oui, 4))
-               update_bcn_wps_ie(padapter);
-       else if (!memcmp(P2P_OUI23A, oui, 4))
-               update_bcn_p2p_ie(padapter);
-       else
-               DBG_8723A("unknown OUI type!\n");
-}
-
-void update_beacon23a(struct rtw_adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
-{
-       struct mlme_priv *pmlmepriv;
-       struct mlme_ext_priv *pmlmeext;
-       /* struct mlme_ext_info *pmlmeinfo; */
-
-       /* DBG_8723A("%s\n", __func__); */
-
-       if (!padapter)
-               return;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       /* pmlmeinfo = &pmlmeext->mlmext_info; */
-
-       if (false == pmlmeext->bstart_bss)
-               return;
-
-       spin_lock_bh(&pmlmepriv->bcn_update_lock);
-
-       switch (ie_id) {
-       case WLAN_EID_TIM:
-               update_BCNTIM(padapter);
-               break;
-
-       case WLAN_EID_ERP_INFO:
-               update_bcn_erpinfo_ie(padapter);
-               break;
-
-       case WLAN_EID_VENDOR_SPECIFIC:
-               update_bcn_vendor_spec_ie(padapter, oui);
-               break;
-
-       default:
-               break;
-       }
-
-       pmlmepriv->update_bcn = true;
-
-       spin_unlock_bh(&pmlmepriv->bcn_update_lock);
-
-       if (tx)
-               set_tx_beacon_cmd23a(padapter);
-}
-
-/*
- * op_mode
- * Set to 0 (HT pure) under the following conditions
- *     - all STAs in the BSS are 20/40 MHz HT in 20/40 MHz BSS or
- *     - all STAs in the BSS are 20 MHz HT in 20 MHz BSS
- * Set to 1 (HT non-member protection) if there may be non-HT STAs
- *     in both the primary and the secondary channel
- * Set to 2 if only HT STAs are associated in BSS,
- *     however and at least one 20 MHz HT STA is associated
- * Set to 3 (HT mixed mode) when one or more non-HT STAs are associated
- *     (currently non-GF HT station is considered as non-HT STA also)
-*/
-static int rtw_ht_operation_update(struct rtw_adapter *padapter)
-{
-       u16 cur_op_mode, new_op_mode;
-       int op_mode_changes = 0;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
-
-       if (pmlmepriv->htpriv.ht_option)
-               return 0;
-
-       /* if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed) */
-       /*      return 0; */
-
-       DBG_8723A("%s current operation mode = 0x%X\n",
-                  __func__, pmlmepriv->ht_op_mode);
-
-       if (!(pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT)
-           && pmlmepriv->num_sta_ht_no_gf) {
-               pmlmepriv->ht_op_mode |=
-                       IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT;
-               op_mode_changes++;
-       } else if ((pmlmepriv->ht_op_mode &
-                   IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT) &&
-                  pmlmepriv->num_sta_ht_no_gf == 0) {
-               pmlmepriv->ht_op_mode &=
-                       ~IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT;
-               op_mode_changes++;
-       }
-
-       if (!(pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT) &&
-           (pmlmepriv->num_sta_no_ht || pmlmepriv->olbc_ht)) {
-               pmlmepriv->ht_op_mode |= IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
-               op_mode_changes++;
-       } else if ((pmlmepriv->ht_op_mode &
-                   IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT) &&
-                  (pmlmepriv->num_sta_no_ht == 0 && !pmlmepriv->olbc_ht)) {
-               pmlmepriv->ht_op_mode &=
-                       ~IEEE80211_HT_OP_MODE_NON_HT_STA_PRSNT;
-               op_mode_changes++;
-       }
-
-       /*
-        * Note: currently we switch to the MIXED op mode if HT non-greenfield
-        * station is associated. Probably it's a theoretical case, since
-        * it looks like all known HT STAs support greenfield.
-        */
-       if (pmlmepriv->num_sta_no_ht ||
-           (pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_NON_GF_STA_PRSNT))
-               new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONHT_MIXED;
-       else if ((le16_to_cpu(phtpriv_ap->ht_cap.cap_info) &
-                 IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-                pmlmepriv->num_sta_ht_20mhz)
-               new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_20MHZ;
-       else if (pmlmepriv->olbc_ht)
-               new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONMEMBER;
-       else
-               new_op_mode = IEEE80211_HT_OP_MODE_PROTECTION_NONE;
-
-       cur_op_mode = pmlmepriv->ht_op_mode & IEEE80211_HT_OP_MODE_PROTECTION;
-       if (cur_op_mode != new_op_mode) {
-               pmlmepriv->ht_op_mode &= ~IEEE80211_HT_OP_MODE_PROTECTION;
-               pmlmepriv->ht_op_mode |= new_op_mode;
-               op_mode_changes++;
-       }
-
-       DBG_8723A("%s new operation mode = 0x%X changes =%d\n",
-                  __func__, pmlmepriv->ht_op_mode, op_mode_changes);
-
-       return op_mode_changes;
-}
-
-void associated_clients_update23a(struct rtw_adapter *padapter, u8 updated)
-{
-       /* update associated stations cap. */
-       if (updated == true) {
-               struct list_head *phead;
-               struct sta_info *psta, *ptmp;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               phead = &pstapriv->asoc_list;
-               list_for_each_entry_safe(psta, ptmp, phead, asoc_list)
-                       VCS_update23a(padapter, psta);
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-       }
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface */
-void bss_cap_update_on_sta_join23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       u8 beacon_updated = false;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!(psta->flags & WLAN_STA_SHORT_PREAMBLE)) {
-               if (!psta->no_short_preamble_set) {
-                       psta->no_short_preamble_set = 1;
-
-                       pmlmepriv->num_sta_no_short_preamble++;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                               (pmlmepriv->num_sta_no_short_preamble == 1)) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, 0xFF, NULL, true);
-                       }
-
-               }
-       } else {
-               if (psta->no_short_preamble_set) {
-                       psta->no_short_preamble_set = 0;
-
-                       pmlmepriv->num_sta_no_short_preamble--;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                               (pmlmepriv->num_sta_no_short_preamble == 0)) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, 0xFF, NULL, true);
-                       }
-
-               }
-       }
-
-       if (psta->flags & WLAN_STA_NONERP) {
-               if (!psta->nonerp_set) {
-                       psta->nonerp_set = 1;
-
-                       pmlmepriv->num_sta_non_erp++;
-
-                       if (pmlmepriv->num_sta_non_erp == 1) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, WLAN_EID_ERP_INFO, NULL, true);
-                       }
-               }
-
-       } else {
-               if (psta->nonerp_set) {
-                       psta->nonerp_set = 0;
-
-                       pmlmepriv->num_sta_non_erp--;
-
-                       if (pmlmepriv->num_sta_non_erp == 0) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, WLAN_EID_ERP_INFO, NULL, true);
-                       }
-               }
-
-       }
-
-       if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT_TIME)) {
-               if (!psta->no_short_slot_time_set) {
-                       psta->no_short_slot_time_set = 1;
-
-                       pmlmepriv->num_sta_no_short_slot_time++;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                                (pmlmepriv->num_sta_no_short_slot_time == 1)) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, 0xFF, NULL, true);
-                       }
-
-               }
-       } else {
-               if (psta->no_short_slot_time_set) {
-                       psta->no_short_slot_time_set = 0;
-
-                       pmlmepriv->num_sta_no_short_slot_time--;
-
-                       if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
-                                (pmlmepriv->num_sta_no_short_slot_time == 0)) {
-                               beacon_updated = true;
-                               update_beacon23a(padapter, 0xFF, NULL, true);
-                       }
-               }
-       }
-
-       if (psta->flags & WLAN_STA_HT) {
-               u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
-
-               DBG_8723A("HT: STA %pM HT Capabilities Info: 0x%04x\n",
-                         psta->hwaddr, ht_capab);
-
-               if (psta->no_ht_set) {
-                       psta->no_ht_set = 0;
-                       pmlmepriv->num_sta_no_ht--;
-               }
-
-               if ((ht_capab & IEEE80211_HT_CAP_GRN_FLD) == 0) {
-                       if (!psta->no_ht_gf_set) {
-                               psta->no_ht_gf_set = 1;
-                               pmlmepriv->num_sta_ht_no_gf++;
-                       }
-                       DBG_8723A("%s STA %pM - no greenfield, num of non-gf stations %d\n",
-                                 __func__, psta->hwaddr,
-                                 pmlmepriv->num_sta_ht_no_gf);
-               }
-
-               if ((ht_capab & IEEE80211_HT_CAP_SUP_WIDTH_20_40) == 0) {
-                       if (!psta->ht_20mhz_set) {
-                               psta->ht_20mhz_set = 1;
-                               pmlmepriv->num_sta_ht_20mhz++;
-                       }
-                       DBG_8723A("%s STA %pM - 20 MHz HT, num of 20MHz HT STAs %d\n",
-                                 __func__, psta->hwaddr,
-                                 pmlmepriv->num_sta_ht_20mhz);
-               }
-
-       } else {
-               if (!psta->no_ht_set) {
-                       psta->no_ht_set = 1;
-                       pmlmepriv->num_sta_no_ht++;
-               }
-               if (pmlmepriv->htpriv.ht_option) {
-                       DBG_8723A("%s STA %pM - no HT, num of non-HT stations %d\n",
-                                 __func__, psta->hwaddr,
-                                 pmlmepriv->num_sta_no_ht);
-               }
-       }
-
-       if (rtw_ht_operation_update(padapter) > 0) {
-               update_beacon23a(padapter, WLAN_EID_HT_CAPABILITY, NULL, false);
-               update_beacon23a(padapter, WLAN_EID_HT_OPERATION, NULL, true);
-       }
-
-       /* update associated stations cap. */
-       associated_clients_update23a(padapter,  beacon_updated);
-
-       DBG_8723A("%s, updated =%d\n", __func__, beacon_updated);
-}
-
-u8 bss_cap_update_on_sta_leave23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       u8 beacon_updated = false;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!psta)
-               return beacon_updated;
-
-       if (psta->no_short_preamble_set) {
-               psta->no_short_preamble_set = 0;
-               pmlmepriv->num_sta_no_short_preamble--;
-               if (pmlmeext->cur_wireless_mode > WIRELESS_11B
-                   && pmlmepriv->num_sta_no_short_preamble == 0) {
-                       beacon_updated = true;
-                       update_beacon23a(padapter, 0xFF, NULL, true);
-               }
-       }
-
-       if (psta->nonerp_set) {
-               psta->nonerp_set = 0;
-               pmlmepriv->num_sta_non_erp--;
-               if (pmlmepriv->num_sta_non_erp == 0) {
-                       beacon_updated = true;
-                       update_beacon23a(padapter, WLAN_EID_ERP_INFO,
-                                        NULL, true);
-               }
-       }
-
-       if (psta->no_short_slot_time_set) {
-               psta->no_short_slot_time_set = 0;
-               pmlmepriv->num_sta_no_short_slot_time--;
-               if (pmlmeext->cur_wireless_mode > WIRELESS_11B
-                   && pmlmepriv->num_sta_no_short_slot_time == 0) {
-                       beacon_updated = true;
-                       update_beacon23a(padapter, 0xFF, NULL, true);
-               }
-       }
-
-       if (psta->no_ht_gf_set) {
-               psta->no_ht_gf_set = 0;
-               pmlmepriv->num_sta_ht_no_gf--;
-       }
-
-       if (psta->no_ht_set) {
-               psta->no_ht_set = 0;
-               pmlmepriv->num_sta_no_ht--;
-       }
-
-       if (psta->ht_20mhz_set) {
-               psta->ht_20mhz_set = 0;
-               pmlmepriv->num_sta_ht_20mhz--;
-       }
-
-       if (rtw_ht_operation_update(padapter) > 0) {
-               update_beacon23a(padapter, WLAN_EID_HT_CAPABILITY, NULL, false);
-               update_beacon23a(padapter, WLAN_EID_HT_OPERATION, NULL, true);
-       }
-
-       /* update associated stations cap. */
-
-       DBG_8723A("%s, updated =%d\n", __func__, beacon_updated);
-
-       return beacon_updated;
-}
-
-u8 ap_free_sta23a(struct rtw_adapter *padapter, struct sta_info *psta, bool active, u16 reason)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       u8 beacon_updated = false;
-
-       if (!psta)
-               return beacon_updated;
-
-       if (active) {
-               /* tear down Rx AMPDU */
-               send_delba23a(padapter, 0, psta->hwaddr); /* recipient */
-
-               /* tear down TX AMPDU */
-               send_delba23a(padapter, 1, psta->hwaddr); /* originator */
-
-               issue_deauth23a(padapter, psta->hwaddr, reason);
-       }
-
-       psta->htpriv.agg_enable_bitmap = 0x0;    /* reset */
-       psta->htpriv.candidate_tid_bitmap = 0x0; /* reset */
-
-       /* report_del_sta_event23a(padapter, psta->hwaddr, reason); */
-
-       /* clear cam entry / key */
-       /* clear_cam_entry23a(padapter, (psta->mac_id + 3)); */
-       rtw_clearstakey_cmd23a(padapter, (u8 *)psta, (u8)(psta->mac_id + 3),
-                              true);
-
-       spin_lock_bh(&psta->lock);
-       psta->state &= ~_FW_LINKED;
-       spin_unlock_bh(&psta->lock);
-
-       rtw_cfg80211_indicate_sta_disassoc(padapter, psta->hwaddr, reason);
-
-       report_del_sta_event23a(padapter, psta->hwaddr, reason);
-
-       beacon_updated = bss_cap_update_on_sta_leave23a(padapter, psta);
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo23a(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       return beacon_updated;
-}
-
-int rtw_sta_flush23a(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       struct sta_info *psta, *ptmp;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-       u8 chk_alive_num = 0;
-       struct sta_info *chk_alive_list[NUM_STA];
-       int i;
-
-       DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name);
-
-       if ((pmlmeinfo->state&0x03) != MSR_AP)
-               return 0;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       list_for_each_entry_safe(psta, ptmp, phead, asoc_list) {
-               /* Remove sta from asoc_list */
-               list_del_init(&psta->asoc_list);
-               pstapriv->asoc_list_cnt--;
-
-               /* Keep sta for ap_free_sta23a() beyond this asoc_list loop */
-               chk_alive_list[chk_alive_num++] = psta;
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       /* For each sta in chk_alive_list, call ap_free_sta23a */
-       for (i = 0; i < chk_alive_num; i++)
-               ap_free_sta23a(padapter, chk_alive_list[i], true,
-                              WLAN_REASON_DEAUTH_LEAVING);
-
-       issue_deauth23a(padapter, bc_addr, WLAN_REASON_DEAUTH_LEAVING);
-
-       associated_clients_update23a(padapter, true);
-
-       return 0;
-}
-
-/* called > TSR LEVEL for USB or SDIO Interface */
-void sta_info_update23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       int flags = psta->flags;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       /* update wmm cap. */
-       if (WLAN_STA_WME&flags)
-               psta->qos_option = 1;
-       else
-               psta->qos_option = 0;
-
-       if (pmlmepriv->qos_option == 0)
-               psta->qos_option = 0;
-
-       /* update 802.11n ht cap. */
-       if (WLAN_STA_HT&flags) {
-               psta->htpriv.ht_option = true;
-               psta->qos_option = 1;
-       } else {
-               psta->htpriv.ht_option = false;
-       }
-
-       if (!pmlmepriv->htpriv.ht_option)
-               psta->htpriv.ht_option = false;
-
-       update_sta_info23a_apmode23a(padapter, psta);
-}
-
-/* called >= TSR LEVEL for USB or SDIO Interface */
-void ap_sta_info_defer_update23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       if (psta->state & _FW_LINKED) {
-               /* add ratid */
-               add_RATid23a(padapter, psta, 0);/* DM_RATR_STA_INIT */
-       }
-}
-
-/* restore hw setting from sw data structures */
-void rtw_ap_restore_network(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta, *ptmp;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct list_head *phead;
-       u8 chk_alive_num = 0;
-       struct sta_info *chk_alive_list[NUM_STA];
-       int i;
-
-       rtw_setopmode_cmd23a(padapter, NL80211_IFTYPE_AP);
-
-       set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       start_bss_network(padapter, (u8 *)&mlmepriv->cur_network.network);
-
-       if (padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_TKIP ||
-           padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_CCMP) {
-               /* restore group key, WEP keys is restored in ips_leave23a() */
-               rtw_set_key23a(padapter, psecuritypriv,
-                              psecuritypriv->dot118021XGrpKeyid, 0);
-       }
-
-       /* per sta pairwise key and settings */
-       if (padapter->securitypriv.dot11PrivacyAlgrthm !=
-           WLAN_CIPHER_SUITE_TKIP &&
-           padapter->securitypriv.dot11PrivacyAlgrthm !=
-           WLAN_CIPHER_SUITE_CCMP) {
-               return;
-       }
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       list_for_each_entry_safe(psta, ptmp, phead, asoc_list)
-               chk_alive_list[chk_alive_num++] = psta;
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       for (i = 0; i < chk_alive_num; i++) {
-               psta = chk_alive_list[i];
-
-               if (psta->state & _FW_LINKED) {
-                       Update_RA_Entry23a(padapter, psta);
-                       /* pairwise key */
-                       rtw_setstakey_cmd23a(padapter, (unsigned char *)psta, true);
-               }
-       }
-}
-
-void start_ap_mode23a(struct rtw_adapter *padapter)
-{
-       int i;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-
-       pmlmepriv->update_bcn = false;
-
-       /* init_mlme_ap_info23a(padapter); */
-       pmlmeext->bstart_bss = false;
-
-       pmlmepriv->num_sta_non_erp = 0;
-
-       pmlmepriv->num_sta_no_short_slot_time = 0;
-
-       pmlmepriv->num_sta_no_short_preamble = 0;
-
-       pmlmepriv->num_sta_ht_no_gf = 0;
-       pmlmepriv->num_sta_no_ht = 0;
-       pmlmepriv->num_sta_ht_20mhz = 0;
-
-       pmlmepriv->olbc = false;
-
-       pmlmepriv->olbc_ht = false;
-
-       pmlmepriv->ht_op_mode = 0;
-
-       for (i = 0; i < NUM_STA; i++)
-               pstapriv->sta_aid[i] = NULL;
-
-       /* for ACL */
-       INIT_LIST_HEAD(&pacl_list->acl_node_q.queue);
-       pacl_list->num = 0;
-       pacl_list->mode = 0;
-       for (i = 0; i < NUM_ACL; i++) {
-               INIT_LIST_HEAD(&pacl_list->aclnode[i].list);
-               pacl_list->aclnode[i].valid = false;
-       }
-}
-
-void stop_ap_mode23a(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       struct rtw_wlan_acl_node *paclnode, *ptmp;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-       struct rtw_queue *pacl_node_q = &pacl_list->acl_node_q;
-
-       pmlmepriv->update_bcn = false;
-       pmlmeext->bstart_bss = false;
-
-       /*
-        * reset and init security priv , this can
-        * refine with rtw_reset_securitypriv23a
-        */
-       memset((unsigned char *)&padapter->securitypriv, 0, sizeof(struct security_priv));
-       padapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-       padapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-
-       /* for ACL */
-       spin_lock_bh(&pacl_node_q->lock);
-       phead = get_list_head(pacl_node_q);
-       list_for_each_entry_safe(paclnode, ptmp, phead, list) {
-               if (paclnode->valid == true) {
-                       paclnode->valid = false;
-                       list_del_init(&paclnode->list);
-                       pacl_list->num--;
-               }
-       }
-       spin_unlock_bh(&pacl_node_q->lock);
-
-       DBG_8723A("%s, free acl_node_queue, num =%d\n",
-                 __func__, pacl_list->num);
-
-       rtw_sta_flush23a(padapter);
-
-       /* free_assoc_sta_resources */
-       rtw_free_all_stainfo23a(padapter);
-
-       psta = rtw_get_bcmc_stainfo23a(padapter);
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       rtw_free_stainfo23a(padapter, psta);
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-       rtw_init_bcmc_stainfo23a(padapter);
-
-       rtw23a_free_mlme_priv_ie_data(pmlmepriv);
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_cmd.c b/drivers/staging/rtl8723au/core/rtw_cmd.c
deleted file mode 100644 (file)
index cd4e0f0..0000000
+++ /dev/null
@@ -1,1470 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_CMD_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <mlme_osdep.h>
-#include <rtl8723a_cmd.h>
-#include <rtw_sreset.h>
-
-static struct cmd_hdl wlancmds[] = {
-       GEN_DRV_CMD_HANDLER(0, NULL) /*0*/
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_DRV_CMD_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL) /*10*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), join_cmd_hdl23a) /*14*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct disconnect_parm), disconnect_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct wlan_bssid_ex), createbss_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setopmode_parm), setopmode_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct sitesurvey_parm), sitesurvey_cmd_hdl23a) /*18*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct setauth_parm), setauth_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setkey_parm), setkey_hdl23a) /*20*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct set_stakey_parm), set_stakey_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct set_assocsta_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct del_assocsta_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setstapwrstate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setbasicrate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct getbasicrate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setdatarate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct getdatarate_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct setphyinfo_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct getphyinfo_parm), NULL)  /*30*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct setphy_parm), NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct getphy_parm), NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)   /*40*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl23a)
-       GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl23a) /* 46 */
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL) /*50*/
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(0, NULL)
-       GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), tx_beacon_hdl23a) /*55*/
-
-       GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl23a) /*56*/
-       GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl23a) /*57*/
-
-       GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl23a) /*58*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl23a) /*59*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl23a) /*60*/
-
-       GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl23a) /*61*/
-       GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl23a) /*62*/
-};
-
-struct _cmd_callback   rtw_cmd_callback[] = {
-       {GEN_CMD_CODE(_Read_MACREG), NULL}, /*0*/
-       {GEN_CMD_CODE(_Write_MACREG), NULL},
-       {GEN_CMD_CODE(_Read_BBREG), &rtw_getbbrfreg_cmdrsp_callback23a},
-       {GEN_CMD_CODE(_Write_BBREG), NULL},
-       {GEN_CMD_CODE(_Read_RFREG), &rtw_getbbrfreg_cmdrsp_callback23a},
-       {GEN_CMD_CODE(_Write_RFREG), NULL}, /*5*/
-       {GEN_CMD_CODE(_Read_EEPROM), NULL},
-       {GEN_CMD_CODE(_Write_EEPROM), NULL},
-       {GEN_CMD_CODE(_Read_EFUSE), NULL},
-       {GEN_CMD_CODE(_Write_EFUSE), NULL},
-
-       {GEN_CMD_CODE(_Read_CAM),       NULL},  /*10*/
-       {GEN_CMD_CODE(_Write_CAM),       NULL},
-       {GEN_CMD_CODE(_setBCNITV), NULL},
-       {GEN_CMD_CODE(_setMBIDCFG), NULL},
-       {GEN_CMD_CODE(_JoinBss), &rtw_joinbss_cmd23a_callback},  /*14*/
-       {GEN_CMD_CODE(_DisConnect), &rtw_disassoc_cmd23a_callback}, /*15*/
-       {GEN_CMD_CODE(_CreateBss), &rtw_createbss_cmd23a_callback},
-       {GEN_CMD_CODE(_SetOpMode), NULL},
-       {GEN_CMD_CODE(_SiteSurvey), &rtw_survey_cmd_callback23a}, /*18*/
-       {GEN_CMD_CODE(_SetAuth), NULL},
-
-       {GEN_CMD_CODE(_SetKey), NULL},  /*20*/
-       {GEN_CMD_CODE(_SetStaKey), &rtw_setstaKey_cmdrsp_callback23a},
-       {GEN_CMD_CODE(_SetAssocSta), &rtw_setassocsta_cmdrsp_callback23a},
-       {GEN_CMD_CODE(_DelAssocSta), NULL},
-       {GEN_CMD_CODE(_SetStaPwrState), NULL},
-       {GEN_CMD_CODE(_SetBasicRate), NULL}, /*25*/
-       {GEN_CMD_CODE(_GetBasicRate), NULL},
-       {GEN_CMD_CODE(_SetDataRate), NULL},
-       {GEN_CMD_CODE(_GetDataRate), NULL},
-       {GEN_CMD_CODE(_SetPhyInfo), NULL},
-
-       {GEN_CMD_CODE(_GetPhyInfo), NULL}, /*30*/
-       {GEN_CMD_CODE(_SetPhy), NULL},
-       {GEN_CMD_CODE(_GetPhy), NULL},
-       {GEN_CMD_CODE(_readRssi), NULL},
-       {GEN_CMD_CODE(_readGain), NULL},
-       {GEN_CMD_CODE(_SetAtim), NULL}, /*35*/
-       {GEN_CMD_CODE(_SetPwrMode), NULL},
-       {GEN_CMD_CODE(_JoinbssRpt), NULL},
-       {GEN_CMD_CODE(_SetRaTable), NULL},
-       {GEN_CMD_CODE(_GetRaTable), NULL},
-
-       {GEN_CMD_CODE(_GetCCXReport), NULL}, /*40*/
-       {GEN_CMD_CODE(_GetDTMReport),   NULL},
-       {GEN_CMD_CODE(_GetTXRateStatistics), NULL},
-       {GEN_CMD_CODE(_SetUsbSuspend), NULL},
-       {GEN_CMD_CODE(_SetH2cLbk), NULL},
-       {GEN_CMD_CODE(_AddBAReq), NULL}, /*45*/
-       {GEN_CMD_CODE(_SetChannel), NULL},              /*46*/
-       {GEN_CMD_CODE(_SetTxPower), NULL},
-       {GEN_CMD_CODE(_SwitchAntenna), NULL},
-       {GEN_CMD_CODE(_SetCrystalCap), NULL},
-       {GEN_CMD_CODE(_SetSingleCarrierTx), NULL},      /*50*/
-
-       {GEN_CMD_CODE(_SetSingleToneTx), NULL}, /*51*/
-       {GEN_CMD_CODE(_SetCarrierSuppressionTx), NULL},
-       {GEN_CMD_CODE(_SetContinuousTx), NULL},
-       {GEN_CMD_CODE(_SwitchBandwidth), NULL},         /*54*/
-       {GEN_CMD_CODE(_TX_Beacon), NULL},/*55*/
-
-       {GEN_CMD_CODE(_Set_MLME_EVT), NULL},/*56*/
-       {GEN_CMD_CODE(_Set_Drv_Extra), NULL},/*57*/
-       {GEN_CMD_CODE(_Set_H2C_MSG), NULL},/*58*/
-       {GEN_CMD_CODE(_SetChannelPlan), NULL},/*59*/
-       {GEN_CMD_CODE(_LedBlink), NULL},/*60*/
-
-       {GEN_CMD_CODE(_SetChannelSwitch), NULL},/*61*/
-       {GEN_CMD_CODE(_TDLS), NULL},/*62*/
-};
-
-/*
-Caller and the rtw_cmd_thread23a can protect cmd_q by spin_lock.
-No irqsave is necessary.
-*/
-
-int rtw_init_cmd_priv23a(struct cmd_priv *pcmdpriv)
-{
-       int res = _SUCCESS;
-
-       pcmdpriv->cmd_issued_cnt = 0;
-       pcmdpriv->cmd_done_cnt = 0;
-       pcmdpriv->rsp_cnt = 0;
-
-       pcmdpriv->wq = alloc_workqueue("rtl8723au_cmd", 0, 1);
-       if (!pcmdpriv->wq)
-               res = _FAIL;
-
-       return res;
-}
-
-/* forward definition */
-
-static void rtw_irq_work(struct work_struct *work);
-
-u32 rtw_init_evt_priv23a(struct evt_priv *pevtpriv)
-{
-       pevtpriv->wq = alloc_workqueue("rtl8723au_evt", 0, 1);
-
-       INIT_WORK(&pevtpriv->irq_wk, rtw_irq_work);
-
-       return _SUCCESS;
-}
-
-void rtw_free_evt_priv23a(struct evt_priv *pevtpriv)
-{
-       cancel_work_sync(&pevtpriv->irq_wk);
-}
-
-static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
-       /* set to true to allow enqueuing cmd when hw_init_completed is false */
-       u8 bAllow = false;
-
-       if (cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
-               bAllow = true;
-
-       if (pcmdpriv->padapter->hw_init_completed == false && bAllow == false)
-               return _FAIL;
-       return _SUCCESS;
-}
-
-static void rtw_cmd_work(struct work_struct *work);
-
-int rtw_enqueue_cmd23a(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
-{
-       int res = _FAIL;
-
-       if (!cmd_obj)
-               goto exit;
-
-       cmd_obj->padapter = pcmdpriv->padapter;
-
-       res = rtw_cmd_filter(pcmdpriv, cmd_obj);
-       if (res == _FAIL) {
-               rtw_free_cmd_obj23a(cmd_obj);
-               goto exit;
-       }
-
-       INIT_WORK(&cmd_obj->work, rtw_cmd_work);
-
-       res = queue_work(pcmdpriv->wq, &cmd_obj->work);
-
-       if (!res) {
-               netdev_err(pcmdpriv->padapter->pnetdev,
-                          "%s: Call to queue_work() failed\n", __func__);
-               res = _FAIL;
-       } else
-               res = _SUCCESS;
-exit:
-
-       return res;
-}
-
-void rtw_free_cmd_obj23a(struct cmd_obj *pcmd)
-{
-
-       if (pcmd->cmdcode != _JoinBss_CMD_ &&
-           pcmd->cmdcode != _CreateBss_CMD_) {
-               /* free parmbuf in cmd_obj */
-               kfree(pcmd->parmbuf);
-       }
-
-       if (pcmd->rsp) {
-               if (pcmd->rspsz != 0) {
-                       /* free rsp in cmd_obj */
-                       kfree(pcmd->rsp);
-               }
-       }
-
-       kfree(pcmd);
-}
-
-static void rtw_cmd_work(struct work_struct *work)
-{
-       int (*cmd_hdl)(struct rtw_adapter *padapter, const u8 *pbuf);
-       void (*pcmd_callback)(struct rtw_adapter *dev, struct cmd_obj *pcmd);
-       struct cmd_priv *pcmdpriv;
-       struct cmd_obj *pcmd = container_of(work, struct cmd_obj, work);
-
-       pcmdpriv = &pcmd->padapter->cmdpriv;
-
-       if (rtw_cmd_filter(pcmdpriv, pcmd) == _FAIL) {
-               pcmd->res = H2C_DROPPED;
-               goto post_process;
-       }
-
-       pcmdpriv->cmd_issued_cnt++;
-
-       pcmd->cmdsz = ALIGN(pcmd->cmdsz, 4);
-
-       if (pcmd->cmdcode < (sizeof(wlancmds)/sizeof(struct cmd_hdl))) {
-               cmd_hdl = wlancmds[pcmd->cmdcode].h2cfuns;
-
-               if (cmd_hdl)
-                       pcmd->res = cmd_hdl(pcmd->padapter, pcmd->parmbuf);
-               else
-                       pcmd->res = H2C_DROPPED;
-       } else
-               pcmd->res = H2C_PARAMETERS_ERROR;
-
-post_process:
-       /* call callback function for post-processed */
-       if (pcmd->cmdcode < ARRAY_SIZE(rtw_cmd_callback)) {
-               pcmd_callback = rtw_cmd_callback[pcmd->cmdcode].callback;
-               if (!pcmd_callback) {
-                       RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_,
-                                "mlme_cmd_hdl(): pcmd_callback = 0x%p, cmdcode = 0x%x\n",
-                                pcmd_callback, pcmd->cmdcode);
-                       rtw_free_cmd_obj23a(pcmd);
-               } else {
-                       /* need consider that free cmd_obj in
-                          rtw_cmd_callback */
-                       pcmd_callback(pcmd->padapter, pcmd);
-               }
-       } else {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "%s: cmdcode = 0x%x callback not defined!\n",
-                        __func__, pcmd->cmdcode);
-               rtw_free_cmd_obj23a(pcmd);
-       }
-}
-
-
-int rtw_sitesurvey_cmd23a(struct rtw_adapter *padapter,
-                         struct cfg80211_ssid *ssid, int ssid_num,
-                         struct rtw_ieee80211_channel *ch, int ch_num)
-{
-       int res = _FAIL;
-       struct cmd_obj *ph2c;
-       struct sitesurvey_parm *psurveyPara;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_SCAN, 1);
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c)
-               return _FAIL;
-
-       psurveyPara = kzalloc(sizeof(struct sitesurvey_parm), GFP_ATOMIC);
-       if (!psurveyPara) {
-               kfree(ph2c);
-               return _FAIL;
-       }
-
-       rtw_free_network_queue23a(padapter);
-
-       RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_,
-                "%s: flush network queue\n", __func__);
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara,
-                                  GEN_CMD_CODE(_SiteSurvey));
-
-       /* psurveyPara->bsslimit = 48; */
-       psurveyPara->scan_mode = pmlmepriv->scan_mode;
-
-       /* prepare ssid list */
-       if (ssid) {
-               int i;
-
-               for (i = 0; i < ssid_num && i < RTW_SSID_SCAN_AMOUNT; i++) {
-                       if (ssid[i].ssid_len) {
-                               memcpy(&psurveyPara->ssid[i], &ssid[i],
-                                      sizeof(struct cfg80211_ssid));
-                               psurveyPara->ssid_num++;
-                       }
-               }
-       }
-
-       /* prepare channel list */
-       if (ch) {
-               int i;
-
-               for (i = 0; i < ch_num && i < RTW_CHANNEL_SCAN_AMOUNT; i++) {
-                       if (ch[i].hw_value &&
-                           !(ch[i].flags & IEEE80211_CHAN_DISABLED)) {
-                               memcpy(&psurveyPara->ch[i], &ch[i],
-                                      sizeof(struct rtw_ieee80211_channel));
-                               psurveyPara->ch_num++;
-                       }
-               }
-       }
-
-       set_fwstate(pmlmepriv, _FW_UNDER_SURVEY);
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-
-       if (res == _SUCCESS) {
-               mod_timer(&pmlmepriv->scan_to_timer, jiffies +
-                         msecs_to_jiffies(SCANNING_TIMEOUT));
-
-               pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-       } else
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
-       return res;
-}
-
-void rtw_getbbrfreg_cmdrsp_callback23a(struct rtw_adapter *padapter,
-                                      struct cmd_obj *pcmd)
-{
-       kfree(pcmd->parmbuf);
-       kfree(pcmd);
-}
-
-int rtw_createbss_cmd23a(struct rtw_adapter  *padapter)
-{
-       struct cmd_obj *pcmd;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pdev_network;
-       u8 res = _SUCCESS;
-
-       pdev_network = &padapter->registrypriv.dev_network;
-
-       if (pmlmepriv->assoc_ssid.ssid_len == 0) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_,
-                        "createbss for Any SSid:%s\n",
-                        pmlmepriv->assoc_ssid.ssid);
-       } else {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_,
-                        "createbss for SSid:%s\n",
-                        pmlmepriv->assoc_ssid.ssid);
-       }
-
-       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pcmd->cmdcode = _CreateBss_CMD_;
-       pcmd->parmbuf = (unsigned char *)pdev_network;
-       pcmd->cmdsz = get_wlan_bssid_ex_sz(pdev_network);
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       pdev_network->Length = pcmd->cmdsz;
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, pcmd);
-
-exit:
-
-       return res;
-}
-
-int rtw_joinbss_cmd23a(struct rtw_adapter *padapter,
-                      struct wlan_network *pnetwork)
-{
-       int res = _SUCCESS;
-       struct wlan_bssid_ex *psecnetwork;
-       struct cmd_obj *pcmd;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-       enum nl80211_iftype ifmode;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       ifmode = pnetwork->network.ifmode;
-
-       if (pmlmepriv->assoc_ssid.ssid_len == 0) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_,
-                        "+Join cmd: Any SSid\n");
-       } else {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_,
-                        "+Join cmd: SSid =[%s]\n",
-                        pmlmepriv->assoc_ssid.ssid);
-       }
-
-       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd) {
-               res = _FAIL;
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "rtw_joinbss_cmd23a: memory allocate for cmd_obj fail!!!\n");
-               goto exit;
-       }
-
-       /* for hidden ap to set fw_state here */
-       if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE)) {
-               switch (ifmode) {
-               case NL80211_IFTYPE_ADHOC:
-                       set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       break;
-               case NL80211_IFTYPE_P2P_CLIENT:
-               case NL80211_IFTYPE_STATION:
-                       set_fwstate(pmlmepriv, WIFI_STATION_STATE);
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       psecnetwork = &psecuritypriv->sec_bss;
-       if (!psecnetwork) {
-               kfree(pcmd);
-               res = _FAIL;
-
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "rtw_joinbss_cmd23a :psecnetwork == NULL!!!\n");
-
-               goto exit;
-       }
-
-       memset(psecnetwork, 0, sizeof(struct wlan_bssid_ex));
-
-       memcpy(psecnetwork, &pnetwork->network,
-              get_wlan_bssid_ex_sz(&pnetwork->network));
-
-       psecnetwork->IELength = 0;
-       /*  Added by Albert 2009/02/18 */
-       /*  If the the driver wants to use the bssid to create the
-        *  connection. If not,  we have to copy the connecting AP's
-        *  MAC address to it so that the driver just has the bssid
-        *  information for PMKIDList searching. */
-
-       if (pmlmepriv->assoc_by_bssid == false)
-               ether_addr_copy(&pmlmepriv->assoc_bssid[0],
-                               &pnetwork->network.MacAddress[0]);
-
-       psecnetwork->IELength =
-               rtw_restruct_sec_ie23a(padapter, &pnetwork->network.IEs[0],
-                                      &psecnetwork->IEs[0],
-                                      pnetwork->network.IELength);
-
-       pmlmepriv->qos_option = 0;
-
-       if (pregistrypriv->wmm_enable) {
-               u32 tmp_len;
-
-               tmp_len = rtw_restruct_wmm_ie23a(padapter,
-                                                &pnetwork->network.IEs[0],
-                                                &psecnetwork->IEs[0],
-                                                pnetwork->network.IELength,
-                                                psecnetwork->IELength);
-
-               if (psecnetwork->IELength != tmp_len) {
-                       psecnetwork->IELength = tmp_len;
-                       /* There is WMM IE in this corresp. beacon */
-                       pmlmepriv->qos_option = 1;
-               } else {
-                       /* There is no WMM IE in this corresp. beacon */
-                       pmlmepriv->qos_option = 0;
-               }
-       }
-
-       phtpriv->ht_option = false;
-       if (pregistrypriv->ht_enable) {
-               u32 algo = padapter->securitypriv.dot11PrivacyAlgrthm;
-               /*      Added by Albert 2010/06/23 */
-               /*      For the WEP mode, we will use the bg mode to do
-                       the connection to avoid some IOT issue. */
-               /*      Especially for Realtek 8192u SoftAP. */
-               if (algo != WLAN_CIPHER_SUITE_WEP40 &&
-                   algo != WLAN_CIPHER_SUITE_WEP104 &&
-                   algo != WLAN_CIPHER_SUITE_TKIP) {
-                       /* rtw_restructure_ht_ie23a */
-                       rtw_restructure_ht_ie23a(padapter,
-                                                &pnetwork->network.IEs[0],
-                                                &psecnetwork->IEs[0],
-                                                pnetwork->network.IELength,
-                                                &psecnetwork->IELength);
-               }
-       }
-
-       pmlmeinfo->assoc_AP_vendor =
-               check_assoc_AP23a(pnetwork->network.IEs,
-                                 pnetwork->network.IELength);
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_TENDA)
-               padapter->pwrctrlpriv.smart_ps = 0;
-       else
-               padapter->pwrctrlpriv.smart_ps =
-                       padapter->registrypriv.smart_ps;
-
-       DBG_8723A("%s: smart_ps =%d\n", __func__,
-                 padapter->pwrctrlpriv.smart_ps);
-
-       /* get cmdsz before endian conversion */
-       pcmd->cmdsz = get_wlan_bssid_ex_sz(psecnetwork);
-
-       pcmd->cmdcode = _JoinBss_CMD_;/* GEN_CMD_CODE(_JoinBss) */
-       pcmd->parmbuf = (unsigned char *)psecnetwork;
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, pcmd);
-exit:
-
-       return res;
-}
-
-int rtw_disassoc_cmd23a(struct rtw_adapter *padapter, u32 deauth_timeout_ms,
-                       bool enqueue)
-{
-       struct cmd_obj *cmdobj = NULL;
-       struct disconnect_parm *param = NULL;
-       struct cmd_priv *cmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       RT_TRACE(_module_rtl871x_cmd_c_, _drv_notice_,
-                "+rtw_disassoc_cmd23a\n");
-
-       /* prepare cmd parameter */
-       param = kzalloc(sizeof(*param), GFP_ATOMIC);
-       if (param == NULL) {
-               res = _FAIL;
-               goto exit;
-       }
-       param->deauth_timeout_ms = deauth_timeout_ms;
-
-       if (enqueue) {
-               /* need enqueue, prepare cmd_obj and enqueue */
-               cmdobj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-               if (!cmdobj) {
-                       res = _FAIL;
-                       kfree(param);
-                       goto exit;
-               }
-               init_h2fwcmd_w_parm_no_rsp(cmdobj, param, _DisConnect_CMD_);
-               res = rtw_enqueue_cmd23a(cmdpriv, cmdobj);
-       } else {
-               /* no need to enqueue, do the cmd hdl directly and
-                  free cmd parameter */
-               if (disconnect_hdl23a(padapter, (u8 *)param) != H2C_SUCCESS)
-                       res = _FAIL;
-               kfree(param);
-       }
-
-exit:
-       return res;
-}
-
-int rtw_setopmode_cmd23a(struct rtw_adapter *padapter,
-                        enum nl80211_iftype ifmode)
-{
-       struct  cmd_obj *ph2c;
-       struct  setopmode_parm *psetop;
-       struct  cmd_priv   *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (!ph2c) {
-               res = false;
-               goto exit;
-       }
-       psetop = kzalloc(sizeof(struct setopmode_parm), GFP_KERNEL);
-
-       if (!psetop) {
-               kfree(ph2c);
-               res = false;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psetop, _SetOpMode_CMD_);
-       psetop->mode = ifmode;
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-exit:
-       return res;
-}
-
-int rtw_setstakey_cmd23a(struct rtw_adapter *padapter, u8 *psta, u8 unicast_key)
-{
-       struct cmd_obj *ph2c;
-       struct set_stakey_parm *psetstakey_para;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct set_stakey_rsp *psetstakey_rsp = NULL;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sta_info *sta = (struct sta_info *)psta;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL);
-       if (!psetstakey_para) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp), GFP_KERNEL);
-       if (!psetstakey_rsp) {
-               kfree(ph2c);
-               kfree(psetstakey_para);
-               res = _FAIL;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
-       ph2c->rsp = (u8 *) psetstakey_rsp;
-       ph2c->rspsz = sizeof(struct set_stakey_rsp);
-
-       ether_addr_copy(psetstakey_para->addr, sta->hwaddr);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               psetstakey_para->algorithm =
-                       (unsigned char)psecuritypriv->dot11PrivacyAlgrthm;
-       } else {
-               GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm,
-                              false);
-       }
-
-       if (unicast_key == true) {
-               memcpy(&psetstakey_para->key, &sta->dot118021x_UncstKey, 16);
-       } else {
-               int idx = psecuritypriv->dot118021XGrpKeyid;
-
-               memcpy(&psetstakey_para->key,
-                      &psecuritypriv->dot118021XGrpKey[idx].skey, 16);
-       }
-
-       /* jeff: set this because at least sw key is ready */
-       padapter->securitypriv.busetkipkey = 1;
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-int rtw_clearstakey_cmd23a(struct rtw_adapter *padapter, u8 *psta, u8 entry,
-                          u8 enqueue)
-{
-       struct cmd_obj *ph2c;
-       struct set_stakey_parm *psetstakey_para;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct set_stakey_rsp *psetstakey_rsp = NULL;
-       struct sta_info *sta = (struct sta_info *)psta;
-       int res = _SUCCESS;
-
-       if (!enqueue) {
-               clear_cam_entry23a(padapter, entry);
-       } else {
-               ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               psetstakey_para = kzalloc(sizeof(struct set_stakey_parm),
-                                         GFP_KERNEL);
-               if (!psetstakey_para) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               psetstakey_rsp = kzalloc(sizeof(struct set_stakey_rsp),
-                                        GFP_KERNEL);
-               if (!psetstakey_rsp) {
-                       kfree(ph2c);
-                       kfree(psetstakey_para);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para,
-                                          _SetStaKey_CMD_);
-               ph2c->rsp = (u8 *) psetstakey_rsp;
-               ph2c->rspsz = sizeof(struct set_stakey_rsp);
-
-               ether_addr_copy(psetstakey_para->addr, sta->hwaddr);
-
-               psetstakey_para->algorithm = 0;
-
-               psetstakey_para->id = entry;
-
-               res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-       }
-exit:
-       return res;
-}
-
-int rtw_addbareq_cmd23a(struct rtw_adapter *padapter, u8 tid, u8 *addr)
-{
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct cmd_obj *ph2c;
-       struct addBaReq_parm *paddbareq_parm;
-       int res = _SUCCESS;
-
-       if (tid >= MAXTID) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       paddbareq_parm = kzalloc(sizeof(struct addBaReq_parm), GFP_ATOMIC);
-       if (!paddbareq_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       paddbareq_parm->tid = tid;
-       ether_addr_copy(paddbareq_parm->addr, addr);
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, paddbareq_parm,
-                                  GEN_CMD_CODE(_AddBAReq));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-exit:
-       return res;
-}
-
-int rtw_dynamic_chk_wk_cmd23a(struct rtw_adapter *padapter)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(*pdrvextra_cmd_parm), GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = DYNAMIC_CHK_WK_CID;
-       pdrvextra_cmd_parm->type_size = 0;
-       pdrvextra_cmd_parm->pbuf = (u8 *)padapter;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm,
-                                  GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-exit:
-
-       return res;
-}
-
-static void traffic_status_watchdog(struct rtw_adapter *padapter)
-{
-       u8 bEnterPS;
-       u8 bBusyTraffic = false, bTxBusyTraffic = false, bRxBusyTraffic = false;
-       u8 bHigherBusyTraffic = false, bHigherBusyRxTraffic = false;
-       u8 bHigherBusyTxTraffic = false;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int BusyThreshold = 100;
-       struct rt_link_detect *ldi = &pmlmepriv->LinkDetectInfo;
-
-       /*  */
-       /*  Determine if our traffic is busy now */
-       /*  */
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               if (rtl8723a_BT_coexist(padapter))
-                       BusyThreshold = 50;
-               else if (ldi->bBusyTraffic)
-                       BusyThreshold = 75;
-               /*  if we raise bBusyTraffic in last watchdog, using
-                   lower threshold. */
-               if (ldi->NumRxOkInPeriod > BusyThreshold ||
-                   ldi->NumTxOkInPeriod > BusyThreshold) {
-                       bBusyTraffic = true;
-
-                       if (ldi->NumRxOkInPeriod > ldi->NumTxOkInPeriod)
-                               bRxBusyTraffic = true;
-                       else
-                               bTxBusyTraffic = true;
-               }
-
-               /*  Higher Tx/Rx data. */
-               if (ldi->NumRxOkInPeriod > 4000 ||
-                   ldi->NumTxOkInPeriod > 4000) {
-                       bHigherBusyTraffic = true;
-
-                       if (ldi->NumRxOkInPeriod > ldi->NumTxOkInPeriod)
-                               bHigherBusyRxTraffic = true;
-                       else
-                               bHigherBusyTxTraffic = true;
-               }
-
-               if (!rtl8723a_BT_coexist(padapter) ||
-                   !rtl8723a_BT_using_antenna_1(padapter)) {
-               /*  check traffic for  powersaving. */
-                       if (((ldi->NumRxUnicastOkInPeriod +
-                             ldi->NumTxOkInPeriod) > 8) ||
-                           ldi->NumRxUnicastOkInPeriod > 2)
-                               bEnterPS = false;
-                       else
-                               bEnterPS = true;
-
-                       /*  LeisurePS only work in infra mode. */
-                       if (bEnterPS)
-                               LPS_Enter23a(padapter);
-                       else
-                               LPS_Leave23a(padapter);
-               }
-       } else
-               LPS_Leave23a(padapter);
-
-       ldi->NumRxOkInPeriod = 0;
-       ldi->NumTxOkInPeriod = 0;
-       ldi->NumRxUnicastOkInPeriod = 0;
-       ldi->bBusyTraffic = bBusyTraffic;
-       ldi->bTxBusyTraffic = bTxBusyTraffic;
-       ldi->bRxBusyTraffic = bRxBusyTraffic;
-       ldi->bHigherBusyTraffic = bHigherBusyTraffic;
-       ldi->bHigherBusyRxTraffic = bHigherBusyRxTraffic;
-       ldi->bHigherBusyTxTraffic = bHigherBusyTxTraffic;
-}
-
-static void dynamic_chk_wk_hdl(struct rtw_adapter *padapter, u8 *pbuf, int sz)
-{
-       struct mlme_priv *pmlmepriv;
-
-       padapter = (struct rtw_adapter *)pbuf;
-       pmlmepriv = &padapter->mlmepriv;
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               expire_timeout_chk23a(padapter);
-#endif
-
-       rtl8723a_sreset_xmit_status_check(padapter);
-
-       linked_status_chk23a(padapter);
-       traffic_status_watchdog(padapter);
-
-       rtl8723a_HalDmWatchDog(padapter);
-
-       /*  */
-       /*  BT-Coexist */
-       /*  */
-       rtl8723a_BT_do_coexist(padapter);
-}
-
-static void lps_ctrl_wk_hdl(struct rtw_adapter *padapter, u8 lps_ctrl_type)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       u8 mstatus;
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
-               return;
-
-       switch (lps_ctrl_type) {
-       case LPS_CTRL_SCAN:
-               rtl8723a_BT_wifiscan_notify(padapter, true);
-               if (!rtl8723a_BT_using_antenna_1(padapter)) {
-                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                               LPS_Leave23a(padapter);
-                       }
-               break;
-       case LPS_CTRL_JOINBSS:
-               LPS_Leave23a(padapter);
-               break;
-       case LPS_CTRL_CONNECT:
-               mstatus = 1;/* connect */
-               /*  Reset LPS Setting */
-               padapter->pwrctrlpriv.LpsIdleCount = 0;
-               rtl8723a_set_FwJoinBssReport_cmd(padapter, 1);
-               rtl8723a_BT_mediastatus_notify(padapter, mstatus);
-               break;
-       case LPS_CTRL_DISCONNECT:
-               mstatus = 0;/* disconnect */
-               rtl8723a_BT_mediastatus_notify(padapter, mstatus);
-               if (!rtl8723a_BT_using_antenna_1(padapter))
-                       LPS_Leave23a(padapter);
-               rtl8723a_set_FwJoinBssReport_cmd(padapter, 0);
-               break;
-       case LPS_CTRL_SPECIAL_PACKET:
-               pwrpriv->DelayLPSLastTimeStamp = jiffies;
-               rtl8723a_BT_specialpacket_notify(padapter);
-               if (!rtl8723a_BT_using_antenna_1(padapter))
-                       LPS_Leave23a(padapter);
-               break;
-       case LPS_CTRL_LEAVE:
-               rtl8723a_BT_lps_leave(padapter);
-               if (!rtl8723a_BT_using_antenna_1(padapter))
-                       LPS_Leave23a(padapter);
-               break;
-
-       default:
-               break;
-       }
-}
-
-int rtw_lps_ctrl_wk_cmd23a(struct rtw_adapter *padapter,
-                          u8 lps_ctrl_type, u8 enqueue)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       if (enqueue) {
-               ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-               if (!ph2c) {
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm),
-                                            GFP_ATOMIC);
-               if (!pdrvextra_cmd_parm) {
-                       kfree(ph2c);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               pdrvextra_cmd_parm->ec_id = LPS_CTRL_WK_CID;
-               pdrvextra_cmd_parm->type_size = lps_ctrl_type;
-               pdrvextra_cmd_parm->pbuf = NULL;
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm,
-                                          GEN_CMD_CODE(_Set_Drv_Extra));
-
-               res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-       } else
-               lps_ctrl_wk_hdl(padapter, lps_ctrl_type);
-exit:
-
-       return res;
-}
-
-int rtw_ps_cmd23a(struct rtw_adapter *padapter)
-{
-       struct cmd_obj *ppscmd;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ppscmd = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ppscmd) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm),
-                                    GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ppscmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = POWER_SAVING_CTRL_WK_CID;
-       pdrvextra_cmd_parm->pbuf = NULL;
-       init_h2fwcmd_w_parm_no_rsp(ppscmd, pdrvextra_cmd_parm,
-                                  GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ppscmd);
-exit:
-
-       return res;
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-
-static void rtw_chk_hi_queue_hdl(struct rtw_adapter *padapter)
-{
-       int cnt = 0;
-       struct sta_info *psta_bmc;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       psta_bmc = rtw_get_bcmc_stainfo23a(padapter);
-       if (!psta_bmc)
-               return;
-
-       if (psta_bmc->sleepq_len == 0) {
-               bool val;
-
-               val = rtl8723a_chk_hi_queue_empty(padapter);
-
-               while (!val) {
-                       msleep(100);
-
-                       cnt++;
-
-                       if (cnt > 10)
-                               break;
-
-                       val = rtl8723a_chk_hi_queue_empty(padapter);
-               }
-
-               if (cnt <= 10) {
-                       pstapriv->tim_bitmap &= ~BIT(0);
-                       pstapriv->sta_dz_bitmap &= ~BIT(0);
-
-                       update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-               } else /* re check again */
-                       rtw_chk_hi_queue_cmd23a(padapter);
-       }
-}
-
-int rtw_chk_hi_queue_cmd23a(struct rtw_adapter *padapter)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm),
-                                    GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = CHECK_HIQ_WK_CID;
-       pdrvextra_cmd_parm->type_size = 0;
-       pdrvextra_cmd_parm->pbuf = NULL;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm,
-                                  GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-exit:
-
-       return res;
-}
-#endif
-
-int rtw_c2h_wk_cmd23a(struct rtw_adapter *padapter, u8 *c2h_evt)
-{
-       struct cmd_obj *ph2c;
-       struct drvextra_cmd_parm *pdrvextra_cmd_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm = kzalloc(sizeof(struct drvextra_cmd_parm),
-                                    GFP_ATOMIC);
-       if (!pdrvextra_cmd_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdrvextra_cmd_parm->ec_id = C2H_WK_CID;
-       pdrvextra_cmd_parm->type_size = c2h_evt?16:0;
-       pdrvextra_cmd_parm->pbuf = c2h_evt;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm,
-                                  GEN_CMD_CODE(_Set_Drv_Extra));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-
-exit:
-
-       return res;
-}
-
-static int c2h_evt_hdl(struct rtw_adapter *adapter, struct c2h_evt_hdr *c2h_evt)
-{
-       int ret = _FAIL;
-       u8 buf[16];
-
-       if (!c2h_evt) {
-               /* No c2h event in cmd_obj, read c2h event before handling*/
-               if (c2h_evt_read23a(adapter, buf) == _SUCCESS) {
-                       c2h_evt = (struct c2h_evt_hdr *)buf;
-
-                       ret = c2h_handler_8723a(adapter, c2h_evt);
-               }
-       } else
-               ret = c2h_handler_8723a(adapter, c2h_evt);
-
-       return ret;
-}
-
-static void rtw_irq_work(struct work_struct *work)
-{
-       struct evt_priv *evtpriv;
-       struct rtw_adapter *adapter;
-
-       evtpriv = container_of(work, struct evt_priv, irq_wk);
-       adapter = container_of(evtpriv, struct rtw_adapter, evtpriv);
-
-       c2h_evt_clear23a(adapter);
-}
-
-void rtw_evt_work(struct work_struct *work)
-{
-       struct evt_work *ework;
-       struct rtw_adapter *adapter;
-
-       ework = container_of(work, struct evt_work, work);
-       adapter = ework->adapter;
-
-       c2h_evt_clear23a(adapter);
-
-       if (!c2h_evt_exist(&ework->u.c2h_evt)) {
-               kfree(ework);
-               return;
-       }
-
-       if (c2h_id_filter_ccx_8723a(ework->u.c2h_evt.id) == true) {
-               /* Handle CCX report here */
-               c2h_handler_8723a(adapter, &ework->u.c2h_evt);
-               kfree(ework);
-       } else {
-               /*
-                * Enqueue into cmd_thread for others.
-                * ework will be turned into a c2h_evt and freed once it
-                * has been consumed.
-                */
-               rtw_c2h_wk_cmd23a(adapter, (u8 *)&ework->u.c2h_evt);
-       }
-}
-
-int rtw_drvextra_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct drvextra_cmd_parm *pdrvextra_cmd;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       pdrvextra_cmd = (struct drvextra_cmd_parm *)pbuf;
-
-       switch (pdrvextra_cmd->ec_id) {
-       case DYNAMIC_CHK_WK_CID:
-               dynamic_chk_wk_hdl(padapter, pdrvextra_cmd->pbuf,
-                                  pdrvextra_cmd->type_size);
-               break;
-       case POWER_SAVING_CTRL_WK_CID:
-               rtw_ps_processor23a(padapter);
-               break;
-       case LPS_CTRL_WK_CID:
-               lps_ctrl_wk_hdl(padapter, (u8)pdrvextra_cmd->type_size);
-               break;
-#ifdef CONFIG_8723AU_AP_MODE
-       case CHECK_HIQ_WK_CID:
-               rtw_chk_hi_queue_hdl(padapter);
-               break;
-#endif /* CONFIG_8723AU_AP_MODE */
-       case C2H_WK_CID:
-               c2h_evt_hdl(padapter,
-                           (struct c2h_evt_hdr *)pdrvextra_cmd->pbuf);
-               break;
-
-       default:
-               break;
-       }
-
-       if (pdrvextra_cmd->pbuf && (pdrvextra_cmd->type_size > 0)) {
-               kfree(pdrvextra_cmd->pbuf);
-               /*
-                * No need to set pdrvextra_cmd->pbuf = NULL as we were
-                * operating on a copy of the original pcmd->parmbuf
-                * created in rtw_cmd_work().
-                */
-       }
-
-       return H2C_SUCCESS;
-}
-
-void rtw_survey_cmd_callback23a(struct rtw_adapter *padapter,
-                               struct cmd_obj *pcmd)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res == H2C_DROPPED) {
-               /* TODO: cancel timer and do timeout handler directly... */
-               /* need to make timeout handlerOS independent */
-               mod_timer(&pmlmepriv->scan_to_timer,
-                         jiffies + msecs_to_jiffies(1));
-       } else if (pcmd->res != H2C_SUCCESS) {
-               mod_timer(&pmlmepriv->scan_to_timer,
-                         jiffies + msecs_to_jiffies(1));
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "********Error: MgntActrtw_set_802_11_bssid23a_LIST_SCAN Fail ************\n");
-       }
-
-       /*  free cmd */
-       rtw_free_cmd_obj23a(pcmd);
-}
-
-void rtw_disassoc_cmd23a_callback(struct rtw_adapter *padapter,
-                                 struct cmd_obj *pcmd)
-{
-       struct  mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res != H2C_SUCCESS) {
-               spin_lock_bh(&pmlmepriv->lock);
-               set_fwstate(pmlmepriv, _FW_LINKED);
-               spin_unlock_bh(&pmlmepriv->lock);
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "***Error: disconnect_cmd_callback Fail ***\n");
-               return;
-       }
-
-       /*  free cmd */
-       rtw_free_cmd_obj23a(pcmd);
-}
-
-void rtw_joinbss_cmd23a_callback(struct rtw_adapter *padapter,
-                                struct cmd_obj *pcmd)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (pcmd->res == H2C_DROPPED) {
-               /* TODO: cancel timer and do timeout handler directly... */
-               /* need to make timeout handlerOS independent */
-               mod_timer(&pmlmepriv->assoc_timer,
-                         jiffies + msecs_to_jiffies(1));
-       } else if (pcmd->res != H2C_SUCCESS) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "********Error:rtw_select_and_join_from_scanned_queue Wait Sema  Fail ************\n");
-               mod_timer(&pmlmepriv->assoc_timer,
-                         jiffies + msecs_to_jiffies(1));
-       }
-
-       rtw_free_cmd_obj23a(pcmd);
-}
-
-void rtw_createbss_cmd23a_callback(struct rtw_adapter *padapter,
-                                  struct cmd_obj *pcmd)
-{
-       struct sta_info *psta;
-       struct wlan_network *pwlan;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex *)pcmd->parmbuf;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-       struct rtw_queue *scanned_queue = &pmlmepriv->scanned_queue;
-
-       if (pcmd->res != H2C_SUCCESS) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "********Error: rtw_createbss_cmd23a_callback  Fail ************\n");
-               mod_timer(&pmlmepriv->assoc_timer,
-                         jiffies + msecs_to_jiffies(1));
-       }
-
-       del_timer_sync(&pmlmepriv->assoc_timer);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               psta = rtw_get_stainfo23a(&padapter->stapriv,
-                                         pnetwork->MacAddress);
-               if (!psta) {
-                       psta = rtw_alloc_stainfo23a(&padapter->stapriv,
-                                                   pnetwork->MacAddress,
-                                                   GFP_KERNEL);
-                       if (!psta) {
-                               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                                        "Can't alloc sta_info when createbss_cmd_callback\n");
-                               goto createbss_cmd_fail;
-                       }
-               }
-
-               spin_lock_bh(&pmlmepriv->lock);
-               rtw_indicate_connect23a(padapter);
-               spin_unlock_bh(&pmlmepriv->lock);
-       } else {
-               pwlan = rtw_alloc_network(pmlmepriv, GFP_KERNEL);
-               spin_lock_bh(&scanned_queue->lock);
-               if (!pwlan) {
-                       pwlan = rtw_get_oldest_wlan_network23a(scanned_queue);
-                       if (!pwlan) {
-                               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                                        "Error:  can't get pwlan in rtw23a_joinbss_event_cb\n");
-                               spin_unlock_bh(&scanned_queue->lock);
-                               goto createbss_cmd_fail;
-                       }
-                       pwlan->last_scanned = jiffies;
-               } else {
-                       list_add_tail(&pwlan->list,
-                                     &scanned_queue->queue);
-               }
-
-               pnetwork->Length = get_wlan_bssid_ex_sz(pnetwork);
-               memcpy(&pwlan->network, pnetwork, pnetwork->Length);
-               /* pwlan->fixed = true; */
-
-               /* list_add_tail(&pwlan->list,
-                  &pmlmepriv->scanned_queue.queue); */
-
-               /*  copy pdev_network information to
-                   pmlmepriv->cur_network */
-               memcpy(&tgt_network->network, pnetwork,
-                      get_wlan_bssid_ex_sz(pnetwork));
-
-               /*  reset DSConfig */
-
-               clr_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
-               /*  we will set _FW_LINKED when there is one more sat to
-                   join us (rtw_stassoc_event_callback23a) */
-               spin_unlock_bh(&scanned_queue->lock);
-       }
-
-createbss_cmd_fail:
-
-       rtw_free_cmd_obj23a(pcmd);
-}
-
-void rtw_setstaKey_cmdrsp_callback23a(struct rtw_adapter *padapter,
-                                     struct cmd_obj *pcmd)
-{
-       struct sta_priv *pstapriv;
-       struct set_stakey_rsp *psetstakey_rsp;
-       struct sta_info *psta;
-
-       pstapriv = &padapter->stapriv;
-       psetstakey_rsp = (struct set_stakey_rsp *) (pcmd->rsp);
-       psta = rtw_get_stainfo23a(pstapriv, psetstakey_rsp->addr);
-
-       if (!psta) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "ERROR: rtw_setstaKey_cmdrsp_callback23a => can't get sta_info\n");
-               goto exit;
-       }
-
-exit:
-
-       rtw_free_cmd_obj23a(pcmd);
-}
-
-void rtw_setassocsta_cmdrsp_callback23a(struct rtw_adapter *padapter,
-                                       struct cmd_obj *pcmd)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct set_assocsta_parm *passocsta_parm;
-       struct set_assocsta_rsp *passocsta_rsp;
-       struct sta_info *psta;
-
-       passocsta_parm = (struct set_assocsta_parm *)(pcmd->parmbuf);
-       passocsta_rsp = (struct set_assocsta_rsp *) (pcmd->rsp);
-       psta = rtw_get_stainfo23a(pstapriv, passocsta_parm->addr);
-
-       if (psta == NULL) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "ERROR: setassocsta_cmdrsp_callbac => can't get sta_info\n");
-               goto exit;
-       }
-
-       psta->aid = psta->mac_id = passocsta_rsp->cam_id;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_MP_STATE) &&
-           check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-       set_fwstate(pmlmepriv, _FW_LINKED);
-       spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
-       rtw_free_cmd_obj23a(pcmd);
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_efuse.c b/drivers/staging/rtl8723au/core/rtw_efuse.c
deleted file mode 100644 (file)
index 359ef41..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_EFUSE_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <rtw_efuse.h>
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-#define REG_EFUSE_CTRL         0x0030
-#define EFUSE_CTRL             REG_EFUSE_CTRL  /* E-Fuse Control */
-
-#define VOLTAGE_V25            0x03
-#define LDOE25_SHIFT           28
-
-/*
- * When we want to enable write operation, we should change to
- * pwr on state. When we stop write, we should switch to 500k mode
- * and disable LDO 2.5V.
- */
-static void Efuse_PowerSwitch(struct rtw_adapter *padapter,
-                             u8 bWrite, u8 PwrState)
-{
-       u8 tempval;
-       u16 tmpV16;
-
-       if (PwrState == true) {
-               rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_ON);
-
-               /*
-                * 1.2V Power: From VDDON with Power
-                * Cut(0x0000h[15]), default valid
-                */
-               tmpV16 = rtl8723au_read16(padapter, REG_SYS_ISO_CTRL);
-               if (!(tmpV16 & PWC_EV12V)) {
-                       tmpV16 |= PWC_EV12V;
-                       rtl8723au_write16(padapter, REG_SYS_ISO_CTRL, tmpV16);
-               }
-               /* Reset: 0x0000h[28], default valid */
-               tmpV16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN);
-               if (!(tmpV16 & FEN_ELDR)) {
-                       tmpV16 |= FEN_ELDR;
-                       rtl8723au_write16(padapter, REG_SYS_FUNC_EN, tmpV16);
-               }
-
-               /*
-                * Clock: Gated(0x0008h[5]) 8M(0x0008h[1])
-                * clock from ANA, default valid
-                */
-               tmpV16 = rtl8723au_read16(padapter, REG_SYS_CLKR);
-               if ((!(tmpV16 & LOADER_CLK_EN)) || (!(tmpV16 & ANA8M))) {
-                       tmpV16 |= (LOADER_CLK_EN | ANA8M);
-                       rtl8723au_write16(padapter, REG_SYS_CLKR, tmpV16);
-               }
-
-               if (bWrite == true) {
-                       /*  Enable LDO 2.5V before read/write action */
-                       tempval = rtl8723au_read8(padapter, EFUSE_TEST + 3);
-                       tempval &= 0x0F;
-                       tempval |= (VOLTAGE_V25 << 4);
-                       rtl8723au_write8(padapter, EFUSE_TEST + 3,
-                                        tempval | 0x80);
-               }
-       } else {
-               rtl8723au_write8(padapter, REG_EFUSE_ACCESS, EFUSE_ACCESS_OFF);
-
-               if (bWrite == true) {
-                       /*  Disable LDO 2.5V after read/write action */
-                       tempval = rtl8723au_read8(padapter, EFUSE_TEST + 3);
-                       rtl8723au_write8(padapter, EFUSE_TEST + 3,
-                                        tempval & 0x7F);
-               }
-       }
-}
-
-u16 Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType)
-{
-       u16 ret = 0;
-
-       if (efuseType == EFUSE_WIFI)
-               ret = rtl8723a_EfuseGetCurrentSize_WiFi(pAdapter);
-       else
-               ret = rtl8723a_EfuseGetCurrentSize_BT(pAdapter);
-
-       return ret;
-}
-
-/* Get current efuse area enabled word */
-u8 Efuse_CalculateWordCnts23a(u8 word_en)
-{
-       return hweight8((~word_en) & 0xf);
-}
-
-/*
- * Description: Execute E-Fuse read byte operation.
- *
- * Assumptions: 1. Boot from E-Fuse and successfully auto-load.
- *              2. PASSIVE_LEVEL (USB interface)
- */
-void ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf)
-{
-       u32     value32;
-       u8      readbyte;
-       u16     retry;
-
-       /* Write Address */
-       rtl8723au_write8(Adapter, EFUSE_CTRL+1, (_offset & 0xff));
-       readbyte = rtl8723au_read8(Adapter, EFUSE_CTRL+2);
-       rtl8723au_write8(Adapter, EFUSE_CTRL+2,
-                        ((_offset >> 8) & 0x03) | (readbyte & 0xfc));
-
-       /* Write bit 32 0 */
-       readbyte = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
-       rtl8723au_write8(Adapter, EFUSE_CTRL+3, readbyte & 0x7f);
-
-       /* Check bit 32 read-ready */
-       retry = 0;
-       value32 = rtl8723au_read32(Adapter, EFUSE_CTRL);
-       while (!((value32 >> 24) & 0x80) && retry < 10000) {
-               value32 = rtl8723au_read32(Adapter, EFUSE_CTRL);
-               retry++;
-       }
-
-       /*
-        * Added suggested delay. This fixes the problem that
-        * Efuse read error in high temperature condition.
-        * Designer says that there shall be some delay after
-        * ready bit is set, or the result will always stay
-        * on last data we read.
-        */
-       udelay(50);
-       value32 = rtl8723au_read32(Adapter, EFUSE_CTRL);
-
-       *pbuf = (u8)(value32 & 0xff);
-}
-
-void EFUSE_GetEfuseDefinition23a(struct rtw_adapter *pAdapter, u8 efuseType,
-                                u8 type, void *pOut)
-{
-       u8 *pu1Tmp;
-       u16 *pu2Tmp;
-       u8 *pMax_section;
-
-       switch (type) {
-       case TYPE_EFUSE_MAX_SECTION:
-               pMax_section = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pMax_section = EFUSE_MAX_SECTION_8723A;
-               else
-                       *pMax_section = EFUSE_BT_MAX_SECTION;
-               break;
-
-       case TYPE_EFUSE_REAL_CONTENT_LEN:
-               pu2Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723A;
-               else
-                       *pu2Tmp = EFUSE_BT_REAL_CONTENT_LEN;
-               break;
-
-       case TYPE_AVAILABLE_EFUSE_BYTES_BANK:
-               pu2Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723A -
-                                  EFUSE_OOB_PROTECT_BYTES);
-               else
-                       *pu2Tmp = (EFUSE_BT_REAL_BANK_CONTENT_LEN -
-                                  EFUSE_PROTECT_BYTES_BANK);
-               break;
-
-       case TYPE_AVAILABLE_EFUSE_BYTES_TOTAL:
-               pu2Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu2Tmp = (EFUSE_REAL_CONTENT_LEN_8723A -
-                                  EFUSE_OOB_PROTECT_BYTES);
-               else
-                       *pu2Tmp = (EFUSE_BT_REAL_CONTENT_LEN -
-                                  (EFUSE_PROTECT_BYTES_BANK * 3));
-               break;
-
-       case TYPE_EFUSE_MAP_LEN:
-               pu2Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu2Tmp = EFUSE_MAP_LEN_8723A;
-               else
-                       *pu2Tmp = EFUSE_BT_MAP_LEN;
-               break;
-
-       case TYPE_EFUSE_PROTECT_BYTES_BANK:
-               pu1Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu1Tmp = EFUSE_OOB_PROTECT_BYTES;
-               else
-                       *pu1Tmp = EFUSE_PROTECT_BYTES_BANK;
-               break;
-
-       case TYPE_EFUSE_CONTENT_LEN_BANK:
-               pu2Tmp = pOut;
-
-               if (efuseType == EFUSE_WIFI)
-                       *pu2Tmp = EFUSE_REAL_CONTENT_LEN_8723A;
-               else
-                       *pu2Tmp = EFUSE_BT_REAL_BANK_CONTENT_LEN;
-               break;
-
-       default:
-               pu1Tmp = pOut;
-               *pu1Tmp = 0;
-               break;
-       }
-}
-
-/* Copy from WMAC for EFUSE read 1 byte. */
-u8 EFUSE_Read1Byte23a(struct rtw_adapter *Adapter, u16 Address)
-{
-       u8      data;
-       u8      Bytetemp = {0x00};
-       u8      temp = {0x00};
-       u32     k = 0;
-       u16     contentLen = 0;
-
-       EFUSE_GetEfuseDefinition23a(Adapter, EFUSE_WIFI,
-                                TYPE_EFUSE_REAL_CONTENT_LEN,
-                                (void *)&contentLen);
-
-       if (Address < contentLen) { /* E-fuse 512Byte */
-               /* Write E-fuse Register address bit0~7 */
-               temp = Address & 0xFF;
-               rtl8723au_write8(Adapter, EFUSE_CTRL+1, temp);
-               Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+2);
-               /* Write E-fuse Register address bit8~9 */
-               temp = ((Address >> 8) & 0x03) | (Bytetemp & 0xFC);
-               rtl8723au_write8(Adapter, EFUSE_CTRL+2, temp);
-
-               /* Write 0x30[31]= 0 */
-               Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
-               temp = Bytetemp & 0x7F;
-               rtl8723au_write8(Adapter, EFUSE_CTRL+3, temp);
-
-               /* Wait Write-ready (0x30[31]= 1) */
-               Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
-               while (!(Bytetemp & 0x80)) {
-                       Bytetemp = rtl8723au_read8(Adapter, EFUSE_CTRL+3);
-                       k++;
-                       if (k == 1000) {
-                               k = 0;
-                               break;
-                       }
-               }
-               data = rtl8723au_read8(Adapter, EFUSE_CTRL);
-               return data;
-       }
-       return 0xFF;
-}
-
-/* Read one byte from real Efuse. */
-int efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data)
-{
-       u8      tmpidx = 0;
-       int     bResult;
-
-       /*  -----------------e-fuse reg ctrl ---------------------------- */
-       /* address */
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 1, (u8)(addr & 0xff));
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 2,
-                        ((u8)((addr >> 8) & 0x03)) |
-                        (rtl8723au_read8(pAdapter, EFUSE_CTRL + 2) & 0xFC));
-
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 3, 0x72); /* read cmd */
-
-       while (!(0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL + 3)) &&
-              (tmpidx < 100))
-               tmpidx++;
-       if (tmpidx < 100) {
-               *data = rtl8723au_read8(pAdapter, EFUSE_CTRL);
-               bResult = _SUCCESS;
-       } else {
-               *data = 0xff;
-               bResult = _FAIL;
-       }
-       return bResult;
-}
-
-/* Write one byte to reald Efuse. */
-int efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data)
-{
-       u8      tmpidx = 0;
-       int     bResult;
-
-       /* return       0; */
-
-       /*  -----------------e-fuse reg ctrl ------------------------- */
-       /* address */
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 1, (u8)(addr & 0xff));
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 2,
-                        (rtl8723au_read8(pAdapter, EFUSE_CTRL + 2) & 0xFC) |
-                        (u8)((addr >> 8) & 0x03));
-       rtl8723au_write8(pAdapter, EFUSE_CTRL, data); /* data */
-
-       rtl8723au_write8(pAdapter, EFUSE_CTRL + 3, 0xF2); /* write cmd */
-
-       while ((0x80 & rtl8723au_read8(pAdapter, EFUSE_CTRL + 3)) &&
-              (tmpidx < 100)) {
-               tmpidx++;
-       }
-
-       if (tmpidx < 100)
-               bResult = _SUCCESS;
-       else
-               bResult = _FAIL;
-
-       return bResult;
-}
-
-/* Read allowed word in current efuse section data. */
-void efuse_WordEnableDataRead23a(u8 word_en, u8 *sourdata, u8 *targetdata)
-{
-       if (!(word_en&BIT(0))) {
-               targetdata[0] = sourdata[0];
-               targetdata[1] = sourdata[1];
-       }
-       if (!(word_en&BIT(1))) {
-               targetdata[2] = sourdata[2];
-               targetdata[3] = sourdata[3];
-       }
-       if (!(word_en&BIT(2))) {
-               targetdata[4] = sourdata[4];
-               targetdata[5] = sourdata[5];
-       }
-       if (!(word_en&BIT(3))) {
-               targetdata[6] = sourdata[6];
-               targetdata[7] = sourdata[7];
-       }
-}
-
-static int efuse_read8(struct rtw_adapter *padapter, u16 address, u8 *value)
-{
-       return efuse_OneByteRead23a(padapter, address, value);
-}
-
-static int efuse_write8(struct rtw_adapter *padapter, u16 address, u8 *value)
-{
-       return efuse_OneByteWrite23a(padapter, address, *value);
-}
-
-/* read/write raw efuse data */
-int rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bWrite, u16 start_addr,
-                       u16 cnts, u8 *data)
-{
-       int i = 0;
-       u16 real_content_len = 0, max_available_size = 0;
-       int res = _FAIL;
-       int (*rw8)(struct rtw_adapter *, u16, u8*);
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI,
-                                TYPE_EFUSE_REAL_CONTENT_LEN,
-                                (void *)&real_content_len);
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI,
-                                TYPE_AVAILABLE_EFUSE_BYTES_TOTAL,
-                                (void *)&max_available_size);
-
-       if (start_addr > real_content_len)
-               return _FAIL;
-
-       if (true == bWrite) {
-               if ((start_addr + cnts) > max_available_size)
-                       return _FAIL;
-               rw8 = &efuse_write8;
-       } else
-               rw8 = &efuse_read8;
-
-       Efuse_PowerSwitch(padapter, bWrite, true);
-
-       /* e-fuse one byte read/write */
-       for (i = 0; i < cnts; i++) {
-               if (start_addr >= real_content_len) {
-                       res = _FAIL;
-                       break;
-               }
-
-               res = rw8(padapter, start_addr++, data++);
-               if (res == _FAIL)
-                       break;
-       }
-
-       Efuse_PowerSwitch(padapter, bWrite, false);
-
-       return res;
-}
-
-u16 efuse_GetMaxSize23a(struct rtw_adapter *padapter)
-{
-       u16 max_size;
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI,
-                                TYPE_AVAILABLE_EFUSE_BYTES_TOTAL,
-                                (void *)&max_size);
-       return max_size;
-}
-
-int rtw_efuse_map_read23a(struct rtw_adapter *padapter,
-                         u16 addr, u16 cnts, u8 *data)
-{
-       u16 mapLen = 0;
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI,
-                                TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
-
-       if ((addr + cnts) > mapLen)
-               return _FAIL;
-
-       Efuse_PowerSwitch(padapter, false, true);
-
-       rtl8723a_readefuse(padapter, EFUSE_WIFI, addr, cnts, data);
-
-       Efuse_PowerSwitch(padapter, false, false);
-
-       return _SUCCESS;
-}
-
-int rtw_BT_efuse_map_read23a(struct rtw_adapter *padapter,
-                            u16 addr, u16 cnts, u8 *data)
-{
-       u16 mapLen = 0;
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_BT,
-                                TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
-
-       if ((addr + cnts) > mapLen)
-               return _FAIL;
-
-       Efuse_PowerSwitch(padapter, false, true);
-
-       rtl8723a_readefuse(padapter, EFUSE_BT, addr, cnts, data);
-
-       Efuse_PowerSwitch(padapter, false, false);
-
-       return _SUCCESS;
-}
-
-/* Read All Efuse content */
-static void Efuse_ReadAllMap(struct rtw_adapter *pAdapter, u8 efuseType,
-                            u8 *Efuse)
-{
-       u16     mapLen = 0;
-
-       Efuse_PowerSwitch(pAdapter, false, true);
-
-       EFUSE_GetEfuseDefinition23a(pAdapter, efuseType, TYPE_EFUSE_MAP_LEN,
-                                (void *)&mapLen);
-
-       rtl8723a_readefuse(pAdapter, efuseType, 0, mapLen, Efuse);
-
-       Efuse_PowerSwitch(pAdapter, false, false);
-}
-
-/*
- * Functions:  efuse_ShadowRead1Byte
- *             efuse_ShadowRead2Byte
- *             efuse_ShadowRead4Byte
- *
- * Read from efuse init map by one/two/four bytes
- */
-static void efuse_ShadowRead1Byte(struct rtw_adapter *pAdapter, u16 Offset,
-                                 u8 *Value)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
-}
-
-static void efuse_ShadowRead2Byte(struct rtw_adapter *pAdapter, u16 Offset,
-                                 u16 *Value)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
-}
-
-static void efuse_ShadowRead4Byte(struct rtw_adapter *pAdapter, u16 Offset,
-                                 u32 *Value)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-       *Value = pEEPROM->efuse_eeprom_data[Offset];
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16;
-       *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24;
-}
-
-/* Transfer current EFUSE content to shadow init and modify map. */
-void EFUSE_ShadowMapUpdate23a(struct rtw_adapter *pAdapter, u8 efuseType)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-       u16     mapLen = 0;
-
-       EFUSE_GetEfuseDefinition23a(pAdapter, efuseType,
-                                TYPE_EFUSE_MAP_LEN, (void *)&mapLen);
-
-       if (pEEPROM->bautoload_fail_flag == true)
-               memset(pEEPROM->efuse_eeprom_data, 0xFF, mapLen);
-       else
-               Efuse_ReadAllMap(pAdapter, efuseType,
-                                pEEPROM->efuse_eeprom_data);
-}
-
-/* Read from efuse init map */
-void EFUSE_ShadowRead23a(struct rtw_adapter *pAdapter, u8 Type,
-                        u16 Offset, u32 *Value)
-{
-       if (Type == 1)
-               efuse_ShadowRead1Byte(pAdapter, Offset, (u8 *)Value);
-       else if (Type == 2)
-               efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value);
-       else if (Type == 4)
-               efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value);
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
deleted file mode 100644 (file)
index 07a6490..0000000
+++ /dev/null
@@ -1,855 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _IEEE80211_C
-
-#include <drv_types.h>
-#include <linux/ieee80211.h>
-#include <ieee80211.h>
-#include <wifi.h>
-#include <osdep_service.h>
-#include <wlan_bssdef.h>
-
-u8 RTW_WPA_OUI23A_TYPE[] = { 0x00, 0x50, 0xf2, 1 };
-u16 RTW_WPA_VERSION23A = 1;
-u8 WPA_AUTH_KEY_MGMT_NONE23A[] = { 0x00, 0x50, 0xf2, 0 };
-u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X23A[] = { 0x00, 0x50, 0xf2, 1 };
-u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[] = { 0x00, 0x50, 0xf2, 2 };
-u8 WPA_CIPHER_SUITE_NONE23A[] = { 0x00, 0x50, 0xf2, 0 };
-u8 WPA_CIPHER_SUITE_WEP4023A[] = { 0x00, 0x50, 0xf2, 1 };
-u8 WPA_CIPHER_SUITE_TKIP23A[] = { 0x00, 0x50, 0xf2, 2 };
-u8 WPA_CIPHER_SUITE_WRAP23A[] = { 0x00, 0x50, 0xf2, 3 };
-u8 WPA_CIPHER_SUITE_CCMP23A[] = { 0x00, 0x50, 0xf2, 4 };
-u8 WPA_CIPHER_SUITE_WEP10423A[] = { 0x00, 0x50, 0xf2, 5 };
-
-u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X23A[] = { 0x00, 0x0f, 0xac, 1 };
-u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[] = { 0x00, 0x0f, 0xac, 2 };
-u8 RSN_CIPHER_SUITE_NONE23A[] = { 0x00, 0x0f, 0xac, 0 };
-u8 RSN_CIPHER_SUITE_WEP4023A[] = { 0x00, 0x0f, 0xac, 1 };
-u8 RSN_CIPHER_SUITE_TKIP23A[] = { 0x00, 0x0f, 0xac, 2 };
-u8 RSN_CIPHER_SUITE_WRAP23A[] = { 0x00, 0x0f, 0xac, 3 };
-u8 RSN_CIPHER_SUITE_CCMP23A[] = { 0x00, 0x0f, 0xac, 4 };
-u8 RSN_CIPHER_SUITE_WEP10423A[] = { 0x00, 0x0f, 0xac, 5 };
-/*  */
-/*  for adhoc-master to generate ie and provide supported-rate to fw */
-/*  */
-
-static u8 WIFI_CCKRATES[] = {
-       IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK
-};
-
-static u8 WIFI_OFDMRATES[] = {
-       IEEE80211_OFDM_RATE_6MB,
-       IEEE80211_OFDM_RATE_9MB,
-       IEEE80211_OFDM_RATE_12MB,
-       IEEE80211_OFDM_RATE_18MB,
-       IEEE80211_OFDM_RATE_24MB,
-       IEEE80211_OFDM_RATE_36MB,
-       IEEE80211_OFDM_RATE_48MB,
-       IEEE80211_OFDM_RATE_54MB
-};
-
-int rtw_get_bit_value_from_ieee_value23a(u8 val)
-{
-       unsigned char dot11_rate_table[]=
-               {2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 0};
-
-       int i = 0;
-
-       while (dot11_rate_table[i] != 0) {
-               if (dot11_rate_table[i] == val)
-                       return BIT(i);
-               i++;
-       }
-       return 0;
-}
-
-static bool rtw_is_cckrates_included(u8 *rate)
-{
-       u32 i = 0;
-
-       while (rate[i]) {
-               if ((rate[i] & 0x7f) == 2 || (rate[i] & 0x7f) == 4 ||
-                   (rate[i] & 0x7f) == 11 || (rate[i] & 0x7f) == 22)
-                       return true;
-               i++;
-       }
-
-       return false;
-}
-
-static bool rtw_is_cckratesonly_included(u8 *rate)
-{
-       u32 i = 0;
-
-       while (rate[i]) {
-               if ((rate[i] & 0x7f) != 2 && (rate[i] & 0x7f) != 4 &&
-                   (rate[i] & 0x7f) != 11 && (rate[i] & 0x7f) != 22)
-                       return false;
-
-               i++;
-       }
-
-       return true;
-}
-
-int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel)
-{
-       if (channel > 14) {
-               if (rtw_is_cckrates_included(rate))
-                       return WIRELESS_INVALID;
-               else
-                       return WIRELESS_11A;
-       } else {  /*  could be pure B, pure G, or B/G */
-               if (rtw_is_cckratesonly_included(rate))
-                       return WIRELESS_11B;
-               else if (rtw_is_cckrates_included(rate))
-                       return  WIRELESS_11BG;
-               else
-                       return WIRELESS_11G;
-       }
-}
-
-/*  rtw_set_ie23a will update frame length */
-u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen)
-{
-
-       *pbuf = (u8)index;
-
-       *(pbuf + 1) = (u8)len;
-
-       if (len > 0)
-               memcpy((void *)(pbuf + 2), (void *)source, len);
-
-       *frlen = *frlen + (len + 2);
-
-       return pbuf + len + 2;
-}
-
-inline u8 *rtw_set_ie23a_ch_switch (u8 *buf, u32 *buf_len, u8 ch_switch_mode,
-                               u8 new_ch, u8 ch_switch_cnt)
-{
-       u8 ie_data[3];
-
-       ie_data[0] = ch_switch_mode;
-       ie_data[1] = new_ch;
-       ie_data[2] = ch_switch_cnt;
-       return rtw_set_ie23a(buf, WLAN_EID_CHANNEL_SWITCH,  3, ie_data, buf_len);
-}
-
-inline u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset)
-{
-       if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-               return IEEE80211_HT_PARAM_CHA_SEC_BELOW;
-       else if (ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-               return IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
-
-       return IEEE80211_HT_PARAM_CHA_SEC_NONE;
-}
-
-inline u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len,
-                                         u8 secondary_ch_offset)
-{
-       return rtw_set_ie23a(buf, WLAN_EID_SECONDARY_CHANNEL_OFFSET,
-                         1, &secondary_ch_offset, buf_len);
-}
-
-/*----------------------------------------------------------------------------
-index: the information element id index, limit is the limit for search
------------------------------------------------------------------------------*/
-u8 *rtw_get_ie23a(u8 *pbuf, int index, int *len, int limit)
-{
-       int tmp, i;
-       u8 *p;
-
-       if (limit < 1) {
-
-               return NULL;
-       }
-
-       p = pbuf;
-       i = 0;
-       *len = 0;
-       while (1) {
-               if (*p == index) {
-                       *len = *(p + 1);
-                       return p;
-               } else {
-                       tmp = *(p + 1);
-                       p += (tmp + 2);
-                       i += (tmp + 2);
-               }
-               if (i >= limit)
-                       break;
-       }
-
-       return NULL;
-}
-
-/**
- * rtw_get_ie23a_ex - Search specific IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- * @ie: If not NULL and the specific IE is found, the IE will be copied
- *      to the buf starting from the specific IE
- * @ielen: If not NULL and the specific IE is found, will set to the length
- *         of the entire IE
- *
- * Returns: The address of the specific IE found, or NULL
- */
-u8 *rtw_get_ie23a_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len,
-                 u8 *ie, uint *ielen)
-{
-       uint cnt;
-       u8 *target_ie = NULL;
-
-       if (ielen)
-               *ielen = 0;
-
-       if (!in_ie || in_len <= 0)
-               return target_ie;
-
-       cnt = 0;
-
-       while (cnt < in_len) {
-               if (eid == in_ie[cnt] &&
-                   (!oui || !memcmp(&in_ie[cnt+2], oui, oui_len))) {
-                       target_ie = &in_ie[cnt];
-
-                       if (ie)
-                               memcpy(ie, &in_ie[cnt], in_ie[cnt+1]+2);
-
-                       if (ielen)
-                               *ielen = in_ie[cnt+1]+2;
-                       break;
-               } else {
-                       cnt += in_ie[cnt + 1] + 2; /* goto next */
-               }
-       }
-
-       return target_ie;
-}
-
-/**
- * rtw_ies_remove_ie23a - Find matching IEs and remove
- * @ies: Address of IEs to search
- * @ies_len: Pointer of length of ies, will update to new length
- * @offset: The offset to start search
- * @eid: Element ID to match
- * @oui: OUI to match
- * @oui_len: OUI length
- *
- * Returns: _SUCCESS: ies is updated, _FAIL: not updated
- */
-int rtw_ies_remove_ie23a(u8 *ies, uint *ies_len, uint offset, u8 eid,
-                     u8 *oui, u8 oui_len)
-{
-       int ret = _FAIL;
-       u8 *target_ie;
-       u32 target_ielen;
-       u8 *start;
-       uint search_len;
-
-       if (!ies || !ies_len || *ies_len <= offset)
-               goto exit;
-
-       start = ies + offset;
-       search_len = *ies_len - offset;
-
-       while (1) {
-               target_ie = rtw_get_ie23a_ex(start, search_len, eid, oui, oui_len,
-                                         NULL, &target_ielen);
-               if (target_ie && target_ielen) {
-                       u8 buf[MAX_IE_SZ] = {0};
-                       u8 *remain_ies = target_ie + target_ielen;
-                       uint remain_len = search_len - (remain_ies - start);
-
-                       memcpy(buf, remain_ies, remain_len);
-                       memcpy(target_ie, buf, remain_len);
-                       *ies_len = *ies_len - target_ielen;
-                       ret = _SUCCESS;
-
-                       start = target_ie;
-                       search_len = remain_len;
-               } else {
-                       break;
-               }
-       }
-exit:
-       return ret;
-}
-
-void rtw_set_supported_rate23a(u8 *SupportedRates, uint mode)
-{
-
-
-       memset(SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
-       switch (mode) {
-       case WIRELESS_11B:
-               memcpy(SupportedRates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
-               break;
-
-       case WIRELESS_11G:
-       case WIRELESS_11A:
-       case WIRELESS_11_5N:
-       case WIRELESS_11A_5N:/* Todo: no basic rate for ofdm ? */
-               memcpy(SupportedRates, WIFI_OFDMRATES,
-                      IEEE80211_NUM_OFDM_RATESLEN);
-               break;
-
-       case WIRELESS_11BG:
-       case WIRELESS_11G_24N:
-       case WIRELESS_11_24N:
-       case WIRELESS_11BG_24N:
-               memcpy(SupportedRates, WIFI_CCKRATES, IEEE80211_CCK_RATE_LEN);
-               memcpy(SupportedRates + IEEE80211_CCK_RATE_LEN, WIFI_OFDMRATES,
-                      IEEE80211_NUM_OFDM_RATESLEN);
-               break;
-       }
-
-}
-
-uint rtw_get_rateset_len23a(u8 *rateset)
-{
-       uint i = 0;
-
-       while(1) {
-               if (rateset[i] == 0)
-                       break;
-
-               if (i > 12)
-                       break;
-
-               i++;
-       }
-
-       return i;
-}
-
-int rtw_generate_ie23a(struct registry_priv *pregistrypriv)
-{
-       u8      wireless_mode;
-       int     sz = 0, rateLen;
-       struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network;
-       u8      *ie = pdev_network->IEs;
-       u16     cap;
-
-       pdev_network->tsf = 0;
-
-       cap = WLAN_CAPABILITY_IBSS;
-
-       if (pregistrypriv->preamble == PREAMBLE_SHORT)
-               cap |= WLAN_CAPABILITY_SHORT_PREAMBLE;
-
-       if (pdev_network->Privacy)
-               cap |= WLAN_CAPABILITY_PRIVACY;
-
-       pdev_network->capability = cap;
-
-       /* SSID */
-       ie = rtw_set_ie23a(ie, WLAN_EID_SSID, pdev_network->Ssid.ssid_len,
-                       pdev_network->Ssid.ssid, &sz);
-
-       /* supported rates */
-       if (pregistrypriv->wireless_mode == WIRELESS_11ABGN) {
-               if (pdev_network->DSConfig > 14)
-                       wireless_mode = WIRELESS_11A_5N;
-               else
-                       wireless_mode = WIRELESS_11BG_24N;
-       } else {
-               wireless_mode = pregistrypriv->wireless_mode;
-       }
-
-       rtw_set_supported_rate23a(pdev_network->SupportedRates, wireless_mode) ;
-
-       rateLen = rtw_get_rateset_len23a(pdev_network->SupportedRates);
-
-       if (rateLen > 8) {
-               ie = rtw_set_ie23a(ie, WLAN_EID_SUPP_RATES, 8,
-                               pdev_network->SupportedRates, &sz);
-               /* ie = rtw_set_ie23a(ie, _EXT_SUPPORTEDRATES_IE_, (rateLen - 8), (pdev_network->SupportedRates + 8), &sz); */
-       } else {
-               ie = rtw_set_ie23a(ie, WLAN_EID_SUPP_RATES, rateLen,
-                               pdev_network->SupportedRates, &sz);
-       }
-
-       /* DS parameter set */
-       ie = rtw_set_ie23a(ie, WLAN_EID_DS_PARAMS, 1,
-                          (u8 *)&pdev_network->DSConfig, &sz);
-
-       /* IBSS Parameter Set */
-
-       ie = rtw_set_ie23a(ie, WLAN_EID_IBSS_PARAMS, 2,
-                          (u8 *)&pdev_network->ATIMWindow, &sz);
-
-       if (rateLen > 8) {
-               ie = rtw_set_ie23a(ie, WLAN_EID_EXT_SUPP_RATES, (rateLen - 8),
-                               (pdev_network->SupportedRates + 8), &sz);
-       }
-
-
-
-       /* return _SUCCESS; */
-
-       return sz;
-}
-
-static int rtw_get_wpa_cipher_suite(const u8 *s)
-{
-       if (!memcmp(s, WPA_CIPHER_SUITE_NONE23A, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_NONE;
-       if (!memcmp(s, WPA_CIPHER_SUITE_WEP4023A, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_WEP40;
-       if (!memcmp(s, WPA_CIPHER_SUITE_TKIP23A, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_TKIP;
-       if (!memcmp(s, WPA_CIPHER_SUITE_CCMP23A, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_CCMP;
-       if (!memcmp(s, WPA_CIPHER_SUITE_WEP10423A, WPA_SELECTOR_LEN))
-               return WPA_CIPHER_WEP104;
-
-       return 0;
-}
-
-static int rtw_get_wpa2_cipher_suite(const u8 *s)
-{
-       if (!memcmp(s, RSN_CIPHER_SUITE_NONE23A, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_NONE;
-       if (!memcmp(s, RSN_CIPHER_SUITE_WEP4023A, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_WEP40;
-       if (!memcmp(s, RSN_CIPHER_SUITE_TKIP23A, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_TKIP;
-       if (!memcmp(s, RSN_CIPHER_SUITE_CCMP23A, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_CCMP;
-       if (!memcmp(s, RSN_CIPHER_SUITE_WEP10423A, RSN_SELECTOR_LEN))
-               return WPA_CIPHER_WEP104;
-
-       return 0;
-}
-
-int rtw_parse_wpa_ie23a(const u8 *wpa_ie, int wpa_ie_len, int *group_cipher,
-                       int *pairwise_cipher, int *is_8021x)
-{
-       int i, ret = _SUCCESS;
-       int left, count;
-       const u8 *pos;
-
-       if (wpa_ie_len <= 0) {
-               /* No WPA IE - fail silently */
-               return _FAIL;
-       }
-
-       if (wpa_ie[1] != (u8)(wpa_ie_len - 2))
-               return _FAIL;
-
-       pos = wpa_ie;
-
-       pos += 8;
-       left = wpa_ie_len - 8;
-
-       /* group_cipher */
-       if (left >= WPA_SELECTOR_LEN) {
-
-               *group_cipher = rtw_get_wpa_cipher_suite(pos);
-
-               pos += WPA_SELECTOR_LEN;
-               left -= WPA_SELECTOR_LEN;
-       } else if (left > 0) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "%s: ie length mismatch, %u too much\n",
-                        __func__, left);
-
-               return _FAIL;
-       }
-
-       /* pairwise_cipher */
-       if (left >= 2) {
-                /* count = le16_to_cpu(*(u16*)pos); */
-               count = get_unaligned_le16(pos);
-               pos += 2;
-               left -= 2;
-
-               if (count == 0 || left < count * WPA_SELECTOR_LEN) {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                "%s: ie count botch (pairwise), count %u left %u\n",
-                                __func__, count, left);
-                       return _FAIL;
-               }
-
-               for (i = 0; i < count; i++) {
-                       *pairwise_cipher |= rtw_get_wpa_cipher_suite(pos);
-
-                       pos += WPA_SELECTOR_LEN;
-                       left -= WPA_SELECTOR_LEN;
-               }
-       } else if (left == 1) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "%s: ie too short (for key mgmt)\n", __func__);
-               return _FAIL;
-       }
-
-       if (is_8021x) {
-               if (left >= 6) {
-                       pos += 2;
-                       if (!memcmp(pos, RTW_WPA_OUI23A_TYPE, 4)) {
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "%s : there has 802.1x auth\n",
-                                        __func__);
-                               *is_8021x = 1;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-int rtw_parse_wpa2_ie23a(const u8 *rsn_ie, int rsn_ie_len, int *group_cipher,
-                     int *pairwise_cipher, int *is_8021x)
-{
-       int i, ret = _SUCCESS;
-       int left, count;
-       const u8 *pos;
-       u8 SUITE_1X[4] = {0x00, 0x0f, 0xac, 0x01};
-
-       if (rsn_ie_len <= 0) {
-               /* No RSN IE - fail silently */
-               return _FAIL;
-       }
-
-       if (*rsn_ie != WLAN_EID_RSN || *(rsn_ie+1) != (u8)(rsn_ie_len - 2)) {
-               return _FAIL;
-       }
-
-       pos = rsn_ie;
-       pos += 4;
-       left = rsn_ie_len - 4;
-
-       /* group_cipher */
-       if (left >= RSN_SELECTOR_LEN) {
-               *group_cipher = rtw_get_wpa2_cipher_suite(pos);
-
-               pos += RSN_SELECTOR_LEN;
-               left -= RSN_SELECTOR_LEN;
-       } else if (left > 0) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "%s: ie length mismatch, %u too much\n",
-                        __func__, left);
-               return _FAIL;
-       }
-
-       /* pairwise_cipher */
-       if (left >= 2) {
-               /* count = le16_to_cpu(*(u16*)pos); */
-               count = get_unaligned_le16(pos);
-               pos += 2;
-               left -= 2;
-
-               if (count == 0 || left < count * RSN_SELECTOR_LEN) {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                "%s: ie count botch (pairwise), count %u left %u\n",
-                                __func__, count, left);
-                       return _FAIL;
-               }
-
-               for (i = 0; i < count; i++) {
-                       *pairwise_cipher |= rtw_get_wpa2_cipher_suite(pos);
-
-                       pos += RSN_SELECTOR_LEN;
-                       left -= RSN_SELECTOR_LEN;
-               }
-       } else if (left == 1) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "%s: ie too short (for key mgmt)\n",  __func__);
-
-               return _FAIL;
-       }
-
-       if (is_8021x) {
-               if (left >= 6) {
-                       pos += 2;
-                       if (!memcmp(pos, SUITE_1X, 4)) {
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "%s (): there has 802.1x auth\n",
-                                        __func__);
-                               *is_8021x = 1;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-/**
- * rtw_get_wps_attr23a - Search a specific WPS attribute from a given WPS IE
- * @wps_ie: Address of WPS IE to search
- * @wps_ielen: Length limit from wps_ie
- * @target_attr_id: The attribute ID of WPS attribute to search
- * @buf_attr: If not NULL and the WPS attribute is found, WPS attribute
- *            will be copied to the buf starting from buf_attr
- * @len_attr: If not NULL and the WPS attribute is found, will set to the
- *            length of the entire WPS attribute
- *
- * Returns: the address of the specific WPS attribute found, or NULL
- */
-const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen,
-                             u16 target_attr_id, u8 *buf_attr, u32 *len_attr)
-{
-       const u8 *attr_ptr = NULL;
-       const u8 *target_attr_ptr = NULL;
-       u8 wps_oui[4] = {0x00, 0x50, 0xF2, 0x04};
-
-       if (len_attr)
-               *len_attr = 0;
-
-       if (wps_ie[0] != WLAN_EID_VENDOR_SPECIFIC ||
-           memcmp(wps_ie + 2, wps_oui, 4)) {
-               return attr_ptr;
-       }
-
-       /*  6 = 1(Element ID) + 1(Length) + 4(WPS OUI) */
-       attr_ptr = wps_ie + 6; /* goto first attr */
-
-       while (attr_ptr - wps_ie < wps_ielen) {
-               /*  4 = 2(Attribute ID) + 2(Length) */
-               u16 attr_id = get_unaligned_be16(attr_ptr);
-               u16 attr_data_len = get_unaligned_be16(attr_ptr + 2);
-               u16 attr_len = attr_data_len + 4;
-
-               /* DBG_8723A("%s attr_ptr:%p, id:%u, length:%u\n", __func__, attr_ptr, attr_id, attr_data_len); */
-               if (attr_id == target_attr_id) {
-                       target_attr_ptr = attr_ptr;
-
-                       if (buf_attr)
-                               memcpy(buf_attr, attr_ptr, attr_len);
-
-                       if (len_attr)
-                               *len_attr = attr_len;
-
-                       break;
-               } else {
-                       attr_ptr += attr_len; /* goto next */
-               }
-       }
-
-       return target_attr_ptr;
-}
-
-/**
- * rtw_get_wps_attr_content23a - Search a specific WPS attribute content
- * from a given WPS IE
- * @wps_ie: Address of WPS IE to search
- * @wps_ielen: Length limit from wps_ie
- * @target_attr_id: The attribute ID of WPS attribute to search
- * @buf_content: If not NULL and the WPS attribute is found, WPS attribute
- *               content will be copied to the buf starting from buf_content
- * @len_content: If not NULL and the WPS attribute is found, will set to the
- *               length of the WPS attribute content
- *
- * Returns: the address of the specific WPS attribute content found, or NULL
- */
-const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen,
-                                     u16 target_attr_id, u8 *buf_content)
-{
-       const u8 *attr_ptr;
-       u32 attr_len;
-
-       attr_ptr = rtw_get_wps_attr23a(wps_ie, wps_ielen, target_attr_id,
-                                   NULL, &attr_len);
-
-       if (attr_ptr && attr_len) {
-               if (buf_content)
-                       memcpy(buf_content, attr_ptr + 4, attr_len - 4);
-
-               return attr_ptr + 4;
-       }
-
-       return NULL;
-}
-
-static int rtw_get_cipher_info(struct wlan_network *pnetwork)
-{
-       const u8 *pbuf;
-       int group_cipher = 0, pairwise_cipher = 0, is8021x = 0;
-       int ret = _FAIL;
-       int r, plen;
-       char *pie;
-
-       pie = pnetwork->network.IEs;
-       plen = pnetwork->network.IELength;
-
-       pbuf = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                      WLAN_OUI_TYPE_MICROSOFT_WPA, pie, plen);
-
-       if (pbuf && pbuf[1] > 0) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                        "rtw_get_cipher_info: wpa_ielen: %d\n", pbuf[1]);
-               r = rtw_parse_wpa_ie23a(pbuf, pbuf[1] + 2, &group_cipher,
-                                    &pairwise_cipher, &is8021x);
-               if (r == _SUCCESS) {
-                       pnetwork->BcnInfo.pairwise_cipher = pairwise_cipher;
-                       pnetwork->BcnInfo.group_cipher = group_cipher;
-                       pnetwork->BcnInfo.is_8021x = is8021x;
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                "%s: pnetwork->pairwise_cipher: %d, is_8021x is %d\n",
-                                __func__, pnetwork->BcnInfo.pairwise_cipher,
-                                pnetwork->BcnInfo.is_8021x);
-                       ret = _SUCCESS;
-               }
-       } else {
-               pbuf = cfg80211_find_ie(WLAN_EID_RSN, pie, plen);
-
-               if (pbuf && pbuf[1] > 0) {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                "get RSN IE\n");
-                       r = rtw_parse_wpa2_ie23a(pbuf, pbuf[1] + 2,
-                                             &group_cipher, &pairwise_cipher,
-                                             &is8021x);
-                       if (r == _SUCCESS) {
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "get RSN IE  OK!!!\n");
-                               pnetwork->BcnInfo.pairwise_cipher =
-                                       pairwise_cipher;
-                               pnetwork->BcnInfo.group_cipher = group_cipher;
-                               pnetwork->BcnInfo.is_8021x = is8021x;
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "%s: pnetwork->pairwise_cipher: %d,pnetwork->group_cipher is %d, is_8021x is %d\n",
-                                        __func__,
-                                        pnetwork->BcnInfo.pairwise_cipher,
-                                        pnetwork->BcnInfo.group_cipher,
-                                        pnetwork->BcnInfo.is_8021x);
-                               ret = _SUCCESS;
-                       }
-               }
-       }
-
-       return ret;
-}
-
-void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
-{
-       u8 bencrypt = 0;
-       int pie_len;
-       u8 *pie;
-       const u8 *p;
-
-       if (pnetwork->network.capability & WLAN_CAPABILITY_PRIVACY) {
-               bencrypt = 1;
-               pnetwork->network.Privacy = 1;
-       } else
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "%s: ssid =%s\n", __func__, pnetwork->network.Ssid.ssid);
-
-       pie = pnetwork->network.IEs;
-       pie_len = pnetwork->network.IELength;
-
-       p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
-       if (p && p[1]) {
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA2;
-       } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                          WLAN_OUI_TYPE_MICROSOFT_WPA,
-                                          pie, pie_len)) {
-               pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA;
-       } else {
-               if (bencrypt)
-                       pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WEP;
-       }
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "%s: pnetwork->encryp_protocol is %x\n", __func__,
-                pnetwork->BcnInfo.encryp_protocol);
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "%s: pnetwork->encryp_protocol is %x\n", __func__,
-                pnetwork->BcnInfo.encryp_protocol);
-       rtw_get_cipher_info(pnetwork);
-
-       /* get bwmode and ch_offset */
-}
-
-/* show MCS rate, unit: 100Kbps */
-u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
-                   struct ieee80211_mcs_info *mcs)
-{
-       u16 max_rate = 0;
-
-       if (rf_type == RF_1T1R) {
-               if (mcs->rx_mask[0] & BIT(7))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):
-                               ((short_GI_20)?722:650);
-               else if (mcs->rx_mask[0] & BIT(6))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):
-                               ((short_GI_20)?650:585);
-               else if (mcs->rx_mask[0] & BIT(5))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):
-                               ((short_GI_20)?578:520);
-               else if (mcs->rx_mask[0] & BIT(4))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):
-                               ((short_GI_20)?433:390);
-               else if (mcs->rx_mask[0] & BIT(3))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):
-                               ((short_GI_20)?289:260);
-               else if (mcs->rx_mask[0] & BIT(2))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):
-                               ((short_GI_20)?217:195);
-               else if (mcs->rx_mask[0] & BIT(1))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):
-                               ((short_GI_20)?144:130);
-               else if (mcs->rx_mask[0] & BIT(0))
-                       max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):
-                               ((short_GI_20)?72:65);
-       } else {
-               if (mcs->rx_mask[1]) {
-                       if (mcs->rx_mask[1] & BIT(7))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?3000:2700):((short_GI_20)?1444:1300);
-                       else if (mcs->rx_mask[1] & BIT(6))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?2700:2430):((short_GI_20)?1300:1170);
-                       else if (mcs->rx_mask[1] & BIT(5))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?2400:2160):((short_GI_20)?1156:1040);
-                       else if (mcs->rx_mask[1] & BIT(4))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?1800:1620):((short_GI_20)?867:780);
-                       else if (mcs->rx_mask[1] & BIT(3))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
-                       else if (mcs->rx_mask[1] & BIT(2))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
-                       else if (mcs->rx_mask[1] & BIT(1))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
-                       else if (mcs->rx_mask[1] & BIT(0))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
-               } else {
-                       if (mcs->rx_mask[0] & BIT(7))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
-                       else if (mcs->rx_mask[0] & BIT(6))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
-                       else if (mcs->rx_mask[0] & BIT(5))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
-                       else if (mcs->rx_mask[0] & BIT(4))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
-                       else if (mcs->rx_mask[0] & BIT(3))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
-                       else if (mcs->rx_mask[0] & BIT(2))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
-                       else if (mcs->rx_mask[0] & BIT(1))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
-                       else if (mcs->rx_mask[0] & BIT(0))
-                               max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
-               }
-       }
-       return max_rate;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
deleted file mode 100644 (file)
index a786fc4..0000000
+++ /dev/null
@@ -1,2314 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_MLME_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <xmit_osdep.h>
-#include <hal_intf.h>
-#include <mlme_osdep.h>
-#include <sta_info.h>
-#include <linux/ieee80211.h>
-#include <wifi.h>
-#include <wlan_bssdef.h>
-#include <rtw_sreset.h>
-
-static struct wlan_network *
-rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv);
-static int rtw_do_join(struct rtw_adapter *padapter);
-
-static void rtw_init_mlme_timer(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       setup_timer(&pmlmepriv->assoc_timer, rtw23a_join_to_handler,
-                   (unsigned long)padapter);
-
-       setup_timer(&pmlmepriv->scan_to_timer, rtw_scan_timeout_handler23a,
-                   (unsigned long)padapter);
-
-       setup_timer(&pmlmepriv->dynamic_chk_timer,
-                   rtw_dynamic_check_timer_handler, (unsigned long)padapter);
-
-       setup_timer(&pmlmepriv->set_scan_deny_timer,
-                   rtw_set_scan_deny_timer_hdl, (unsigned long)padapter);
-}
-
-int rtw_init_mlme_priv23a(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       pmlmepriv->nic_hdl = padapter;
-
-       pmlmepriv->fw_state = 0;
-       pmlmepriv->cur_network.network.ifmode = NL80211_IFTYPE_UNSPECIFIED;
-       /*  1: active, 0: pasive. Maybe someday we should rename this
-           varable to "active_mode" (Jeff) */
-       pmlmepriv->scan_mode = SCAN_ACTIVE;
-
-       spin_lock_init(&pmlmepriv->lock);
-       _rtw_init_queue23a(&pmlmepriv->scanned_queue);
-
-       memset(&pmlmepriv->assoc_ssid, 0, sizeof(struct cfg80211_ssid));
-
-       rtw_clear_scan_deny(padapter);
-
-       rtw_init_mlme_timer(padapter);
-       return _SUCCESS;
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-static void rtw_free_mlme_ie_data(u8 **ppie, u32 *plen)
-{
-       if (*ppie) {
-               kfree(*ppie);
-               *plen = 0;
-               *ppie = NULL;
-       }
-}
-#endif
-
-void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv)
-{
-#ifdef CONFIG_8723AU_AP_MODE
-       kfree(pmlmepriv->assoc_req);
-       kfree(pmlmepriv->assoc_rsp);
-       rtw_free_mlme_ie_data(&pmlmepriv->wps_probe_req_ie,
-                             &pmlmepriv->wps_probe_req_ie_len);
-#endif
-}
-
-void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv)
-{
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "rtw_free_mlme_priv23a\n");
-
-       rtw23a_free_mlme_priv_ie_data(pmlmepriv);
-}
-
-struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, gfp_t gfp)
-{
-       struct wlan_network *pnetwork;
-
-       pnetwork = kzalloc(sizeof(struct wlan_network), gfp);
-       if (pnetwork) {
-               INIT_LIST_HEAD(&pnetwork->list);
-               pnetwork->network_type = 0;
-               pnetwork->fixed = false;
-               pnetwork->last_scanned = jiffies;
-               pnetwork->join_res = 0;
-       }
-
-       return pnetwork;
-}
-
-static void _rtw_free_network23a(struct mlme_priv *pmlmepriv,
-                                struct wlan_network *pnetwork)
-{
-       if (!pnetwork)
-               return;
-
-       if (pnetwork->fixed == true)
-               return;
-
-       list_del_init(&pnetwork->list);
-
-       kfree(pnetwork);
-}
-
-/*
- return the wlan_network with the matching addr
-
- Shall be called under atomic context... to avoid possible racing condition...
-*/
-struct wlan_network *
-rtw_find_network23a(struct rtw_queue *scanned_queue, u8 *addr)
-{
-       struct list_head *phead, *plist;
-       struct wlan_network *pnetwork = NULL;
-
-       if (is_zero_ether_addr(addr)) {
-               pnetwork = NULL;
-               goto exit;
-       }
-
-       /* spin_lock_bh(&scanned_queue->lock); */
-
-       phead = get_list_head(scanned_queue);
-       plist = phead->next;
-
-       while (plist != phead) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               if (ether_addr_equal(addr, pnetwork->network.MacAddress))
-                       break;
-
-               plist = plist->next;
-       }
-
-       if (plist == phead)
-               pnetwork = NULL;
-
-       /* spin_unlock_bh(&scanned_queue->lock); */
-
-exit:
-
-       return pnetwork;
-}
-
-void rtw_free_network_queue23a(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       struct wlan_network *pnetwork, *ptmp;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct rtw_queue *scanned_queue = &pmlmepriv->scanned_queue;
-
-       spin_lock_bh(&scanned_queue->lock);
-       phead = get_list_head(scanned_queue);
-       list_for_each_entry_safe(pnetwork, ptmp, phead, list)
-               _rtw_free_network23a(pmlmepriv, pnetwork);
-       spin_unlock_bh(&scanned_queue->lock);
-}
-
-int rtw_if_up23a(struct rtw_adapter *padapter)
-{
-       int res;
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved ||
-           !check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                        "rtw_if_up23a:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n",
-                        padapter->bDriverStopped, padapter->bSurpriseRemoved);
-               res = false;
-       } else
-               res =  true;
-
-       return res;
-}
-
-void rtw_generate_random_ibss23a(u8 *pibss)
-{
-       unsigned long curtime = jiffies;
-
-       pibss[0] = 0x02;  /* in ad-hoc mode bit1 must set to 1 */
-       pibss[1] = 0x11;
-       pibss[2] = 0x87;
-       pibss[3] = curtime & 0xff;/* p[0]; */
-       pibss[4] = (curtime >> 8) & 0xff;/* p[1]; */
-       pibss[5] = (curtime >> 16) & 0xff;/* p[2]; */
-}
-
-void rtw_set_roaming(struct rtw_adapter *adapter, u8 to_roaming)
-{
-       if (to_roaming == 0)
-               adapter->mlmepriv.to_join = false;
-       adapter->mlmepriv.to_roaming = to_roaming;
-}
-
-static void _rtw_roaming(struct rtw_adapter *padapter,
-                        struct wlan_network *tgt_network)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *pnetwork;
-       int do_join_r;
-
-       if (tgt_network)
-               pnetwork = tgt_network;
-       else
-               pnetwork = &pmlmepriv->cur_network;
-
-       if (padapter->mlmepriv.to_roaming > 0) {
-               DBG_8723A("roaming from %s(%pM), length:%d\n",
-                         pnetwork->network.Ssid.ssid,
-                         pnetwork->network.MacAddress,
-                         pnetwork->network.Ssid.ssid_len);
-               memcpy(&pmlmepriv->assoc_ssid, &pnetwork->network.Ssid,
-                      sizeof(struct cfg80211_ssid));
-
-               pmlmepriv->assoc_by_bssid = false;
-
-               while (1) {
-                       do_join_r = rtw_do_join(padapter);
-                       if (do_join_r == _SUCCESS)
-                               break;
-                       else {
-                               DBG_8723A("roaming do_join return %d\n",
-                                         do_join_r);
-                               pmlmepriv->to_roaming--;
-
-                               if (padapter->mlmepriv.to_roaming > 0)
-                                       continue;
-                               else {
-                                       DBG_8723A("%s(%d) -to roaming fail, "
-                                                 "indicate_disconnect\n",
-                                                 __func__, __LINE__);
-                                       rtw_indicate_disconnect23a(padapter);
-                                       break;
-                               }
-                       }
-               }
-       }
-}
-
-void rtw23a_roaming(struct rtw_adapter *padapter,
-                   struct wlan_network *tgt_network)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       spin_lock_bh(&pmlmepriv->lock);
-       _rtw_roaming(padapter, tgt_network);
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv,
-                                   struct wlan_network *pnetwork)
-{
-       _rtw_free_network23a(pmlmepriv, pnetwork);
-}
-
-bool rtw_is_same_ibss23a(struct rtw_adapter *adapter,
-                        struct wlan_network *pnetwork)
-{
-       int ret;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-
-       if (psecuritypriv->dot11PrivacyAlgrthm != 0 &&
-           pnetwork->network.Privacy == 0)
-               ret = false;
-       else if (psecuritypriv->dot11PrivacyAlgrthm == 0 &&
-                pnetwork->network.Privacy == 1)
-               ret = false;
-       else
-               ret = true;
-
-       return ret;
-}
-
-inline int is_same_ess(struct wlan_bssid_ex *a, struct wlan_bssid_ex *b);
-inline int is_same_ess(struct wlan_bssid_ex *a, struct wlan_bssid_ex *b)
-{
-       return (a->Ssid.ssid_len == b->Ssid.ssid_len) &&
-               !memcmp(a->Ssid.ssid, b->Ssid.ssid, a->Ssid.ssid_len);
-}
-
-int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst)
-{
-       u16 s_cap, d_cap;
-
-       s_cap = src->capability;
-       d_cap = dst->capability;
-
-       return ((src->Ssid.ssid_len == dst->Ssid.ssid_len) &&
-               /*      (src->DSConfig == dst->DSConfig) && */
-               ether_addr_equal(src->MacAddress, dst->MacAddress) &&
-               !memcmp(src->Ssid.ssid, dst->Ssid.ssid, src->Ssid.ssid_len) &&
-               (s_cap & WLAN_CAPABILITY_IBSS) ==
-               (d_cap & WLAN_CAPABILITY_IBSS) &&
-               (s_cap & WLAN_CAPABILITY_ESS) == (d_cap & WLAN_CAPABILITY_ESS));
-}
-
-struct wlan_network *
-rtw_get_oldest_wlan_network23a(struct rtw_queue *scanned_queue)
-{
-       struct list_head *phead;
-       struct wlan_network *pwlan;
-       struct wlan_network *oldest = NULL;
-
-       phead = get_list_head(scanned_queue);
-       list_for_each_entry(pwlan, phead, list) {
-               if (pwlan->fixed != true) {
-                       if (!oldest || time_after(oldest->last_scanned,
-                                                 pwlan->last_scanned))
-                               oldest = pwlan;
-               }
-       }
-
-       return oldest;
-}
-
-void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
-                      struct rtw_adapter *padapter, bool update_ie)
-{
-       u8 ss_ori = dst->SignalStrength;
-       u8 sq_ori = dst->SignalQuality;
-       long rssi_ori = dst->Rssi;
-
-       u8 ss_smp = src->SignalStrength;
-       u8 sq_smp = src->SignalQuality;
-       long rssi_smp = src->Rssi;
-
-       u8 ss_final;
-       u8 sq_final;
-       long rssi_final;
-
-       DBG_8723A("%s %s(%pM, ch%u) ss_ori:%3u, sq_ori:%3u, rssi_ori:%3ld, "
-                 "ss_smp:%3u, sq_smp:%3u, rssi_smp:%3ld\n",
-                 __func__, src->Ssid.ssid, src->MacAddress,
-                 src->DSConfig, ss_ori, sq_ori, rssi_ori,
-                 ss_smp, sq_smp, rssi_smp
-       );
-
-       /* The rule below is 1/5 for sample value, 4/5 for history value */
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) &&
-           is_same_network23a(&padapter->mlmepriv.cur_network.network, src)) {
-               /* Take the recvpriv's value for the connected AP*/
-               ss_final = padapter->recvpriv.signal_strength;
-               sq_final = padapter->recvpriv.signal_qual;
-               /* the rssi value here is undecorated, and will be
-                  used for antenna diversity */
-               if (sq_smp != 101) /* from the right channel */
-                       rssi_final = (src->Rssi+dst->Rssi*4)/5;
-               else
-                       rssi_final = rssi_ori;
-       } else {
-               if (sq_smp != 101) { /* from the right channel */
-                       ss_final = ((u32)src->SignalStrength +
-                                   (u32)dst->SignalStrength * 4) / 5;
-                       sq_final = ((u32)src->SignalQuality +
-                                   (u32)dst->SignalQuality * 4) / 5;
-                       rssi_final = src->Rssi+dst->Rssi * 4 / 5;
-               } else {
-                       /* bss info not receiving from the right channel, use
-                          the original RX signal infos */
-                       ss_final = dst->SignalStrength;
-                       sq_final = dst->SignalQuality;
-                       rssi_final = dst->Rssi;
-               }
-
-       }
-
-       if (update_ie)
-               memcpy(dst, src, get_wlan_bssid_ex_sz(src));
-
-       dst->SignalStrength = ss_final;
-       dst->SignalQuality = sq_final;
-       dst->Rssi = rssi_final;
-
-       DBG_8723A("%s %s(%pM), SignalStrength:%u, SignalQuality:%u, "
-                 "RawRSSI:%ld\n",  __func__, dst->Ssid.ssid, dst->MacAddress,
-                 dst->SignalStrength, dst->SignalQuality, dst->Rssi);
-}
-
-static void update_current_network(struct rtw_adapter *adapter,
-                                  struct wlan_bssid_ex *pnetwork)
-{
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) &&
-           is_same_network23a(&pmlmepriv->cur_network.network, pnetwork)) {
-               update_network23a(&pmlmepriv->cur_network.network,
-                                 pnetwork, adapter, true);
-
-               rtw_update_protection23a(adapter,
-                                        pmlmepriv->cur_network.network.IEs,
-                                        pmlmepriv->cur_network.network.IELength);
-       }
-}
-
-/*
-
-Caller must hold pmlmepriv->lock first.
-
-*/
-static void rtw_update_scanned_network(struct rtw_adapter *adapter,
-                                      struct wlan_bssid_ex *target)
-{
-       struct list_head *plist, *phead;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_network *pnetwork = NULL;
-       struct wlan_network *oldest = NULL;
-       struct rtw_queue *queue = &pmlmepriv->scanned_queue;
-       u32 bssid_ex_sz;
-       int found = 0;
-
-       spin_lock_bh(&queue->lock);
-       phead = get_list_head(queue);
-       list_for_each(plist, phead) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               if (is_same_network23a(&pnetwork->network, target)) {
-                       found = 1;
-                       break;
-               }
-               if (!oldest || time_after(oldest->last_scanned,
-                                         pnetwork->last_scanned))
-                       oldest = pnetwork;
-       }
-
-       /* If we didn't find a match, then get a new network slot to initialize
-        * with this beacon's information */
-       if (!found) {
-               pnetwork = rtw_alloc_network(pmlmepriv, GFP_ATOMIC);
-               if (!pnetwork) {
-                       if (!oldest) {
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                        "something wrong here\n");
-                               goto exit;
-                       }
-                       pnetwork = oldest;
-               } else
-                       list_add_tail(&pnetwork->list, &queue->queue);
-
-               bssid_ex_sz = get_wlan_bssid_ex_sz(target);
-               target->Length = bssid_ex_sz;
-               memcpy(&pnetwork->network, target, bssid_ex_sz);
-
-               /*  variable initialize */
-               pnetwork->fixed = false;
-               pnetwork->last_scanned = jiffies;
-
-               pnetwork->network_type = 0;
-               pnetwork->join_res = 0;
-
-               /* bss info not receiving from the right channel */
-               if (pnetwork->network.SignalQuality == 101)
-                       pnetwork->network.SignalQuality = 0;
-       } else {
-               /*
-                * we have an entry and we are going to update it. But
-                * this entry may be already expired. In this case we
-                * do the same as we found a new net and call the
-                * new_net handler
-                */
-               bool update_ie = true;
-
-               pnetwork->last_scanned = jiffies;
-
-               /* target.reserved == 1, means that scanned network is
-                * a bcn frame. */
-               if (pnetwork->network.IELength > target->IELength &&
-                   target->reserved == 1)
-                       update_ie = false;
-
-               update_network23a(&pnetwork->network, target, adapter,
-                                 update_ie);
-       }
-
-exit:
-       spin_unlock_bh(&queue->lock);
-}
-
-static void rtw_add_network(struct rtw_adapter *adapter,
-                           struct wlan_bssid_ex *pnetwork)
-{
-       update_current_network(adapter, pnetwork);
-       rtw_update_scanned_network(adapter, pnetwork);
-}
-
-/* select the desired network based on the capability of the (i)bss. */
-/*  check items: (1) security */
-/*                        (2) network_type */
-/*                        (3) WMM */
-/*                        (4) HT */
-/*                      (5) others */
-static int rtw_is_desired_network(struct rtw_adapter *adapter,
-                                 struct wlan_network *pnetwork)
-{
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u32 desired_encmode;
-       u32 privacy;
-       int bselected = true;
-
-       desired_encmode = psecuritypriv->ndisencryptstatus;
-       privacy = pnetwork->network.Privacy;
-
-       if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
-               if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                           WLAN_OUI_TYPE_MICROSOFT_WPA,
-                                           pnetwork->network.IEs,
-                                           pnetwork->network.IELength))
-                       return true;
-               else
-                       return false;
-       }
-       if (adapter->registrypriv.wifi_spec == 1) {
-               /* for  correct flow of 8021X  to do.... */
-               if (desired_encmode == Ndis802_11EncryptionDisabled &&
-                   privacy != 0)
-                       bselected = false;
-       }
-
-       if (desired_encmode != Ndis802_11EncryptionDisabled && privacy == 0) {
-               DBG_8723A("desired_encmode: %d, privacy: %d\n",
-                         desired_encmode, privacy);
-               bselected = false;
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-               if (pnetwork->network.ifmode !=
-                   pmlmepriv->cur_network.network.ifmode)
-                       bselected = false;
-       }
-
-       return bselected;
-}
-
-void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-       u32 len;
-       struct wlan_bssid_ex *pnetwork;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct survey_event *survey = (struct survey_event *)pbuf;
-
-       pnetwork = survey->bss;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid);
-
-       len = get_wlan_bssid_ex_sz(pnetwork);
-       if (len > (sizeof(struct wlan_bssid_ex))) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "****rtw_survey_event_cb23a: return a wrong bss ***\n");
-               return;
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       /*  update IBSS_network 's timestamp */
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               if (ether_addr_equal(pmlmepriv->cur_network.network.MacAddress,
-                                    pnetwork->MacAddress)) {
-                       struct wlan_network *ibss_wlan;
-
-                       pmlmepriv->cur_network.network.beacon_interval =
-                               pnetwork->beacon_interval;
-                       pmlmepriv->cur_network.network.capability =
-                               pnetwork->capability;
-                       pmlmepriv->cur_network.network.tsf = pnetwork->tsf;
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       ibss_wlan = rtw_find_network23a(
-                               &pmlmepriv->scanned_queue,
-                               pnetwork->MacAddress);
-                       if (ibss_wlan) {
-                               pmlmepriv->cur_network.network.beacon_interval =
-                                       ibss_wlan->network.beacon_interval;
-                               pmlmepriv->cur_network.network.capability =
-                                       ibss_wlan->network.capability;
-                               pmlmepriv->cur_network.network.tsf =
-                                       ibss_wlan->network.tsf;
-                               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                               goto exit;
-                       }
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-               }
-       }
-
-       /*  lock pmlmepriv->lock when you accessing network_q */
-       if (!check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-               if (pnetwork->Ssid.ssid[0] == 0)
-                       pnetwork->Ssid.ssid_len = 0;
-
-               rtw_add_network(adapter, pnetwork);
-       }
-
-exit:
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       kfree(survey->bss);
-       survey->bss = NULL;
-}
-
-void
-rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-       int ret;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (pmlmepriv->wps_probe_req_ie) {
-               pmlmepriv->wps_probe_req_ie_len = 0;
-               kfree(pmlmepriv->wps_probe_req_ie);
-               pmlmepriv->wps_probe_req_ie = NULL;
-       }
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "rtw_surveydone_event_callback23a: fw_state:%x\n",
-                get_fwstate(pmlmepriv));
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               del_timer_sync(&pmlmepriv->scan_to_timer);
-
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-       } else {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "nic status =%x, survey done event comes too late!\n",
-                        get_fwstate(pmlmepriv));
-       }
-
-       rtw_set_signal_stat_timer(&adapter->recvpriv);
-
-       if (pmlmepriv->to_join == true) {
-               set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-               if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                       ret = rtw_select_and_join_from_scanned_queue23a(
-                               pmlmepriv);
-                       if (ret != _SUCCESS)
-                               rtw_do_join_adhoc(adapter);
-               } else {
-                       pmlmepriv->to_join = false;
-                       ret = rtw_select_and_join_from_scanned_queue23a(
-                               pmlmepriv);
-                       if (ret != _SUCCESS) {
-                               DBG_8723A("try_to_join, but select scanning "
-                                         "queue fail, to_roaming:%d\n",
-                                         adapter->mlmepriv.to_roaming);
-                               if (adapter->mlmepriv.to_roaming) {
-                                       if (--pmlmepriv->to_roaming == 0 ||
-                                           rtw_sitesurvey_cmd23a(
-                                                   adapter,
-                                                   &pmlmepriv->assoc_ssid, 1,
-                                                   NULL, 0) != _SUCCESS) {
-                                               rtw_set_roaming(adapter, 0);
-                                               rtw_free_assoc_resources23a(
-                                                       adapter, 1);
-                                               rtw_indicate_disconnect23a(
-                                                       adapter);
-                                       } else
-                                               pmlmepriv->to_join = true;
-                               }
-                               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-                       }
-               }
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       rtw_os_xmit_schedule23a(adapter);
-
-       if (pmlmeext->sitesurvey_res.bss_cnt == 0)
-               rtw_sreset_reset(adapter);
-
-       rtw_cfg80211_surveydone_event_callback(adapter);
-}
-
-static void free_scanqueue(struct mlme_priv *pmlmepriv)
-{
-       struct wlan_network *pnetwork, *ptemp;
-       struct rtw_queue *scan_queue = &pmlmepriv->scanned_queue;
-       struct list_head *phead;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_, "+free_scanqueue\n");
-       spin_lock_bh(&scan_queue->lock);
-       phead = get_list_head(scan_queue);
-       list_for_each_entry_safe(pnetwork, ptemp, phead, list) {
-               pnetwork->fixed = false;
-               _rtw_free_network23a(pmlmepriv, pnetwork);
-       }
-       spin_unlock_bh(&scan_queue->lock);
-}
-
-/*
- *rtw_free_assoc_resources23a: the caller has to lock pmlmepriv->lock
- */
-void rtw_free_assoc_resources23a(struct rtw_adapter *adapter,
-                                int lock_scanned_queue)
-{
-       struct wlan_network *pwlan;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-       struct sta_info *psta;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                "+rtw_free_assoc_resources23a\n");
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "tgt_network->network.MacAddress=%pM ssid=%s\n",
-                tgt_network->network.MacAddress,
-                tgt_network->network.Ssid.ssid);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_AP_STATE)) {
-               psta = rtw_get_stainfo23a(&adapter->stapriv,
-                                         tgt_network->network.MacAddress);
-
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo23a(adapter,  psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE |
-                         WIFI_ADHOC_MASTER_STATE|WIFI_AP_STATE)) {
-               rtw_free_all_stainfo23a(adapter);
-
-               psta = rtw_get_bcmc_stainfo23a(adapter);
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo23a(adapter, psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-               rtw_init_bcmc_stainfo23a(adapter);
-       }
-
-       if (lock_scanned_queue)
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
-       pwlan = rtw_find_network23a(&pmlmepriv->scanned_queue,
-                                   tgt_network->network.MacAddress);
-       if (pwlan)
-               pwlan->fixed = false;
-       else
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "rtw_free_assoc_resources23a : pwlan== NULL\n");
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) &&
-           adapter->stapriv.asoc_sta_count == 1)
-               rtw_free_network_nolock(pmlmepriv, pwlan);
-
-       if (lock_scanned_queue)
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       pmlmepriv->key_mask = 0;
-}
-
-/*
-*rtw_indicate_connect23a: the caller has to lock pmlmepriv->lock
-*/
-void rtw_indicate_connect23a(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "+rtw_indicate_connect23a\n");
-
-       pmlmepriv->to_join = false;
-
-       if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-               set_fwstate(pmlmepriv, _FW_LINKED);
-
-               rtw_cfg80211_indicate_connect(padapter);
-
-               netif_carrier_on(padapter->pnetdev);
-
-               if (padapter->pid[2] != 0)
-                       kill_pid(find_vpid(padapter->pid[2]), SIGALRM, 1);
-       }
-
-       rtw_set_roaming(padapter, 0);
-
-       rtw_set_scan_deny(padapter, 3000);
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "-rtw_indicate_connect23a: fw_state=0x%08x\n",
-                get_fwstate(pmlmepriv));
-}
-
-/*
- *rtw_indicate_disconnect23a: the caller has to lock pmlmepriv->lock
- */
-void rtw_indicate_disconnect23a(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "+rtw_indicate_disconnect23a\n");
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING|WIFI_UNDER_WPS);
-
-       /* DBG_8723A("clear wps when %s\n", __func__); */
-
-       if (padapter->mlmepriv.to_roaming > 0)
-               _clr_fwstate_(pmlmepriv, _FW_LINKED);
-
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED) ||
-           padapter->mlmepriv.to_roaming <= 0) {
-               rtw_os_indicate_disconnect23a(padapter);
-
-               /* set ips_deny_time to avoid enter IPS before LPS leave */
-               padapter->pwrctrlpriv.ips_deny_time =
-                       jiffies + msecs_to_jiffies(3000);
-
-               _clr_fwstate_(pmlmepriv, _FW_LINKED);
-
-               rtw_clear_scan_deny(padapter);
-       }
-
-       rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_DISCONNECT, 1);
-}
-
-void rtw_scan_abort23a(struct rtw_adapter *adapter)
-{
-       unsigned long start;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-
-       start = jiffies;
-       pmlmeext->scan_abort = true;
-       while (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) &&
-              jiffies_to_msecs(jiffies - start) <= 200) {
-               if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
-                       break;
-
-               DBG_8723A("%s(%s): fw_state = _FW_UNDER_SURVEY!\n",
-                         __func__, adapter->pnetdev->name);
-               msleep(20);
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               if (!adapter->bDriverStopped && !adapter->bSurpriseRemoved)
-                       DBG_8723A("%s(%s): waiting for scan_abort time out!\n",
-                                 __func__, adapter->pnetdev->name);
-               rtw_cfg80211_indicate_scan_done(wdev_to_priv(adapter->rtw_wdev),
-                                               true);
-       }
-       pmlmeext->scan_abort = false;
-}
-
-static struct sta_info *
-rtw_joinbss_update_stainfo(struct rtw_adapter *padapter,
-                          struct wlan_network *pnetwork)
-{
-       int i;
-       struct sta_info *bmc_sta, *psta;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       psta = rtw_get_stainfo23a(pstapriv, pnetwork->network.MacAddress);
-       if (!psta)
-               psta = rtw_alloc_stainfo23a(pstapriv,
-                                           pnetwork->network.MacAddress,
-                                           GFP_ATOMIC);
-
-       if (psta) { /* update ptarget_sta */
-               DBG_8723A("%s\n", __func__);
-
-               psta->aid  = pnetwork->join_res;
-               psta->mac_id = 0;
-
-               /* sta mode */
-               rtl8723a_SetHalODMVar(padapter, HAL_ODM_STA_INFO, psta, true);
-
-               /* security related */
-               if (padapter->securitypriv.dot11AuthAlgrthm ==
-                   dot11AuthAlgrthm_8021X) {
-                       padapter->securitypriv.binstallGrpkey = 0;
-                       padapter->securitypriv.busetkipkey = 0;
-
-                       psta->ieee8021x_blocked = true;
-                       psta->dot118021XPrivacy =
-                               padapter->securitypriv.dot11PrivacyAlgrthm;
-
-                       memset(&psta->dot118021x_UncstKey, 0,
-                              sizeof (union Keytype));
-
-                       memset(&psta->dot11tkiprxmickey, 0,
-                              sizeof (union Keytype));
-                       memset(&psta->dot11tkiptxmickey, 0,
-                              sizeof (union Keytype));
-
-                       memset(&psta->dot11txpn, 0, sizeof (union pn48));
-                       memset(&psta->dot11rxpn, 0, sizeof (union pn48));
-               }
-
-               /*      Commented by Albert 2012/07/21 */
-               /*      When doing the WPS, the wps_ie_len won't equal to 0 */
-               /*      And the Wi-Fi driver shouldn't allow the data packet
-                       to be transmitted. */
-               if (padapter->securitypriv.wps_ie_len != 0) {
-                       psta->ieee8021x_blocked = true;
-                       padapter->securitypriv.wps_ie_len = 0;
-               }
-
-               /* for A-MPDU Rx reordering buffer control for bmc_sta &
-                * sta_info */
-               /* if A-MPDU Rx is enabled, resetting
-                  rx_ordering_ctrl wstart_b(indicate_seq) to default
-                  value = 0xffff */
-               /* todo: check if AP can send A-MPDU packets */
-               for (i = 0; i < 16 ; i++) {
-                       /* preorder_ctrl = &precvpriv->recvreorder_ctrl[i]; */
-                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                       preorder_ctrl->enable = false;
-                       preorder_ctrl->indicate_seq = 0xffff;
-                       preorder_ctrl->wend_b = 0xffff;
-                       /* max_ampdu_sz; ex. 32(kbytes) -> wsize_b = 32 */
-                       preorder_ctrl->wsize_b = 64;
-               }
-
-               bmc_sta = rtw_get_bcmc_stainfo23a(padapter);
-               if (bmc_sta) {
-                       for (i = 0; i < 16 ; i++) {
-                               preorder_ctrl = &bmc_sta->recvreorder_ctrl[i];
-                               preorder_ctrl->enable = false;
-                               preorder_ctrl->indicate_seq = 0xffff;
-                               preorder_ctrl->wend_b = 0xffff;
-                               /* max_ampdu_sz; ex. 32(kbytes) ->
-                                  wsize_b = 32 */
-                               preorder_ctrl->wsize_b = 64;
-                       }
-               }
-
-               /* misc. */
-               update_sta_info23a(padapter, psta);
-
-       }
-
-       return psta;
-}
-
-/* pnetwork : returns from rtw23a_joinbss_event_cb */
-/* ptarget_wlan: found from scanned_queue */
-static void
-rtw_joinbss_update_network23a(struct rtw_adapter *padapter,
-                             struct wlan_network *ptarget_wlan,
-                             struct wlan_network  *pnetwork)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-
-       DBG_8723A("%s\n", __func__);
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "fw_state:%x, BSSID:%pM\n",
-                get_fwstate(pmlmepriv),
-                pnetwork->network.MacAddress);
-
-       /*  why not use ptarget_wlan?? */
-       memcpy(&cur_network->network, &pnetwork->network,
-              pnetwork->network.Length);
-       /*  some IEs in pnetwork is wrong, so we should use ptarget_wlan IEs */
-       cur_network->network.IELength = ptarget_wlan->network.IELength;
-       memcpy(&cur_network->network.IEs[0], &ptarget_wlan->network.IEs[0],
-              MAX_IE_SZ);
-
-       cur_network->network.capability = ptarget_wlan->network.capability;
-       cur_network->network.beacon_interval =
-               ptarget_wlan->network.beacon_interval;
-       cur_network->network.tsf = ptarget_wlan->network.tsf;
-
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-       padapter->recvpriv.signal_strength =
-               ptarget_wlan->network.SignalStrength;
-       padapter->recvpriv.signal_qual = ptarget_wlan->network.SignalQuality;
-       /*
-        * the ptarget_wlan->network.Rssi is raw data, we use
-        * ptarget_wlan->network.SignalStrength instead (has scaled)
-        */
-       DBG_8723A("%s signal_strength:%3u, signal_qual:%3u\n",
-                 __func__, padapter->recvpriv.signal_strength,
-                 padapter->recvpriv.signal_qual);
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-
-       /* update fw_state will clr _FW_UNDER_LINKING here indirectly */
-       switch (pnetwork->network.ifmode) {
-       case NL80211_IFTYPE_P2P_CLIENT:
-       case NL80211_IFTYPE_STATION:
-               if (pmlmepriv->fw_state & WIFI_UNDER_WPS)
-                       pmlmepriv->fw_state = WIFI_STATION_STATE|WIFI_UNDER_WPS;
-               else
-                       pmlmepriv->fw_state = WIFI_STATION_STATE;
-               break;
-       case NL80211_IFTYPE_ADHOC:
-               pmlmepriv->fw_state = WIFI_ADHOC_STATE;
-               break;
-       default:
-               pmlmepriv->fw_state = WIFI_NULL_STATE;
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "Invalid network_mode\n");
-               break;
-       }
-
-       rtw_update_protection23a(padapter, cur_network->network.IEs,
-                                cur_network->network.IELength);
-
-       rtw_update_ht_cap23a(padapter, cur_network->network.IEs,
-                            cur_network->network.IELength);
-}
-
-/*
- * Notes:
- * the function could be > passive_level (the same context as Rx tasklet)
- * pnetwork : returns from rtw23a_joinbss_event_cb
- * ptarget_wlan: found from scanned_queue
- * if join_res > 0, for (fw_state==WIFI_STATION_STATE),
- * we check if  "ptarget_sta" & "ptarget_wlan" exist.
- * if join_res > 0, for (fw_state==WIFI_ADHOC_STATE),
- * we only check if "ptarget_wlan" exist.
- * if join_res > 0, update "cur_network->network" from "pnetwork->network"
- * if (ptarget_wlan !=NULL).
- */
-
-void rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf)
-{
-       struct sta_info *ptarget_sta, *pcur_sta;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_network *pnetwork = (struct wlan_network *)pbuf;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct wlan_network *pcur_wlan, *ptarget_wlan = NULL;
-       bool the_same_macaddr;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "joinbss event call back received with res=%d\n",
-                pnetwork->join_res);
-
-       if (pmlmepriv->assoc_ssid.ssid_len == 0) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "@@@@@   joinbss event call back  for Any SSid\n");
-       } else {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "@@@@@   rtw23a_joinbss_event_cb for SSid:%s\n",
-                        pmlmepriv->assoc_ssid.ssid);
-       }
-
-       if (ether_addr_equal(pnetwork->network.MacAddress,
-                            cur_network->network.MacAddress))
-               the_same_macaddr = true;
-       else
-               the_same_macaddr = false;
-
-       pnetwork->network.Length = get_wlan_bssid_ex_sz(&pnetwork->network);
-       if (pnetwork->network.Length > sizeof(struct wlan_bssid_ex)) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "***joinbss_evt_callback return a wrong bss ***\n");
-               return;
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "rtw23a_joinbss_event_cb !! _enter_critical\n");
-
-       if (pnetwork->join_res > 0) {
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-               if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-                       /* s1. find ptarget_wlan */
-                       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-                               if (the_same_macaddr) {
-                                       ptarget_wlan = rtw_find_network23a(&pmlmepriv->scanned_queue, cur_network->network.MacAddress);
-                               } else {
-                                       pcur_wlan = rtw_find_network23a(&pmlmepriv->scanned_queue, cur_network->network.MacAddress);
-                                       if (pcur_wlan)
-                                               pcur_wlan->fixed = false;
-
-                                       pcur_sta = rtw_get_stainfo23a(pstapriv, cur_network->network.MacAddress);
-                                       if (pcur_sta) {
-                                               spin_lock_bh(&pstapriv->sta_hash_lock);
-                                               rtw_free_stainfo23a(adapter,
-                                                                   pcur_sta);
-                                               spin_unlock_bh(&pstapriv->sta_hash_lock);
-                                       }
-
-                                       ptarget_wlan = rtw_find_network23a(&pmlmepriv->scanned_queue, pnetwork->network.MacAddress);
-                                       if (check_fwstate(pmlmepriv,
-                                                         WIFI_STATION_STATE)) {
-                                               if (ptarget_wlan)
-                                                       ptarget_wlan->fixed =
-                                                               true;
-                                       }
-                               }
-
-                       } else {
-                               ptarget_wlan = rtw_find_network23a(
-                                       &pmlmepriv->scanned_queue,
-                                       pnetwork->network.MacAddress);
-                               if (check_fwstate(pmlmepriv,
-                                                 WIFI_STATION_STATE)) {
-                                       if (ptarget_wlan)
-                                               ptarget_wlan->fixed = true;
-                               }
-                       }
-
-                       /* s2. update cur_network */
-                       if (ptarget_wlan)
-                               rtw_joinbss_update_network23a(adapter,
-                                                             ptarget_wlan,
-                                                             pnetwork);
-                       else {
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                        "Can't find ptarget_wlan when joinbss_event callback\n");
-                               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                               goto ignore_joinbss_callback;
-                       }
-
-                       /* s3. find ptarget_sta & update ptarget_sta after
-                          update cur_network only for station mode */
-                       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                               ptarget_sta = rtw_joinbss_update_stainfo(
-                                       adapter, pnetwork);
-                               if (!ptarget_sta) {
-                                       RT_TRACE(_module_rtl871x_mlme_c_,
-                                                _drv_err_,
-                                                "Can't update stainfo when joinbss_event callback\n");
-                                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                                       goto ignore_joinbss_callback;
-                               }
-                       }
-
-                       /* s4. indicate connect */
-                       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-                               rtw_indicate_connect23a(adapter);
-                       else {
-                               /* adhoc mode will rtw_indicate_connect23a
-                                  when rtw_stassoc_event_callback23a */
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "adhoc mode, fw_state:%x\n",
-                                        get_fwstate(pmlmepriv));
-                       }
-
-                       /* s5. Cancle assoc_timer */
-                       del_timer_sync(&pmlmepriv->assoc_timer);
-
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                "Cancle assoc_timer\n");
-               } else {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                "rtw23a_joinbss_event_cb err: fw_state:%x\n",
-                                get_fwstate(pmlmepriv));
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       goto ignore_joinbss_callback;
-               }
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-       } else if (pnetwork->join_res == -4) {
-               rtw_reset_securitypriv23a(adapter);
-               mod_timer(&pmlmepriv->assoc_timer,
-                         jiffies + msecs_to_jiffies(1));
-
-               /* rtw_free_assoc_resources23a(adapter, 1); */
-
-               if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                "fail! clear _FW_UNDER_LINKING ^^^fw_state=%x\n",
-                                get_fwstate(pmlmepriv));
-                       _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-               }
-       } else {
-               /* if join_res < 0 (join fails), then try again */
-               mod_timer(&pmlmepriv->assoc_timer,
-                         jiffies + msecs_to_jiffies(1));
-               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-       }
-
-ignore_joinbss_callback:
-
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-void rtw23a_joinbss_event_cb(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-       struct wlan_network *pnetwork = (struct wlan_network *)pbuf;
-
-       mlmeext_joinbss_event_callback23a(adapter, pnetwork->join_res);
-
-       rtw_os_xmit_schedule23a(adapter);
-}
-
-void rtw_stassoc_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-       struct sta_info *psta;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct stassoc_event *pstassoc = (struct stassoc_event *)pbuf;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct wlan_network *ptarget_wlan;
-
-       if (rtw_access_ctrl23a(adapter, pstassoc->macaddr) == false)
-               return;
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               psta = rtw_get_stainfo23a(&adapter->stapriv, pstassoc->macaddr);
-               if (psta) {
-                       /* bss_cap_update_on_sta_join23a(adapter, psta); */
-                       /* sta_info_update23a(adapter, psta); */
-                       ap_sta_info_defer_update23a(adapter, psta);
-               }
-               return;
-       }
-#endif
-       /* for AD-HOC mode */
-       psta = rtw_get_stainfo23a(&adapter->stapriv, pstassoc->macaddr);
-       if (psta != NULL) {
-               /* the sta have been in sta_info_queue => do nothing */
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "Error: rtw_stassoc_event_callback23a: sta has been in sta_hash_queue\n");
-               /* between drv has received this event before and
-                  fw have not yet to set key to CAM_ENTRY) */
-               return;
-       }
-
-       psta = rtw_alloc_stainfo23a(&adapter->stapriv, pstassoc->macaddr,
-               GFP_KERNEL);
-       if (!psta) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "Can't alloc sta_info when rtw_stassoc_event_callback23a\n");
-               return;
-       }
-
-       /* to do : init sta_info variable */
-       psta->qos_option = 0;
-       psta->mac_id = (uint)pstassoc->cam_id;
-       /* psta->aid = (uint)pstassoc->cam_id; */
-       DBG_8723A("%s\n", __func__);
-       /* for ad-hoc mode */
-       rtl8723a_SetHalODMVar(adapter, HAL_ODM_STA_INFO, psta, true);
-
-       if (adapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X)
-               psta->dot118021XPrivacy =
-                       adapter->securitypriv.dot11PrivacyAlgrthm;
-
-       psta->ieee8021x_blocked = false;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-               if (adapter->stapriv.asoc_sta_count == 2) {
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       ptarget_wlan =
-                               rtw_find_network23a(&pmlmepriv->scanned_queue,
-                                                   cur_network->network.MacAddress);
-                       if (ptarget_wlan)
-                               ptarget_wlan->fixed = true;
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       /*  a sta + bc/mc_stainfo (not Ibss_stainfo) */
-                       rtw_indicate_connect23a(adapter);
-               }
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       mlmeext_sta_add_event_callback23a(adapter, psta);
-}
-
-void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-       int mac_id;
-       struct sta_info *psta;
-       struct wlan_network *pwlan;
-       struct wlan_bssid_ex *pdev_network;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct stadel_event *pstadel = (struct stadel_event *)pbuf;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct wlan_network *tgt_network = &pmlmepriv->cur_network;
-
-       psta = rtw_get_stainfo23a(&adapter->stapriv, pstadel->macaddr);
-       if (psta)
-               mac_id = psta->mac_id;
-       else
-               mac_id = pstadel->mac_id;
-
-       DBG_8723A("%s(mac_id=%d)=%pM\n", __func__, mac_id, pstadel->macaddr);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return;
-
-       mlmeext_sta_del_event_callback23a(adapter);
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               if (adapter->mlmepriv.to_roaming > 0) {
-                       /* this stadel_event is caused by roaming,
-                          decrease to_roaming */
-                       pmlmepriv->to_roaming--;
-               } else if (adapter->mlmepriv.to_roaming == 0)
-                       rtw_set_roaming(adapter, adapter->registrypriv.max_roaming_times);
-               if (*((u16 *)pstadel->rsvd) != WLAN_REASON_EXPIRATION_CHK)
-                       rtw_set_roaming(adapter, 0); /* don't roam */
-
-               rtw_free_uc_swdec_pending_queue23a(adapter);
-
-               rtw_free_assoc_resources23a(adapter, 1);
-               rtw_indicate_disconnect23a(adapter);
-               spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-               /*  remove the network entry in scanned_queue */
-               pwlan = rtw_find_network23a(&pmlmepriv->scanned_queue,
-                                           tgt_network->network.MacAddress);
-               if (pwlan) {
-                       pwlan->fixed = false;
-                       rtw_free_network_nolock(pmlmepriv, pwlan);
-               }
-               spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-               _rtw_roaming(adapter, tgt_network);
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               rtw_free_stainfo23a(adapter,  psta);
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-
-               /* a sta + bc/mc_stainfo (not Ibss_stainfo) */
-               if (adapter->stapriv.asoc_sta_count == 1) {
-                       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-                       /* free old ibss network */
-                       /* pwlan = rtw_find_network23a(
-                          &pmlmepriv->scanned_queue, pstadel->macaddr); */
-                       pwlan = rtw_find_network23a(&pmlmepriv->scanned_queue,
-                                                   tgt_network->network.MacAddress);
-                       if (pwlan) {
-                               pwlan->fixed = false;
-                               rtw_free_network_nolock(pmlmepriv, pwlan);
-                       }
-                       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-                       /* re-create ibss */
-                       pdev_network = &adapter->registrypriv.dev_network;
-
-                       memcpy(pdev_network, &tgt_network->network,
-                              get_wlan_bssid_ex_sz(&tgt_network->network));
-
-                       rtw_do_join_adhoc(adapter);
-               }
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-/*
-* rtw23a_join_to_handler - Timeout/failure handler for CMD JoinBss
-* @adapter: pointer to _adapter structure
-*/
-void rtw23a_join_to_handler (unsigned long data)
-{
-       struct rtw_adapter *adapter = (struct rtw_adapter *)data;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       int do_join_r;
-
-       DBG_8723A("%s, fw_state=%x\n", __func__, get_fwstate(pmlmepriv));
-
-       if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
-               return;
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       if (adapter->mlmepriv.to_roaming > 0) {
-               /* join timeout caused by roaming */
-               while (1) {
-                       pmlmepriv->to_roaming--;
-                       if (adapter->mlmepriv.to_roaming != 0) {
-                               /* try another */
-                               DBG_8723A("%s try another roaming\n", __func__);
-                               do_join_r = rtw_do_join(adapter);
-                               if (do_join_r != _SUCCESS) {
-                                       DBG_8723A("%s roaming do_join return "
-                                                 "%d\n", __func__ , do_join_r);
-                                       continue;
-                               }
-                               break;
-                       } else {
-                               DBG_8723A("%s We've try roaming but fail\n",
-                                         __func__);
-                               rtw_indicate_disconnect23a(adapter);
-                               break;
-                       }
-               }
-       } else {
-               rtw_indicate_disconnect23a(adapter);
-               free_scanqueue(pmlmepriv);/*  */
-
-               /* indicate disconnect for the case that join_timeout and
-                  check_fwstate != FW_LINKED */
-               rtw_cfg80211_indicate_disconnect(adapter);
-       }
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-}
-
-/*
-* rtw_scan_timeout_handler23a - Timeout/Failure handler for CMD SiteSurvey
-* @data: pointer to _adapter structure
-*/
-void rtw_scan_timeout_handler23a(unsigned long data)
-{
-       struct rtw_adapter *adapter = (struct rtw_adapter *)data;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       DBG_8723A("%s(%s): fw_state =%x\n", __func__, adapter->pnetdev->name,
-                 get_fwstate(pmlmepriv));
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       rtw_cfg80211_indicate_scan_done(wdev_to_priv(adapter->rtw_wdev), true);
-}
-
-void rtw_dynamic_check_timer_handler(unsigned long data)
-{
-       struct rtw_adapter *adapter = (struct rtw_adapter *)data;
-
-       if (adapter->hw_init_completed == false)
-               goto out;
-
-       if (adapter->bDriverStopped == true ||
-           adapter->bSurpriseRemoved == true)
-               goto out;
-
-       if (adapter->net_closed == true)
-               goto out;
-
-       rtw_dynamic_chk_wk_cmd23a(adapter);
-
-out:
-       mod_timer(&adapter->mlmepriv.dynamic_chk_timer,
-                 jiffies + msecs_to_jiffies(2000));
-}
-
-inline bool rtw_is_scan_deny(struct rtw_adapter *adapter)
-{
-       struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
-       return (atomic_read(&mlmepriv->set_scan_deny) != 0) ? true : false;
-}
-
-void rtw_clear_scan_deny(struct rtw_adapter *adapter)
-{
-       struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
-       atomic_set(&mlmepriv->set_scan_deny, 0);
-}
-
-void rtw_set_scan_deny_timer_hdl(unsigned long data)
-{
-       struct rtw_adapter *adapter = (struct rtw_adapter *)data;
-
-       rtw_clear_scan_deny(adapter);
-}
-
-void rtw_set_scan_deny(struct rtw_adapter *adapter, u32 ms)
-{
-       struct mlme_priv *mlmepriv = &adapter->mlmepriv;
-
-       atomic_set(&mlmepriv->set_scan_deny, 1);
-       mod_timer(&mlmepriv->set_scan_deny_timer,
-                 jiffies + msecs_to_jiffies(ms));
-}
-
-#if defined(IEEE80211_SCAN_RESULT_EXPIRE)
-#define RTW_SCAN_RESULT_EXPIRE  \
-       ((IEEE80211_SCAN_RESULT_EXPIRE / (HZ*1000)) - 1000) /* 3000 -1000 */
-#else
-#define RTW_SCAN_RESULT_EXPIRE 2000
-#endif
-
-/*
-* Select a new join candidate from the original @param candidate and
-*     @param competitor
-* @return true: candidate is updated
-* @return false: candidate is not updated
-*/
-static int rtw_check_join_candidate(struct mlme_priv *pmlmepriv,
-                                   struct wlan_network **candidate,
-                                   struct wlan_network *competitor)
-{
-       int updated = false;
-       struct rtw_adapter *adapter;
-
-       adapter = container_of(pmlmepriv, struct rtw_adapter, mlmepriv);
-
-       /* check bssid, if needed */
-       if (pmlmepriv->assoc_by_bssid == true) {
-               if (!ether_addr_equal(competitor->network.MacAddress,
-                                     pmlmepriv->assoc_bssid))
-                       goto exit;
-       }
-
-       /* check ssid, if needed */
-       if (pmlmepriv->assoc_ssid.ssid_len) {
-               if (competitor->network.Ssid.ssid_len !=
-                   pmlmepriv->assoc_ssid.ssid_len ||
-                   memcmp(competitor->network.Ssid.ssid,
-                          pmlmepriv->assoc_ssid.ssid,
-                          pmlmepriv->assoc_ssid.ssid_len))
-                       goto exit;
-       }
-
-       if (rtw_is_desired_network(adapter, competitor) == false)
-               goto exit;
-
-       if (adapter->mlmepriv.to_roaming > 0) {
-               unsigned int passed;
-
-               passed = jiffies_to_msecs(jiffies - competitor->last_scanned);
-               if (passed >= RTW_SCAN_RESULT_EXPIRE ||
-                   is_same_ess(&competitor->network,
-                               &pmlmepriv->cur_network.network) == false)
-                       goto exit;
-       }
-
-       if (!*candidate ||
-           (*candidate)->network.Rssi<competitor->network.Rssi) {
-               *candidate = competitor;
-               updated = true;
-       }
-
-       if (updated) {
-               DBG_8723A("[by_bssid:%u][assoc_ssid:%s][to_roaming:%u] new candidate: %s(%pM) rssi:%d\n",
-                         pmlmepriv->assoc_by_bssid,
-                         pmlmepriv->assoc_ssid.ssid,
-                         adapter->mlmepriv.to_roaming,
-                         (*candidate)->network.Ssid.ssid,
-                         (*candidate)->network.MacAddress,
-                         (int)(*candidate)->network.Rssi);
-       }
-
-exit:
-       return updated;
-}
-
-/*
-Calling context:
-The caller of the sub-routine will be in critical section...
-
-The caller must hold the following spinlock
-
-pmlmepriv->lock
-
-*/
-
-static int rtw_do_join(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int ret;
-
-       pmlmepriv->cur_network.join_res = -2;
-
-       set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
-       pmlmepriv->to_join = true;
-
-       ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
-       if (ret == _SUCCESS) {
-               pmlmepriv->to_join = false;
-       } else {
-               if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                       /* switch to ADHOC_MASTER */
-                       ret = rtw_do_join_adhoc(padapter);
-                       if (ret != _SUCCESS)
-                               goto exit;
-               } else {
-                       /*  can't associate ; reset under-linking */
-                       _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
-                       ret = _FAIL;
-                       pmlmepriv->to_join = false;
-               }
-       }
-
-exit:
-       return ret;
-}
-
-static struct wlan_network *
-rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv)
-{
-       struct wlan_network *pnetwork, *ptmp, *candidate = NULL;
-       struct rtw_queue *queue = &pmlmepriv->scanned_queue;
-       struct list_head *phead;
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-       phead = get_list_head(queue);
-       list_for_each_entry_safe(pnetwork, ptmp, phead, list)
-               rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       return candidate;
-}
-
-
-int rtw_do_join_adhoc(struct rtw_adapter *adapter)
-{
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_bssid_ex *pdev_network;
-       u8 *ibss;
-       int ret;
-
-       pdev_network = &adapter->registrypriv.dev_network;
-       ibss = adapter->registrypriv.dev_network.MacAddress;
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "switching to adhoc master\n");
-
-       memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid,
-              sizeof(struct cfg80211_ssid));
-
-       rtw_update_registrypriv_dev_network23a(adapter);
-       rtw_generate_random_ibss23a(ibss);
-
-       pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
-
-       ret = rtw_createbss_cmd23a(adapter);
-       if (ret != _SUCCESS) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "Error =>rtw_createbss_cmd23a status FAIL\n");
-       } else  {
-               pmlmepriv->to_join = false;
-       }
-
-       return ret;
-}
-
-int rtw_do_join_network(struct rtw_adapter *adapter,
-                       struct wlan_network *candidate)
-{
-       int ret;
-
-       /*  check for situation of  _FW_LINKED */
-       if (check_fwstate(&adapter->mlmepriv, _FW_LINKED)) {
-               DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__);
-
-               rtw_disassoc_cmd23a(adapter, 0, true);
-               rtw_indicate_disconnect23a(adapter);
-               rtw_free_assoc_resources23a(adapter, 0);
-       }
-       set_fwstate(&adapter->mlmepriv, _FW_UNDER_LINKING);
-
-       ret = rtw_joinbss_cmd23a(adapter, candidate);
-
-       if (ret == _SUCCESS)
-               mod_timer(&adapter->mlmepriv.assoc_timer,
-                         jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
-
-       return ret;
-}
-
-int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
-{
-       struct rtw_adapter *adapter;
-       struct wlan_network *candidate = NULL;
-       int ret;
-
-       adapter = pmlmepriv->nic_hdl;
-
-       candidate = rtw_select_candidate_from_queue(pmlmepriv);
-       if (!candidate) {
-               DBG_8723A("%s: return _FAIL(candidate == NULL)\n", __func__);
-               ret = _FAIL;
-               goto exit;
-       } else {
-               DBG_8723A("%s: candidate: %s(%pM, ch:%u)\n",
-                         __func__,
-                         candidate->network.Ssid.ssid,
-                         candidate->network.MacAddress,
-                         candidate->network.DSConfig);
-       }
-
-       ret = rtw_do_join_network(adapter, candidate);
-
-exit:
-       return ret;
-}
-
-int rtw_set_auth23a(struct rtw_adapter *adapter,
-                   struct security_priv *psecuritypriv)
-{
-       struct cmd_obj *pcmd;
-       struct setauth_parm *psetauthparm;
-       struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
-       int res = _SUCCESS;
-
-       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (!pcmd) {
-               res = _FAIL;  /* try again */
-               goto exit;
-       }
-
-       psetauthparm = kzalloc(sizeof(struct setauth_parm), GFP_KERNEL);
-       if (!psetauthparm) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetauthparm->mode = (unsigned char)psecuritypriv->dot11AuthAlgrthm;
-
-       pcmd->cmdcode = _SetAuth_CMD_;
-       pcmd->parmbuf = (unsigned char *)psetauthparm;
-       pcmd->cmdsz =  (sizeof(struct setauth_parm));
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "after enqueue set_auth_cmd, auth_mode=%x\n",
-                psecuritypriv->dot11AuthAlgrthm);
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, pcmd);
-
-exit:
-
-       return res;
-}
-
-int rtw_set_key23a(struct rtw_adapter *adapter,
-                  struct security_priv *psecuritypriv, int keyid, u8 set_tx)
-{
-       u8 keylen;
-       struct cmd_obj *pcmd;
-       struct setkey_parm *psetkeyparm;
-       struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       int res = _SUCCESS;
-
-       if (keyid >= 4) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (!pcmd) {
-               res = _FAIL;  /* try again */
-               goto exit;
-       }
-       psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL);
-       if (!psetkeyparm) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X) {
-               psetkeyparm->algorithm = (unsigned char)
-                       psecuritypriv->dot118021XGrpPrivacy;
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "rtw_set_key23a: psetkeyparm->algorithm = (unsigned char)psecuritypriv->dot118021XGrpPrivacy =%d\n",
-                        psetkeyparm->algorithm);
-       } else {
-               psetkeyparm->algorithm = (u8)psecuritypriv->dot11PrivacyAlgrthm;
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "rtw_set_key23a: psetkeyparm->algorithm = (u8)psecuritypriv->dot11PrivacyAlgrthm =%d\n",
-                        psetkeyparm->algorithm);
-       }
-       psetkeyparm->keyid = keyid;/* 0~3 */
-       psetkeyparm->set_tx = set_tx;
-       if (is_wep_enc(psetkeyparm->algorithm))
-               pmlmepriv->key_mask |= BIT(psetkeyparm->keyid);
-
-       DBG_8723A("==> rtw_set_key23a algorithm(%x), keyid(%x), key_mask(%x)\n",
-                 psetkeyparm->algorithm, psetkeyparm->keyid,
-                 pmlmepriv->key_mask);
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                "rtw_set_key23a: psetkeyparm->algorithm =%d psetkeyparm->keyid = (u8)keyid =%d\n",
-                psetkeyparm->algorithm, keyid);
-
-       switch (psetkeyparm->algorithm) {
-       case WLAN_CIPHER_SUITE_WEP40:
-               keylen = 5;
-               memcpy(&psetkeyparm->key[0],
-                      &psecuritypriv->wep_key[keyid].key, keylen);
-               break;
-       case WLAN_CIPHER_SUITE_WEP104:
-               keylen = 13;
-               memcpy(&psetkeyparm->key[0],
-                      &psecuritypriv->wep_key[keyid].key, keylen);
-               break;
-       case WLAN_CIPHER_SUITE_TKIP:
-               keylen = 16;
-               memcpy(&psetkeyparm->key,
-                      &psecuritypriv->dot118021XGrpKey[keyid], keylen);
-               psetkeyparm->grpkey = 1;
-               break;
-       case WLAN_CIPHER_SUITE_CCMP:
-               keylen = 16;
-               memcpy(&psetkeyparm->key,
-                      &psecuritypriv->dot118021XGrpKey[keyid], keylen);
-               psetkeyparm->grpkey = 1;
-               break;
-       default:
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "rtw_set_key23a:psecuritypriv->dot11PrivacyAlgrthm = %x (must be 1 or 2 or 4 or 5)\n",
-                        psecuritypriv->dot11PrivacyAlgrthm);
-               res = _FAIL;
-               kfree(pcmd);
-               kfree(psetkeyparm);
-               goto exit;
-       }
-
-       pcmd->cmdcode = _SetKey_CMD_;
-       pcmd->parmbuf = (u8 *)psetkeyparm;
-       pcmd->cmdsz =  (sizeof(struct setkey_parm));
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       /* sema_init(&pcmd->cmd_sem, 0); */
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, pcmd);
-
-exit:
-
-       return res;
-}
-
-/* adjust IEs for rtw_joinbss_cmd23a in WMM */
-int rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie,
-                          u8 *out_ie, uint in_len, uint initial_out_len)
-{
-       int ielength;
-       const u8 *p;
-
-       ielength = initial_out_len;
-
-       p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                   WLAN_OUI_TYPE_MICROSOFT_WMM,
-                                   in_ie, in_len);
-
-       if (p && p[1]) {
-               memcpy(out_ie + initial_out_len, p, 9);
-
-               out_ie[initial_out_len + 1] = 7;
-               out_ie[initial_out_len + 6] = 0;
-               out_ie[initial_out_len + 8] = 0;
-
-               ielength += 9;
-       }
-
-       return ielength;
-}
-
-/*  */
-/*  Ported from 8185: IsInPreAuthKeyList().
-    (Renamed from SecIsInPreAuthKeyList(), 2006-10-13.) */
-/*  Added by Annie, 2006-05-07. */
-/*  */
-/*  Search by BSSID, */
-/*  Return Value: */
-/*             -1      :if there is no pre-auth key in the  table */
-/*             >= 0    :if there is pre-auth key, and   return the entry id */
-/*  */
-/*  */
-
-static int SecIsInPMKIDList(struct rtw_adapter *Adapter, u8 *bssid)
-{
-       struct security_priv *psecuritypriv = &Adapter->securitypriv;
-       int i = 0;
-
-       do {
-               if (psecuritypriv->PMKIDList[i].bUsed &&
-                    ether_addr_equal(psecuritypriv->PMKIDList[i].Bssid, bssid)) {
-                       break;
-               } else {
-                       i++;
-                       /* continue; */
-               }
-       } while (i < NUM_PMKID_CACHE);
-
-       if (i == NUM_PMKID_CACHE)
-               i = -1;/*  Could not find. */
-       else {
-               /*  There is one Pre-Authentication Key for
-                   the specific BSSID. */
-       }
-
-       return i;
-}
-
-/*  */
-/*  Check the RSN IE length */
-/*  If the RSN IE length <= 20, the RSN IE didn't include
-    the PMKID information */
-/*  0-11th element in the array are the fixed IE */
-/*  12th element in the array is the IE */
-/*  13th element in the array is the IE length */
-/*  */
-
-static int rtw_append_pmkid(struct rtw_adapter *Adapter, int iEntry,
-                           u8 *ie, uint ie_len)
-{
-       struct security_priv *psecuritypriv = &Adapter->securitypriv;
-
-       if (ie[1] <= 20) {
-               /*  The RSN IE didn't include the PMK ID,
-                   append the PMK information */
-                       ie[ie_len] = 1;
-                       ie_len++;
-                       ie[ie_len] = 0; /* PMKID count = 0x0100 */
-                       ie_len++;
-                       memcpy(&ie[ie_len],
-                              &psecuritypriv->PMKIDList[iEntry].PMKID, 16);
-
-                       ie_len += 16;
-                       ie[1] += 18;/* PMKID length = 2+16 */
-       }
-       return ie_len;
-}
-
-int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie,
-                          uint in_len)
-{
-       u8 authmode;
-       uint ielength;
-       int iEntry;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       uint ndisauthmode = psecuritypriv->ndisauthtype;
-       uint ndissecuritytype = psecuritypriv->ndisencryptstatus;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                "+rtw_restruct_sec_ie23a: ndisauthmode=%d ndissecuritytype=%d\n",
-                ndisauthmode, ndissecuritytype);
-
-       ielength = 0;
-       if (ndisauthmode == Ndis802_11AuthModeWPA ||
-           ndisauthmode == Ndis802_11AuthModeWPAPSK)
-               authmode = WLAN_EID_VENDOR_SPECIFIC;
-       if (ndisauthmode == Ndis802_11AuthModeWPA2 ||
-           ndisauthmode == Ndis802_11AuthModeWPA2PSK)
-               authmode = WLAN_EID_RSN;
-
-       if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
-               memcpy(out_ie + ielength, psecuritypriv->wps_ie,
-                      psecuritypriv->wps_ie_len);
-
-               ielength += psecuritypriv->wps_ie_len;
-       } else if (authmode == WLAN_EID_VENDOR_SPECIFIC ||
-                  authmode == WLAN_EID_RSN) {
-               /* copy RSN or SSN */
-               memcpy(&out_ie[ielength], &psecuritypriv->supplicant_ie[0],
-                      psecuritypriv->supplicant_ie[1] + 2);
-               ielength += psecuritypriv->supplicant_ie[1] + 2;
-       }
-
-       iEntry = SecIsInPMKIDList(adapter, pmlmepriv->assoc_bssid);
-       if (iEntry < 0)
-               return ielength;
-       else {
-               if (authmode == WLAN_EID_RSN)
-                       ielength = rtw_append_pmkid(adapter, iEntry,
-                                                   out_ie, ielength);
-       }
-
-       return ielength;
-}
-
-void rtw_init_registrypriv_dev_network23a(struct rtw_adapter *adapter)
-{
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct eeprom_priv *peepriv = &adapter->eeprompriv;
-       struct wlan_bssid_ex    *pdev_network = &pregistrypriv->dev_network;
-       u8 *myhwaddr = myid(peepriv);
-
-       ether_addr_copy(pdev_network->MacAddress, myhwaddr);
-
-       memcpy(&pdev_network->Ssid, &pregistrypriv->ssid,
-              sizeof(struct cfg80211_ssid));
-
-       pdev_network->beacon_interval = 100;
-}
-
-void rtw_update_registrypriv_dev_network23a(struct rtw_adapter *adapter)
-{
-       int sz = 0;
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct wlan_bssid_ex *pdev_network = &pregistrypriv->dev_network;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       struct wlan_network *cur_network = &adapter->mlmepriv.cur_network;
-       /* struct       xmit_priv       *pxmitpriv = &adapter->xmitpriv; */
-
-       pdev_network->Privacy =
-               (psecuritypriv->dot11PrivacyAlgrthm > 0 ? 1 : 0);
-
-       pdev_network->Rssi = 0;
-
-       pdev_network->DSConfig = pregistrypriv->channel;
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "pregistrypriv->channel =%d, pdev_network->DSConfig = 0x%x\n",
-                pregistrypriv->channel, pdev_network->DSConfig);
-
-       if (cur_network->network.ifmode == NL80211_IFTYPE_ADHOC)
-               pdev_network->ATIMWindow = 0;
-
-       pdev_network->ifmode = cur_network->network.ifmode;
-
-       /*  1. Supported rates */
-       /*  2. IE */
-
-       sz = rtw_generate_ie23a(pregistrypriv);
-
-       pdev_network->IELength = sz;
-
-       pdev_network->Length =
-               get_wlan_bssid_ex_sz(pdev_network);
-
-       /* notes: translate IELength & Length after assign the
-          Length to cmdsz in createbss_cmd(); */
-       /* pdev_network->IELength = cpu_to_le32(sz); */
-}
-
-/* the function is at passive_level */
-void rtw_joinbss_reset23a(struct rtw_adapter *padapter)
-{
-       u8 threshold;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-
-       /* todo: if you want to do something io/reg/hw setting
-          before join_bss, please add code here */
-
-       pmlmepriv->num_FortyMHzIntolerant = 0;
-
-       pmlmepriv->num_sta_no_ht = 0;
-
-       phtpriv->ampdu_enable = false;/* reset to disabled */
-
-       /*  TH = 1 => means that invalidate usb rx aggregation */
-       /*  TH = 0 => means that validate usb rx aggregation, use init value. */
-       if (phtpriv->ht_option) {
-               if (padapter->registrypriv.wifi_spec == 1)
-                       threshold = 1;
-               else
-                       threshold = 0;
-       } else
-               threshold = 1;
-
-       rtl8723a_set_rxdma_agg_pg_th(padapter, threshold);
-}
-
-/* the function is >= passive_level */
-bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
-                             u8 *out_ie, uint in_len, uint *pout_len)
-{
-       u32 out_len;
-       int max_rx_ampdu_factor;
-       unsigned char *pframe;
-       const u8 *p;
-       struct ieee80211_ht_cap ht_capie;
-       u8 WMM_IE[7] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-
-       phtpriv->ht_option = false;
-
-       p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, in_ie, in_len);
-
-       if (p && p[1] > 0) {
-               u32 rx_packet_offset, max_recvbuf_sz;
-
-               if (pmlmepriv->qos_option == 0) {
-                       out_len = *pout_len;
-                       pframe = rtw_set_ie23a(out_ie + out_len,
-                                              WLAN_EID_VENDOR_SPECIFIC,
-                                              sizeof(WMM_IE), WMM_IE,
-                                              pout_len);
-
-                       pmlmepriv->qos_option = 1;
-               }
-
-               out_len = *pout_len;
-
-               memset(&ht_capie, 0, sizeof(struct ieee80211_ht_cap));
-
-               ht_capie.cap_info = cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-                       IEEE80211_HT_CAP_SGI_20 | IEEE80211_HT_CAP_SGI_40 |
-                       IEEE80211_HT_CAP_TX_STBC | IEEE80211_HT_CAP_DSSSCCK40);
-
-               GetHalDefVar8192CUsb(padapter, HAL_DEF_RX_PACKET_OFFSET,
-                                    &rx_packet_offset);
-               GetHalDefVar8192CUsb(padapter, HAL_DEF_MAX_RECVBUF_SZ,
-                                    &max_recvbuf_sz);
-
-               GetHalDefVar8192CUsb(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR,
-                                    &max_rx_ampdu_factor);
-               ht_capie.ampdu_params_info = max_rx_ampdu_factor & 0x03;
-
-               if (padapter->securitypriv.dot11PrivacyAlgrthm ==
-                   WLAN_CIPHER_SUITE_CCMP)
-                       ht_capie.ampdu_params_info |=
-                               (IEEE80211_HT_AMPDU_PARM_DENSITY& (0x07 << 2));
-               else
-                       ht_capie.ampdu_params_info |=
-                               (IEEE80211_HT_AMPDU_PARM_DENSITY & 0x00);
-
-               pframe = rtw_set_ie23a(out_ie + out_len, WLAN_EID_HT_CAPABILITY,
-                                   sizeof(struct ieee80211_ht_cap),
-                                   (unsigned char *)&ht_capie, pout_len);
-
-               phtpriv->ht_option = true;
-
-               p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, in_ie, in_len);
-               if (p && (p[1] == sizeof(struct ieee80211_ht_operation))) {
-                       out_len = *pout_len;
-                       pframe = rtw_set_ie23a(out_ie + out_len,
-                                              WLAN_EID_HT_OPERATION,
-                                              p[1], p + 2 , pout_len);
-               }
-       }
-
-       return phtpriv->ht_option;
-}
-
-/* the function is > passive_level (in critical_section) */
-void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
-{
-       u8 max_ampdu_sz;
-       const u8 *p;
-       struct ieee80211_ht_cap *pht_capie;
-       struct ieee80211_ht_operation *pht_addtinfo;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       if ((!pmlmeinfo->HT_info_enable) || (!pmlmeinfo->HT_caps_enable))
-               return;
-
-       DBG_8723A("+rtw_update_ht_cap23a()\n");
-
-       /* maybe needs check if ap supports rx ampdu. */
-       if (!phtpriv->ampdu_enable && pregistrypriv->ampdu_enable == 1) {
-               if (pregistrypriv->wifi_spec == 1)
-                       phtpriv->ampdu_enable = false;
-               else
-                       phtpriv->ampdu_enable = true;
-       } else if (pregistrypriv->ampdu_enable == 2)
-               phtpriv->ampdu_enable = true;
-
-       /* check Max Rx A-MPDU Size */
-       p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, ie_len);
-
-       if (p && p[1] > 0) {
-               pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-               max_ampdu_sz = pht_capie->ampdu_params_info &
-                       IEEE80211_HT_AMPDU_PARM_FACTOR;
-               /*  max_ampdu_sz (kbytes); */
-               max_ampdu_sz = 1 << (max_ampdu_sz + 3);
-
-               phtpriv->rx_ampdu_maxlen = max_ampdu_sz;
-       }
-
-       p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, ie_len);
-       if (p && p[1] > 0) {
-               pht_addtinfo = (struct ieee80211_ht_operation *)(p + 2);
-               /* todo: */
-       }
-
-       /* update cur_bwmode & cur_ch_offset */
-       if (pregistrypriv->cbw40_enable &&
-           pmlmeinfo->ht_cap.cap_info &
-           cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
-           pmlmeinfo->HT_info.ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
-               int i;
-               u8 rf_type;
-
-               rf_type = rtl8723a_get_rf_type(padapter);
-
-               /* update the MCS rates */
-               for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
-                       if (rf_type == RF_1T1R || rf_type == RF_1T2R)
-                               pmlmeinfo->ht_cap.mcs.rx_mask[i] &=
-                                       MCS_rate_1R23A[i];
-                       else
-                               pmlmeinfo->ht_cap.mcs.rx_mask[i] &=
-                                       MCS_rate_2R23A[i];
-               }
-               /* switch to the 40M Hz mode according to the AP */
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
-               switch (pmlmeinfo->HT_info.ht_param &
-                       IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
-               case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                       break;
-
-               case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
-                       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                       break;
-
-               default:
-                       pmlmeext->cur_ch_offset =
-                               HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       break;
-               }
-       }
-
-       /*  */
-       /*  Config SM Power Save setting */
-       /*  */
-       pmlmeinfo->SM_PS =
-               (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) &
-                IEEE80211_HT_CAP_SM_PS) >> IEEE80211_HT_CAP_SM_PS_SHIFT;
-       if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
-               DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
-
-       /*  */
-       /*  Config current HT Protection mode. */
-       /*  */
-       pmlmeinfo->HT_protection =
-               le16_to_cpu(pmlmeinfo->HT_info.operation_mode) &
-               IEEE80211_HT_OP_MODE_PROTECTION;
-}
-
-void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
-                              struct xmit_frame *pxmitframe)
-{
-       u8 issued;
-       int priority;
-       struct sta_info *psta;
-       struct ht_priv  *phtpriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       s32 bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (bmcst || padapter->mlmepriv.LinkDetectInfo.NumTxOkInPeriod < 100)
-               return;
-
-       priority = pattrib->priority;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(&padapter->stapriv, pattrib->ra);
-       }
-
-       if (!psta) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return;
-       }
-
-       if (!(psta->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n",
-                         __func__, psta->state);
-               return;
-       }
-
-       phtpriv = &psta->htpriv;
-
-       if (phtpriv->ht_option && phtpriv->ampdu_enable) {
-               issued = (phtpriv->agg_enable_bitmap>>priority)&0x1;
-               issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1;
-
-               if (issued == 0) {
-                       DBG_8723A("rtw_issue_addbareq_cmd23a, p =%d\n",
-                                 priority);
-                       psta->htpriv.candidate_tid_bitmap |= BIT(priority);
-                       rtw_addbareq_cmd23a(padapter, (u8) priority,
-                                           pattrib->ra);
-               }
-       }
-}
-
-int rtw_linked_check(struct rtw_adapter *padapter)
-{
-       if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) ||
-           check_fwstate(&padapter->mlmepriv,
-                         WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
-               if (padapter->stapriv.asoc_sta_count > 2)
-                       return true;
-       } else {        /* Station mode */
-               if (check_fwstate(&padapter->mlmepriv, _FW_LINKED))
-                       return true;
-       }
-       return false;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
deleted file mode 100644 (file)
index 7dd1540..0000000
+++ /dev/null
@@ -1,6187 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_MLME_EXT_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-#include <rtw_mlme_ext.h>
-#include <wlan_bssdef.h>
-#include <mlme_osdep.h>
-#include <recv_osdep.h>
-#include <linux/ieee80211.h>
-#include <rtl8723a_hal.h>
-
-static int OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnProbeReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnProbeRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int DoReserved23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAtim23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnDisassoc23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAuth23aClient23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnDeAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-
-static int on_action_spct23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_qos(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_dls(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_back23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int on_action_public23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_ht(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_wmm(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static int OnAction23a_p2p(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-
-static void issue_assocreq(struct rtw_adapter *padapter);
-static void issue_probereq(struct rtw_adapter *padapter,
-                          struct cfg80211_ssid *pssid, u8 *da);
-static int issue_probereq_ex(struct rtw_adapter *padapter,
-                            struct cfg80211_ssid *pssid,
-                            u8 *da, int try_cnt, int wait_ms);
-static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da);
-static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
-                      unsigned short status);
-static int issue_deauth_ex(struct rtw_adapter *padapter, u8 *da,
-                          unsigned short reason, int try_cnt, int wait_ms);
-static void start_clnt_assoc(struct rtw_adapter *padapter);
-static void start_clnt_auth(struct rtw_adapter *padapter);
-static void start_clnt_join(struct rtw_adapter *padapter);
-static void start_create_ibss(struct rtw_adapter *padapter);
-static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
-                                             struct recv_frame *precv_frame);
-
-#ifdef CONFIG_8723AU_AP_MODE
-static int OnAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status,
-                          struct sta_info *pstat, u16 pkt_type);
-#endif
-
-static struct mlme_handler mlme_sta_tbl[]={
-       {"OnAssocReq23a",               &OnAssocReq23a},
-       {"OnAssocRsp23a",               &OnAssocRsp23a},
-       {"OnReAssocReq",        &OnAssocReq23a},
-       {"OnReAssocRsp",        &OnAssocRsp23a},
-       {"OnProbeReq23a",               &OnProbeReq23a},
-       {"OnProbeRsp23a",               &OnProbeRsp23a},
-
-       /*----------------------------------------------------------
-                                       below 2 are reserved
-       -----------------------------------------------------------*/
-       {"DoReserved23a",               &DoReserved23a},
-       {"DoReserved23a",               &DoReserved23a},
-       {"OnBeacon23a",         &OnBeacon23a},
-       {"OnATIM",              &OnAtim23a},
-       {"OnDisassoc23a",               &OnDisassoc23a},
-       {"OnAuth23a",           &OnAuth23aClient23a},
-       {"OnDeAuth23a",         &OnDeAuth23a},
-       {"OnAction23a",         &OnAction23a},
-};
-
-static struct action_handler OnAction23a_tbl[]={
-       {WLAN_CATEGORY_SPECTRUM_MGMT, "ACTION_SPECTRUM_MGMT", on_action_spct23a},
-       {WLAN_CATEGORY_QOS, "ACTION_QOS", &OnAction23a_qos},
-       {WLAN_CATEGORY_DLS, "ACTION_DLS", &OnAction23a_dls},
-       {WLAN_CATEGORY_BACK, "ACTION_BACK", &OnAction23a_back23a},
-       {WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", on_action_public23a},
-       {WLAN_CATEGORY_HT, "ACTION_HT", &OnAction23a_ht},
-       {WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", &DoReserved23a},
-       {WLAN_CATEGORY_WMM, "ACTION_WMM", &OnAction23a_wmm},
-       {WLAN_CATEGORY_VENDOR_SPECIFIC, "ACTION_P2P", &OnAction23a_p2p},
-};
-
-static u8      null_addr[ETH_ALEN]= {0, 0, 0, 0, 0, 0};
-
-/**************************************************
-OUI definitions for the vendor specific IE
-***************************************************/
-unsigned char WMM_OUI23A[] = {0x00, 0x50, 0xf2, 0x02};
-unsigned char WPS_OUI23A[] = {0x00, 0x50, 0xf2, 0x04};
-unsigned char P2P_OUI23A[] = {0x50, 0x6F, 0x9A, 0x09};
-unsigned char WFD_OUI23A[] = {0x50, 0x6F, 0x9A, 0x0A};
-
-unsigned char WMM_INFO_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
-unsigned char WMM_PARA_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
-
-static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
-
-/********************************************************
-MCS rate definitions
-*********************************************************/
-unsigned char MCS_rate_2R23A[16] = {
-       0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0,
-       0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-unsigned char MCS_rate_1R23A[16] = {
-       0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0,
-       0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-
-/********************************************************
-ChannelPlan definitions
-*********************************************************/
-
-static struct rt_channel_plan_2g RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = {
-       /*  0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
-       /*  0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
-       /*  0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11},
-       /*  0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */
-       {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14},
-       /*  0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */
-       {{10, 11, 12, 13}, 4},
-       /*  0x05, RT_CHANNEL_DOMAIN_2G_NULL */
-       {{}, 0},
-};
-
-static struct rt_channel_plan_5g RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
-       /*  0x00, RT_CHANNEL_DOMAIN_5G_NULL */
-       {{}, 0},
-       /*  0x01, RT_CHANNEL_DOMAIN_5G_ETSI1 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 128, 132, 136, 140}, 19},
-       /*  0x02, RT_CHANNEL_DOMAIN_5G_ETSI2 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24},
-       /*  0x03, RT_CHANNEL_DOMAIN_5G_ETSI3 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 128, 132, 149, 153, 157, 161, 165}, 22},
-       /*  0x04, RT_CHANNEL_DOMAIN_5G_FCC1 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24},
-       /*  0x05, RT_CHANNEL_DOMAIN_5G_FCC2 */
-       {{36, 40, 44, 48, 149, 153, 157, 161, 165}, 9},
-       /*  0x06, RT_CHANNEL_DOMAIN_5G_FCC3 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 13},
-       /*  0x07, RT_CHANNEL_DOMAIN_5G_FCC4 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161}, 12},
-       /*  0x08, RT_CHANNEL_DOMAIN_5G_FCC5 */
-       {{149, 153, 157, 161, 165}, 5},
-       /*  0x09, RT_CHANNEL_DOMAIN_5G_FCC6 */
-       {{36, 40, 44, 48, 52, 56, 60, 64}, 8},
-       /*  0x0A, RT_CHANNEL_DOMAIN_5G_FCC7_IC1 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 136, 140, 149, 153, 157, 161, 165}, 20},
-       /*  0x0B, RT_CHANNEL_DOMAIN_5G_KCC1 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 149, 153, 157, 161, 165}, 20},
-       /*  0x0C, RT_CHANNEL_DOMAIN_5G_MKK1 */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 120, 124, 128, 132, 136, 140}, 19},
-       /*  0x0D, RT_CHANNEL_DOMAIN_5G_MKK2 */
-       {{36, 40, 44, 48, 52, 56, 60, 64}, 8},
-       /*  0x0E, RT_CHANNEL_DOMAIN_5G_MKK3 */
-       {{100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 11},
-       /*  0x0F, RT_CHANNEL_DOMAIN_5G_NCC1 */
-       {{56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149,
-         153, 157, 161, 165}, 15},
-       /*  0x10, RT_CHANNEL_DOMAIN_5G_NCC2 */
-       {{56, 60, 64, 149, 153, 157, 161, 165}, 8},
-
-       /*  Driver self defined for old channel plan Compatible,
-           Remember to modify if have new channel plan definition ===== */
-       /*  0x11, RT_CHANNEL_DOMAIN_5G_FCC */
-       {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
-         116, 132, 136, 140, 149, 153, 157, 161, 165}, 21},
-       /*  0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS */
-       {{36, 40, 44, 48}, 4},
-       /*  0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS */
-       {{36, 40, 44, 48, 149, 153, 157, 161}, 8},
-};
-
-static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
-       /*  0x00 ~ 0x1F , Old Define ===== */
-       {0x02, 0x11},   /* 0x00, RT_CHANNEL_DOMAIN_FCC */
-       {0x02, 0x0A},   /* 0x01, RT_CHANNEL_DOMAIN_IC */
-       {0x01, 0x01},   /* 0x02, RT_CHANNEL_DOMAIN_ETSI */
-       {0x01, 0x00},   /* 0x03, RT_CHANNEL_DOMAIN_SPAIN */
-       {0x01, 0x00},   /* 0x04, RT_CHANNEL_DOMAIN_FRANCE */
-       {0x03, 0x00},   /* 0x05, RT_CHANNEL_DOMAIN_MKK */
-       {0x03, 0x00},   /* 0x06, RT_CHANNEL_DOMAIN_MKK1 */
-       {0x01, 0x09},   /* 0x07, RT_CHANNEL_DOMAIN_ISRAEL */
-       {0x03, 0x09},   /* 0x08, RT_CHANNEL_DOMAIN_TELEC */
-       {0x03, 0x00},   /* 0x09, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN */
-       {0x00, 0x00},   /* 0x0A, RT_CHANNEL_DOMAIN_WORLD_WIDE_13 */
-       {0x02, 0x0F},   /* 0x0B, RT_CHANNEL_DOMAIN_TAIWAN */
-       {0x01, 0x08},   /* 0x0C, RT_CHANNEL_DOMAIN_CHINA */
-       {0x02, 0x06},   /* 0x0D, RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO */
-       {0x02, 0x0B},   /* 0x0E, RT_CHANNEL_DOMAIN_KOREA */
-       {0x02, 0x09},   /* 0x0F, RT_CHANNEL_DOMAIN_TURKEY */
-       {0x01, 0x01},   /* 0x10, RT_CHANNEL_DOMAIN_JAPAN */
-       {0x02, 0x05},   /* 0x11, RT_CHANNEL_DOMAIN_FCC_NO_DFS */
-       {0x01, 0x12},   /* 0x12, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS */
-       {0x00, 0x04},   /* 0x13, RT_CHANNEL_DOMAIN_WORLD_WIDE_5G */
-       {0x02, 0x10},   /* 0x14, RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS */
-       {0x00, 0x12},   /* 0x15, RT_CHANNEL_DOMAIN_ETSI_NO_DFS */
-       {0x00, 0x13},   /* 0x16, RT_CHANNEL_DOMAIN_KOREA_NO_DFS */
-       {0x03, 0x12},   /* 0x17, RT_CHANNEL_DOMAIN_JAPAN_NO_DFS */
-       {0x05, 0x08},   /* 0x18, RT_CHANNEL_DOMAIN_PAKISTAN_NO_DFS */
-       {0x02, 0x08},   /* 0x19, RT_CHANNEL_DOMAIN_TAIWAN2_NO_DFS */
-       {0x00, 0x00},   /* 0x1A, */
-       {0x00, 0x00},   /* 0x1B, */
-       {0x00, 0x00},   /* 0x1C, */
-       {0x00, 0x00},   /* 0x1D, */
-       {0x00, 0x00},   /* 0x1E, */
-       {0x05, 0x04},   /* 0x1F, RT_CHANNEL_DOMAIN_WORLD_WIDE_ONLY_5G */
-       /*  0x20 ~ 0x7F , New Define ===== */
-       {0x00, 0x00},   /* 0x20, RT_CHANNEL_DOMAIN_WORLD_NULL */
-       {0x01, 0x00},   /* 0x21, RT_CHANNEL_DOMAIN_ETSI1_NULL */
-       {0x02, 0x00},   /* 0x22, RT_CHANNEL_DOMAIN_FCC1_NULL */
-       {0x03, 0x00},   /* 0x23, RT_CHANNEL_DOMAIN_MKK1_NULL */
-       {0x04, 0x00},   /* 0x24, RT_CHANNEL_DOMAIN_ETSI2_NULL */
-       {0x02, 0x04},   /* 0x25, RT_CHANNEL_DOMAIN_FCC1_FCC1 */
-       {0x00, 0x01},   /* 0x26, RT_CHANNEL_DOMAIN_WORLD_ETSI1 */
-       {0x03, 0x0C},   /* 0x27, RT_CHANNEL_DOMAIN_MKK1_MKK1 */
-       {0x00, 0x0B},   /* 0x28, RT_CHANNEL_DOMAIN_WORLD_KCC1 */
-       {0x00, 0x05},   /* 0x29, RT_CHANNEL_DOMAIN_WORLD_FCC2 */
-       {0x00, 0x00},   /* 0x2A, */
-       {0x00, 0x00},   /* 0x2B, */
-       {0x00, 0x00},   /* 0x2C, */
-       {0x00, 0x00},   /* 0x2D, */
-       {0x00, 0x00},   /* 0x2E, */
-       {0x00, 0x00},   /* 0x2F, */
-       {0x00, 0x06},   /* 0x30, RT_CHANNEL_DOMAIN_WORLD_FCC3 */
-       {0x00, 0x07},   /* 0x31, RT_CHANNEL_DOMAIN_WORLD_FCC4 */
-       {0x00, 0x08},   /* 0x32, RT_CHANNEL_DOMAIN_WORLD_FCC5 */
-       {0x00, 0x09},   /* 0x33, RT_CHANNEL_DOMAIN_WORLD_FCC6 */
-       {0x02, 0x0A},   /* 0x34, RT_CHANNEL_DOMAIN_FCC1_FCC7 */
-       {0x00, 0x02},   /* 0x35, RT_CHANNEL_DOMAIN_WORLD_ETSI2 */
-       {0x00, 0x03},   /* 0x36, RT_CHANNEL_DOMAIN_WORLD_ETSI3 */
-       {0x03, 0x0D},   /* 0x37, RT_CHANNEL_DOMAIN_MKK1_MKK2 */
-       {0x03, 0x0E},   /* 0x38, RT_CHANNEL_DOMAIN_MKK1_MKK3 */
-       {0x02, 0x0F},   /* 0x39, RT_CHANNEL_DOMAIN_FCC1_NCC1 */
-       {0x00, 0x00},   /* 0x3A, */
-       {0x00, 0x00},   /* 0x3B, */
-       {0x00, 0x00},   /* 0x3C, */
-       {0x00, 0x00},   /* 0x3D, */
-       {0x00, 0x00},   /* 0x3E, */
-       {0x00, 0x00},   /* 0x3F, */
-       {0x02, 0x10},   /* 0x40, RT_CHANNEL_DOMAIN_FCC1_NCC2 */
-       {0x03, 0x00},   /* 0x41, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G */
-};
-
-static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE =
-{0x03, 0x02}; /* use the conbination for max channel numbers */
-
-static void dummy_event_callback(struct rtw_adapter *adapter, const u8 *pbuf)
-{
-}
-
-static struct fwevent wlanevents[] =
-{
-       {0, &dummy_event_callback},     /*0*/
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, &rtw_survey_event_cb23a},           /*8*/
-       {sizeof (struct surveydone_event), &rtw_surveydone_event_callback23a},
-       {0, &rtw23a_joinbss_event_cb},          /*10*/
-       {sizeof(struct stassoc_event), &rtw_stassoc_event_callback23a},
-       {sizeof(struct stadel_event), &rtw_stadel_event_callback23a},
-       {0, &dummy_event_callback},
-       {0, &dummy_event_callback},
-       {0, NULL},      /*15*/
-       {0, NULL},
-       {0, NULL},
-       {0, NULL},
-       {0, &dummy_event_callback},
-       {0, NULL},       /*20*/
-       {0, NULL},
-       {0, NULL},
-       {0, &dummy_event_callback},
-       {0, NULL},
-};
-
-
-static void rtw_correct_TSF(struct rtw_adapter *padapter)
-{
-       hw_var_set_correct_tsf(padapter);
-}
-
-static void
-rtw_update_TSF(struct mlme_ext_priv *pmlmeext, struct ieee80211_mgmt *mgmt)
-{
-       pmlmeext->TSFValue = get_unaligned_le64(&mgmt->u.beacon.timestamp);
-}
-
-/*
- * Search the @param channel_num in given @param channel_set
- * @ch_set: the given channel set
- * @ch: the given channel number
- *
- * return the index of channel_num in channel_set, -1 if not found
- */
-int rtw_ch_set_search_ch23a(struct rt_channel_info *ch_set, const u32 ch)
-{
-       int i;
-
-       for (i = 0; ch_set[i]. ChannelNum != 0; i++) {
-               if (ch == ch_set[i].ChannelNum)
-                       break;
-       }
-
-       if (i >= ch_set[i].ChannelNum)
-               return -1;
-       return i;
-}
-
-/****************************************************************************
-
-Following are the initialization functions for WiFi MLME
-
-*****************************************************************************/
-
-int init_hw_mlme_ext23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                             pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-       return _SUCCESS;
-}
-
-static void init_mlme_ext_priv23a_value(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       unsigned char   mixed_datarate[NumRates] = {
-               _1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,
-               _9M_RATE_, _12M_RATE_, _18M_RATE_, _24M_RATE_, _36M_RATE_,
-               _48M_RATE_, _54M_RATE_, 0xff};
-       unsigned char   mixed_basicrate[NumRates] = {
-               _1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,
-               _12M_RATE_, _24M_RATE_, 0xff,};
-
-       atomic_set(&pmlmeext->event_seq, 0);
-       /* reset to zero when disconnect at client mode */
-       pmlmeext->mgnt_seq = 0;
-
-       pmlmeext->cur_channel = padapter->registrypriv.channel;
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-       pmlmeext->retry = 0;
-
-       pmlmeext->cur_wireless_mode = padapter->registrypriv.wireless_mode;
-
-       memcpy(pmlmeext->datarate, mixed_datarate, NumRates);
-       memcpy(pmlmeext->basicrate, mixed_basicrate, NumRates);
-
-       if (pmlmeext->cur_channel > 14)
-               pmlmeext->tx_rate = IEEE80211_OFDM_RATE_6MB;
-       else
-               pmlmeext->tx_rate = IEEE80211_CCK_RATE_1MB;
-
-       pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-       pmlmeext->sitesurvey_res.channel_idx = 0;
-       pmlmeext->sitesurvey_res.bss_cnt = 0;
-       pmlmeext->scan_abort = false;
-
-       pmlmeinfo->state = MSR_NOLINK;
-       pmlmeinfo->reauth_count = 0;
-       pmlmeinfo->reassoc_count = 0;
-       pmlmeinfo->link_count = 0;
-       pmlmeinfo->auth_seq = 0;
-       pmlmeinfo->auth_algo = dot11AuthAlgrthm_Open;
-       pmlmeinfo->key_index = 0;
-       pmlmeinfo->iv = 0;
-
-       pmlmeinfo->enc_algo = 0;
-       pmlmeinfo->authModeToggle = 0;
-
-       memset(pmlmeinfo->chg_txt, 0, 128);
-
-       pmlmeinfo->slotTime = SHORT_SLOT_TIME;
-       pmlmeinfo->preamble_mode = PREAMBLE_AUTO;
-
-       pmlmeinfo->dialogToken = 0;
-
-       pmlmeext->action_public_rxseq = 0xffff;
-       pmlmeext->action_public_dialog_token = 0xff;
-}
-
-static int has_channel(struct rt_channel_info *channel_set,
-                      u8 chanset_size, u8 chan) {
-       int i;
-
-       for (i = 0; i < chanset_size; i++) {
-               if (channel_set[i].ChannelNum == chan)
-                       return 1;
-       }
-
-       return 0;
-}
-
-static void init_channel_list(struct rtw_adapter *padapter,
-                             struct rt_channel_info *channel_set,
-                             u8 chanset_size,
-                             struct p2p_channels *channel_list)
-{
-       struct p2p_oper_class_map op_class[] = {
-               { IEEE80211G,  81,   1,  13,  1, BW20 },
-               { IEEE80211G,  82,  14,  14,  1, BW20 },
-               { IEEE80211A, 115,  36,  48,  4, BW20 },
-               { IEEE80211A, 116,  36,  44,  8, BW40PLUS },
-               { IEEE80211A, 117,  40,  48,  8, BW40MINUS },
-               { IEEE80211A, 124, 149, 161,  4, BW20 },
-               { IEEE80211A, 125, 149, 169,  4, BW20 },
-               { IEEE80211A, 126, 149, 157,  8, BW40PLUS },
-               { IEEE80211A, 127, 153, 161,  8, BW40MINUS },
-               { -1, 0, 0, 0, 0, BW20 }
-       };
-
-       int cla, op;
-
-       cla = 0;
-
-       for (op = 0; op_class[op].op_class; op++) {
-               u8 ch;
-               struct p2p_oper_class_map *o = &op_class[op];
-               struct p2p_reg_class *reg = NULL;
-
-               for (ch = o->min_chan; ch <= o->max_chan; ch += o->inc) {
-                       if (!has_channel(channel_set, chanset_size, ch))
-                               continue;
-
-                       if ((0 == padapter->registrypriv.ht_enable) &&
-                           (o->inc == 8))
-                               continue;
-
-                       if ((0 == (padapter->registrypriv.cbw40_enable & BIT(1))) &&
-                               ((BW40MINUS == o->bw) || (BW40PLUS == o->bw)))
-                               continue;
-
-                       if (reg == NULL) {
-                               reg = &channel_list->reg_class[cla];
-                               cla++;
-                               reg->reg_class = o->op_class;
-                               reg->channels = 0;
-                       }
-                       reg->channel[reg->channels] = ch;
-                       reg->channels++;
-               }
-       }
-       channel_list->reg_classes = cla;
-}
-
-static u8 init_channel_set(struct rtw_adapter *padapter, u8 cplan,
-                          struct rt_channel_info *c_set)
-{
-       u8 i, ch_size = 0;
-       u8 b5GBand = false, b2_4GBand = false;
-       u8 Index2G = 0, Index5G = 0;
-
-       memset(c_set, 0, sizeof(struct rt_channel_info) * MAX_CHANNEL_NUM);
-
-       if (cplan >= RT_CHANNEL_DOMAIN_MAX &&
-           cplan != RT_CHANNEL_DOMAIN_REALTEK_DEFINE) {
-               DBG_8723A("ChannelPlan ID %x error !!!!!\n", cplan);
-               return ch_size;
-       }
-
-       if (padapter->registrypriv.wireless_mode & WIRELESS_11G) {
-               b2_4GBand = true;
-               if (RT_CHANNEL_DOMAIN_REALTEK_DEFINE == cplan)
-                       Index2G = RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE.Index2G;
-               else
-                       Index2G = RTW_ChannelPlanMap[cplan].Index2G;
-       }
-
-       if (padapter->registrypriv.wireless_mode & WIRELESS_11A) {
-               b5GBand = true;
-               if (RT_CHANNEL_DOMAIN_REALTEK_DEFINE == cplan)
-                       Index5G = RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE.Index5G;
-               else
-                       Index5G = RTW_ChannelPlanMap[cplan].Index5G;
-       }
-
-       if (b2_4GBand) {
-               for (i = 0; i < RTW_ChannelPlan2G[Index2G].Len; i++) {
-                       c_set[ch_size].ChannelNum =
-                               RTW_ChannelPlan2G[Index2G].Channel[i];
-
-                       if ((RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN == cplan) ||
-                           /* Channel 1~11 is active, and 12~14 is passive */
-                           RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G == cplan) {
-                               if (c_set[ch_size].ChannelNum >= 1 &&
-                                   c_set[ch_size].ChannelNum <= 11)
-                                       c_set[ch_size].ScanType = SCAN_ACTIVE;
-                               else if (c_set[ch_size].ChannelNum >= 12 &&
-                                        c_set[ch_size].ChannelNum  <= 14)
-                                       c_set[ch_size].ScanType = SCAN_PASSIVE;
-                       } else if (RT_CHANNEL_DOMAIN_WORLD_WIDE_13 == cplan ||
-                                  RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == cplan ||
-                                  RT_CHANNEL_DOMAIN_2G_WORLD == Index2G) {
-                               /*  channel 12~13, passive scan */
-                               if (c_set[ch_size].ChannelNum <= 11)
-                                       c_set[ch_size].ScanType = SCAN_ACTIVE;
-                               else
-                                       c_set[ch_size].ScanType = SCAN_PASSIVE;
-                       } else
-                               c_set[ch_size].ScanType = SCAN_ACTIVE;
-
-                       ch_size++;
-               }
-       }
-
-       if (b5GBand) {
-               for (i = 0; i < RTW_ChannelPlan5G[Index5G].Len; i++) {
-                       if (RTW_ChannelPlan5G[Index5G].Channel[i] <= 48 ||
-                           RTW_ChannelPlan5G[Index5G].Channel[i] >= 149) {
-                               c_set[ch_size].ChannelNum =
-                                       RTW_ChannelPlan5G[Index5G].Channel[i];
-                               if (RT_CHANNEL_DOMAIN_WORLD_WIDE_5G == cplan) {
-                                       /* passive scan for all 5G channels */
-                                       c_set[ch_size].ScanType =
-                                               SCAN_PASSIVE;
-                               } else
-                                       c_set[ch_size].ScanType =
-                                               SCAN_ACTIVE;
-                               DBG_8723A("%s(): channel_set[%d].ChannelNum = "
-                                         "%d\n", __func__, ch_size,
-                                         c_set[ch_size].ChannelNum);
-                               ch_size++;
-                       }
-               }
-       }
-
-       return ch_size;
-}
-
-int init_mlme_ext_priv23a(struct rtw_adapter *padapter)
-{
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmlmeext->padapter = padapter;
-
-       init_mlme_ext_priv23a_value(padapter);
-       pmlmeinfo->bAcceptAddbaReq = pregistrypriv->bAcceptAddbaReq;
-
-       init_mlme_ext_timer23a(padapter);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       init_mlme_ap_info23a(padapter);
-#endif
-
-       pmlmeext->max_chan_nums = init_channel_set(padapter,
-                                                  pmlmepriv->ChannelPlan,
-                                                  pmlmeext->channel_set);
-       init_channel_list(padapter, pmlmeext->channel_set,
-                         pmlmeext->max_chan_nums, &pmlmeext->channel_list);
-
-       pmlmeext->chan_scan_time = SURVEY_TO;
-       pmlmeext->mlmeext_init = true;
-
-       pmlmeext->active_keep_alive_check = true;
-       return _SUCCESS;
-}
-
-void free_mlme_ext_priv23a (struct mlme_ext_priv *pmlmeext)
-{
-       struct rtw_adapter *padapter = pmlmeext->padapter;
-
-       if (!padapter)
-               return;
-
-       if (padapter->bDriverStopped == true) {
-               del_timer_sync(&pmlmeext->survey_timer);
-               del_timer_sync(&pmlmeext->link_timer);
-               /* del_timer_sync(&pmlmeext->ADDBA_timer); */
-       }
-}
-
-static void
-_mgt_dispatcher23a(struct rtw_adapter *padapter, struct mlme_handler *ptable,
-                  struct recv_frame *precv_frame)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-
-       if (ptable->func) {
-               /* receive the frames that ra(a1) is my address
-                  or ra(a1) is bc address. */
-               if (!ether_addr_equal(hdr->addr1, myid(&padapter->eeprompriv))&&
-                   !is_broadcast_ether_addr(hdr->addr1))
-                       return;
-
-               ptable->func(padapter, precv_frame);
-       }
-}
-
-void mgt_dispatcher23a(struct rtw_adapter *padapter,
-                   struct recv_frame *precv_frame)
-{
-       struct mlme_handler *ptable;
-#ifdef CONFIG_8723AU_AP_MODE
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-#endif /* CONFIG_8723AU_AP_MODE */
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       struct sta_info *psta;
-       u16 stype;
-       int index;
-
-       if (!ieee80211_is_mgmt(mgmt->frame_control))
-               return;
-
-       /* receive the frames that ra(a1) is my address or ra(a1) is
-          bc address. */
-       if (!ether_addr_equal(mgmt->da, myid(&padapter->eeprompriv)) &&
-           !is_broadcast_ether_addr(mgmt->da))
-               return;
-
-       ptable = mlme_sta_tbl;
-
-       stype = le16_to_cpu(mgmt->frame_control) & IEEE80211_FCTL_STYPE;
-       index = stype >> 4;
-
-       if (index > 13) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "Currently we do not support reserved sub-fr-type =%d\n",
-                        index);
-               return;
-       }
-       ptable += index;
-
-       psta = rtw_get_stainfo23a(&padapter->stapriv, mgmt->sa);
-
-       if (psta) {
-               if (ieee80211_has_retry(mgmt->frame_control)) {
-                       if (precv_frame->attrib.seq_num ==
-                           psta->RxMgmtFrameSeqNum) {
-                               /* drop the duplicate management frame */
-                               DBG_8723A("Drop duplicate management frame "
-                                         "with seq_num = %d.\n",
-                                         precv_frame->attrib.seq_num);
-                               return;
-                       }
-               }
-               psta->RxMgmtFrameSeqNum = precv_frame->attrib.seq_num;
-       }
-
-#ifdef CONFIG_8723AU_AP_MODE
-       switch (stype) {
-       case IEEE80211_STYPE_AUTH:
-               if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-                       ptable->func = &OnAuth23a;
-               else
-                       ptable->func = &OnAuth23aClient23a;
-               /* pass through */
-       case IEEE80211_STYPE_ASSOC_REQ:
-       case IEEE80211_STYPE_REASSOC_REQ:
-               _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               break;
-       case IEEE80211_STYPE_PROBE_REQ:
-               if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-                       _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               else
-                       _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               break;
-       case IEEE80211_STYPE_BEACON:
-               _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               break;
-       case IEEE80211_STYPE_ACTION:
-               /* if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) */
-               _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               break;
-       default:
-               _mgt_dispatcher23a(padapter, ptable, precv_frame);
-               break;
-       }
-#else
-       _mgt_dispatcher23a(padapter, ptable, precv_frame);
-#endif
-}
-
-/****************************************************************************
-
-Following are the callback functions for each subtype of the management frames
-
-*****************************************************************************/
-
-static int
-OnProbeReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       const u8 *ie;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur = &pmlmeinfo->network;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       int len = skb->len;
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-               return _SUCCESS;
-
-       if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
-           !check_fwstate(pmlmepriv,
-                          WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE))
-               return _SUCCESS;
-
-       if (unlikely(!ieee80211_is_probe_req(mgmt->frame_control))) {
-               printk(KERN_WARNING "%s: Received non probe request frame\n",
-                      __func__);
-               return _FAIL;
-       }
-
-       len -= offsetof(struct ieee80211_mgmt, u.probe_req.variable);
-
-       ie = cfg80211_find_ie(WLAN_EID_SSID, mgmt->u.probe_req.variable, len);
-
-       /* check (wildcard) SSID */
-       if (!ie)
-               goto out;
-
-       if ((ie[1] && memcmp(ie + 2, cur->Ssid.ssid, cur->Ssid.ssid_len)) ||
-           (ie[1] == 0 && pmlmeinfo->hidden_ssid_mode)) {
-               return _SUCCESS;
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED) &&
-           pmlmepriv->cur_network.join_res)
-               issue_probersp(padapter, mgmt->sa);
-
-out:
-       return _SUCCESS;
-}
-
-static int
-OnProbeRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               report_survey_event23a(padapter, precv_frame);
-               return _SUCCESS;
-       }
-
-       return _SUCCESS;
-}
-
-static int
-OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       int cam_idx;
-       struct sta_info *psta;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       int pkt_len = skb->len;
-       struct wlan_bssid_ex *pbss;
-       int ret = _SUCCESS;
-       u8 *p, *pie;
-       int pie_len;
-       u32 ielen = 0;
-
-       pie = mgmt->u.beacon.variable;
-       pie_len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
-       p = rtw_get_ie23a(pie, WLAN_EID_EXT_SUPP_RATES, &ielen, pie_len);
-       if (p && ielen > 0) {
-               if (p[1 + ielen] == 0x2D && p[2 + ielen] != 0x2D) {
-                       /* Invalid value 0x2D is detected in Extended Supported
-                        * Rates (ESR) IE. Try to fix the IE length to avoid
-                        * failed Beacon parsing.
-                        */
-                       DBG_8723A("[WIFIDBG] Error in ESR IE is detected in "
-                                 "Beacon of BSSID: %pM. Fix the length of "
-                                 "ESR IE to avoid failed Beacon parsing.\n",
-                                 mgmt->bssid);
-                       p[1] = ielen - 1;
-               }
-       }
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               report_survey_event23a(padapter, precv_frame);
-               return _SUCCESS;
-       }
-
-       if (!ether_addr_equal(mgmt->bssid,
-                             get_my_bssid23a(&pmlmeinfo->network)))
-               goto out;
-
-       if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
-               /* we should update current network before auth,
-                  or some IE is wrong */
-               pbss = collect_bss_info(padapter, precv_frame);
-               if (pbss) {
-                       update_network23a(&pmlmepriv->cur_network.network, pbss,
-                                         padapter, true);
-                       rtw_get_bcn_info23a(&pmlmepriv->cur_network);
-                       kfree(pbss);
-               }
-
-               /* check the vendor of the assoc AP */
-               pmlmeinfo->assoc_AP_vendor =
-                       check_assoc_AP23a((u8 *)&mgmt->u.beacon, pkt_len -
-                                         offsetof(struct ieee80211_mgmt, u));
-
-               /* update TSF Value */
-               rtw_update_TSF(pmlmeext, mgmt);
-
-               /* start auth */
-               start_clnt_auth(padapter);
-
-               return _SUCCESS;
-       }
-
-       if (((pmlmeinfo->state & 0x03) == MSR_AP) &&
-           (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)) {
-               psta = rtw_get_stainfo23a(pstapriv, mgmt->sa);
-               if (psta) {
-                       ret = rtw_check_bcn_info23a(padapter, mgmt, pkt_len);
-                       if (ret != _SUCCESS) {
-                               DBG_8723A_LEVEL(_drv_always_, "ap has changed, "
-                                               "disconnect now\n");
-                               receive_disconnect23a(padapter, pmlmeinfo->network.MacAddress, 65535);
-                               return _SUCCESS;
-                       }
-                       /* update WMM, ERP in the beacon */
-                       /* todo: the timer is used instead of
-                          the number of the beacon received */
-                       if ((sta_rx_pkts(psta) & 0xf) == 0) {
-                               /* DBG_8723A("update_bcn_info\n"); */
-                               update_beacon23a_info(padapter, mgmt,
-                                                     pkt_len, psta);
-                       }
-               }
-       } else if ((pmlmeinfo->state&0x03) == MSR_ADHOC) {
-               psta = rtw_get_stainfo23a(pstapriv, mgmt->sa);
-               if (psta) {
-                       /* update WMM, ERP in the beacon */
-                       /* todo: the timer is used instead of the
-                          number of the beacon received */
-                       if ((sta_rx_pkts(psta) & 0xf) == 0) {
-                               /* DBG_8723A("update_bcn_info\n"); */
-                               update_beacon23a_info(padapter, mgmt,
-                                                     pkt_len, psta);
-                       }
-               } else {
-                       /* allocate a new CAM entry for IBSS station */
-                       cam_idx = allocate_fw_sta_entry23a(padapter);
-                       if (cam_idx == NUM_STA)
-                               goto out;
-
-                       /* get supported rate */
-                       if (update_sta_support_rate23a(padapter, pie, pie_len,
-                                                      cam_idx) == _FAIL) {
-                               pmlmeinfo->FW_sta_info[cam_idx].status = 0;
-                               goto out;
-                       }
-
-                       /* update TSF Value */
-                       rtw_update_TSF(pmlmeext, mgmt);
-
-                       /* report sta add event */
-                       report_add_sta_event23a(padapter, mgmt->sa,
-                                               cam_idx);
-               }
-       }
-
-out:
-
-       return _SUCCESS;
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-static int
-OnAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       static struct sta_info stat;
-       struct sta_info *pstat = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       u8 *pframe;
-       const u8 *p;
-       unsigned char *sa;
-       u16 auth_mode, seq, algorithm;
-       int status, len = skb->len;
-
-       if ((pmlmeinfo->state & 0x03) != MSR_AP)
-               return _FAIL;
-
-       DBG_8723A("+OnAuth23a\n");
-
-       sa = mgmt->sa;
-
-       auth_mode = psecuritypriv->dot11AuthAlgrthm;
-
-       pframe = mgmt->u.auth.variable;
-       len = skb->len - offsetof(struct ieee80211_mgmt, u.auth.variable);
-
-       seq = le16_to_cpu(mgmt->u.auth.auth_transaction);
-       algorithm = le16_to_cpu(mgmt->u.auth.auth_alg);
-
-       DBG_8723A("auth alg =%x, seq =%X\n", algorithm, seq);
-
-       if (auth_mode == 2 &&
-           psecuritypriv->dot11PrivacyAlgrthm != WLAN_CIPHER_SUITE_WEP40 &&
-           psecuritypriv->dot11PrivacyAlgrthm != WLAN_CIPHER_SUITE_WEP104)
-               auth_mode = 0;
-
-       /*  rx a shared-key auth but shared not enabled, or */
-       /*  rx a open-system auth but shared-key is enabled */
-       if ((algorithm != WLAN_AUTH_OPEN && auth_mode == 0) ||
-           (algorithm == WLAN_AUTH_OPEN && auth_mode == 1)) {
-               DBG_8723A("auth rejected due to bad alg [alg =%d, auth_mib "
-                         "=%d] %02X%02X%02X%02X%02X%02X\n",
-                         algorithm, auth_mode,
-                         sa[0], sa[1], sa[2], sa[3], sa[4], sa[5]);
-
-               status = WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG;
-
-               goto auth_fail;
-       }
-
-       if (rtw_access_ctrl23a(padapter, sa) == false) {
-               status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
-               goto auth_fail;
-       }
-
-       pstat = rtw_get_stainfo23a(pstapriv, sa);
-       if (!pstat) {
-               /*  allocate a new one */
-               DBG_8723A("going to alloc stainfo for sa =%pM\n", sa);
-               pstat = rtw_alloc_stainfo23a(pstapriv, sa, GFP_ATOMIC);
-               if (!pstat) {
-                       DBG_8723A(" Exceed the upper limit of supported "
-                                 "clients...\n");
-                       status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
-                       goto auth_fail;
-               }
-
-               pstat->state = WIFI_FW_AUTH_NULL;
-               pstat->auth_seq = 0;
-
-               /* pstat->flags = 0; */
-               /* pstat->capability = 0; */
-       } else {
-               spin_lock_bh(&pstapriv->asoc_list_lock);
-               if (!list_empty(&pstat->asoc_list)) {
-                       list_del_init(&pstat->asoc_list);
-                       pstapriv->asoc_list_cnt--;
-                       if (pstat->expire_to > 0) {
-                               /* TODO: STA re_auth within expire_to */
-                       }
-               }
-               spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-               if (seq == 1) {
-                       /* TODO: STA re_auth and auth timeout */
-               }
-       }
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (list_empty(&pstat->auth_list)) {
-               list_add_tail(&pstat->auth_list, &pstapriv->auth_list);
-               pstapriv->auth_list_cnt++;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       if (pstat->auth_seq == 0)
-               pstat->expire_to = pstapriv->auth_to;
-
-       if ((pstat->auth_seq + 1) != seq) {
-               DBG_8723A("(1)auth rejected because out of seq [rx_seq =%d, "
-                         "exp_seq =%d]!\n", seq, pstat->auth_seq+1);
-               status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
-               goto auth_fail;
-       }
-
-       if (algorithm == WLAN_AUTH_OPEN && (auth_mode == 0 || auth_mode == 2)) {
-               if (seq == 1) {
-                       pstat->state &= ~WIFI_FW_AUTH_NULL;
-                       pstat->state |= WIFI_FW_AUTH_SUCCESS;
-                       pstat->expire_to = pstapriv->assoc_to;
-                       pstat->authalg = algorithm;
-               } else {
-                       DBG_8723A("(2)auth rejected because out of seq "
-                                 "[rx_seq =%d, exp_seq =%d]!\n",
-                                 seq, pstat->auth_seq+1);
-                       status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
-                       goto auth_fail;
-               }
-       } else { /*  shared system or auto authentication */
-               if (seq == 1) {
-                       /* prepare for the challenging txt... */
-                       pstat->state &= ~WIFI_FW_AUTH_NULL;
-                       pstat->state |= WIFI_FW_AUTH_STATE;
-                       pstat->authalg = algorithm;
-                       pstat->auth_seq = 2;
-               } else if (seq == 3) {
-                       /* checking for challenging txt... */
-                       DBG_8723A("checking for challenging txt...\n");
-
-                       p = cfg80211_find_ie(WLAN_EID_CHALLENGE, pframe, len);
-                       if (!p || p[1] <= 0) {
-                               DBG_8723A("auth rejected because challenge "
-                                         "failure!(1)\n");
-                               status = WLAN_STATUS_CHALLENGE_FAIL;
-                               goto auth_fail;
-                       }
-
-                       if (!memcmp(p + 2, pstat->chg_txt, 128)) {
-                               pstat->state &= ~WIFI_FW_AUTH_STATE;
-                               pstat->state |= WIFI_FW_AUTH_SUCCESS;
-                               /*  challenging txt is correct... */
-                               pstat->expire_to =  pstapriv->assoc_to;
-                       } else {
-                               DBG_8723A("auth rejected because challenge "
-                                         "failure!\n");
-                               status = WLAN_STATUS_CHALLENGE_FAIL;
-                               goto auth_fail;
-                       }
-               } else {
-                       DBG_8723A("(3)auth rejected because out of seq "
-                                 "[rx_seq =%d, exp_seq =%d]!\n",
-                                 seq, pstat->auth_seq+1);
-                       status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
-                       goto auth_fail;
-               }
-       }
-
-       /*  Now, we are going to issue_auth... */
-       pstat->auth_seq = seq + 1;
-
-       issue_auth(padapter, pstat, WLAN_STATUS_SUCCESS);
-
-       if (pstat->state & WIFI_FW_AUTH_SUCCESS)
-               pstat->auth_seq = 0;
-
-       return _SUCCESS;
-
-auth_fail:
-
-       if (pstat)
-               rtw_free_stainfo23a(padapter, pstat);
-
-       pstat = &stat;
-       memset((char *)pstat, '\0', sizeof(stat));
-       pstat->auth_seq = 2;
-       ether_addr_copy(pstat->hwaddr, sa);
-
-       issue_auth(padapter, pstat, (unsigned short)status);
-
-       return _FAIL;
-}
-#endif
-
-static int
-OnAuth23aClient23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned int seq, status, algthm;
-       unsigned int go2asoc = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       const u8 *p;
-       u8 *pie;
-       int plen = skb->len;
-
-       DBG_8723A("%s\n", __func__);
-
-       /* check A1 matches or not */
-       if (!ether_addr_equal(myid(&padapter->eeprompriv), mgmt->da))
-               return _SUCCESS;
-
-       if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
-               return _SUCCESS;
-
-       pie = mgmt->u.auth.variable;
-       plen -= offsetof(struct ieee80211_mgmt, u.auth.variable);
-
-       algthm = le16_to_cpu(mgmt->u.auth.auth_alg);
-       seq = le16_to_cpu(mgmt->u.auth.auth_transaction);
-       status = le16_to_cpu(mgmt->u.auth.status_code);
-
-       if (status) {
-               DBG_8723A("clnt auth fail, status: %d\n", status);
-               /*  pmlmeinfo->auth_algo == dot11AuthAlgrthm_Auto) */
-               if (status == WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG) {
-                       if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)
-                               pmlmeinfo->auth_algo = dot11AuthAlgrthm_Open;
-                       else
-                               pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared;
-                       /* pmlmeinfo->reauth_count = 0; */
-               }
-
-               set_link_timer(pmlmeext, 1);
-               goto authclnt_fail;
-       }
-
-       if (seq == 2) {
-               if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) {
-                       /*  legendary shared system */
-                       p = cfg80211_find_ie(WLAN_EID_CHALLENGE, pie, plen);
-
-                       if (!p) {
-                               /* DBG_8723A("marc: no challenge text?\n"); */
-                               goto authclnt_fail;
-                       }
-
-                       memcpy((void *)(pmlmeinfo->chg_txt), p + 2, p[1]);
-                       pmlmeinfo->auth_seq = 3;
-                       issue_auth(padapter, NULL, 0);
-                       set_link_timer(pmlmeext, REAUTH_TO);
-
-                       return _SUCCESS;
-               } else {
-                       /*  open system */
-                       go2asoc = 1;
-               }
-       } else if (seq == 4) {
-               if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)
-                       go2asoc = 1;
-               else
-                       goto authclnt_fail;
-       } else {
-               /*  this is also illegal */
-               /* DBG_8723A("marc: clnt auth failed due to illegal seq =%x\n",
-                  seq); */
-               goto authclnt_fail;
-       }
-
-       if (go2asoc) {
-               DBG_8723A_LEVEL(_drv_always_, "auth success, start assoc\n");
-               start_clnt_assoc(padapter);
-               return _SUCCESS;
-       }
-
-authclnt_fail:
-
-       /* pmlmeinfo->state &= ~(WIFI_FW_AUTH_STATE); */
-
-       return _FAIL;
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-static int rtw_validate_vendor_specific_ies(const u8 *pos, int elen)
-{
-       unsigned int oui;
-
-       /* first 3 bytes in vendor specific information element are the IEEE
-        * OUI of the vendor. The following byte is used a vendor specific
-        * sub-type. */
-       if (elen < 4) {
-               DBG_8723A("short vendor specific information element "
-                         "ignored (len =%i)\n", elen);
-               return -EINVAL;
-       }
-
-       oui = RTW_GET_BE24(pos);
-       switch (oui) {
-       case WLAN_OUI_MICROSOFT:
-               /* Microsoft/Wi-Fi information elements are further typed and
-                * subtyped */
-               switch (pos[3]) {
-               case WLAN_OUI_TYPE_MICROSOFT_WPA:
-                       /* Microsoft OUI (00:50:F2) with OUI Type 1:
-                        * real WPA information element */
-                       break;
-               case WLAN_OUI_TYPE_MICROSOFT_WMM:
-                       if (elen < 5) {
-                               DBG_8723A("short WME information element "
-                                         "ignored (len =%i)\n", elen);
-                               return -EINVAL;
-                       }
-                       switch (pos[4]) {
-                       case WME_OUI_SUBTYPE_INFORMATION_ELEMENT:
-                       case WME_OUI_SUBTYPE_PARAMETER_ELEMENT:
-                               break;
-                       case WME_OUI_SUBTYPE_TSPEC_ELEMENT:
-                               break;
-                       default:
-                               DBG_8723A("unknown WME information element "
-                                         "ignored (subtype =%d len =%i)\n",
-                                          pos[4], elen);
-                               return -EINVAL;
-                       }
-                       break;
-               case WLAN_OUI_TYPE_MICROSOFT_WPS:
-                       /* Wi-Fi Protected Setup (WPS) IE */
-                       break;
-               default:
-                       DBG_8723A("Unknown Microsoft information element "
-                                 "ignored (type =%d len =%i)\n",
-                                 pos[3], elen);
-                       return -EINVAL;
-               }
-               break;
-
-       case OUI_BROADCOM:
-               switch (pos[3]) {
-               case VENDOR_HT_CAPAB_OUI_TYPE:
-                       break;
-               default:
-                       DBG_8723A("Unknown Broadcom information element "
-                                 "ignored (type =%d len =%i)\n", pos[3], elen);
-                       return -EINVAL;
-               }
-               break;
-
-       default:
-               DBG_8723A("unknown vendor specific information element "
-                         "ignored (vendor OUI %02x:%02x:%02x len =%i)\n",
-                          pos[0], pos[1], pos[2], elen);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int rtw_validate_frame_ies(const u8 *start, uint len)
-{
-       const u8 *pos = start;
-       int left = len;
-       int unknown = 0;
-
-       while (left >= 2) {
-               u8 id, elen;
-
-               id = *pos++;
-               elen = *pos++;
-               left -= 2;
-
-               if (elen > left) {
-                       DBG_8723A("%s: IEEE 802.11 failed (id =%d elen =%d "
-                                 "left =%i)\n", __func__, id, elen, left);
-                       return -EINVAL;
-               }
-
-               switch (id) {
-               case WLAN_EID_SSID:
-               case WLAN_EID_SUPP_RATES:
-               case WLAN_EID_FH_PARAMS:
-               case WLAN_EID_DS_PARAMS:
-               case WLAN_EID_CF_PARAMS:
-               case WLAN_EID_TIM:
-               case WLAN_EID_IBSS_PARAMS:
-               case WLAN_EID_CHALLENGE:
-               case WLAN_EID_ERP_INFO:
-               case WLAN_EID_EXT_SUPP_RATES:
-                       break;
-               case WLAN_EID_VENDOR_SPECIFIC:
-                       if (rtw_validate_vendor_specific_ies(pos, elen))
-                               unknown++;
-                       break;
-               case WLAN_EID_RSN:
-               case WLAN_EID_PWR_CAPABILITY:
-               case WLAN_EID_SUPPORTED_CHANNELS:
-               case WLAN_EID_MOBILITY_DOMAIN:
-               case WLAN_EID_FAST_BSS_TRANSITION:
-               case WLAN_EID_TIMEOUT_INTERVAL:
-               case WLAN_EID_HT_CAPABILITY:
-               case WLAN_EID_HT_OPERATION:
-               default:
-                       unknown++;
-                       DBG_8723A("%s IEEE 802.11 ignored unknown element "
-                                 "(id =%d elen =%d)\n", __func__, id, elen);
-                       break;
-               }
-
-               left -= elen;
-               pos += elen;
-       }
-
-       if (left)
-               return -EINVAL;
-
-       return 0;
-}
-#endif
-
-static int
-OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-#ifdef CONFIG_8723AU_AP_MODE
-       u16 capab_info, listen_interval;
-       struct sta_info *pstat;
-       unsigned char reassoc;
-       int i, wpa_ie_len, left;
-       unsigned char supportRate[16];
-       int supportRateNum;
-       unsigned short status = WLAN_STATUS_SUCCESS;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur = &pmlmeinfo->network;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       const u8 *pos, *p, *wpa_ie, *wps_ie;
-       u8 *pframe = skb->data;
-       uint pkt_len = skb->len;
-       int r;
-
-       if ((pmlmeinfo->state & 0x03) != MSR_AP)
-               return _FAIL;
-
-       left = pkt_len - sizeof(struct ieee80211_hdr_3addr);
-       if (ieee80211_is_assoc_req(mgmt->frame_control)) {
-               reassoc = 0;
-               pos = mgmt->u.assoc_req.variable;
-               left -= offsetof(struct ieee80211_mgmt, u.assoc_req.variable);
-       } else { /*  WIFI_REASSOCREQ */
-               reassoc = 1;
-               pos = mgmt->u.reassoc_req.variable;
-               left -= offsetof(struct ieee80211_mgmt, u.reassoc_req.variable);
-       }
-
-       if (left < 0) {
-               DBG_8723A("handle_assoc(reassoc =%d) - too short payload "
-                         "(len =%lu)\n", reassoc, (unsigned long)pkt_len);
-               return _FAIL;
-       }
-
-       pstat = rtw_get_stainfo23a(pstapriv, mgmt->sa);
-       if (!pstat) {
-               status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
-               goto asoc_class2_error;
-       }
-
-       /* These two are located at the same offsets whether it's an
-        * assoc_req or a reassoc_req */
-       capab_info = get_unaligned_le16(&mgmt->u.assoc_req.capab_info);
-       listen_interval =
-               get_unaligned_le16(&mgmt->u.assoc_req.listen_interval);
-
-       DBG_8723A("%s\n", __func__);
-
-       /*  check if this stat has been successfully authenticated/assocated */
-       if (!(pstat->state & WIFI_FW_AUTH_SUCCESS)) {
-               if (!(pstat->state & WIFI_FW_ASSOC_SUCCESS)) {
-                       status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
-                       goto asoc_class2_error;
-               } else {
-                       pstat->state &= (~WIFI_FW_ASSOC_SUCCESS);
-                       pstat->state |= WIFI_FW_ASSOC_STATE;
-               }
-       } else {
-               pstat->state &= (~WIFI_FW_AUTH_SUCCESS);
-               pstat->state |= WIFI_FW_ASSOC_STATE;
-       }
-
-       pstat->capability = capab_info;
-
-       /* now parse all ieee802_11 ie to point to elems */
-
-       if (rtw_validate_frame_ies(pos, left)) {
-               DBG_8723A("STA %pM sent invalid association request\n",
-                         pstat->hwaddr);
-               status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-               goto OnAssocReq23aFail;
-       }
-
-       /*  now we should check all the fields... */
-       /*  checking SSID */
-       p = cfg80211_find_ie(WLAN_EID_SSID, pos, left);
-       if (!p || p[1] == 0) {
-               /*  broadcast ssid, however it is not allowed in assocreq */
-               DBG_8723A("STA %pM sent invalid association request lacking an SSID\n",
-                         pstat->hwaddr);
-               status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-               goto OnAssocReq23aFail;
-       } else {
-               /*  check if ssid match */
-               if (memcmp(p + 2, cur->Ssid.ssid, cur->Ssid.ssid_len))
-                       status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-
-               if (p[1] != cur->Ssid.ssid_len)
-                       status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-       }
-
-       if (status != WLAN_STATUS_SUCCESS)
-               goto OnAssocReq23aFail;
-
-       /*  check if the supported rate is ok */
-       p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, pos, left);
-       if (!p) {
-               DBG_8723A("Rx a sta assoc-req which supported rate is "
-                         "empty!\n");
-               /*  use our own rate set as statoin used */
-               /* memcpy(supportRate, AP_BSSRATE, AP_BSSRATE_LEN); */
-               /* supportRateNum = AP_BSSRATE_LEN; */
-
-               status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-               goto OnAssocReq23aFail;
-       } else {
-               memcpy(supportRate, p + 2, p[1]);
-               supportRateNum = p[1];
-
-               p = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, pos, left);
-               if (p) {
-                       if (supportRateNum <= sizeof(supportRate)) {
-                               memcpy(supportRate+supportRateNum, p + 2, p[1]);
-                               supportRateNum += p[1];
-                       }
-               }
-       }
-
-       /* todo: mask supportRate between AP & STA -> move to update raid */
-       /* get_matched_rate(pmlmeext, supportRate, &supportRateNum, 0); */
-
-       /* update station supportRate */
-       pstat->bssratelen = supportRateNum;
-       memcpy(pstat->bssrateset, supportRate, supportRateNum);
-       Update23aTblForSoftAP(pstat->bssrateset, pstat->bssratelen);
-
-       /* check RSN/WPA/WPS */
-       pstat->dot8021xalg = 0;
-       pstat->wpa_psk = 0;
-       pstat->wpa_group_cipher = 0;
-       pstat->wpa2_group_cipher = 0;
-       pstat->wpa_pairwise_cipher = 0;
-       pstat->wpa2_pairwise_cipher = 0;
-       memset(pstat->wpa_ie, 0, sizeof(pstat->wpa_ie));
-
-       wpa_ie = cfg80211_find_ie(WLAN_EID_RSN, pos, left);
-       if (!wpa_ie)
-               wpa_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                                WLAN_OUI_TYPE_MICROSOFT_WPA,
-                                                pos, left);
-       if (wpa_ie) {
-               int group_cipher = 0, pairwise_cipher = 0;
-
-               wpa_ie_len = wpa_ie[1];
-               if (psecuritypriv->wpa_psk & BIT(1)) {
-                       r = rtw_parse_wpa2_ie23a(wpa_ie, wpa_ie_len + 2,
-                                                &group_cipher,
-                                                &pairwise_cipher, NULL);
-                       if (r == _SUCCESS) {
-                               pstat->dot8021xalg = 1;/* psk,  todo:802.1x */
-                               pstat->wpa_psk |= BIT(1);
-
-                               pstat->wpa2_group_cipher = group_cipher &
-                                       psecuritypriv->wpa2_group_cipher;
-                               pstat->wpa2_pairwise_cipher = pairwise_cipher &
-                                       psecuritypriv->wpa2_pairwise_cipher;
-                       } else
-                               status = WLAN_STATUS_INVALID_IE;
-               } else if (psecuritypriv->wpa_psk & BIT(0)) {
-                       r = rtw_parse_wpa_ie23a(wpa_ie, wpa_ie_len + 2,
-                                               &group_cipher, &pairwise_cipher,
-                                               NULL);
-                       if (r == _SUCCESS) {
-                               pstat->dot8021xalg = 1;/* psk,  todo:802.1x */
-                               pstat->wpa_psk |= BIT(0);
-
-                               pstat->wpa_group_cipher = group_cipher &
-                                       psecuritypriv->wpa_group_cipher;
-                               pstat->wpa_pairwise_cipher = pairwise_cipher &
-                                       psecuritypriv->wpa_pairwise_cipher;
-                       } else
-                               status = WLAN_STATUS_INVALID_IE;
-               } else {
-                       wpa_ie = NULL;
-                       wpa_ie_len = 0;
-               }
-               if (wpa_ie && status == WLAN_STATUS_SUCCESS) {
-                       if (!pstat->wpa_group_cipher)
-                               status = WLAN_STATUS_INVALID_GROUP_CIPHER;
-
-                       if (!pstat->wpa_pairwise_cipher)
-                               status = WLAN_STATUS_INVALID_PAIRWISE_CIPHER;
-               }
-       }
-
-       if (status != WLAN_STATUS_SUCCESS)
-               goto OnAssocReq23aFail;
-
-       pstat->flags &= ~(WLAN_STA_WPS | WLAN_STA_MAYBE_WPS);
-
-       wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                        WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                        pos, left);
-
-       if (!wpa_ie) {
-               if (wps_ie) {
-                       DBG_8723A("STA included WPS IE in (Re)Association "
-                                 "Request - assume WPS is used\n");
-                       pstat->flags |= WLAN_STA_WPS;
-               } else {
-                       DBG_8723A("STA did not include WPA/RSN IE in (Re)"
-                                  "Association Request - possible WPS use\n");
-                       pstat->flags |= WLAN_STA_MAYBE_WPS;
-               }
-       } else {
-               int copy_len;
-
-               if (psecuritypriv->wpa_psk == 0) {
-                       DBG_8723A("STA %pM: WPA/RSN IE in association request, but AP don't support WPA/RSN\n",
-                                 pstat->hwaddr);
-
-                       status = WLAN_STATUS_INVALID_IE;
-
-                       goto OnAssocReq23aFail;
-               }
-
-               if (wps_ie) {
-                       DBG_8723A("STA included WPS IE in (Re)Association "
-                                 "Request - WPS is used\n");
-                       pstat->flags |= WLAN_STA_WPS;
-                       copy_len = 0;
-               } else {
-                       copy_len = ((wpa_ie_len + 2) > sizeof(pstat->wpa_ie)) ?
-                               sizeof(pstat->wpa_ie) : (wpa_ie_len + 2);
-               }
-
-               if (copy_len > 0)
-                       memcpy(pstat->wpa_ie, wpa_ie - 2, copy_len);
-       }
-
-       /*  check if there is WMM IE & support WWM-PS */
-       pstat->flags &= ~WLAN_STA_WME;
-       pstat->qos_option = 0;
-       pstat->qos_info = 0;
-       pstat->has_legacy_ac = true;
-       pstat->uapsd_vo = 0;
-       pstat->uapsd_vi = 0;
-       pstat->uapsd_be = 0;
-       pstat->uapsd_bk = 0;
-       if (pmlmepriv->qos_option) {
-               const u8 *end = pos + left;
-
-               p = pos;
-
-               for (;;) {
-                       left = end - p;
-                       p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                                   WLAN_OUI_TYPE_MICROSOFT_WMM,
-                                                   p, left);
-                       if (p) {
-                               pstat->flags |= WLAN_STA_WME;
-
-                               pstat->qos_option = 1;
-                               pstat->qos_info = *(p + 8);
-
-                               pstat->max_sp_len =
-                                       (pstat->qos_info >> 5) & 0x3;
-
-                               if ((pstat->qos_info & 0xf) != 0xf)
-                                       pstat->has_legacy_ac = true;
-                               else
-                                       pstat->has_legacy_ac = false;
-
-                               if (pstat->qos_info & 0xf) {
-                                       if (pstat->qos_info & BIT(0))
-                                               pstat->uapsd_vo = BIT(0)|BIT(1);
-                                       else
-                                               pstat->uapsd_vo = 0;
-
-                                       if (pstat->qos_info & BIT(1))
-                                               pstat->uapsd_vi = BIT(0)|BIT(1);
-                                       else
-                                               pstat->uapsd_vi = 0;
-
-                                       if (pstat->qos_info & BIT(2))
-                                               pstat->uapsd_bk = BIT(0)|BIT(1);
-                                       else
-                                               pstat->uapsd_bk = 0;
-
-                                       if (pstat->qos_info & BIT(3))
-                                               pstat->uapsd_be = BIT(0)|BIT(1);
-                                       else
-                                               pstat->uapsd_be = 0;
-
-                                       break;
-                               }
-                       } else {
-                               break;
-                       }
-                       p = p + p[1] + 2;
-               }
-       }
-
-       /* save HT capabilities in the sta object */
-       memset(&pstat->htpriv.ht_cap, 0, sizeof(struct ieee80211_ht_cap));
-       p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pos, left);
-
-       if (p && p[1] >= sizeof(struct ieee80211_ht_cap)) {
-               pstat->flags |= WLAN_STA_HT;
-
-               pstat->flags |= WLAN_STA_WME;
-
-               memcpy(&pstat->htpriv.ht_cap, p + 2,
-                      sizeof(struct ieee80211_ht_cap));
-       } else
-               pstat->flags &= ~WLAN_STA_HT;
-
-       if (!pmlmepriv->htpriv.ht_option && pstat->flags & WLAN_STA_HT){
-               status = WLAN_STATUS_UNSPECIFIED_FAILURE;
-               goto OnAssocReq23aFail;
-       }
-
-       if (pstat->flags & WLAN_STA_HT &&
-           (pstat->wpa2_pairwise_cipher & WPA_CIPHER_TKIP ||
-            pstat->wpa_pairwise_cipher & WPA_CIPHER_TKIP)) {
-               DBG_8723A("HT: %pM tried to use TKIP with HT association\n",
-                         pstat->hwaddr);
-
-               /* status = WLAN_STATUS_CIPHER_REJECTED_PER_POLICY; */
-               /* goto OnAssocReq23aFail; */
-       }
-
-       pstat->flags |= WLAN_STA_NONERP;
-       for (i = 0; i < pstat->bssratelen; i++) {
-               if ((pstat->bssrateset[i] & 0x7f) > 22) {
-                       pstat->flags &= ~WLAN_STA_NONERP;
-                       break;
-               }
-       }
-
-       if (pstat->capability & WLAN_CAPABILITY_SHORT_PREAMBLE)
-               pstat->flags |= WLAN_STA_SHORT_PREAMBLE;
-       else
-               pstat->flags &= ~WLAN_STA_SHORT_PREAMBLE;
-
-       if (status != WLAN_STATUS_SUCCESS)
-               goto OnAssocReq23aFail;
-
-       /* TODO: identify_proprietary_vendor_ie(); */
-       /*  Realtek proprietary IE */
-       /*  identify if this is Broadcom sta */
-       /*  identify if this is ralink sta */
-       /*  Customer proprietary IE */
-
-       /* get a unique AID */
-       if (pstat->aid > 0) {
-               DBG_8723A("  old AID %d\n", pstat->aid);
-       } else {
-               for (pstat->aid = 1; pstat->aid <= NUM_STA; pstat->aid++)
-                       if (pstapriv->sta_aid[pstat->aid - 1] == NULL)
-                               break;
-
-               if (pstat->aid > NUM_STA)
-                       pstat->aid = NUM_STA;
-               if (pstat->aid > pstapriv->max_num_sta) {
-
-                       pstat->aid = 0;
-
-                       DBG_8723A("  no room for more AIDs\n");
-
-                       status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
-
-                       goto OnAssocReq23aFail;
-               } else {
-                       pstapriv->sta_aid[pstat->aid - 1] = pstat;
-                       DBG_8723A("allocate new AID = (%d)\n", pstat->aid);
-               }
-       }
-
-       pstat->state &= ~WIFI_FW_ASSOC_STATE;
-       pstat->state |= WIFI_FW_ASSOC_SUCCESS;
-
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (!list_empty(&pstat->auth_list)) {
-               list_del_init(&pstat->auth_list);
-               pstapriv->auth_list_cnt--;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       if (list_empty(&pstat->asoc_list)) {
-               pstat->expire_to = pstapriv->expire_to;
-               list_add_tail(&pstat->asoc_list, &pstapriv->asoc_list);
-               pstapriv->asoc_list_cnt++;
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       /*  now the station is qualified to join our BSS... */
-       if (pstat->state & WIFI_FW_ASSOC_SUCCESS &&
-           status == WLAN_STATUS_SUCCESS) {
-               /* 1 bss_cap_update & sta_info_update23a */
-               bss_cap_update_on_sta_join23a(padapter, pstat);
-               sta_info_update23a(padapter, pstat);
-
-               /* issue assoc rsp before notify station join event. */
-               if (ieee80211_is_assoc_req(mgmt->frame_control))
-                       issue_assocrsp(padapter, status, pstat,
-                                      IEEE80211_STYPE_ASSOC_RESP);
-               else
-                       issue_assocrsp(padapter, status, pstat,
-                                      IEEE80211_STYPE_REASSOC_RESP);
-
-               /* 2 - report to upper layer */
-               DBG_8723A("indicate_sta_join_event to upper layer - hostapd\n");
-               rtw_cfg80211_indicate_sta_assoc(padapter, pframe, pkt_len);
-
-               /* 3-(1) report sta add event */
-               report_add_sta_event23a(padapter, pstat->hwaddr, pstat->aid);
-       }
-
-       return _SUCCESS;
-
-asoc_class2_error:
-
-       issue_deauth23a(padapter, mgmt->sa, status);
-       return _FAIL;
-
-OnAssocReq23aFail:
-
-       pstat->aid = 0;
-       if (ieee80211_is_assoc_req(mgmt->frame_control))
-               issue_assocrsp(padapter, status, pstat,
-                              IEEE80211_STYPE_ASSOC_RESP);
-       else
-               issue_assocrsp(padapter, status, pstat,
-                              IEEE80211_STYPE_REASSOC_RESP);
-
-#endif /* CONFIG_8723AU_AP_MODE */
-
-       return _FAIL;
-}
-
-static int
-OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *pmgmt = (struct ieee80211_mgmt *) skb->data;
-       int res;
-       unsigned short status;
-       const u8 *p, *pie;
-       u8 *pframe = skb->data;
-       int pkt_len = skb->len;
-       int pielen;
-
-       DBG_8723A("%s\n", __func__);
-
-       /* check A1 matches or not */
-       if (!ether_addr_equal(myid(&padapter->eeprompriv), pmgmt->da))
-               return _SUCCESS;
-
-       if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
-               return _SUCCESS;
-
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS)
-               return _SUCCESS;
-
-       del_timer_sync(&pmlmeext->link_timer);
-
-       /* status */
-       status = le16_to_cpu(pmgmt->u.assoc_resp.status_code);
-       if (status > 0) {
-               DBG_8723A("assoc reject, status code: %d\n", status);
-               pmlmeinfo->state = MSR_NOLINK;
-               res = -4;
-               goto report_assoc_result;
-       }
-
-       /* get capabilities */
-       pmlmeinfo->capability = le16_to_cpu(pmgmt->u.assoc_resp.capab_info);
-
-       /* set slot time */
-       pmlmeinfo->slotTime = (pmlmeinfo->capability & BIT(10))? 9: 20;
-
-       /* AID */
-       res = pmlmeinfo->aid = le16_to_cpu(pmgmt->u.assoc_resp.aid) & 0x3fff;
-
-       pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
-       pielen = pkt_len -
-               offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
-
-       p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
-                            pmgmt->u.assoc_resp.variable, pielen);
-       if (p && p[1])
-               HT_caps_handler23a(padapter, p);
-
-       p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
-                            pmgmt->u.assoc_resp.variable, pielen);
-       if (p && p[1])
-               HT_info_handler23a(padapter, p);
-
-       p = cfg80211_find_ie(WLAN_EID_ERP_INFO,
-                            pmgmt->u.assoc_resp.variable, pielen);
-       if (p && p[1])
-               ERP_IE_handler23a(padapter, p);
-
-       pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
-       while (true) {
-               p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                           WLAN_OUI_TYPE_MICROSOFT_WMM,
-                                           pie, pframe + pkt_len - pie);
-               if (!p)
-                       break;
-
-               pie = p + p[1] + 2;
-               /* if this IE is too short, try the next */
-               if (p[1] <= 4)
-                       continue;
-               /* if this IE is WMM params, we found what we wanted */
-               if (p[6] == 1)
-                       break;
-       }
-
-       if (p && p[1])
-               WMM_param_handler23a(padapter, p);
-
-       pmlmeinfo->state &= ~WIFI_FW_ASSOC_STATE;
-       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-
-       /* Update Basic Rate Table for spec, 2010-12-28 , by thomas */
-       UpdateBrateTbl23a(padapter, pmlmeinfo->network.SupportedRates);
-
-report_assoc_result:
-       pmlmepriv->assoc_rsp_len = 0;
-       if (res > 0) {
-               kfree(pmlmepriv->assoc_rsp);
-               pmlmepriv->assoc_rsp = kmalloc(pkt_len, GFP_ATOMIC);
-               if (pmlmepriv->assoc_rsp) {
-                       memcpy(pmlmepriv->assoc_rsp, pframe, pkt_len);
-                       pmlmepriv->assoc_rsp_len = pkt_len;
-               }
-       } else
-               kfree(pmlmepriv->assoc_rsp);
-
-       report_join_res23a(padapter, res);
-
-       return _SUCCESS;
-}
-
-static int
-OnDeAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned short reason;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-
-       if (!ether_addr_equal(mgmt->bssid,
-                             get_my_bssid23a(&pmlmeinfo->network)))
-               return _SUCCESS;
-
-       reason = le16_to_cpu(mgmt->u.deauth.reason_code);
-
-       DBG_8723A("%s Reason code(%d)\n", __func__, reason);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               DBG_8723A_LEVEL(_drv_always_, "ap recv deauth reason code(%d) "
-                               "sta:%pM\n", reason, mgmt->sa);
-
-               psta = rtw_get_stainfo23a(pstapriv, mgmt->sa);
-               if (psta) {
-                       u8 updated = 0;
-
-                       spin_lock_bh(&pstapriv->asoc_list_lock);
-                       if (!list_empty(&psta->asoc_list)) {
-                               list_del_init(&psta->asoc_list);
-                               pstapriv->asoc_list_cnt--;
-                               updated = ap_free_sta23a(padapter, psta,
-                                                     false, reason);
-                       }
-                       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-                       associated_clients_update23a(padapter, updated);
-               }
-
-               return _SUCCESS;
-       } else
-#endif
-       {
-               DBG_8723A_LEVEL(_drv_always_, "sta recv deauth reason code(%d) "
-                               "sta:%pM\n", reason, mgmt->bssid);
-
-               receive_disconnect23a(padapter, mgmt->bssid, reason);
-       }
-       pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-
-       return _SUCCESS;
-}
-
-static int
-OnDisassoc23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       unsigned short reason;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-
-       if (!ether_addr_equal(mgmt->bssid,
-                             get_my_bssid23a(&pmlmeinfo->network)))
-               return _SUCCESS;
-
-       reason = le16_to_cpu(mgmt->u.disassoc.reason_code);
-
-       DBG_8723A("%s Reason code(%d)\n", __func__, reason);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               DBG_8723A_LEVEL(_drv_always_, "ap recv disassoc reason code(%d)"
-                               " sta:%pM\n", reason, mgmt->sa);
-
-               psta = rtw_get_stainfo23a(pstapriv, mgmt->sa);
-               if (psta) {
-                       u8 updated = 0;
-
-                       spin_lock_bh(&pstapriv->asoc_list_lock);
-                       if (!list_empty(&psta->asoc_list)) {
-                               list_del_init(&psta->asoc_list);
-                               pstapriv->asoc_list_cnt--;
-                               updated = ap_free_sta23a(padapter, psta,
-                                                        false, reason);
-                       }
-                       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-                       associated_clients_update23a(padapter, updated);
-               }
-
-               return _SUCCESS;
-       } else
-#endif
-       {
-               DBG_8723A_LEVEL(_drv_always_, "ap recv disassoc reason "
-                               "code(%d) sta:%pM\n", reason, mgmt->bssid);
-
-               receive_disconnect23a(padapter, mgmt->bssid, reason);
-       }
-       pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-       return _SUCCESS;
-}
-
-static int
-OnAtim23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       DBG_8723A("%s\n", __func__);
-       return _SUCCESS;
-}
-
-static int
-on_action_spct23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _FAIL;
-}
-
-static int
-OnAction23a_qos(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-static int
-OnAction23a_dls(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-static int OnAction23a_back23a(struct rtw_adapter *padapter,
-                              struct recv_frame *precv_frame)
-{
-       u8 *addr;
-       struct sta_info *psta = NULL;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       unsigned char category, action;
-       unsigned short tid, status, capab, params, reason_code = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       /* check RA matches or not */
-       if (!ether_addr_equal(myid(&padapter->eeprompriv), mgmt->da))
-               return _SUCCESS;
-
-       DBG_8723A("%s\n", __func__);
-
-       if ((pmlmeinfo->state&0x03) != MSR_AP)
-               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
-                       return _SUCCESS;
-
-       addr = mgmt->sa;
-       psta = rtw_get_stainfo23a(pstapriv, addr);
-
-       if (!psta)
-               return _SUCCESS;
-
-       category = mgmt->u.action.category;
-       if (category == WLAN_CATEGORY_BACK) { /*  representing Block Ack */
-               if (!pmlmeinfo->HT_enable)
-                       return _SUCCESS;
-               /* action_code is located in the same place for all
-                  action events, so pick any */
-               action = mgmt->u.action.u.wme_action.action_code;
-               DBG_8723A("%s, action =%d\n", __func__, action);
-               switch (action) {
-               case WLAN_ACTION_ADDBA_REQ: /* ADDBA request */
-                       memcpy(&pmlmeinfo->ADDBA_req,
-                              &mgmt->u.action.u.addba_req.dialog_token,
-                              sizeof(struct ADDBA_request));
-                       process_addba_req23a(padapter,
-                                            (u8 *)&pmlmeinfo->ADDBA_req, addr);
-                       if (pmlmeinfo->bAcceptAddbaReq == true)
-                               issue_action_BA23a(padapter, addr,
-                                                  WLAN_ACTION_ADDBA_RESP, 0);
-                       else {
-                               /* reject ADDBA Req */
-                               issue_action_BA23a(padapter, addr,
-                                                  WLAN_ACTION_ADDBA_RESP, 37);
-                       }
-                       break;
-               case WLAN_ACTION_ADDBA_RESP: /* ADDBA response */
-                       status = get_unaligned_le16(
-                               &mgmt->u.action.u.addba_resp.status);
-                       capab = get_unaligned_le16(
-                               &mgmt->u.action.u.addba_resp.capab);
-                       tid = (capab & IEEE80211_ADDBA_PARAM_TID_MASK) >> 2;
-                       if (status == 0) {      /* successful */
-                               DBG_8723A("agg_enable for TID =%d\n", tid);
-                               psta->htpriv.agg_enable_bitmap |= BIT(tid);
-                               psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-                       } else
-                               psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                       break;
-
-               case WLAN_ACTION_DELBA: /* DELBA */
-                       params = get_unaligned_le16(
-                               &mgmt->u.action.u.delba.params);
-                       tid = params >> 12;
-
-                       if (params & IEEE80211_DELBA_PARAM_INITIATOR_MASK) {
-                               preorder_ctrl = &psta->recvreorder_ctrl[tid];
-                               preorder_ctrl->enable = false;
-                               preorder_ctrl->indicate_seq = 0xffff;
-                       } else {
-                               psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                               psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-                       }
-                       reason_code = get_unaligned_le16(
-                               &mgmt->u.action.u.delba.reason_code);
-                       /* todo: how to notify the host while receiving
-                          DELETE BA */
-                       break;
-               default:
-                       break;
-               }
-       }
-       return _SUCCESS;
-}
-
-static int on_action_public23a(struct rtw_adapter *padapter,
-                              struct recv_frame *precv_frame)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       u8 *pframe = skb->data;
-       int freq, channel;
-
-       /* check RA matches or not */
-       if (!ether_addr_equal(myid(&padapter->eeprompriv), hdr->addr1))
-               return _FAIL;
-
-       channel = rtw_get_oper_ch23a(padapter);
-
-       if (channel <= RTW_CH_MAX_2G_CHANNEL)
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_2GHZ);
-       else
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_5GHZ);
-
-       if (cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pframe,
-                            skb->len, 0))
-               return _SUCCESS;
-
-       return _FAIL;
-}
-
-static int
-OnAction23a_ht(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-static int
-OnAction23a_wmm(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-static int
-OnAction23a_p2p(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-static int
-OnAction23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
-{
-       int i;
-       u8 category;
-       struct action_handler *ptable;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-
-       category = mgmt->u.action.category;
-
-       for (i = 0; i < ARRAY_SIZE(OnAction23a_tbl); i++) {
-               ptable = &OnAction23a_tbl[i];
-
-               if (category == ptable->num)
-                       ptable->func(padapter, precv_frame);
-       }
-
-       return _SUCCESS;
-}
-
-static int DoReserved23a(struct rtw_adapter *padapter,
-                        struct recv_frame *precv_frame)
-{
-       return _SUCCESS;
-}
-
-struct xmit_frame *alloc_mgtxmitframe23a(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_frame *pmgntframe;
-       struct xmit_buf *pxmitbuf;
-
-       pmgntframe = rtw_alloc_xmitframe23a_ext(pxmitpriv);
-
-       if (!pmgntframe) {
-               DBG_8723A("%s(%s): alloc xmitframe fail\n", __func__,
-                         pxmitpriv->adapter->pnetdev->name);
-               goto exit;
-       }
-
-       pxmitbuf = rtw_alloc_xmitbuf23a_ext(pxmitpriv);
-       if (!pxmitbuf) {
-               DBG_8723A("%s(%s): alloc xmitbuf fail\n", __func__,
-                         pxmitpriv->adapter->pnetdev->name);
-               rtw_free_xmitframe23a(pxmitpriv, pmgntframe);
-               pmgntframe = NULL;
-               goto exit;
-       }
-
-       pmgntframe->frame_tag = MGNT_FRAMETAG;
-       pmgntframe->pxmitbuf = pxmitbuf;
-       pmgntframe->buf_addr = pxmitbuf->pbuf;
-       pxmitbuf->priv_data = pmgntframe;
-
-exit:
-       return pmgntframe;
-}
-
-/****************************************************************************
-
-Following are some TX functions for WiFi MLME
-
-*****************************************************************************/
-
-void update_mgnt_tx_rate23a(struct rtw_adapter *padapter, u8 rate)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       pmlmeext->tx_rate = rate;
-       DBG_8723A("%s(): rate = %x\n", __func__, rate);
-}
-
-void update_mgntframe_attrib23a(struct rtw_adapter *padapter,
-                               struct pkt_attrib *pattrib)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       memset((u8 *)pattrib, 0, sizeof(struct pkt_attrib));
-
-       pattrib->hdrlen = 24;
-       pattrib->nr_frags = 1;
-       pattrib->priority = 7;
-       pattrib->mac_id = 0;
-       pattrib->qsel = 0x12;
-
-       pattrib->pktlen = 0;
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-               pattrib->raid = 6;/* b mode */
-       else
-               pattrib->raid = 5;/* a/g mode */
-
-       pattrib->encrypt = 0;
-       pattrib->bswenc = false;
-
-       pattrib->qos_en = false;
-       pattrib->ht_en = false;
-       pattrib->bwmode = HT_CHANNEL_WIDTH_20;
-       pattrib->ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       pattrib->sgi = false;
-
-       pattrib->seqnum = pmlmeext->mgnt_seq;
-
-       pattrib->retry_ctrl = true;
-}
-
-void dump_mgntframe23a(struct rtw_adapter *padapter,
-                      struct xmit_frame *pmgntframe)
-{
-       if (padapter->bSurpriseRemoved == true ||
-           padapter->bDriverStopped == true)
-               return;
-
-       rtl8723au_mgnt_xmit(padapter, pmgntframe);
-}
-
-int dump_mgntframe23a_and_wait(struct rtw_adapter *padapter,
-                              struct xmit_frame *pmgntframe, int timeout_ms)
-{
-       int ret = _FAIL;
-       unsigned long irqL;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct xmit_buf *pxmitbuf = pmgntframe->pxmitbuf;
-       struct submit_ctx sctx;
-
-       if (padapter->bSurpriseRemoved == true ||
-           padapter->bDriverStopped == true)
-               return ret;
-
-       rtw_sctx_init23a(&sctx, timeout_ms);
-       pxmitbuf->sctx = &sctx;
-
-       ret = rtl8723au_mgnt_xmit(padapter, pmgntframe);
-
-       if (ret == _SUCCESS)
-               ret = rtw_sctx_wait23a(&sctx);
-
-       spin_lock_irqsave(&pxmitpriv->lock_sctx, irqL);
-       pxmitbuf->sctx = NULL;
-       spin_unlock_irqrestore(&pxmitpriv->lock_sctx, irqL);
-
-       return ret;
-}
-
-int dump_mgntframe23a_and_wait_ack23a(struct rtw_adapter *padapter,
-                                     struct xmit_frame *pmgntframe)
-{
-       int ret = _FAIL;
-       u32 timeout_ms = 500;/*   500ms */
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       if (padapter->bSurpriseRemoved == true ||
-           padapter->bDriverStopped == true)
-               return _FAIL;
-
-       mutex_lock(&pxmitpriv->ack_tx_mutex);
-       pxmitpriv->ack_tx = true;
-
-       pmgntframe->ack_report = 1;
-       if (rtl8723au_mgnt_xmit(padapter, pmgntframe) == _SUCCESS)
-               ret = rtw_ack_tx_wait23a(pxmitpriv, timeout_ms);
-
-       pxmitpriv->ack_tx = false;
-       mutex_unlock(&pxmitpriv->ack_tx_mutex);
-
-       return ret;
-}
-
-static int update_hidden_ssid(u8 *ies, u32 ies_len, u8 hidden_ssid_mode)
-{
-       u8 *ssid_ie;
-       int ssid_len_ori;
-       int len_diff = 0;
-       u8 *next_ie;
-       u32 remain_len;
-
-       ssid_ie = rtw_get_ie23a(ies,  WLAN_EID_SSID, &ssid_len_ori, ies_len);
-
-       /* DBG_8723A("%s hidden_ssid_mode:%u, ssid_ie:%p, ssid_len_ori:%d\n",
-          __func__, hidden_ssid_mode, ssid_ie, ssid_len_ori); */
-
-       if (ssid_ie && ssid_len_ori > 0) {
-               switch (hidden_ssid_mode) {
-               case 1:
-                       next_ie = ssid_ie + 2 + ssid_len_ori;
-                       remain_len = ies_len -(next_ie-ies);
-
-                       ssid_ie[1] = 0;
-                       memcpy(ssid_ie+2, next_ie, remain_len);
-                       len_diff -= ssid_len_ori;
-
-                       break;
-               case 2:
-                       memset(&ssid_ie[2], 0, ssid_len_ori);
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       return len_diff;
-}
-
-void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_mgmt *mgmt;
-       unsigned int rate_len;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-       const u8 *wps_ie;
-       u8 sr = 0;
-       int len_diff;
-
-       /* DBG_8723A("%s\n", __func__); */
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe) {
-               DBG_8723A("%s, alloc mgnt frame fail\n", __func__);
-               return;
-       }
-#ifdef CONFIG_8723AU_AP_MODE
-       spin_lock_bh(&pmlmepriv->bcn_update_lock);
-#endif
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->qsel = 0x10;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON);
-       mgmt->seq_ctrl = 0;
-
-       ether_addr_copy(mgmt->da, bc_addr);
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(cur_network));
-
-       /* timestamp will be inserted by hardware */
-
-       put_unaligned_le16(cur_network->beacon_interval,
-                          &mgmt->u.beacon.beacon_int);
-
-       put_unaligned_le16(cur_network->capability,
-                          &mgmt->u.beacon.capab_info);
-
-       pframe = mgmt->u.beacon.variable;
-       pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
-
-       if ((pmlmeinfo->state & 0x03) == MSR_AP) {
-               u8 *iebuf;
-               int buflen;
-               /* DBG_8723A("ie len =%d\n", cur_network->IELength); */
-               memcpy(pframe, cur_network->IEs, cur_network->IELength);
-               len_diff = update_hidden_ssid(pframe, cur_network->IELength,
-                                             pmlmeinfo->hidden_ssid_mode);
-               pframe += (cur_network->IELength+len_diff);
-               pattrib->pktlen += (cur_network->IELength+len_diff);
-
-               iebuf = mgmt->u.beacon.variable;
-               buflen = pattrib->pktlen -
-                       offsetof(struct ieee80211_mgmt, u.beacon.variable);
-               wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                                WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                                iebuf, buflen);
-
-               if (wps_ie && wps_ie[1] > 0) {
-                       rtw_get_wps_attr_content23a(wps_ie, wps_ie[1],
-                                                   WPS_ATTR_SELECTED_REGISTRAR,
-                                                   (u8 *)&sr);
-               }
-               if (sr != 0)
-                       set_fwstate(pmlmepriv, WIFI_UNDER_WPS);
-               else
-                       _clr_fwstate_(pmlmepriv, WIFI_UNDER_WPS);
-
-               goto _issue_bcn;
-       }
-
-       /*  SSID */
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID,
-                              cur_network->Ssid.ssid_len,
-                              cur_network->Ssid.ssid, &pattrib->pktlen);
-
-       /*  supported rates... */
-       rate_len = rtw_get_rateset_len23a(cur_network->SupportedRates);
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,
-                              ((rate_len > 8)? 8: rate_len),
-                              cur_network->SupportedRates, &pattrib->pktlen);
-
-       /*  DS parameter set */
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *)
-                              &cur_network->DSConfig, &pattrib->pktlen);
-
-       /* if ((pmlmeinfo->state&0x03) == MSR_ADHOC) */
-       {
-               u8 erpinfo = 0;
-               u32 ATIMWindow;
-               /*  IBSS Parameter Set... */
-               /* ATIMWindow = cur->ATIMWindow; */
-               ATIMWindow = 0;
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_IBSS_PARAMS, 2,
-                                      (unsigned char *)&ATIMWindow,
-                                      &pattrib->pktlen);
-
-               /* ERP IE */
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_ERP_INFO, 1,
-                                      &erpinfo, &pattrib->pktlen);
-       }
-
-       /*  EXTERNDED SUPPORTED RATE */
-       if (rate_len > 8)
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                      rate_len - 8,
-                                      cur_network->SupportedRates + 8,
-                                      &pattrib->pktlen);
-
-       /* todo:HT for adhoc */
-
-_issue_bcn:
-
-#ifdef CONFIG_8723AU_AP_MODE
-       pmlmepriv->update_bcn = false;
-
-       spin_unlock_bh(&pmlmepriv->bcn_update_lock);
-#endif
-
-       if ((pattrib->pktlen + TXDESC_SIZE) > 512) {
-               DBG_8723A("beacon frame too large\n");
-               return;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       /* DBG_8723A("issue bcn_sz =%d\n", pattrib->last_txcmdsz); */
-       if (timeout_ms > 0)
-               dump_mgntframe23a_and_wait(padapter, pmgntframe, timeout_ms);
-       else
-               dump_mgntframe23a(padapter, pmgntframe);
-}
-
-static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_mgmt *mgmt;
-       unsigned char *mac, *bssid;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-#ifdef CONFIG_8723AU_AP_MODE
-       const u8 *pwps_ie;
-       u8 *ssid_ie;
-       int ssid_ielen;
-       int ssid_ielen_diff;
-       u8 buf[MAX_IE_SZ];
-#endif
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       unsigned int rate_len;
-
-       /* DBG_8723A("%s\n", __func__); */
-
-       if (cur_network->IELength > MAX_IE_SZ)
-               return;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe) {
-               DBG_8723A("%s, alloc mgnt frame fail\n", __func__);
-               return;
-       }
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET;
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-       bssid = cur_network->MacAddress;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP);
-
-       ether_addr_copy(mgmt->da, da);
-       ether_addr_copy(mgmt->sa, mac);
-       ether_addr_copy(mgmt->bssid, bssid);
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-
-       /* timestamp will be inserted by hardware */
-       put_unaligned_le16(cur_network->beacon_interval,
-                          &mgmt->u.probe_resp.beacon_int);
-
-       put_unaligned_le16(cur_network->capability,
-                          &mgmt->u.probe_resp.capab_info);
-
-       pframe = mgmt->u.probe_resp.variable;
-       pattrib->pktlen =
-               offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
-
-       /* below for ad-hoc mode */
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if ((pmlmeinfo->state & 0x03) == MSR_AP) {
-               pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                                 WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                                 cur_network->IEs,
-                                                 cur_network->IELength);
-
-               memcpy(pframe, cur_network->IEs, cur_network->IELength);
-               pframe += cur_network->IELength;
-               pattrib->pktlen += cur_network->IELength;
-
-               /* retrieve SSID IE from cur_network->Ssid */
-
-               ssid_ie = rtw_get_ie23a(mgmt->u.probe_resp.variable,
-                                       WLAN_EID_SSID, &ssid_ielen,
-                                       pframe - mgmt->u.probe_resp.variable);
-
-               ssid_ielen_diff = cur_network->Ssid.ssid_len - ssid_ielen;
-
-               if (ssid_ie && cur_network->Ssid.ssid_len) {
-                       uint remainder_ielen;
-                       u8 *remainder_ie;
-
-                       remainder_ie = ssid_ie + 2;
-
-                       remainder_ielen = pframe - remainder_ie;
-
-                       DBG_8723A_LEVEL(_drv_warning_, "%s(%s): "
-                                       "remainder_ielen > MAX_IE_SZ\n",
-                                       __func__, padapter->pnetdev->name);
-                       if (remainder_ielen > MAX_IE_SZ)
-                               remainder_ielen = MAX_IE_SZ;
-
-                       memcpy(buf, remainder_ie, remainder_ielen);
-                       memcpy(remainder_ie + ssid_ielen_diff, buf,
-                              remainder_ielen);
-                       *(ssid_ie + 1) = cur_network->Ssid.ssid_len;
-                       memcpy(ssid_ie + 2, cur_network->Ssid.ssid,
-                              cur_network->Ssid.ssid_len);
-
-                       pframe += ssid_ielen_diff;
-                       pattrib->pktlen += ssid_ielen_diff;
-               }
-       } else
-#endif
-       {
-               /*  SSID */
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID,
-                                      cur_network->Ssid.ssid_len,
-                                      cur_network->Ssid.ssid,
-                                      &pattrib->pktlen);
-
-               /*  supported rates... */
-               rate_len = rtw_get_rateset_len23a(cur_network->SupportedRates);
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,
-                                      ((rate_len > 8)? 8: rate_len),
-                                      cur_network->SupportedRates,
-                                      &pattrib->pktlen);
-
-               /*  DS parameter set */
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_DS_PARAMS, 1,
-                                      (unsigned char *)&cur_network->DSConfig,
-                                      &pattrib->pktlen);
-
-               if ((pmlmeinfo->state & 0x03) == MSR_ADHOC) {
-                       u8 erpinfo = 0;
-                       u32 ATIMWindow;
-                       /*  IBSS Parameter Set... */
-                       /* ATIMWindow = cur->ATIMWindow; */
-                       ATIMWindow = 0;
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_IBSS_PARAMS, 2,
-                                              (unsigned char *)&ATIMWindow,
-                                              &pattrib->pktlen);
-
-                       /* ERP IE */
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_ERP_INFO, 1,
-                                              &erpinfo, &pattrib->pktlen);
-               }
-
-               /*  EXTERNDED SUPPORTED RATE */
-               if (rate_len > 8)
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                              rate_len - 8,
-                                              cur_network->SupportedRates + 8,
-                                              &pattrib->pktlen);
-
-               /* todo:HT for adhoc */
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe23a(padapter, pmgntframe);
-}
-
-static int _issue_probereq(struct rtw_adapter *padapter,
-                          struct cfg80211_ssid *pssid, u8 *da, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       unsigned char *mac;
-       unsigned char bssrate[NumRates];
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       int bssrate_len = 0;
-       u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                "+%s\n", __func__);
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-
-       pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
-                                             IEEE80211_STYPE_PROBE_REQ);
-
-       if (da) {
-               /*      unicast probe request frame */
-               ether_addr_copy(pwlanhdr->addr1, da);
-               ether_addr_copy(pwlanhdr->addr3, da);
-       } else {
-               /*      broadcast probe request frame */
-               ether_addr_copy(pwlanhdr->addr1, bc_addr);
-               ether_addr_copy(pwlanhdr->addr3, bc_addr);
-       }
-
-       ether_addr_copy(pwlanhdr->addr2, mac);
-
-       pwlanhdr->seq_ctrl =
-               cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-
-       pmlmeext->mgnt_seq++;
-
-       pframe += sizeof (struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof (struct ieee80211_hdr_3addr);
-
-       if (pssid)
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID, pssid->ssid_len,
-                                      pssid->ssid, &pattrib->pktlen);
-       else
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID, 0, NULL,
-                                      &pattrib->pktlen);
-
-       get_rate_set23a(padapter, bssrate, &bssrate_len);
-
-       if (bssrate_len > 8) {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES, 8,
-                                      bssrate, &pattrib->pktlen);
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                      (bssrate_len - 8), (bssrate + 8),
-                                      &pattrib->pktlen);
-       } else {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,
-                                      bssrate_len, bssrate, &pattrib->pktlen);
-       }
-
-       /* add wps_ie for wps2.0 */
-       if (pmlmepriv->wps_probe_req_ie_len>0 && pmlmepriv->wps_probe_req_ie) {
-               memcpy(pframe, pmlmepriv->wps_probe_req_ie,
-                      pmlmepriv->wps_probe_req_ie_len);
-               pframe += pmlmepriv->wps_probe_req_ie_len;
-               pattrib->pktlen += pmlmepriv->wps_probe_req_ie_len;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                "issuing probe_req, tx_len =%d\n", pattrib->last_txcmdsz);
-
-       if (wait_ack) {
-               ret = dump_mgntframe23a_and_wait_ack23a(padapter, pmgntframe);
-       } else {
-               dump_mgntframe23a(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-static inline void issue_probereq(struct rtw_adapter *padapter,
-                                 struct cfg80211_ssid *pssid, u8 *da)
-{
-       _issue_probereq(padapter, pssid, da, false);
-}
-
-static int issue_probereq_ex(struct rtw_adapter *padapter,
-                            struct cfg80211_ssid *pssid, u8 *da,
-                            int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       unsigned long start = jiffies;
-
-       do {
-               ret = _issue_probereq(padapter, pssid, da,
-                                     wait_ms > 0 ? true : false);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-
-       } while((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-
-       if (try_cnt && wait_ms) {
-               if (da)
-                       DBG_8723A("%s(%s): to %pM, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 da, rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-               else
-                       DBG_8723A("%s(%s):, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-       }
-exit:
-       return ret;
-}
-
-/*  if psta == NULL, indiate we are station(client) now... */
-static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
-                      unsigned short status)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_mgmt *mgmt;
-       unsigned int val32;
-       u16 auth_algo;
-       int use_shared_key = 0;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH);
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.auth.variable);
-
-       if (psta) { /*  for AP mode */
-#ifdef CONFIG_8723AU_AP_MODE
-               unsigned short val16;
-
-               ether_addr_copy(mgmt->da, psta->hwaddr);
-               ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-               ether_addr_copy(mgmt->bssid, myid(&padapter->eeprompriv));
-
-               /*  setting auth algo number */
-               val16 = (u16)psta->authalg;
-
-               if (status != WLAN_STATUS_SUCCESS)
-                       val16 = 0;
-
-               if (val16)
-                       use_shared_key = 1;
-
-               mgmt->u.auth.auth_alg = cpu_to_le16(val16);
-
-               /*  setting auth seq number */
-               mgmt->u.auth.auth_transaction =
-                       cpu_to_le16((u16)psta->auth_seq);
-
-               /*  setting status code... */
-               mgmt->u.auth.status_code = cpu_to_le16(status);
-
-               pframe = mgmt->u.auth.variable;
-               /*  added challenging text... */
-               if ((psta->auth_seq == 2) &&
-                   (psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1))
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_CHALLENGE, 128,
-                                              psta->chg_txt, &pattrib->pktlen);
-#endif
-       } else {
-               struct ieee80211_mgmt *iv_mgmt;
-
-               ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network));
-               ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-               ether_addr_copy(mgmt->bssid,
-                               get_my_bssid23a(&pmlmeinfo->network));
-
-               /*  setting auth algo number */
-               /*  0:OPEN System, 1:Shared key */
-               if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) {
-                       use_shared_key = 1;
-                       auth_algo = WLAN_AUTH_SHARED_KEY;
-               } else
-                       auth_algo = WLAN_AUTH_OPEN;
-
-               /* DBG_8723A("%s auth_algo = %s auth_seq =%d\n", __func__,
-                  (pmlmeinfo->auth_algo == 0)?"OPEN":"SHARED",
-                  pmlmeinfo->auth_seq); */
-
-               /* setting IV for auth seq #3 */
-               if ((pmlmeinfo->auth_seq == 3) &&
-                   (pmlmeinfo->state & WIFI_FW_AUTH_STATE) &&
-                   (use_shared_key == 1)) {
-                       u32 *piv = (u32 *)&mgmt->u.auth;
-
-                       iv_mgmt = (struct ieee80211_mgmt *)(pframe + 4);
-                       /* DBG_8723A("==> iv(%d), key_index(%d)\n",
-                          pmlmeinfo->iv, pmlmeinfo->key_index); */
-                       val32 = (pmlmeinfo->iv & 0x3fffffff) |
-                               (pmlmeinfo->key_index << 30);
-                       pmlmeinfo->iv++;
-                       put_unaligned_le32(val32, piv);
-
-                       pattrib->pktlen += 4;
-
-                       pattrib->iv_len = IEEE80211_WEP_IV_LEN;
-               } else
-                       iv_mgmt = mgmt;
-
-               iv_mgmt->u.auth.auth_alg = cpu_to_le16(auth_algo);
-
-               /*  setting auth seq number */
-               iv_mgmt->u.auth.auth_transaction =
-                       cpu_to_le16(pmlmeinfo->auth_seq);
-
-               /*  setting status code... */
-               iv_mgmt->u.auth.status_code = cpu_to_le16(status);
-
-               pframe = iv_mgmt->u.auth.variable;
-
-               /*  then checking to see if sending challenging text... */
-               if ((pmlmeinfo->auth_seq == 3) &&
-                   (pmlmeinfo->state & WIFI_FW_AUTH_STATE) &&
-                   (use_shared_key == 1)) {
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_CHALLENGE, 128,
-                                              pmlmeinfo->chg_txt,
-                                              &pattrib->pktlen);
-
-                       mgmt->frame_control |=
-                               cpu_to_le16(IEEE80211_FCTL_PROTECTED);
-
-                       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-
-                       pattrib->encrypt = WLAN_CIPHER_SUITE_WEP40;
-
-                       pattrib->icv_len = IEEE80211_WEP_ICV_LEN;
-
-                       pattrib->pktlen += pattrib->icv_len;
-               }
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       rtw_wep_encrypt23a(padapter, pmgntframe);
-       DBG_8723A("%s\n", __func__);
-       dump_mgntframe23a(padapter, pmgntframe);
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status,
-                          struct sta_info *pstat, u16 pkt_type)
-{
-       struct xmit_frame *pmgntframe;
-       struct ieee80211_mgmt *mgmt;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       const u8 *p;
-       u8 *ie = pnetwork->IEs;
-
-       DBG_8723A("%s\n", __func__);
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | pkt_type);
-
-       ether_addr_copy(mgmt->da, pstat->hwaddr);
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-
-       pmlmeext->mgnt_seq++;
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen =
-               offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
-
-       mgmt->u.assoc_resp.capab_info = cpu_to_le16(pnetwork->capability);
-       mgmt->u.assoc_resp.status_code = cpu_to_le16(status);
-       mgmt->u.assoc_resp.aid = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
-
-       pframe = mgmt->u.assoc_resp.variable;
-
-       if (pstat->bssratelen <= 8) {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,
-                                      pstat->bssratelen, pstat->bssrateset,
-                                      &pattrib->pktlen);
-       } else {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES, 8,
-                                      pstat->bssrateset, &pattrib->pktlen);
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                      pstat->bssratelen - 8,
-                                      pstat->bssrateset + 8, &pattrib->pktlen);
-       }
-
-       if (pstat->flags & WLAN_STA_HT && pmlmepriv->htpriv.ht_option) {
-               /* FILL HT CAP INFO IE */
-               /* p = hostapd_eid_ht_capabilities_info(hapd, p); */
-               p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, ie,
-                                    pnetwork->IELength);
-               if (p && p[1]) {
-                       memcpy(pframe, p, p[1] + 2);
-                       pframe += (p[1] + 2);
-                       pattrib->pktlen += (p[1] + 2);
-               }
-
-               /* FILL HT ADD INFO IE */
-               /* p = hostapd_eid_ht_operation(hapd, p); */
-               p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, ie,
-                                    pnetwork->IELength);
-               if (p && p[1] > 0) {
-                       memcpy(pframe, p, p[1] + 2);
-                       pframe += (p[1] + 2);
-                       pattrib->pktlen += (p[1] + 2);
-               }
-       }
-
-       /* FILL WMM IE */
-       if (pstat->flags & WLAN_STA_WME && pmlmepriv->qos_option) {
-               unsigned char WMM_PARA_IE[] = {0x00, 0x50, 0xf2, 0x02,
-                                              0x01, 0x01};
-               int ie_len = 0;
-
-               for (p = ie; ; p += (ie_len + 2)) {
-                       p = cfg80211_find_ie(WLAN_EID_VENDOR_SPECIFIC, p,
-                                            pnetwork->IELength - (ie_len + 2));
-                       if (p)
-                               ie_len = p[1];
-                       else
-                               ie_len = 0;
-                       if (p && !memcmp(p + 2, WMM_PARA_IE, 6)) {
-                               memcpy(pframe, p, ie_len + 2);
-                               pframe += (ie_len + 2);
-                               pattrib->pktlen += (ie_len + 2);
-
-                               break;
-                       }
-
-                       if (!p || ie_len == 0)
-                               break;
-               }
-       }
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK) {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_VENDOR_SPECIFIC, 6,
-                                      REALTEK_96B_IE, &pattrib->pktlen);
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe23a(padapter, pmgntframe);
-}
-#endif
-
-static void issue_assocreq(struct rtw_adapter *padapter)
-{
-       int ret = _FAIL;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       const u8 *p;
-       struct ieee80211_mgmt *mgmt;
-       unsigned int i, j, index = 0;
-       unsigned char rf_type, bssrate[NumRates], sta_bssrate[NumRates];
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       int bssrate_len = 0, sta_bssrate_len = 0, pie_len;
-       u8 *pie;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET;
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ASSOC_REQ);
-
-       ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network));
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       /* caps */
-       put_unaligned_le16(pmlmeinfo->network.capability,
-                          &mgmt->u.assoc_req.capab_info);
-       /* todo: listen interval for power saving */
-       put_unaligned_le16(3, &mgmt->u.assoc_req.listen_interval);
-
-       pframe = mgmt->u.assoc_req.variable;
-       pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.assoc_req.variable);
-
-       /* SSID */
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID,
-                              pmlmeinfo->network.Ssid.ssid_len,
-                              pmlmeinfo->network.Ssid.ssid, &pattrib->pktlen);
-
-       /* supported rate & extended supported rate */
-
-       get_rate_set23a(padapter, sta_bssrate, &sta_bssrate_len);
-       /* DBG_8723A("sta_bssrate_len =%d\n", sta_bssrate_len); */
-
-       /*  for JAPAN, channel 14 can only uses B Mode(CCK) */
-       if (pmlmeext->cur_channel == 14)
-               sta_bssrate_len = 4;
-
-       /* for (i = 0; i < sta_bssrate_len; i++) { */
-       /*      DBG_8723A("sta_bssrate[%d]=%02X\n", i, sta_bssrate[i]); */
-       /*  */
-
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               if (pmlmeinfo->network.SupportedRates[i] == 0)
-                       break;
-               DBG_8723A("network.SupportedRates[%d]=%02X\n", i,
-                         pmlmeinfo->network.SupportedRates[i]);
-       }
-
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               if (pmlmeinfo->network.SupportedRates[i] == 0)
-                       break;
-
-               /*  Check if the AP's supported rates are also
-                   supported by STA. */
-               for (j = 0; j < sta_bssrate_len; j++) {
-                        /*  Avoid the proprietary data rate (22Mbps) of
-                            Handlink WSG-4000 AP */
-                       if ((pmlmeinfo->network.SupportedRates[i] |
-                            IEEE80211_BASIC_RATE_MASK) ==
-                           (sta_bssrate[j] | IEEE80211_BASIC_RATE_MASK)) {
-                               /* DBG_8723A("match i = %d, j =%d\n", i, j); */
-                               break;
-                       }
-               }
-
-               if (j == sta_bssrate_len) {
-                       /*  the rate is not supported by STA */
-                       DBG_8723A("%s(): the rate[%d]=%02X is not supported by "
-                                 "STA!\n", __func__, i,
-                                 pmlmeinfo->network.SupportedRates[i]);
-               } else {
-                       /*  the rate is supported by STA */
-                       bssrate[index++] = pmlmeinfo->network.SupportedRates[i];
-               }
-       }
-
-       bssrate_len = index;
-       DBG_8723A("bssrate_len = %d\n", bssrate_len);
-
-       if (bssrate_len == 0) {
-               rtw_free_xmitbuf23a(pxmitpriv, pmgntframe->pxmitbuf);
-               rtw_free_xmitframe23a(pxmitpriv, pmgntframe);
-               goto exit; /* don't connect to AP if no joint supported rate */
-       }
-
-       if (bssrate_len > 8) {
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES, 8,
-                                      bssrate, &pattrib->pktlen);
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                      (bssrate_len - 8), (bssrate + 8),
-                                      &pattrib->pktlen);
-       } else
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,
-                                      bssrate_len, bssrate, &pattrib->pktlen);
-
-       /* RSN */
-
-       pie = pmlmeinfo->network.IEs;
-       pie_len = pmlmeinfo->network.IELength;
-
-       p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
-       if (p)
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_RSN, p[1], p + 2,
-                                      &pattrib->pktlen);
-
-       /* HT caps */
-       if (padapter->mlmepriv.htpriv.ht_option) {
-               p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len);
-
-               if (p && !is_ap_in_tkip23a(padapter)) {
-                       struct ieee80211_ht_cap *cap = &pmlmeinfo->ht_cap;
-
-                       memcpy(cap, p + 2, sizeof(struct ieee80211_ht_cap));
-
-                       /* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
-                       if (pregpriv->cbw40_enable == 0) {
-                               cap->cap_info &= ~cpu_to_le16(
-                                       IEEE80211_HT_CAP_SGI_40 |
-                                       IEEE80211_HT_CAP_SUP_WIDTH_20_40);
-                       } else {
-                               cap->cap_info |= cpu_to_le16(
-                                       IEEE80211_HT_CAP_SUP_WIDTH_20_40);
-                       }
-
-                       /* todo: disable SM power save mode */
-                       cap->cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SM_PS);
-
-                       rf_type = rtl8723a_get_rf_type(padapter);
-                       /* switch (pregpriv->rf_config) */
-                       switch (rf_type) {
-                       case RF_1T1R:
-                               /* RX STBC One spatial stream */
-                               if (pregpriv->rx_stbc)
-                                       cap->cap_info |= cpu_to_le16(1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
-
-                               memcpy(&cap->mcs, MCS_rate_1R23A, 16);
-                               break;
-
-                       case RF_2T2R:
-                       case RF_1T2R:
-                       default:
-                               /* enable for 2.4/5 GHz */
-                               if (pregpriv->rx_stbc == 0x3 ||
-                                   (pmlmeext->cur_wireless_mode &
-                                    WIRELESS_11_24N &&
-                                    /* enable for 2.4GHz */
-                                    pregpriv->rx_stbc == 0x1) ||
-                                   (pmlmeext->cur_wireless_mode &
-                                    WIRELESS_11_5N &&
-                                    pregpriv->rx_stbc == 0x2) ||
-                                   /* enable for 5GHz */
-                                   pregpriv->wifi_spec == 1) {
-                                       DBG_8723A("declare supporting RX "
-                                                 "STBC\n");
-                                       /* RX STBC two spatial stream */
-                                       cap->cap_info |= cpu_to_le16(2 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
-                               }
-                               memcpy(&cap->mcs, MCS_rate_2R23A, 16);
-                               break;
-                       }
-
-                       if (rtl8723a_BT_coexist(padapter) &&
-                           rtl8723a_BT_using_antenna_1(padapter)) {
-                               /*  set to 8K */
-                               cap->ampdu_params_info &=
-                                       ~IEEE80211_HT_AMPDU_PARM_FACTOR;
-/*                             cap->ampdu_params_info |= MAX_AMPDU_FACTOR_8K */
-                       }
-
-                       pframe = rtw_set_ie23a(pframe, WLAN_EID_HT_CAPABILITY,
-                                              p[1], (u8 *)&pmlmeinfo->ht_cap,
-                                              &pattrib->pktlen);
-               }
-       }
-
-       /* vendor specific IE, such as WPA, WMM, WPS */
-       for (i = 0;  i < pmlmeinfo->network.IELength;) {
-               p = pmlmeinfo->network.IEs + i;
-
-               switch (p[0]) {
-               case WLAN_EID_VENDOR_SPECIFIC:
-                       if (!memcmp(p + 2, RTW_WPA_OUI23A_TYPE, 4) ||
-                           !memcmp(p + 2, WMM_OUI23A, 4) ||
-                           !memcmp(p + 2, WPS_OUI23A, 4)) {
-                               u8 plen = p[1];
-
-                               if (!padapter->registrypriv.wifi_spec) {
-                                       /* Commented by Kurt 20110629 */
-                                       /* In some older APs, WPS handshake */
-                                       /* would be fail if we append vender
-                                          extensions informations to AP */
-                                       if (!memcmp(p + 2, WPS_OUI23A, 4))
-                                               plen = 14;
-                               }
-                               pframe = rtw_set_ie23a(pframe,
-                                                      WLAN_EID_VENDOR_SPECIFIC,
-                                                      plen, p + 2,
-                                                      &pattrib->pktlen);
-                       }
-                       break;
-
-               default:
-                       break;
-               }
-
-               i += p[1] + 2;
-       }
-
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_REALTEK)
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_VENDOR_SPECIFIC, 6,
-                                      REALTEK_96B_IE, &pattrib->pktlen);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-       dump_mgntframe23a(padapter, pmgntframe);
-
-       ret = _SUCCESS;
-
-exit:
-       pmlmepriv->assoc_req_len = 0;
-       if (ret == _SUCCESS) {
-               kfree(pmlmepriv->assoc_req);
-               pmlmepriv->assoc_req = kmalloc(pattrib->pktlen, GFP_ATOMIC);
-               if (pmlmepriv->assoc_req) {
-                       memcpy(pmlmepriv->assoc_req, mgmt, pattrib->pktlen);
-                       pmlmepriv->assoc_req_len = pattrib->pktlen;
-               }
-       } else
-               kfree(pmlmepriv->assoc_req);
-}
-
-/* when wait_ack is true, this function should be called at process context */
-static int _issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da,
-                             unsigned int power_mode, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_hdr *pwlanhdr;
-       struct xmit_priv *pxmitpriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info *pmlmeinfo;
-
-       /* DBG_8723A("%s:%d\n", __func__, power_mode); */
-
-       if (!padapter)
-               goto exit;
-
-       pxmitpriv = &padapter->xmitpriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->retry_ctrl = false;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
-                                             IEEE80211_STYPE_NULLFUNC);
-
-       if ((pmlmeinfo->state&0x03) == MSR_AP)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
-       else if ((pmlmeinfo->state&0x03) == MSR_INFRA)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_TODS);
-
-       if (power_mode)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
-
-       ether_addr_copy(pwlanhdr->addr1, da);
-       ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
-       ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
-
-       pwlanhdr->seq_ctrl =
-               cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       pframe += sizeof(struct ieee80211_hdr_3addr);
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack)
-               ret = dump_mgntframe23a_and_wait_ack23a(padapter, pmgntframe);
-       else {
-               dump_mgntframe23a(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-/* when wait_ms >0 , this function should be called at process context */
-/* da == NULL for station mode */
-int issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da,
-                     unsigned int power_mode, int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       unsigned long start = jiffies;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* da == NULL, assume it's null data for sta to ap*/
-       if (da == NULL)
-               da = get_my_bssid23a(&pmlmeinfo->network);
-
-       do {
-               ret = _issue_nulldata23a(padapter, da, power_mode,
-                                        wait_ms > 0 ? true : false);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-
-       } while((i < try_cnt) && ((ret == _FAIL) || (wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-
-       if (try_cnt && wait_ms) {
-               if (da)
-                       DBG_8723A("%s(%s): to %pM, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 da, rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-               else
-                       DBG_8723A("%s(%s):, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-       }
-exit:
-       return ret;
-}
-
-/* when wait_ack is true, this function should be called at process context */
-static int _issue_qos_nulldata23a(struct rtw_adapter *padapter,
-                                 unsigned char *da, u16 tid, int wait_ack)
-{
-       int ret = _FAIL;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_qos_hdr *pwlanhdr;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       DBG_8723A("%s\n", __func__);
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       pattrib->hdrlen += 2;
-       pattrib->qos_en = true;
-       pattrib->eosp = 1;
-       pattrib->ack_policy = 0;
-       pattrib->mdata = 0;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-       pwlanhdr = (struct ieee80211_qos_hdr *)pframe;
-
-       pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_DATA |
-                                             IEEE80211_STYPE_QOS_NULLFUNC);
-
-       if ((pmlmeinfo->state&0x03) == MSR_AP)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
-       else if ((pmlmeinfo->state&0x03) == MSR_INFRA)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_TODS);
-
-       if (pattrib->mdata)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
-
-       pwlanhdr->qos_ctrl = cpu_to_le16(tid & IEEE80211_QOS_CTL_TID_MASK);
-       pwlanhdr->qos_ctrl |= cpu_to_le16((pattrib->ack_policy << 5) &
-                                         IEEE80211_QOS_CTL_ACK_POLICY_MASK);
-       if (pattrib->eosp)
-               pwlanhdr->qos_ctrl |= cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
-
-       ether_addr_copy(pwlanhdr->addr1, da);
-       ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
-       ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
-
-       pwlanhdr->seq_ctrl =
-               cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       pframe += sizeof(struct ieee80211_qos_hdr);
-       pattrib->pktlen = sizeof(struct ieee80211_qos_hdr);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack)
-               ret = dump_mgntframe23a_and_wait_ack23a(padapter, pmgntframe);
-       else {
-               dump_mgntframe23a(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-/* when wait_ms >0 , this function should be called at process context */
-/* da == NULL for station mode */
-int issue_qos_nulldata23a(struct rtw_adapter *padapter, unsigned char *da,
-                         u16 tid, int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       unsigned long start = jiffies;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* da == NULL, assume it's null data for sta to ap*/
-       if (da == NULL)
-               da = get_my_bssid23a(&pmlmeinfo->network);
-
-       do {
-               ret = _issue_qos_nulldata23a(padapter, da, tid,
-                                            wait_ms > 0 ? true : false);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-       } while((i < try_cnt) && ((ret == _FAIL)||(wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-
-       if (try_cnt && wait_ms) {
-               if (da)
-                       DBG_8723A("%s(%s): to %pM, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 da, rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-               else
-                       DBG_8723A("%s(%s):, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-       }
-exit:
-       return ret;
-}
-
-static int _issue_deauth(struct rtw_adapter *padapter, unsigned char *da,
-                        unsigned short reason, u8 wait_ack)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       struct ieee80211_mgmt *mgmt;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       int ret = _FAIL;
-
-       /* DBG_8723A("%s to %pM\n", __func__, da); */
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               goto exit;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->retry_ctrl = false;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH);
-
-       ether_addr_copy(mgmt->da, da);
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 2;
-
-       mgmt->u.deauth.reason_code = cpu_to_le16(reason);
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       if (wait_ack)
-               ret = dump_mgntframe23a_and_wait_ack23a(padapter, pmgntframe);
-       else {
-               dump_mgntframe23a(padapter, pmgntframe);
-               ret = _SUCCESS;
-       }
-
-exit:
-       return ret;
-}
-
-int issue_deauth23a(struct rtw_adapter *padapter, unsigned char *da,
-                   unsigned short reason)
-{
-       DBG_8723A("%s to %pM\n", __func__, da);
-       return _issue_deauth(padapter, da, reason, false);
-}
-
-static int issue_deauth_ex(struct rtw_adapter *padapter, u8 *da,
-                          unsigned short reason, int try_cnt, int wait_ms)
-{
-       int ret;
-       int i = 0;
-       unsigned long start = jiffies;
-
-       do {
-               ret = _issue_deauth(padapter, da, reason,
-                                   wait_ms >0 ? true : false);
-
-               i++;
-
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved)
-                       break;
-
-               if (i < try_cnt && wait_ms > 0 && ret == _FAIL)
-                       msleep(wait_ms);
-
-       } while((i < try_cnt) && ((ret == _FAIL)||(wait_ms == 0)));
-
-       if (ret != _FAIL) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-
-       if (try_cnt && wait_ms) {
-               if (da)
-                       DBG_8723A("%s(%s): to %pM, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 da, rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-               else
-                       DBG_8723A("%s(%s):, ch:%u%s, %d/%d in %u ms\n",
-                                 __func__, padapter->pnetdev->name,
-                                 rtw_get_oper_ch23a(padapter),
-                                 ret == _SUCCESS ? ", acked" : "", i, try_cnt,
-                                 jiffies_to_msecs(jiffies - start));
-       }
-exit:
-       return ret;
-}
-
-void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter,
-                                   u8 *ra, u8 new_ch, u8 ch_offset)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       struct ieee80211_mgmt *mgmt;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       DBG_8723A("%s(%s): ra=%pM, ch:%u, offset:%u\n",
-                 __func__, padapter->pnetdev->name, ra, new_ch, ch_offset);
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
-
-       ether_addr_copy(mgmt->da, ra); /* RA */
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); /* TA */
-       ether_addr_copy(mgmt->bssid, ra); /* DA = RA */
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       mgmt->u.action.category = WLAN_CATEGORY_SPECTRUM_MGMT;
-       mgmt->u.action.u.chan_switch.action_code = WLAN_ACTION_SPCT_CHL_SWITCH;
-
-       pframe = mgmt->u.action.u.chan_switch.variable;
-       pattrib->pktlen = offsetof(struct ieee80211_mgmt,
-                                  u.action.u.chan_switch.variable);
-
-       pframe = rtw_set_ie23a_ch_switch (pframe, &pattrib->pktlen, 0,
-                                         new_ch, 0);
-       pframe = rtw_set_ie23a_secondary_ch_offset(pframe, &pattrib->pktlen,
-               hal_ch_offset_to_secondary_ch_offset23a(ch_offset));
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe23a(padapter, pmgntframe);
-}
-
-void issue_action_BA23a(struct rtw_adapter *padapter,
-                       const unsigned char *raddr,
-                       unsigned char action, unsigned short status)
-{
-       u16 start_seq;
-       u16 BA_para_set;
-       u16 BA_starting_seqctrl;
-       u16 BA_para;
-       int max_rx_ampdu_factor;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       struct ieee80211_mgmt *mgmt;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       u8 tendaAPMac[] = {0xC8, 0x3A, 0x35};
-
-       DBG_8723A("%s, action =%d, status =%d\n", __func__, action, status);
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe)
-               return;
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
-
-       ether_addr_copy(mgmt->da, raddr);
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
-
-       mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       mgmt->u.action.category = WLAN_CATEGORY_BACK;
-
-       pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 1;
-
-       switch (action) {
-       case WLAN_ACTION_ADDBA_REQ:
-               pattrib->pktlen += sizeof(mgmt->u.action.u.addba_req);
-
-               mgmt->u.action.u.addba_req.action_code = action;
-
-               do {
-                       pmlmeinfo->dialogToken++;
-               } while (pmlmeinfo->dialogToken == 0);
-
-               mgmt->u.action.u.addba_req.dialog_token =
-                       pmlmeinfo->dialogToken;
-
-               if (rtl8723a_BT_coexist(padapter) &&
-                   rtl8723a_BT_using_antenna_1(padapter) &&
-                   (pmlmeinfo->assoc_AP_vendor != broadcomAP ||
-                    memcmp(raddr, tendaAPMac, 3))) {
-                       /*  A-MSDU NOT Supported */
-                       BA_para_set = 0;
-                       /*  immediate Block Ack */
-                       BA_para_set |= (1 << 1) &
-                               IEEE80211_ADDBA_PARAM_POLICY_MASK;
-                       /*  TID */
-                       BA_para_set |= (status << 2) &
-                               IEEE80211_ADDBA_PARAM_TID_MASK;
-                       /*  max buffer size is 8 MSDU */
-                       BA_para_set |= (8 << 6) &
-                               IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
-               } else {
-                       /* immediate ack & 64 buffer size */
-                       BA_para_set = 0x1002 | ((status & 0xf) << 2);
-               }
-
-               put_unaligned_le16(BA_para_set,
-                                  &mgmt->u.action.u.addba_req.capab);
-
-               /*  5ms */
-               put_unaligned_le16(5000, &mgmt->u.action.u.addba_req.timeout);
-
-               psta = rtw_get_stainfo23a(pstapriv, raddr);
-               if (psta) {
-                       int idx;
-
-                       idx = status & 0x07;
-                       start_seq =
-                               (psta->sta_xmitpriv.txseq_tid[idx] & 0xfff) + 1;
-
-                       DBG_8723A("BA_starting_seqctrl = %d for TID =%d\n",
-                                 start_seq, idx);
-
-                       psta->BA_starting_seqctrl[idx] = start_seq;
-
-                       BA_starting_seqctrl = start_seq << 4;
-               } else
-                       BA_starting_seqctrl = 0;
-
-               put_unaligned_le16(BA_starting_seqctrl,
-                                  &mgmt->u.action.u.addba_req.start_seq_num);
-
-               break;
-
-       case WLAN_ACTION_ADDBA_RESP:
-               pattrib->pktlen += sizeof(mgmt->u.action.u.addba_resp);
-
-               mgmt->u.action.u.addba_resp.action_code = action;
-               mgmt->u.action.u.addba_resp.dialog_token =
-                       pmlmeinfo->ADDBA_req.dialog_token;
-               put_unaligned_le16(status,
-                                  &mgmt->u.action.u.addba_resp.status);
-
-               GetHalDefVar8192CUsb(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR,
-                                    &max_rx_ampdu_factor);
-
-               BA_para = le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f;
-               if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_64K)
-                       BA_para_set = BA_para | 0x1000; /* 64 buffer size */
-               else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_32K)
-                       BA_para_set = BA_para | 0x0800; /* 32 buffer size */
-               else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_16K)
-                       BA_para_set = BA_para | 0x0400; /* 16 buffer size */
-               else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_8K)
-                       BA_para_set = BA_para | 0x0200; /* 8 buffer size */
-               else
-                       BA_para_set = BA_para | 0x1000; /* 64 buffer size */
-
-               if (rtl8723a_BT_coexist(padapter) &&
-                   rtl8723a_BT_using_antenna_1(padapter) &&
-                   (pmlmeinfo->assoc_AP_vendor != broadcomAP ||
-                    memcmp(raddr, tendaAPMac, 3))) {
-                       /*  max buffer size is 8 MSDU */
-                       BA_para_set &= ~IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
-                       BA_para_set |= (8 << 6) &
-                               IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK;
-               }
-
-               if (pregpriv->ampdu_amsdu == 0)/* disabled */
-                       BA_para_set &= ~BIT(0);
-               else if (pregpriv->ampdu_amsdu == 1)/* enabled */
-                       BA_para_set |= BIT(0);
-
-               put_unaligned_le16(BA_para_set,
-                                  &mgmt->u.action.u.addba_resp.capab);
-
-               mgmt->u.action.u.addba_resp.timeout
-                       = pmlmeinfo->ADDBA_req.BA_timeout_value;
-
-               pattrib->pktlen += 8;
-               break;
-       case WLAN_ACTION_DELBA:
-               pattrib->pktlen += sizeof(mgmt->u.action.u.delba);
-
-               mgmt->u.action.u.delba.action_code = action;
-               BA_para_set = (status & 0x1F) << 3;
-               mgmt->u.action.u.delba.params = cpu_to_le16(BA_para_set);
-               mgmt->u.action.u.delba.reason_code =
-                       cpu_to_le16(WLAN_REASON_QSTA_NOT_USE);
-
-               pattrib->pktlen += 5;
-               break;
-       default:
-               break;
-       }
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       dump_mgntframe23a(padapter, pmgntframe);
-}
-
-int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr)
-{
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta = NULL;
-       /* struct recv_reorder_ctrl *preorder_ctrl; */
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u16 tid;
-
-       if ((pmlmeinfo->state&0x03) != MSR_AP)
-               if (!(pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS))
-                       return _SUCCESS;
-
-       psta = rtw_get_stainfo23a(pstapriv, addr);
-       if (psta == NULL)
-               return _SUCCESS;
-
-       if (initiator == 0) {  /*  recipient */
-               for (tid = 0; tid < MAXTID; tid++) {
-                       if (psta->recvreorder_ctrl[tid].enable == true) {
-                               DBG_8723A("rx agg disable tid(%d)\n", tid);
-                               issue_action_BA23a(padapter, addr, WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
-                               psta->recvreorder_ctrl[tid].enable = false;
-                               psta->recvreorder_ctrl[tid].indicate_seq = 0xffff;
-                       }
-               }
-       } else if (initiator == 1) { /*  originator */
-               for (tid = 0; tid < MAXTID; tid++) {
-                       if (psta->htpriv.agg_enable_bitmap & BIT(tid)) {
-                               DBG_8723A("tx agg disable tid(%d)\n", tid);
-                               issue_action_BA23a(padapter, addr, WLAN_ACTION_DELBA, (((tid <<1) |initiator)&0x1F));
-                               psta->htpriv.agg_enable_bitmap &= ~BIT(tid);
-                               psta->htpriv.candidate_tid_bitmap &= ~BIT(tid);
-
-                       }
-               }
-       }
-       return _SUCCESS;
-}
-
-int send_beacon23a(struct rtw_adapter *padapter)
-{
-       bool bxmitok;
-       int issue = 0;
-       int poll = 0;
-       unsigned long start = jiffies;
-       unsigned int passing_time;
-
-       rtl8723a_bcn_valid(padapter);
-       do {
-               issue_beacon23a(padapter, 100);
-               issue++;
-               do {
-                       yield();
-                       bxmitok = rtl8723a_get_bcn_valid(padapter);
-                       poll++;
-               } while ((poll % 10) != 0 && !bxmitok &&
-                        !padapter->bSurpriseRemoved &&
-                        !padapter->bDriverStopped);
-
-       } while (!bxmitok && issue<100 && !padapter->bSurpriseRemoved &&
-                !padapter->bDriverStopped);
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped)
-               return _FAIL;
-
-       passing_time = jiffies_to_msecs(jiffies - start);
-
-       if (!bxmitok) {
-               DBG_8723A("%s fail! %u ms\n", __func__, passing_time);
-               return _FAIL;
-       } else {
-
-               if (passing_time > 100 || issue > 3)
-                       DBG_8723A("%s success, issue:%d, poll:%d, %u ms\n",
-                                 __func__, issue, poll, passing_time);
-               return _SUCCESS;
-       }
-}
-
-/****************************************************************************
-
-Following are some utitity functions for WiFi MLME
-
-*****************************************************************************/
-
-bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel)
-{
-
-       int i = 0;
-       u8 Channel_5G[45] = {36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
-                            60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
-                            114, 116, 118, 120, 122, 124, 126, 128, 130, 132,
-                            134, 136, 138, 140, 149, 151, 153, 155, 157, 159,
-                            161, 163, 165};
-       for (i = 0; i < sizeof(Channel_5G); i++)
-               if (channel == Channel_5G[i])
-                       return true;
-       return false;
-}
-
-static void rtw_site_survey(struct rtw_adapter *padapter)
-{
-       unsigned char survey_channel = 0;
-       enum rt_scan_type ScanType = SCAN_PASSIVE;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct rtw_ieee80211_channel *ch;
-
-       if (pmlmeext->sitesurvey_res.channel_idx <
-           pmlmeext->sitesurvey_res.ch_num) {
-               ch = &pmlmeext->sitesurvey_res.ch[pmlmeext->sitesurvey_res.channel_idx];
-               survey_channel = ch->hw_value;
-               ScanType = (ch->flags & IEEE80211_CHAN_NO_IR) ?
-                       SCAN_PASSIVE : SCAN_ACTIVE;
-       }
-
-       if (survey_channel != 0) {
-               /* PAUSE 4-AC Queue when site_survey */
-               if (pmlmeext->sitesurvey_res.channel_idx == 0)
-                       set_channel_bwmode23a(padapter, survey_channel,
-                                             HAL_PRIME_CHNL_OFFSET_DONT_CARE,
-                                             HT_CHANNEL_WIDTH_20);
-               else
-                       SelectChannel23a(padapter, survey_channel);
-
-               if (ScanType == SCAN_ACTIVE) /* obey the channel plan setting... */
-               {
-                       int i;
-
-                       for (i = 0;i<RTW_SSID_SCAN_AMOUNT;i++) {
-                               if (pmlmeext->sitesurvey_res.ssid[i].ssid_len) {
-                                       /* todo: to issue two probe req??? */
-                                       issue_probereq(padapter, &pmlmeext->sitesurvey_res.ssid[i], NULL);
-                                       /* msleep(SURVEY_TO>>1); */
-                                       issue_probereq(padapter, &pmlmeext->sitesurvey_res.ssid[i], NULL);
-                               }
-                       }
-
-                       if (pmlmeext->sitesurvey_res.scan_mode == SCAN_ACTIVE) {
-                               /* todo: to issue two probe req??? */
-                               issue_probereq(padapter, NULL, NULL);
-                               /* msleep(SURVEY_TO>>1); */
-                               issue_probereq(padapter, NULL, NULL);
-                       }
-               }
-
-               set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
-       } else {
-               /*      channel number is 0 or this channel is not valid. */
-               pmlmeext->sitesurvey_res.state = SCAN_COMPLETE;
-
-               /* switch back to the original channel */
-
-               set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                                     pmlmeext->cur_ch_offset,
-                                     pmlmeext->cur_bwmode);
-
-               /* flush 4-AC Queue after rtw_site_survey */
-               /* val8 = 0; */
-
-               /* config MSR */
-               rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3);
-
-               /* restore RX GAIN */
-               rtl8723a_set_initial_gain(padapter, 0xff);
-               /* turn on dynamic functions */
-               rtl8723a_odm_support_ability_restore(padapter);
-
-               if (is_client_associated_to_ap23a(padapter) == true)
-                       issue_nulldata23a(padapter, NULL, 0, 3, 500);
-
-               rtl8723a_mlme_sitesurvey(padapter, 0);
-
-               report_surveydone_event23a(padapter);
-
-               pmlmeext->chan_scan_time = SURVEY_TO;
-               pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-       }
-}
-
-/* collect bss info from Beacon and Probe request/response frames. */
-static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
-                                             struct recv_frame *precv_frame)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *bssid;
-       const u8 *p;
-       u8 *pie;
-       unsigned int length;
-       int i;
-
-       length = skb->len;
-
-       bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
-       if (!bssid)
-               return NULL;
-
-       if (ieee80211_is_beacon(mgmt->frame_control)) {
-               length -= offsetof(struct ieee80211_mgmt, u.beacon.variable);
-               pie = mgmt->u.beacon.variable;
-               bssid->reserved = 1;
-               bssid->capability =
-                       get_unaligned_le16(&mgmt->u.beacon.capab_info);
-               bssid->beacon_interval =
-                       get_unaligned_le16(&mgmt->u.beacon.beacon_int);
-               bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
-       } else if (ieee80211_is_probe_req(mgmt->frame_control)) {
-               length -= offsetof(struct ieee80211_mgmt, u.probe_req.variable);
-               pie = mgmt->u.probe_req.variable;
-               bssid->reserved = 2;
-               bssid->capability = 0;
-               bssid->beacon_interval =
-                       padapter->registrypriv.dev_network.beacon_interval;
-               bssid->tsf = 0;
-       } else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
-               length -=
-                       offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
-               pie = mgmt->u.probe_resp.variable;
-               bssid->reserved = 3;
-               bssid->capability =
-                       get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
-               bssid->beacon_interval =
-                       get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
-               bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp);
-       } else {
-               length -= offsetof(struct ieee80211_mgmt, u.beacon.variable);
-               pie = mgmt->u.beacon.variable;
-               bssid->reserved = 0;
-               bssid->capability =
-                       get_unaligned_le16(&mgmt->u.beacon.capab_info);
-               bssid->beacon_interval =
-                       padapter->registrypriv.dev_network.beacon_interval;
-               bssid->tsf = 0;
-       }
-
-       if (length > MAX_IE_SZ) {
-               /* DBG_8723A("IE too long for survey event\n"); */
-               kfree(bssid);
-               return NULL;
-       }
-
-       bssid->Length = offsetof(struct wlan_bssid_ex, IEs) + length;
-
-       /* below is to copy the information element */
-       bssid->IELength = length;
-       memcpy(bssid->IEs, pie, bssid->IELength);
-
-       /* get the signal strength */
-       /*  in dBM.raw data */
-       bssid->Rssi = precv_frame->attrib.phy_info.RecvSignalPower;
-       bssid->SignalQuality =
-               precv_frame->attrib.phy_info.SignalQuality;/* in percentage */
-       bssid->SignalStrength =
-               precv_frame->attrib.phy_info.SignalStrength;/* in percentage */
-
-       /*  checking SSID */
-       p = cfg80211_find_ie(WLAN_EID_SSID, bssid->IEs, bssid->IELength);
-
-       if (!p) {
-               DBG_8723A("marc: cannot find SSID for survey event\n");
-               goto fail;
-       }
-
-       if (p[1] > IEEE80211_MAX_SSID_LEN) {
-               DBG_8723A("%s()-%d: IE too long (%d) for survey "
-                         "event\n", __func__, __LINE__, p[1]);
-               goto fail;
-       }
-       memcpy(bssid->Ssid.ssid, p + 2, p[1]);
-       bssid->Ssid.ssid_len = p[1];
-
-       /* checking rate info... */
-       i = 0;
-       p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, bssid->IEs, bssid->IELength);
-       if (p) {
-               if (p[1] > NDIS_802_11_LENGTH_RATES_EX) {
-                       DBG_8723A("%s()-%d: IE too long (%d) for survey "
-                                 "event\n", __func__, __LINE__, p[1]);
-                       goto fail;
-               }
-               memcpy(bssid->SupportedRates, p + 2, p[1]);
-               i = p[1];
-       }
-
-       p = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, bssid->IEs,
-                            bssid->IELength);
-       if (p) {
-               if (p[1] > (NDIS_802_11_LENGTH_RATES_EX-i)) {
-                       DBG_8723A("%s()-%d: IE too long (%d) for survey "
-                                 "event\n", __func__, __LINE__, p[1]);
-                       goto fail;
-               }
-               memcpy(bssid->SupportedRates + i, p + 2, p[1]);
-       }
-
-       /*  Checking for DSConfig */
-       p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bssid->IEs, bssid->IELength);
-
-       bssid->DSConfig = 0;
-
-       if (p) {
-               bssid->DSConfig = p[2];
-       } else {/*  In 5G, some ap do not have DSSET IE */
-               /*  checking HT info for channel */
-               p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, bssid->IEs,
-                                    bssid->IELength);
-               if (p) {
-                       struct ieee80211_ht_operation *HT_info =
-                               (struct ieee80211_ht_operation *)(p + 2);
-                       bssid->DSConfig = HT_info->primary_chan;
-               } else /*  use current channel */
-                       bssid->DSConfig = rtw_get_oper_ch23a(padapter);
-       }
-
-       if (ieee80211_is_probe_req(mgmt->frame_control)) {
-               /*  FIXME */
-               bssid->ifmode = NL80211_IFTYPE_STATION;
-               ether_addr_copy(bssid->MacAddress, mgmt->sa);
-               bssid->Privacy = 1;
-               return bssid;
-       }
-
-       if (bssid->capability & WLAN_CAPABILITY_ESS) {
-               bssid->ifmode = NL80211_IFTYPE_STATION;
-               ether_addr_copy(bssid->MacAddress, mgmt->sa);
-       } else {
-               bssid->ifmode = NL80211_IFTYPE_ADHOC;
-               ether_addr_copy(bssid->MacAddress, mgmt->bssid);
-       }
-
-       if (bssid->capability & WLAN_CAPABILITY_PRIVACY)
-               bssid->Privacy = 1;
-       else
-               bssid->Privacy = 0;
-
-       bssid->ATIMWindow = 0;
-
-       /* 20/40 BSS Coexistence check */
-       if (pregistrypriv->wifi_spec == 1 &&
-           pmlmeinfo->bwmode_updated == false) {
-               struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-               p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, bssid->IEs,
-                                    bssid->IELength);
-               if (p && p[1] > 0) {
-                       struct ieee80211_ht_cap *pHT_caps;
-
-                       pHT_caps = (struct ieee80211_ht_cap *)(p + 2);
-
-                       if (pHT_caps->cap_info &
-                           cpu_to_le16(IEEE80211_HT_CAP_40MHZ_INTOLERANT))
-                               pmlmepriv->num_FortyMHzIntolerant++;
-               } else
-                       pmlmepriv->num_sta_no_ht++;
-       }
-
-
-       /*  mark bss info receiving from nearby channel as SignalQuality 101 */
-       if (bssid->DSConfig != rtw_get_oper_ch23a(padapter))
-               bssid->SignalQuality = 101;
-
-       return bssid;
-fail:
-       kfree (bssid);
-       return NULL;
-}
-
-static void start_create_ibss(struct rtw_adapter *padapter)
-{
-       unsigned short caps;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-
-       pmlmeext->cur_channel = (u8)pnetwork->DSConfig;
-       pmlmeinfo->bcn_interval = pnetwork->beacon_interval;
-
-       /* update wireless mode */
-       update_wireless_mode23a(padapter);
-
-       /* update capability */
-       caps = pnetwork->capability;
-       update_capinfo23a(padapter, caps);
-       if (caps & WLAN_CAPABILITY_IBSS) {      /* adhoc master */
-               rtl8723a_set_sec_cfg(padapter, 0xcf);
-
-               /* switch channel */
-               /* SelectChannel23a(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE); */
-               set_channel_bwmode23a(padapter, pmlmeext->cur_channel, HAL_PRIME_CHNL_OFFSET_DONT_CARE, HT_CHANNEL_WIDTH_20);
-
-               rtl8723a_SetBeaconRelatedRegisters(padapter);
-
-               /* set msr to MSR_ADHOC */
-               pmlmeinfo->state = MSR_ADHOC;
-               rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3);
-
-               /* issue beacon */
-               if (send_beacon23a(padapter) == _FAIL) {
-                       RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                                "issuing beacon frame fail....\n");
-
-                       report_join_res23a(padapter, -1);
-                       pmlmeinfo->state = MSR_NOLINK;
-               } else {
-                       hw_var_set_bssid(padapter, padapter->registrypriv.dev_network.MacAddress);
-                       hw_var_set_mlme_join(padapter, 0);
-
-                       report_join_res23a(padapter, 1);
-                       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-               }
-       } else {
-               DBG_8723A("%s: invalid cap:%x\n", __func__, caps);
-               return;
-       }
-}
-
-static void start_clnt_join(struct rtw_adapter *padapter)
-{
-       unsigned short caps;
-       u8 val8;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       int beacon_timeout;
-
-       pmlmeext->cur_channel = (u8)pnetwork->DSConfig;
-       pmlmeinfo->bcn_interval = pnetwork->beacon_interval;
-
-       /* update wireless mode */
-       update_wireless_mode23a(padapter);
-
-       /* update capability */
-       caps = pnetwork->capability;
-       update_capinfo23a(padapter, caps);
-       if (caps & WLAN_CAPABILITY_ESS) {
-               /* switch channel */
-               set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-               rtl8723a_set_media_status(padapter, MSR_INFRA);
-
-               val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) ?
-                       0xcc: 0xcf;
-
-               rtl8723a_set_sec_cfg(padapter, val8);
-
-               /* switch channel */
-               /* set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); */
-
-               /* here wait for receiving the beacon to start auth */
-               /* and enable a timer */
-               beacon_timeout = decide_wait_for_beacon_timeout23a(pmlmeinfo->bcn_interval);
-               set_link_timer(pmlmeext, beacon_timeout);
-               mod_timer(&padapter->mlmepriv.assoc_timer, jiffies +
-                         msecs_to_jiffies((REAUTH_TO * REAUTH_LIMIT) + (REASSOC_TO*REASSOC_LIMIT) + beacon_timeout));
-               pmlmeinfo->state = WIFI_FW_AUTH_NULL | MSR_INFRA;
-       } else if (caps & WLAN_CAPABILITY_IBSS) {       /* adhoc client */
-               rtl8723a_set_media_status(padapter, MSR_ADHOC);
-
-               rtl8723a_set_sec_cfg(padapter, 0xcf);
-
-               /* switch channel */
-               set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-               rtl8723a_SetBeaconRelatedRegisters(padapter);
-
-               pmlmeinfo->state = MSR_ADHOC;
-
-               report_join_res23a(padapter, 1);
-       } else {
-               /* DBG_8723A("marc: invalid cap:%x\n", caps); */
-               return;
-       }
-}
-
-static void start_clnt_auth(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       del_timer_sync(&pmlmeext->link_timer);
-
-       pmlmeinfo->state &= (~WIFI_FW_AUTH_NULL);
-       pmlmeinfo->state |= WIFI_FW_AUTH_STATE;
-
-       pmlmeinfo->auth_seq = 1;
-       pmlmeinfo->reauth_count = 0;
-       pmlmeinfo->reassoc_count = 0;
-       pmlmeinfo->link_count = 0;
-       pmlmeext->retry = 0;
-
-       /*  Because of AP's not receiving deauth before */
-       /*  AP may: 1)not response auth or 2)deauth us after link is complete */
-       /*  issue deauth before issuing auth to deal with the situation */
-       /*      Commented by Albert 2012/07/21 */
-       /*      For the Win8 P2P connection, it will be hard to have a
-               successful connection if this Wi-Fi doesn't connect to it. */
-       issue_deauth23a(padapter, (&pmlmeinfo->network)->MacAddress,
-                       WLAN_REASON_DEAUTH_LEAVING);
-
-       DBG_8723A_LEVEL(_drv_always_, "start auth\n");
-       issue_auth(padapter, NULL, 0);
-
-       set_link_timer(pmlmeext, REAUTH_TO);
-}
-
-static void start_clnt_assoc(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       del_timer_sync(&pmlmeext->link_timer);
-
-       pmlmeinfo->state &= (~(WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE));
-       pmlmeinfo->state |= (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE);
-
-       issue_assocreq(padapter);
-
-       set_link_timer(pmlmeext, REASSOC_TO);
-}
-
-int receive_disconnect23a(struct rtw_adapter *padapter,
-                         unsigned char *MacAddr, unsigned short reason)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* check A3 */
-       if (!ether_addr_equal(MacAddr, get_my_bssid23a(&pmlmeinfo->network)))
-               return _SUCCESS;
-
-       DBG_8723A("%s\n", __func__);
-
-       if ((pmlmeinfo->state&0x03) == MSR_INFRA) {
-               if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
-                       pmlmeinfo->state = MSR_NOLINK;
-                       report_del_sta_event23a(padapter, MacAddr, reason);
-
-               } else if (pmlmeinfo->state & WIFI_FW_LINKING_STATE) {
-                       pmlmeinfo->state = MSR_NOLINK;
-                       report_join_res23a(padapter, -2);
-               }
-       }
-
-       return _SUCCESS;
-}
-
-static void process_80211d(struct rtw_adapter *padapter,
-                          struct wlan_bssid_ex *bssid)
-{
-       struct registry_priv *pregistrypriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct rt_channel_info *chplan_new;
-       u8 channel;
-       u8 i;
-
-       pregistrypriv = &padapter->registrypriv;
-       pmlmeext = &padapter->mlmeextpriv;
-
-       /*  Adjust channel plan by AP Country IE */
-       if (pregistrypriv->enable80211d &&
-           !pmlmeext->update_channel_plan_by_ap_done) {
-               const u8 *ie, *p;
-               struct rt_channel_plan chplan_ap;
-               struct rt_channel_info chplan_sta[MAX_CHANNEL_NUM];
-               u8 country[4];
-               u8 fcn; /*  first channel number */
-               u8 noc; /*  number of channel */
-               u8 j, k;
-
-               ie = cfg80211_find_ie(WLAN_EID_COUNTRY, bssid->IEs,
-                                     bssid->IELength);
-               if (!ie || ie[1] < IEEE80211_COUNTRY_IE_MIN_LEN)
-                       return;
-
-               p = ie + 2;
-               ie += ie[1];
-               ie += 2;
-
-               memcpy(country, p, 3);
-               country[3] = '\0';
-
-               p += 3;
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                        "%s: 802.11d country =%s\n", __func__, country);
-
-               i = 0;
-               while ((ie - p) >= 3) {
-                       fcn = *(p++);
-                       noc = *(p++);
-                       p++;
-
-                       for (j = 0; j < noc; j++) {
-                               if (fcn <= 14)
-                                       channel = fcn + j; /*  2.4 GHz */
-                               else
-                                       channel = fcn + j * 4; /*  5 GHz */
-
-                               chplan_ap.Channel[i++] = channel;
-                       }
-               }
-               chplan_ap.Len = i;
-
-               memcpy(chplan_sta, pmlmeext->channel_set, sizeof(chplan_sta));
-               memset(pmlmeext->channel_set, 0, sizeof(pmlmeext->channel_set));
-               chplan_new = pmlmeext->channel_set;
-
-               i = j = k = 0;
-               if (pregistrypriv->wireless_mode & WIRELESS_11G) {
-                       do {
-                               if (i == MAX_CHANNEL_NUM ||
-                                   chplan_sta[i].ChannelNum == 0 ||
-                                   chplan_sta[i].ChannelNum > 14)
-                                       break;
-
-                               if (j == chplan_ap.Len ||
-                                   chplan_ap.Channel[j] > 14)
-                                       break;
-
-                               if (chplan_sta[i].ChannelNum ==
-                                   chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType = SCAN_ACTIVE;
-                                       i++;
-                                       j++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum <
-                                          chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_sta[i].ChannelNum;
-                                       chplan_new[k].ScanType =
-                                               SCAN_PASSIVE;
-                                       i++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum >
-                                          chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType =
-                                               SCAN_ACTIVE;
-                                       j++;
-                                       k++;
-                               }
-                       } while (1);
-
-                       /*  change AP not support channel to Passive scan */
-                       while (i < MAX_CHANNEL_NUM &&
-                              chplan_sta[i].ChannelNum != 0 &&
-                              chplan_sta[i].ChannelNum <= 14) {
-                               chplan_new[k].ChannelNum =
-                                       chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = SCAN_PASSIVE;
-                               i++;
-                               k++;
-                       }
-
-                       /*  add channel AP supported */
-                       while (j < chplan_ap.Len && chplan_ap.Channel[j] <= 14){
-                               chplan_new[k].ChannelNum = chplan_ap.Channel[j];
-                               chplan_new[k].ScanType = SCAN_ACTIVE;
-                               j++;
-                               k++;
-                       }
-               } else {
-                       /*  keep original STA 2.4G channel plan */
-                       while (i < MAX_CHANNEL_NUM &&
-                              chplan_sta[i].ChannelNum != 0 &&
-                              chplan_sta[i].ChannelNum <= 14) {
-                               chplan_new[k].ChannelNum =
-                                       chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = chplan_sta[i].ScanType;
-                               i++;
-                               k++;
-                       }
-
-                       /*  skip AP 2.4G channel plan */
-                       while (j < chplan_ap.Len && chplan_ap.Channel[j] <= 14)
-                               j++;
-               }
-
-               if (pregistrypriv->wireless_mode & WIRELESS_11A) {
-                       do {
-                               if (i == MAX_CHANNEL_NUM ||
-                                   chplan_sta[i].ChannelNum == 0)
-                                       break;
-
-                               if (j == chplan_ap.Len ||
-                                   chplan_ap.Channel[j] == 0)
-                                       break;
-
-                               if (chplan_sta[i].ChannelNum ==
-                                   chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType = SCAN_ACTIVE;
-                                       i++;
-                                       j++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum <
-                                          chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_sta[i].ChannelNum;
-                                       chplan_new[k].ScanType = SCAN_PASSIVE;
-                                       i++;
-                                       k++;
-                               } else if (chplan_sta[i].ChannelNum >
-                                          chplan_ap.Channel[j]) {
-                                       chplan_new[k].ChannelNum =
-                                               chplan_ap.Channel[j];
-                                       chplan_new[k].ScanType = SCAN_ACTIVE;
-                                       j++;
-                                       k++;
-                               }
-                       } while (1);
-
-                       /*  change AP not support channel to Passive scan */
-                       while (i < MAX_CHANNEL_NUM &&
-                              chplan_sta[i].ChannelNum != 0) {
-                               chplan_new[k].ChannelNum =
-                                       chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = SCAN_PASSIVE;
-                               i++;
-                               k++;
-                       }
-
-                       /*  add channel AP supported */
-                       while (j < chplan_ap.Len && chplan_ap.Channel[j] != 0) {
-                               chplan_new[k].ChannelNum = chplan_ap.Channel[j];
-                               chplan_new[k].ScanType = SCAN_ACTIVE;
-                               j++;
-                               k++;
-                       }
-               } else {
-                       /*  keep original STA 5G channel plan */
-                       while (i < MAX_CHANNEL_NUM &&
-                              chplan_sta[i].ChannelNum != 0) {
-                               chplan_new[k].ChannelNum =
-                                       chplan_sta[i].ChannelNum;
-                               chplan_new[k].ScanType = chplan_sta[i].ScanType;
-                               i++;
-                               k++;
-                       }
-               }
-               pmlmeext->update_channel_plan_by_ap_done = 1;
-       }
-
-       /*  If channel is used by AP, set channel scan type to active */
-       channel = bssid->DSConfig;
-       chplan_new = pmlmeext->channel_set;
-       i = 0;
-       while (i < MAX_CHANNEL_NUM && chplan_new[i].ChannelNum != 0) {
-               if (chplan_new[i].ChannelNum == channel) {
-                       if (chplan_new[i].ScanType == SCAN_PASSIVE) {
-                               /* 5G Bnad 2, 3 (DFS) doesn't change
-                                  to active scan */
-                               if (channel >= 52 && channel <= 144)
-                                       break;
-
-                               chplan_new[i].ScanType = SCAN_ACTIVE;
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
-                                        "%s: change channel %d scan type from passive to active\n",
-                                        __func__, channel);
-                       }
-                       break;
-               }
-               i++;
-       }
-}
-
-/****************************************************************************
-
-Following are the functions to report events
-
-*****************************************************************************/
-
-void report_survey_event23a(struct rtw_adapter *padapter,
-                           struct recv_frame *precv_frame)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct survey_event *psurvey_evt;
-       struct C2HEvent_Header *pc2h_evt_hdr;
-       struct mlme_ext_priv *pmlmeext;
-       struct cmd_priv *pcmdpriv;
-
-       if (!padapter)
-               return;
-
-       pmlmeext = &padapter->mlmeextpriv;
-       pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = sizeof(struct survey_event) + sizeof(struct C2HEvent_Header);
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct survey_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_Survey);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
-
-       psurvey_evt->bss = collect_bss_info(padapter, precv_frame);
-       if (!psurvey_evt->bss) {
-               kfree(pcmd_obj);
-               kfree(pevtcmd);
-               return;
-       }
-
-       process_80211d(padapter, psurvey_evt->bss);
-
-       rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
-
-       pmlmeext->sitesurvey_res.bss_cnt++;
-}
-
-void report_surveydone_event23a(struct rtw_adapter *padapter)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct surveydone_event *psurveydone_evt;
-       struct C2HEvent_Header *pc2h_evt_hdr;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = sizeof(struct surveydone_event) + sizeof(struct C2HEvent_Header);
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct surveydone_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_SurveyDone);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       psurveydone_evt = (struct surveydone_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
-       psurveydone_evt->bss_cnt = pmlmeext->sitesurvey_res.bss_cnt;
-
-       DBG_8723A("survey done event(%x)\n", psurveydone_evt->bss_cnt);
-
-       rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
-}
-
-void report_join_res23a(struct rtw_adapter *padapter, int res)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct joinbss_event            *pjoinbss_evt;
-       struct C2HEvent_Header  *pc2h_evt_hdr;
-       struct mlme_ext_priv            *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = sizeof(struct joinbss_event) + sizeof(struct C2HEvent_Header);
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct joinbss_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_JoinBss);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       pjoinbss_evt = (struct joinbss_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
-       memcpy((unsigned char *)&pjoinbss_evt->network.network,
-              &pmlmeinfo->network, sizeof(struct wlan_bssid_ex));
-       pjoinbss_evt->network.join_res = res;
-
-       DBG_8723A("report_join_res23a(%d)\n", res);
-
-       rtw_joinbss_event_prehandle23a(padapter, (u8 *)&pjoinbss_evt->network);
-
-       rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
-}
-
-void report_del_sta_event23a(struct rtw_adapter *padapter,
-                            unsigned char *MacAddr, unsigned short reason)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct sta_info *psta;
-       int mac_id;
-       struct stadel_event *pdel_sta_evt;
-       struct C2HEvent_Header *pc2h_evt_hdr;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = sizeof(struct stadel_event) + sizeof(struct C2HEvent_Header);
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct stadel_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_DelSTA);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       pdel_sta_evt = (struct stadel_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
-       ether_addr_copy((unsigned char *)&pdel_sta_evt->macaddr, MacAddr);
-       memcpy((unsigned char *)pdel_sta_evt->rsvd, (unsigned char *)&reason,
-              2);
-
-       psta = rtw_get_stainfo23a(&padapter->stapriv, MacAddr);
-       if (psta)
-               mac_id = (int)psta->mac_id;
-       else
-               mac_id = -1;
-
-       pdel_sta_evt->mac_id = mac_id;
-
-       DBG_8723A("report_del_sta_event23a: delete STA, mac_id =%d\n", mac_id);
-
-       rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
-}
-
-void report_add_sta_event23a(struct rtw_adapter *padapter,
-                            unsigned char *MacAddr, int cam_idx)
-{
-       struct cmd_obj *pcmd_obj;
-       u8 *pevtcmd;
-       u32 cmdsz;
-       struct stassoc_event *padd_sta_evt;
-       struct C2HEvent_Header *pc2h_evt_hdr;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-
-       pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!pcmd_obj)
-               return;
-
-       cmdsz = sizeof(struct stassoc_event) + sizeof(struct C2HEvent_Header);
-       pevtcmd = kzalloc(cmdsz, GFP_ATOMIC);
-       if (!pevtcmd) {
-               kfree(pcmd_obj);
-               return;
-       }
-
-       pcmd_obj->cmdcode = GEN_CMD_CODE(_Set_MLME_EVT);
-       pcmd_obj->cmdsz = cmdsz;
-       pcmd_obj->parmbuf = pevtcmd;
-
-       pcmd_obj->rsp = NULL;
-       pcmd_obj->rspsz  = 0;
-
-       pc2h_evt_hdr = (struct C2HEvent_Header *)(pevtcmd);
-       pc2h_evt_hdr->len = sizeof(struct stassoc_event);
-       pc2h_evt_hdr->ID = GEN_EVT_CODE(_AddSTA);
-       pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
-
-       padd_sta_evt = (struct stassoc_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
-       ether_addr_copy((unsigned char *)&padd_sta_evt->macaddr, MacAddr);
-       padd_sta_evt->cam_id = cam_idx;
-
-       DBG_8723A("report_add_sta_event23a: add STA\n");
-
-       rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
-}
-
-/****************************************************************************
-
-Following are the event callback functions
-
-*****************************************************************************/
-
-/* for sta/adhoc mode */
-void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* ERP */
-       VCS_update23a(padapter, psta);
-
-       /* HT */
-       if (pmlmepriv->htpriv.ht_option) {
-               psta->htpriv.ht_option = true;
-
-               psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
-
-               if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
-                       psta->htpriv.sgi = true;
-
-               psta->qos_option = true;
-
-       } else {
-               psta->htpriv.ht_option = false;
-
-               psta->htpriv.ampdu_enable = false;
-
-               psta->htpriv.sgi = false;
-               psta->qos_option = false;
-
-       }
-       psta->htpriv.bwmode = pmlmeext->cur_bwmode;
-       psta->htpriv.ch_offset = pmlmeext->cur_ch_offset;
-
-       psta->htpriv.agg_enable_bitmap = 0x0;/* reset */
-       psta->htpriv.candidate_tid_bitmap = 0x0;/* reset */
-
-       /* QoS */
-       if (pmlmepriv->qos_option)
-               psta->qos_option = true;
-
-       psta->state = _FW_LINKED;
-}
-
-void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter,
-                                      int join_res)
-{
-       struct sta_info *psta, *psta_bmc;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if (join_res < 0) {
-               hw_var_set_mlme_join(padapter, 1);
-               hw_var_set_bssid(padapter, null_addr);
-
-               /* restore to initial setting. */
-               update_tx_basic_rate23a(padapter,
-                                       padapter->registrypriv.wireless_mode);
-
-               goto exit_mlmeext_joinbss_event_callback23a;
-       }
-
-       if ((pmlmeinfo->state&0x03) == MSR_ADHOC) {
-               /* for bc/mc */
-               psta_bmc = rtw_get_bcmc_stainfo23a(padapter);
-               if (psta_bmc) {
-                       pmlmeinfo->FW_sta_info[psta_bmc->mac_id].psta = psta_bmc;
-                       update_bmc_sta_support_rate23a(padapter, psta_bmc->mac_id);
-                       Update_RA_Entry23a(padapter, psta_bmc);
-               }
-       }
-
-       /* turn on dynamic functions */
-       rtl8723a_odm_support_ability_set(padapter, DYNAMIC_ALL_FUNC_ENABLE);
-
-       /*  update IOT-releated issue */
-       update_IOT_info23a(padapter);
-
-       HalSetBrateCfg23a(padapter, cur_network->SupportedRates);
-
-       /* BCN interval */
-       rtl8723a_set_beacon_interval(padapter, pmlmeinfo->bcn_interval);
-
-       /* update capability */
-       update_capinfo23a(padapter, pmlmeinfo->capability);
-
-       /* WMM, Update EDCA param */
-       WMMOnAssocRsp23a(padapter);
-
-       /* HT */
-       HTOnAssocRsp23a(padapter);
-
-       /* Set cur_channel&cur_bwmode&cur_ch_offset */
-       set_channel_bwmode23a(padapter, pmlmeext->cur_channel, pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       psta = rtw_get_stainfo23a(pstapriv, cur_network->MacAddress);
-       if (psta) { /* only for infra. mode */
-               pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
-               /* DBG_8723A("set_sta_rate23a\n"); */
-
-               psta->wireless_mode = pmlmeext->cur_wireless_mode;
-
-               /* set per sta rate after updating HT cap. */
-               set_sta_rate23a(padapter, psta);
-       }
-
-       hw_var_set_mlme_join(padapter, 2);
-
-       if ((pmlmeinfo->state&0x03) == MSR_INFRA) {
-               /*  correcting TSF */
-               rtw_correct_TSF(padapter);
-
-               /* set_link_timer(pmlmeext, DISCONNECT_TO); */
-       }
-
-       rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_CONNECT, 0);
-
-exit_mlmeext_joinbss_event_callback23a:
-       DBG_8723A("=>%s\n", __func__);
-}
-
-void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter,
-                                      struct sta_info *psta)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       DBG_8723A("%s\n", __func__);
-
-       if ((pmlmeinfo->state & 0x03) == MSR_ADHOC) {
-       /* adhoc master or sta_count>1 */
-               if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
-                       /* nothing to do */
-               } else { /* adhoc client */
-                       /*  correcting TSF */
-                       rtw_correct_TSF(padapter);
-
-                       /* start beacon */
-                       if (send_beacon23a(padapter) != _SUCCESS) {
-                               pmlmeinfo->FW_sta_info[psta->mac_id].status = 0;
-
-                               pmlmeinfo->state ^= MSR_ADHOC;
-
-                               return;
-                       }
-
-                       pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;
-               }
-               hw_var_set_mlme_join(padapter, 2);
-       }
-
-       pmlmeinfo->FW_sta_info[psta->mac_id].psta = psta;
-
-       /* rate radaptive */
-       Update_RA_Entry23a(padapter, psta);
-
-       /* update adhoc sta_info */
-       update_sta_info23a(padapter, psta);
-}
-
-void mlmeext_sta_del_event_callback23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (is_client_associated_to_ap23a(padapter) ||
-           is_IBSS_empty23a(padapter)) {
-               /* set_opmode_cmd(padapter, infra_client_with_mlme); */
-
-               hw_var_set_mlme_disconnect(padapter);
-               hw_var_set_bssid(padapter, null_addr);
-
-               /* restore to initial setting. */
-               update_tx_basic_rate23a(padapter,
-                                       padapter->registrypriv.wireless_mode);
-
-               /* switch to the 20M Hz mode after disconnect */
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-               set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                                     pmlmeext->cur_ch_offset,
-                                     pmlmeext->cur_bwmode);
-
-               flush_all_cam_entry23a(padapter);
-
-               pmlmeinfo->state = MSR_NOLINK;
-
-               /* set MSR to no link state -> infra. mode */
-               rtl8723a_set_media_status(padapter, MSR_INFRA);
-
-               del_timer_sync(&pmlmeext->link_timer);
-       }
-}
-
-static u8 chk_ap_is_alive(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       u8 ret = false;
-
-       if (sta_rx_data_pkts(psta) == sta_last_rx_data_pkts(psta) &&
-           sta_rx_beacon_pkts(psta) == sta_last_rx_beacon_pkts(psta) &&
-           sta_rx_probersp_pkts(psta) == sta_last_rx_probersp_pkts(psta))
-               ret = false;
-       else
-               ret = true;
-
-       sta_update_last_rx_pkts(psta);
-       return ret;
-}
-
-void linked_status_chk23a(struct rtw_adapter *padapter)
-{
-       u32 i;
-       struct sta_info *psta;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       if (is_client_associated_to_ap23a(padapter)) {
-               /* linked infrastructure client mode */
-
-               int tx_chk = _SUCCESS, rx_chk = _SUCCESS;
-               int rx_chk_limit;
-
-               rx_chk_limit = 4;
-
-               psta = rtw_get_stainfo23a(pstapriv,
-                                         pmlmeinfo->network.MacAddress);
-               if (psta) {
-                       bool is_p2p_enable = false;
-
-                       if (chk_ap_is_alive(padapter, psta) == false)
-                               rx_chk = _FAIL;
-
-                       if (pxmitpriv->last_tx_pkts == pxmitpriv->tx_pkts)
-                               tx_chk = _FAIL;
-
-                       if (pmlmeext->active_keep_alive_check &&
-                           (rx_chk == _FAIL || tx_chk == _FAIL)) {
-                               u8 backup_oper_channel = 0;
-
-                               /* switch to correct channel of current
-                                  network  before issue keep-alive frames */
-                               if (rtw_get_oper_ch23a(padapter) !=
-                                   pmlmeext->cur_channel) {
-                                       backup_oper_channel =
-                                               rtw_get_oper_ch23a(padapter);
-                                       SelectChannel23a(padapter,
-                                                        pmlmeext->cur_channel);
-                               }
-
-                               if (rx_chk != _SUCCESS)
-                                       issue_probereq_ex(padapter, &pmlmeinfo->network.Ssid, psta->hwaddr, 3, 1);
-
-                               if ((tx_chk != _SUCCESS &&
-                                    pmlmeinfo->link_count++ == 0xf) ||
-                                   rx_chk != _SUCCESS) {
-                                       tx_chk = issue_nulldata23a(padapter,
-                                                                  psta->hwaddr,
-                                                                  0, 3, 1);
-                                       /* if tx acked and p2p disabled,
-                                          set rx_chk _SUCCESS to reset retry
-                                          count */
-                                       if (tx_chk == _SUCCESS &&
-                                           !is_p2p_enable)
-                                               rx_chk = _SUCCESS;
-                               }
-
-                               /* back to the original operation channel */
-                               if (backup_oper_channel>0)
-                                       SelectChannel23a(padapter,
-                                                        backup_oper_channel);
-                       } else {
-                               if (rx_chk != _SUCCESS) {
-                                       if (pmlmeext->retry == 0) {
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                               issue_probereq(padapter, &pmlmeinfo->network.Ssid, pmlmeinfo->network.MacAddress);
-                                       }
-                               }
-
-                               if (tx_chk != _SUCCESS &&
-                                   pmlmeinfo->link_count++ == 0xf)
-                                       tx_chk = issue_nulldata23a(padapter,
-                                                                  NULL, 0, 1,
-                                                                  0);
-                       }
-
-                       if (rx_chk == _FAIL) {
-                               pmlmeext->retry++;
-                               if (pmlmeext->retry > rx_chk_limit) {
-                                       DBG_8723A_LEVEL(_drv_always_,
-                                                       "%s(%s): disconnect or "
-                                                       "roaming\n", __func__,
-                                                       padapter->pnetdev->name);
-                                       receive_disconnect23a(padapter, pmlmeinfo->network.MacAddress,
-                                               WLAN_REASON_EXPIRATION_CHK);
-                                       return;
-                               }
-                       } else
-                               pmlmeext->retry = 0;
-
-                       if (tx_chk == _FAIL)
-                               pmlmeinfo->link_count &= 0xf;
-                       else {
-                               pxmitpriv->last_tx_pkts = pxmitpriv->tx_pkts;
-                               pmlmeinfo->link_count = 0;
-                       }
-
-               }
-       } else if (is_client_associated_to_ibss23a(padapter)) {
-               /* linked IBSS mode */
-               /* for each assoc list entry to check the rx pkt counter */
-               for (i = IBSS_START_MAC_ID; i < NUM_STA; i++) {
-                       if (pmlmeinfo->FW_sta_info[i].status == 1) {
-                               psta = pmlmeinfo->FW_sta_info[i].psta;
-
-                               if (!psta)
-                                       continue;
-
-                               if (pmlmeinfo->FW_sta_info[i].rx_pkt ==
-                                   sta_rx_pkts(psta)) {
-
-                                       if (pmlmeinfo->FW_sta_info[i].retry<3) {
-                                               pmlmeinfo->FW_sta_info[i].retry++;
-                                       } else {
-                                               pmlmeinfo->FW_sta_info[i].retry = 0;
-                                               pmlmeinfo->FW_sta_info[i].status = 0;
-                                               report_del_sta_event23a(padapter, psta->hwaddr,
-                                                       65535/*  indicate disconnect caused by no rx */
-                                               );
-                                       }
-                               } else {
-                                       pmlmeinfo->FW_sta_info[i].retry = 0;
-                                       pmlmeinfo->FW_sta_info[i].rx_pkt = (u32)sta_rx_pkts(psta);
-                               }
-                       }
-               }
-               /* set_link_timer(pmlmeext, DISCONNECT_TO); */
-       }
-}
-
-static void survey_timer_hdl(unsigned long data)
-{
-       struct rtw_adapter *padapter = (struct rtw_adapter *)data;
-       struct cmd_obj *ph2c;
-       struct sitesurvey_parm *psurveyPara;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       /* issue rtw_sitesurvey_cmd23a */
-       if (pmlmeext->sitesurvey_res.state > SCAN_START) {
-               if (pmlmeext->sitesurvey_res.state ==  SCAN_PROCESS)
-                       pmlmeext->sitesurvey_res.channel_idx++;
-
-               if (pmlmeext->scan_abort == true) {
-                       pmlmeext->sitesurvey_res.channel_idx =
-                               pmlmeext->sitesurvey_res.ch_num;
-                       DBG_8723A("%s idx:%d\n", __func__,
-                                 pmlmeext->sitesurvey_res.channel_idx);
-
-                       pmlmeext->scan_abort = false;/* reset */
-               }
-
-               ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-               if (!ph2c)
-                       goto exit_survey_timer_hdl;
-
-               psurveyPara = kzalloc(sizeof(struct sitesurvey_parm),
-                                       GFP_ATOMIC);
-               if (!psurveyPara) {
-                       kfree(ph2c);
-                       goto exit_survey_timer_hdl;
-               }
-
-               init_h2fwcmd_w_parm_no_rsp(ph2c, psurveyPara,
-                                          GEN_CMD_CODE(_SiteSurvey));
-               rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-       }
-
-exit_survey_timer_hdl:
-       return;
-}
-
-static void link_timer_hdl(unsigned long data)
-{
-       struct rtw_adapter *padapter = (struct rtw_adapter *)data;
-       /* static unsigned int          rx_pkt = 0; */
-       /* static u64                           tx_cnt = 0; */
-       /* struct xmit_priv *pxmitpriv = &padapter->xmitpriv; */
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       /* struct sta_priv              *pstapriv = &padapter->stapriv; */
-
-       if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
-               DBG_8723A("link_timer_hdl:no beacon while connecting\n");
-               pmlmeinfo->state = MSR_NOLINK;
-               report_join_res23a(padapter, -3);
-       } else if (pmlmeinfo->state & WIFI_FW_AUTH_STATE) {
-               /* re-auth timer */
-               if (++pmlmeinfo->reauth_count > REAUTH_LIMIT) {
-                       /* if (pmlmeinfo->auth_algo != dot11AuthAlgrthm_Auto) */
-                       /*  */
-                               pmlmeinfo->state = 0;
-                               report_join_res23a(padapter, -1);
-                               return;
-                       /*  */
-                       /* else */
-                       /*  */
-                       /* pmlmeinfo->auth_algo = dot11AuthAlgrthm_Shared; */
-                       /* pmlmeinfo->reauth_count = 0; */
-                       /*  */
-               }
-
-               DBG_8723A("link_timer_hdl: auth timeout and try again\n");
-               pmlmeinfo->auth_seq = 1;
-               issue_auth(padapter, NULL, 0);
-               set_link_timer(pmlmeext, REAUTH_TO);
-       } else if (pmlmeinfo->state & WIFI_FW_ASSOC_STATE) {
-               /* re-assoc timer */
-               if (++pmlmeinfo->reassoc_count > REASSOC_LIMIT) {
-                       pmlmeinfo->state = MSR_NOLINK;
-                       report_join_res23a(padapter, -2);
-                       return;
-               }
-
-               DBG_8723A("link_timer_hdl: assoc timeout and try again\n");
-               issue_assocreq(padapter);
-               set_link_timer(pmlmeext, REASSOC_TO);
-       }
-}
-
-static void addba_timer_hdl(unsigned long data)
-{
-       struct sta_info *psta = (struct sta_info *)data;
-       struct ht_priv *phtpriv;
-
-       if (!psta)
-               return;
-
-       phtpriv = &psta->htpriv;
-
-       if (phtpriv->ht_option && phtpriv->ampdu_enable) {
-               if (phtpriv->candidate_tid_bitmap)
-                       phtpriv->candidate_tid_bitmap = 0x0;
-       }
-}
-
-void init_addba_retry_timer23a(struct sta_info *psta)
-{
-       setup_timer(&psta->addba_retry_timer, addba_timer_hdl,
-                   (unsigned long)psta);
-}
-
-void init_mlme_ext_timer23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       setup_timer(&pmlmeext->survey_timer, survey_timer_hdl,
-                   (unsigned long)padapter);
-
-       setup_timer(&pmlmeext->link_timer, link_timer_hdl,
-                   (unsigned long)padapter);
-}
-
-int NULL_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       return H2C_SUCCESS;
-}
-
-int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       enum nl80211_iftype type;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       const struct setopmode_parm *psetop = (struct setopmode_parm *)pbuf;
-
-       switch (psetop->mode) {
-       case NL80211_IFTYPE_P2P_GO:
-       case NL80211_IFTYPE_AP:
-               pmlmeinfo->state = MSR_AP;
-               type = MSR_AP;
-               break;
-       case NL80211_IFTYPE_P2P_CLIENT:
-       case NL80211_IFTYPE_STATION:
-               /*  clear state */
-               pmlmeinfo->state &= ~(BIT(0)|BIT(1));
-               /* set to STATION_STATE */
-               pmlmeinfo->state |= MSR_INFRA;
-               type = MSR_INFRA;
-               break;
-       case NL80211_IFTYPE_ADHOC:
-               type = MSR_ADHOC;
-               break;
-       default:
-               type = MSR_NOLINK;
-               break;
-       }
-
-       hw_var_set_opmode(padapter, type);
-       /* Set_NETYPE0_MSR(padapter, type); */
-
-       return H2C_SUCCESS;
-}
-
-int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
-       /* u32  initialgain; */
-
-       if (pparm->ifmode == NL80211_IFTYPE_AP ||
-           pparm->ifmode == NL80211_IFTYPE_P2P_GO) {
-#ifdef CONFIG_8723AU_AP_MODE
-               if (pmlmeinfo->state == MSR_AP) {
-                       /* todo: */
-                       return H2C_SUCCESS;
-               }
-#endif
-       }
-
-       /* below is for ad-hoc master */
-       if (pparm->ifmode == NL80211_IFTYPE_ADHOC) {
-               rtw_joinbss_reset23a(padapter);
-
-               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-               pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-               pmlmeinfo->ERP_enable = 0;
-               pmlmeinfo->WMM_enable = 0;
-               pmlmeinfo->HT_enable = 0;
-               pmlmeinfo->HT_caps_enable = 0;
-               pmlmeinfo->HT_info_enable = 0;
-
-               /* disable dynamic functions, such as high power, DIG */
-               rtl8723a_odm_support_ability_backup(padapter);
-
-               rtl8723a_odm_support_ability_clr(padapter,
-                                                DYNAMIC_FUNC_DISABLE);
-
-               /* cancel link timer */
-               del_timer_sync(&pmlmeext->link_timer);
-
-               /* clear CAM */
-               flush_all_cam_entry23a(padapter);
-
-               if (pparm->IELength > MAX_IE_SZ)/* Check pbuf->IELength */
-                       return H2C_PARAMETERS_ERROR;
-
-               memcpy(pnetwork, pparm, sizeof(struct wlan_bssid_ex));
-
-               start_create_ibss(padapter);
-       }
-
-       return H2C_SUCCESS;
-}
-
-int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-       const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
-       struct ieee80211_ht_operation *pht_info;
-       u32 i;
-       u8 *p;
-       /* u32  initialgain; */
-       /* u32  acparm; */
-
-       /* check already connecting to AP or not */
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) {
-               if (pmlmeinfo->state & MSR_INFRA)
-                       issue_deauth_ex(padapter, pnetwork->MacAddress,
-                                       WLAN_REASON_DEAUTH_LEAVING, 5, 100);
-
-               pmlmeinfo->state = MSR_NOLINK;
-
-               /* clear CAM */
-               flush_all_cam_entry23a(padapter);
-
-               del_timer_sync(&pmlmeext->link_timer);
-
-               /* set MSR to nolink -> infra. mode */
-               rtl8723a_set_media_status(padapter, MSR_INFRA);
-
-               hw_var_set_mlme_disconnect(padapter);
-       }
-
-       rtw_joinbss_reset23a(padapter);
-
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       pmlmeinfo->ERP_enable = 0;
-       pmlmeinfo->WMM_enable = 0;
-       pmlmeinfo->HT_enable = 0;
-       pmlmeinfo->HT_caps_enable = 0;
-       pmlmeinfo->HT_info_enable = 0;
-       pmlmeinfo->bwmode_updated = false;
-       /* pmlmeinfo->assoc_AP_vendor = HT_IOT_PEER_MAX; */
-
-       if (pparm->IELength > MAX_IE_SZ)/* Check pbuf->IELength */
-               return H2C_PARAMETERS_ERROR;
-
-       memcpy(pnetwork, pbuf, sizeof(struct wlan_bssid_ex));
-
-       /* Check AP vendor to move rtw_joinbss_cmd23a() */
-       /* pmlmeinfo->assoc_AP_vendor = check_assoc_AP23a(pnetwork->IEs,
-          pnetwork->IELength); */
-
-       for (i = 0; i < pnetwork->IELength;) {
-               p = pnetwork->IEs + i;
-
-               switch (p[0]) {
-               case WLAN_EID_VENDOR_SPECIFIC:/* Get WMM IE. */
-                       if (!memcmp(p + 2, WMM_OUI23A, 4))
-                               pmlmeinfo->WMM_enable = 1;
-                       break;
-
-               case WLAN_EID_HT_CAPABILITY:    /* Get HT Cap IE. */
-                       pmlmeinfo->HT_caps_enable = 1;
-                       break;
-
-               case WLAN_EID_HT_OPERATION:     /* Get HT Info IE. */
-                       pmlmeinfo->HT_info_enable = 1;
-
-                       /* spec case only for cisco's ap because cisco's ap
-                        * issue assoc rsp using mcs rate @40MHz or @20MHz */
-                       pht_info = (struct ieee80211_ht_operation *)(p + 2);
-
-                       if (pregpriv->cbw40_enable &&
-                           (pht_info->ht_param &
-                            IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
-                               /* switch to the 40M Hz mode according to AP */
-                               pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
-                               switch (pht_info->ht_param &
-                                       IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
-                               case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
-                                       pmlmeext->cur_ch_offset =
-                                               HAL_PRIME_CHNL_OFFSET_LOWER;
-                                       break;
-
-                               case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
-                                       pmlmeext->cur_ch_offset =
-                                               HAL_PRIME_CHNL_OFFSET_UPPER;
-                                       break;
-
-                               default:
-                                       pmlmeext->cur_ch_offset =
-                                               HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                                       break;
-                               }
-
-                               DBG_8723A("set ch/bw before connected\n");
-                       }
-                       break;
-
-               default:
-                       break;
-               }
-
-               i += (p[1] + 2);
-       }
-
-       hw_var_set_bssid(padapter, pmlmeinfo->network.MacAddress);
-       hw_var_set_mlme_join(padapter, 0);
-
-       /* cancel link timer */
-       del_timer_sync(&pmlmeext->link_timer);
-
-       start_clnt_join(padapter);
-
-       return H2C_SUCCESS;
-}
-
-int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct disconnect_parm *param = (struct disconnect_parm *)pbuf;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
-
-       if (is_client_associated_to_ap23a(padapter)) {
-               issue_deauth_ex(padapter, pnetwork->MacAddress,
-                               WLAN_REASON_DEAUTH_LEAVING,
-                               param->deauth_timeout_ms/100, 100);
-       }
-
-       /* set_opmode_cmd(padapter, infra_client_with_mlme); */
-
-       /* pmlmeinfo->state = MSR_NOLINK; */
-
-       hw_var_set_mlme_disconnect(padapter);
-       hw_var_set_bssid(padapter, null_addr);
-
-       /* restore to initial setting. */
-       update_tx_basic_rate23a(padapter, padapter->registrypriv.wireless_mode);
-
-       if ((pmlmeinfo->state & 0x03) == MSR_ADHOC ||
-           (pmlmeinfo->state & 0x03) == MSR_AP)
-               rtl8723a_set_bcn_func(padapter, 0);     /* Stop BCN */
-
-       /* set MSR to no link state -> infra. mode */
-       rtl8723a_set_media_status(padapter, MSR_INFRA);
-
-       pmlmeinfo->state = MSR_NOLINK;
-
-       /* switch to the 20M Hz mode after disconnect */
-       pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_20;
-       pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-
-       set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                             pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       flush_all_cam_entry23a(padapter);
-
-       del_timer_sync(&pmlmeext->link_timer);
-
-       rtw_free_uc_swdec_pending_queue23a(padapter);
-
-       return H2C_SUCCESS;
-}
-
-static int
-rtw_scan_ch_decision(struct rtw_adapter *padapter,
-                    struct rtw_ieee80211_channel *out, u32 out_num,
-                    const struct rtw_ieee80211_channel *in, u32 in_num)
-{
-       int i, j;
-       int scan_ch_num = 0;
-       int set_idx;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       /* clear out first */
-       memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num);
-
-       /* acquire channels from in */
-       j = 0;
-       for (i = 0;i<in_num;i++) {
-               if (in[i].hw_value &&
-                   !(in[i].flags & IEEE80211_CHAN_DISABLED) &&
-                   (set_idx = rtw_ch_set_search_ch23a(pmlmeext->channel_set,
-                                                      in[i].hw_value)) >= 0) {
-                       memcpy(&out[j], &in[i],
-                              sizeof(struct rtw_ieee80211_channel));
-
-                       if (pmlmeext->channel_set[set_idx].ScanType ==
-                           SCAN_PASSIVE)
-                               out[j].flags &= IEEE80211_CHAN_NO_IR;
-
-                       j++;
-               }
-               if (j>= out_num)
-                       break;
-       }
-
-       /* if out is empty, use channel_set as default */
-       if (j == 0) {
-               for (i = 0;i<pmlmeext->max_chan_nums;i++) {
-                       out[i].hw_value = pmlmeext->channel_set[i].ChannelNum;
-
-                       if (pmlmeext->channel_set[i].ScanType == SCAN_PASSIVE)
-                               out[i].flags &= IEEE80211_CHAN_NO_IR;
-
-                       j++;
-               }
-       }
-
-       if (padapter->setband == GHZ_24) {                      /*  2.4G */
-               for (i = 0; i < j ; i++) {
-                       if (out[i].hw_value > 35)
-                               memset(&out[i], 0,
-                                      sizeof(struct rtw_ieee80211_channel));
-                       else
-                               scan_ch_num++;
-               }
-               j = scan_ch_num;
-       } else if  (padapter->setband == GHZ_50) {              /*  5G */
-               for (i = 0; i < j ; i++) {
-                       if (out[i].hw_value > 35) {
-                               memcpy(&out[scan_ch_num++], &out[i],
-                                      sizeof(struct rtw_ieee80211_channel));
-                       }
-               }
-               j = scan_ch_num;
-       } else
-               {}
-
-       return j;
-}
-
-int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       const struct sitesurvey_parm *pparm = (struct sitesurvey_parm *)pbuf;
-       u8 bdelayscan = false;
-       u32 initialgain;
-       u32 i;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_DISABLE) {
-               pmlmeext->sitesurvey_res.state = SCAN_START;
-               pmlmeext->sitesurvey_res.bss_cnt = 0;
-               pmlmeext->sitesurvey_res.channel_idx = 0;
-
-               for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) {
-                       if (pparm->ssid[i].ssid_len) {
-                               memcpy(pmlmeext->sitesurvey_res.ssid[i].ssid,
-                                      pparm->ssid[i].ssid,
-                                      IEEE80211_MAX_SSID_LEN);
-                               pmlmeext->sitesurvey_res.ssid[i].ssid_len =
-                                       pparm->ssid[i].ssid_len;
-                       } else {
-                               pmlmeext->sitesurvey_res.ssid[i].ssid_len = 0;
-                       }
-               }
-
-               pmlmeext->sitesurvey_res.ch_num =
-                       rtw_scan_ch_decision(padapter,
-                                            pmlmeext->sitesurvey_res.ch,
-                                            RTW_CHANNEL_SCAN_AMOUNT,
-                                            pparm->ch, pparm->ch_num);
-
-               pmlmeext->sitesurvey_res.scan_mode = pparm->scan_mode;
-
-               /* issue null data if associating to the AP */
-               if (is_client_associated_to_ap23a(padapter)) {
-                       pmlmeext->sitesurvey_res.state = SCAN_TXNULL;
-
-                       /* switch to correct channel of current network
-                          before issue keep-alive frames */
-                       if (rtw_get_oper_ch23a(padapter) !=
-                           pmlmeext->cur_channel)
-                               SelectChannel23a(padapter,
-                                                pmlmeext->cur_channel);
-
-                       issue_nulldata23a(padapter, NULL, 1, 3, 500);
-
-                       bdelayscan = true;
-               }
-
-               if (bdelayscan) {
-                       /* delay 50ms to protect nulldata(1). */
-                       set_survey_timer(pmlmeext, 50);
-                       return H2C_SUCCESS;
-               }
-       }
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_START ||
-           pmlmeext->sitesurvey_res.state == SCAN_TXNULL) {
-               /* disable dynamic functions, such as high power, DIG */
-               rtl8723a_odm_support_ability_backup(padapter);
-               rtl8723a_odm_support_ability_clr(padapter,
-                                                DYNAMIC_FUNC_DISABLE);
-
-               /* config the initial gain under scanning, need to
-                  write the BB registers */
-               if (wdev_to_priv(padapter->rtw_wdev)->p2p_enabled == true)
-                       initialgain = 0x30;
-               else
-                       initialgain = 0x1E;
-
-               rtl8723a_set_initial_gain(padapter, initialgain);
-
-               /* set MSR to no link state */
-               rtl8723a_set_media_status(padapter, MSR_NOLINK);
-
-               rtl8723a_mlme_sitesurvey(padapter, 1);
-
-               pmlmeext->sitesurvey_res.state = SCAN_PROCESS;
-       }
-
-       rtw_site_survey(padapter);
-
-       return H2C_SUCCESS;
-}
-
-int setauth_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct setauth_parm *pparm = (struct setauth_parm *)pbuf;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pparm->mode < 4)
-               pmlmeinfo->auth_algo = pparm->mode;
-
-       return H2C_SUCCESS;
-}
-
-int setkey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       unsigned short ctrl;
-       const struct setkey_parm *pparm = (struct setkey_parm *)pbuf;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-       /* main tx key for wep. */
-       if (pparm->set_tx)
-               pmlmeinfo->key_index = pparm->keyid;
-
-       /* write cam */
-       ctrl = BIT(15) | (pparm->algorithm) << 2 | pparm->keyid;
-
-       DBG_8723A_LEVEL(_drv_always_, "set group key to hw: alg:%d(WEP40-1 "
-                       "WEP104-5 TKIP-2 AES-4) keyid:%d\n",
-                       pparm->algorithm, pparm->keyid);
-       rtl8723a_cam_write(padapter, pparm->keyid, ctrl, null_sta, pparm->key);
-
-       /* allow multicast packets to driver */
-       rtl8723a_on_rcr_am(padapter);
-
-       return H2C_SUCCESS;
-}
-
-int set_stakey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       u16 ctrl = 0;
-       u8 cam_id;/* cam_entry */
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       const struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf;
-
-       /* cam_entry: */
-       /* 0~3 for default key */
-
-       /* for concurrent mode (ap+sta): */
-       /* default key is disable, using sw encrypt/decrypt */
-       /* cam_entry = 4  for sta mode (macid = 0) */
-       /* cam_entry(macid+3) = 5 ~ N for ap mode (aid = 1~N, macid = 2 ~N) */
-
-       /* for concurrent mode (sta+sta): */
-       /* default key is disable, using sw encrypt/decrypt */
-       /* cam_entry = 4 mapping to macid = 0 */
-       /* cam_entry = 5 mapping to macid = 2 */
-
-       cam_id = 4;
-
-       DBG_8723A_LEVEL(_drv_always_, "set pairwise key to hw: alg:%d(WEP40-1 "
-                       "WEP104-5 TKIP-2 AES-4) camid:%d\n",
-                       pparm->algorithm, cam_id);
-       if ((pmlmeinfo->state & 0x03) == MSR_AP) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               if (pparm->algorithm == 0) {    /*  clear cam entry */
-                       clear_cam_entry23a(padapter, pparm->id);
-                       return H2C_SUCCESS_RSP;
-               }
-
-               psta = rtw_get_stainfo23a(pstapriv, pparm->addr);
-               if (psta) {
-                       ctrl = BIT(15) | (pparm->algorithm << 2);
-
-                       DBG_8723A("r871x_set_stakey_hdl23a(): enc_algorithm "
-                                 "=%d\n", pparm->algorithm);
-
-                       if (psta->mac_id < 1 || psta->mac_id > (NUM_STA - 4)) {
-                               DBG_8723A("r871x_set_stakey_hdl23a():set_stakey"
-                                         " failed, mac_id(aid) =%d\n",
-                                         psta->mac_id);
-                               return H2C_REJECTED;
-                       }
-
-                       /* 0~3 for default key, cmd_id = macid + 3,
-                          macid = aid+1; */
-                       cam_id = psta->mac_id + 3;
-
-                       DBG_8723A("Write CAM, mac_addr =%pM, "
-                                 "cam_entry =%d\n", pparm->addr, cam_id);
-
-                       rtl8723a_cam_write(padapter, cam_id, ctrl,
-                                          pparm->addr, pparm->key);
-
-                       return H2C_SUCCESS_RSP;
-               } else {
-                       DBG_8723A("r871x_set_stakey_hdl23a(): sta has been "
-                                 "free\n");
-                       return H2C_REJECTED;
-               }
-       }
-
-       /* below for sta mode */
-
-       if (pparm->algorithm == 0) {    /*  clear cam entry */
-               clear_cam_entry23a(padapter, pparm->id);
-               return H2C_SUCCESS;
-       }
-
-       ctrl = BIT(15) | (pparm->algorithm << 2);
-
-       rtl8723a_cam_write(padapter, cam_id, ctrl, pparm->addr, pparm->key);
-
-       pmlmeinfo->enc_algo = pparm->algorithm;
-
-       return H2C_SUCCESS;
-}
-
-int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct addBaReq_parm *pparm = (struct addBaReq_parm *)pbuf;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct sta_info *psta;
-
-       psta = rtw_get_stainfo23a(&padapter->stapriv, pparm->addr);
-
-       if (!psta)
-               return H2C_SUCCESS;
-
-       if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) &&
-            pmlmeinfo->HT_enable) ||
-           (pmlmeinfo->state & 0x03) == MSR_AP) {
-               issue_action_BA23a(padapter, pparm->addr,
-                                  WLAN_ACTION_ADDBA_REQ, (u16)pparm->tid);
-               mod_timer(&psta->addba_retry_timer,
-                         jiffies + msecs_to_jiffies(ADDBA_TO));
-       } else
-               psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
-
-       return H2C_SUCCESS;
-}
-
-int set_tx_beacon_cmd23a(struct rtw_adapter *padapter)
-{
-       struct cmd_obj *ph2c;
-       struct Tx_Beacon_param *ptxBeacon_parm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 res = _SUCCESS;
-       int len_diff = 0;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
-       if (!ph2c) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       ptxBeacon_parm = kzalloc(sizeof(struct Tx_Beacon_param), GFP_ATOMIC);
-       if (!ptxBeacon_parm) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       memcpy(&ptxBeacon_parm->network, &pmlmeinfo->network,
-              sizeof(struct wlan_bssid_ex));
-
-       len_diff = update_hidden_ssid(ptxBeacon_parm->network.IEs,
-                                     ptxBeacon_parm->network.IELength,
-                                     pmlmeinfo->hidden_ssid_mode);
-       ptxBeacon_parm->network.IELength += len_diff;
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, ptxBeacon_parm,
-                                  GEN_CMD_CODE(_TX_Beacon));
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-
-exit:
-       return res;
-}
-
-int mlme_evt_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       u8 evt_code, evt_seq;
-       u16 evt_sz;
-       const struct C2HEvent_Header *c2h;
-       void (*event_callback)(struct rtw_adapter *dev, const u8 *pbuf);
-
-       c2h = (struct C2HEvent_Header *)pbuf;
-       evt_sz = c2h->len;
-       evt_seq = c2h->seq;
-       evt_code = c2h->ID;
-
-       /*  checking if event code is valid */
-       if (evt_code >= MAX_C2HEVT) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "Event Code(%d) mismatch!\n", evt_code);
-               goto _abort_event_;
-       }
-
-       /*  checking if event size match the event parm size */
-       if (wlanevents[evt_code].parmsize != 0 &&
-           wlanevents[evt_code].parmsize != evt_sz) {
-               RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_,
-                        "Event(%d) Parm Size mismatch (%d vs %d)!\n",
-                        evt_code, wlanevents[evt_code].parmsize, evt_sz);
-               goto _abort_event_;
-       }
-
-       event_callback = wlanevents[evt_code].event_callback;
-       event_callback(padapter, pbuf + sizeof(struct C2HEvent_Header));
-
-_abort_event_:
-
-       return H2C_SUCCESS;
-}
-
-int h2c_msg_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       return H2C_SUCCESS;
-}
-
-int tx_beacon_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       if (send_beacon23a(padapter) == _FAIL) {
-               DBG_8723A("issue_beacon23a, fail!\n");
-               return H2C_PARAMETERS_ERROR;
-       }
-#ifdef CONFIG_8723AU_AP_MODE
-       else { /* tx bc/mc frames after update TIM */
-               struct sta_info *psta_bmc;
-               struct list_head *phead;
-               struct xmit_frame *pxmitframe, *ptmp;
-               struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               /* for BC/MC Frames */
-               psta_bmc = rtw_get_bcmc_stainfo23a(padapter);
-               if (!psta_bmc)
-                       return H2C_SUCCESS;
-
-               if (pstapriv->tim_bitmap & BIT(0) && psta_bmc->sleepq_len > 0) {
-                       msleep(10);/*  10ms, ATIM(HIQ) Windows */
-                       /* spin_lock_bh(&psta_bmc->sleep_q.lock); */
-                       spin_lock_bh(&pxmitpriv->lock);
-
-                       phead = get_list_head(&psta_bmc->sleep_q);
-
-                       list_for_each_entry_safe(pxmitframe, ptmp,
-                                                phead, list) {
-
-                               list_del_init(&pxmitframe->list);
-
-                               psta_bmc->sleepq_len--;
-                               if (psta_bmc->sleepq_len>0)
-                                       pxmitframe->attrib.mdata = 1;
-                               else
-                                       pxmitframe->attrib.mdata = 0;
-
-                               pxmitframe->attrib.triggered = 1;
-
-                               pxmitframe->attrib.qsel = 0x11;/* HIQ */
-
-                               rtl8723au_hal_xmitframe_enqueue(padapter,
-                                                               pxmitframe);
-                       }
-                       /* spin_unlock_bh(&psta_bmc->sleep_q.lock); */
-                       spin_unlock_bh(&pxmitpriv->lock);
-               }
-       }
-#endif
-
-       return H2C_SUCCESS;
-}
-
-int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct set_ch_parm *set_ch_parm;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       set_ch_parm = (struct set_ch_parm *)pbuf;
-
-       DBG_8723A("%s(%s): ch:%u, bw:%u, ch_offset:%u\n", __func__,
-                 padapter->pnetdev->name, set_ch_parm->ch,
-                 set_ch_parm->bw, set_ch_parm->ch_offset);
-
-       pmlmeext->cur_channel = set_ch_parm->ch;
-       pmlmeext->cur_ch_offset = set_ch_parm->ch_offset;
-       pmlmeext->cur_bwmode = set_ch_parm->bw;
-
-       set_channel_bwmode23a(padapter, set_ch_parm->ch,
-                             set_ch_parm->ch_offset, set_ch_parm->bw);
-
-       return H2C_SUCCESS;
-}
-
-int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       const struct SetChannelPlan_param *setChannelPlan_param;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       setChannelPlan_param = (struct SetChannelPlan_param *)pbuf;
-
-       pmlmeext->max_chan_nums =
-               init_channel_set(padapter, setChannelPlan_param->channel_plan,
-                                pmlmeext->channel_set);
-       init_channel_list(padapter, pmlmeext->channel_set,
-                         pmlmeext->max_chan_nums, &pmlmeext->channel_list);
-
-       return H2C_SUCCESS;
-}
-
-int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       struct LedBlink_param *ledBlink_param;
-
-       if (!pbuf)
-               return H2C_PARAMETERS_ERROR;
-
-       ledBlink_param = (struct LedBlink_param *)pbuf;
-
-       return H2C_SUCCESS;
-}
-
-int set_csa_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       return H2C_REJECTED;
-}
-
-/*  TDLS_WRCR          : write RCR DATA BIT */
-/*  TDLS_SD_PTI                : issue peer traffic indication */
-/*  TDLS_CS_OFF                : go back to the channel linked with AP,
-                         terminating channel switch procedure */
-/*  TDLS_INIT_CH_SEN   : init channel sensing, receive all data and
-                         mgnt frame */
-/*  TDLS_DONE_CH_SEN   : channel sensing and report candidate channel */
-/*  TDLS_OFF_CH                : first time set channel to off channel */
-/*  TDLS_BASE_CH       : go back tp the channel linked with AP when set
-                         base channel as target channel */
-/*  TDLS_P_OFF_CH      : periodically go to off channel */
-/*  TDLS_P_BASE_CH     : periodically go back to base channel */
-/*  TDLS_RS_RCR                : restore RCR */
-/*  TDLS_CKALV_PH1     : check alive timer phase1 */
-/*  TDLS_CKALV_PH2     : check alive timer phase2 */
-/*  TDLS_FREE_STA      : free tdls sta */
-int tdls_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
-{
-       return H2C_REJECTED;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c
deleted file mode 100644 (file)
index 7488a10..0000000
+++ /dev/null
@@ -1,606 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_PWRCTRL_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <osdep_intf.h>
-#include <rtl8723a_cmd.h>
-#include <rtw_sreset.h>
-
-#include <rtl8723a_bt_intf.h>
-#include <usb_ops_linux.h>
-
-void ips_enter23a(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       down(&pwrpriv->lock);
-
-       pwrpriv->bips_processing = true;
-
-       /*  syn ips_mode with request */
-       pwrpriv->ips_mode = pwrpriv->ips_mode_req;
-
-       pwrpriv->ips_enter23a_cnts++;
-       DBG_8723A("==>ips_enter23a cnts:%d\n", pwrpriv->ips_enter23a_cnts);
-       rtl8723a_BT_disable_coexist(padapter);
-
-       if (pwrpriv->change_rfpwrstate == rf_off) {
-               pwrpriv->bpower_saving = true;
-               DBG_8723A_LEVEL(_drv_always_, "nolinked power save enter\n");
-
-               if (pwrpriv->ips_mode == IPS_LEVEL_2)
-                       pwrpriv->bkeepfwalive = true;
-
-               rtw_ips_pwr_down23a(padapter);
-               pwrpriv->rf_pwrstate = rf_off;
-       }
-       pwrpriv->bips_processing = false;
-
-       up(&pwrpriv->lock);
-}
-
-int ips_leave23a(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int result = _SUCCESS;
-       int keyid;
-
-       down(&pwrpriv->lock);
-
-       if (pwrpriv->rf_pwrstate == rf_off && !pwrpriv->bips_processing) {
-               pwrpriv->bips_processing = true;
-               pwrpriv->change_rfpwrstate = rf_on;
-               pwrpriv->ips_leave23a_cnts++;
-               DBG_8723A("==>ips_leave23a cnts:%d\n",
-                         pwrpriv->ips_leave23a_cnts);
-
-               result = rtw_ips_pwr_up23a(padapter);
-               if (result == _SUCCESS)
-                       pwrpriv->rf_pwrstate = rf_on;
-
-               DBG_8723A_LEVEL(_drv_always_, "nolinked power save leave\n");
-
-               if (psecuritypriv->dot11PrivacyAlgrthm ==
-                   WLAN_CIPHER_SUITE_WEP40 ||
-                   psecuritypriv->dot11PrivacyAlgrthm ==
-                   WLAN_CIPHER_SUITE_WEP104) {
-                       DBG_8723A("==>%s, channel(%d), processing(%x)\n",
-                                 __func__, padapter->mlmeextpriv.cur_channel,
-                                 pwrpriv->bips_processing);
-                       set_channel_bwmode23a(padapter,
-                                             padapter->mlmeextpriv.cur_channel,
-                                             HAL_PRIME_CHNL_OFFSET_DONT_CARE,
-                                             HT_CHANNEL_WIDTH_20);
-                       for (keyid = 0; keyid < 4; keyid++) {
-                               if (pmlmepriv->key_mask & BIT(keyid)) {
-                                       if (keyid ==
-                                           psecuritypriv->dot11PrivacyKeyIndex)
-                                               result = rtw_set_key23a(padapter, psecuritypriv, keyid, 1);
-                                       else
-                                               result = rtw_set_key23a(padapter, psecuritypriv, keyid, 0);
-                               }
-                       }
-               }
-
-               DBG_8723A("==> ips_leave23a.....LED(0x%08x)...\n",
-                         rtl8723au_read32(padapter, 0x4c));
-               pwrpriv->bips_processing = false;
-
-               pwrpriv->bkeepfwalive = false;
-               pwrpriv->bpower_saving = false;
-       }
-
-       up(&pwrpriv->lock);
-
-       return result;
-}
-
-
-static bool rtw_pwr_unassociated_idle(struct rtw_adapter *adapter)
-{
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct xmit_priv *pxmit_priv = &adapter->xmitpriv;
-
-       bool ret = false;
-
-       if (time_after_eq(adapter->pwrctrlpriv.ips_deny_time, jiffies))
-               goto exit;
-
-       if (check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR) ||
-           check_fwstate(pmlmepriv, WIFI_UNDER_LINKING|WIFI_UNDER_WPS) ||
-           check_fwstate(pmlmepriv, WIFI_AP_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)){
-               goto exit;
-       }
-
-       if (pxmit_priv->free_xmitbuf_cnt != NR_XMITBUFF ||
-               pxmit_priv->free_xmit_extbuf_cnt != NR_XMIT_EXTBUFF) {
-               DBG_8723A_LEVEL(_drv_always_,
-                               "There are some pkts to transmit\n");
-               DBG_8723A_LEVEL(_drv_info_, "free_xmitbuf_cnt: %d, "
-                               "free_xmit_extbuf_cnt: %d\n",
-                               pxmit_priv->free_xmitbuf_cnt,
-                               pxmit_priv->free_xmit_extbuf_cnt);
-               goto exit;
-       }
-
-       ret = true;
-
-exit:
-       return ret;
-}
-
-void rtw_ps_processor23a(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       pwrpriv->ps_processing = true;
-
-       if (pwrpriv->bips_processing == true)
-               goto exit;
-
-       if (pwrpriv->ips_mode_req == IPS_NONE)
-               goto exit;
-
-       if (!rtw_pwr_unassociated_idle(padapter))
-               goto exit;
-
-       if (pwrpriv->rf_pwrstate == rf_on &&
-           (pwrpriv->pwr_state_check_cnts % 4) == 0) {
-               DBG_8723A("==>%s .fw_state(%x)\n", __func__,
-                         get_fwstate(pmlmepriv));
-               pwrpriv->change_rfpwrstate = rf_off;
-               ips_enter23a(padapter);
-       }
-exit:
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-       pwrpriv->ps_processing = false;
-}
-
-static void pwr_state_check_handler(unsigned long data)
-{
-       struct rtw_adapter *padapter = (struct rtw_adapter *)data;
-
-       rtw_ps_cmd23a(padapter);
-}
-
-/*
- *
- * Parameters
- *   padapter
- *   pslv      power state level, only could be PS_STATE_S0 ~ PS_STATE_S4
- *
- */
-void rtw_set_rpwm23a(struct rtw_adapter *padapter, u8 pslv)
-{
-       u8 rpwm;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       pslv = PS_STATE(pslv);
-
-       if (pwrpriv->btcoex_rfon) {
-               if (pslv < PS_STATE_S4)
-                       pslv = PS_STATE_S3;
-       }
-
-       if (pwrpriv->rpwm == pslv) {
-               RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
-                        "%s: Already set rpwm[0x%02X], new = 0x%02X!\n",
-                        __func__, pwrpriv->rpwm, pslv);
-               return;
-       }
-
-       if (padapter->bSurpriseRemoved == true ||
-           padapter->hw_init_completed == false) {
-               RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
-                        "%s: SurpriseRemoved(%d) hw_init_completed(%d)\n",
-                        __func__, padapter->bSurpriseRemoved,
-                        padapter->hw_init_completed);
-
-               pwrpriv->cpwm = PS_STATE_S4;
-
-               return;
-       }
-
-       if (padapter->bDriverStopped == true) {
-               RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
-                        "%s: change power state(0x%02X) when DriverStopped\n",
-                        __func__, pslv);
-
-               if (pslv < PS_STATE_S2) {
-                       RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
-                                "%s: Reject to enter PS_STATE(0x%02X) lower than S2 when DriverStopped!!\n",
-                                __func__, pslv);
-                       return;
-               }
-       }
-
-       rpwm = pslv | pwrpriv->tog;
-       RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
-                "rtw_set_rpwm23a: rpwm = 0x%02x cpwm = 0x%02x\n",
-                rpwm, pwrpriv->cpwm);
-
-       pwrpriv->rpwm = pslv;
-
-       rtl8723a_set_rpwm(padapter, rpwm);
-
-       pwrpriv->tog += 0x80;
-       pwrpriv->cpwm = pslv;
-}
-
-static bool PS_RDY_CHECK(struct rtw_adapter *padapter)
-{
-       unsigned long delta_time;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       delta_time = jiffies - pwrpriv->DelayLPSLastTimeStamp;
-
-       if (delta_time < LPS_DELAY_TIME)
-               return false;
-
-       if (!check_fwstate(pmlmepriv, _FW_LINKED) ||
-           check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) ||
-           check_fwstate(pmlmepriv, WIFI_AP_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_STATE))
-               return false;
-       if (pwrpriv->bInSuspend)
-               return false;
-       if (padapter->securitypriv.dot11AuthAlgrthm == dot11AuthAlgrthm_8021X &&
-           !padapter->securitypriv.binstallGrpkey) {
-               DBG_8723A("Group handshake still in progress !!!\n");
-               return false;
-       }
-       if (!rtw_cfg80211_pwr_mgmt(padapter))
-               return false;
-
-       return true;
-}
-
-void rtw_set_ps_mode23a(struct rtw_adapter *padapter, u8 ps_mode,
-                       u8 smart_ps, u8 bcn_ant_mode)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_notice_,
-                "%s: PowerMode =%d Smart_PS =%d\n",
-                __func__, ps_mode, smart_ps);
-
-       if (ps_mode > PM_Card_Disable) {
-               RT_TRACE(_module_rtl871x_pwrctrl_c_, _drv_err_,
-                        "ps_mode:%d error\n", ps_mode);
-               return;
-       }
-
-       if (pwrpriv->pwr_mode == ps_mode) {
-               if (PS_MODE_ACTIVE == ps_mode)
-                       return;
-
-               if (pwrpriv->smart_ps == smart_ps &&
-                   pwrpriv->bcn_ant_mode == bcn_ant_mode)
-                       return;
-       }
-
-       if (ps_mode == PS_MODE_ACTIVE) {
-               DBG_8723A("rtw_set_ps_mode23a: Leave 802.11 power save\n");
-
-               pwrpriv->pwr_mode = ps_mode;
-               rtw_set_rpwm23a(padapter, PS_STATE_S4);
-               rtl8723a_set_FwPwrMode_cmd(padapter, ps_mode);
-               pwrpriv->bFwCurrentInPSMode = false;
-       } else {
-               if (PS_RDY_CHECK(padapter) ||
-                   rtl8723a_BT_using_antenna_1(padapter)) {
-                       DBG_8723A("%s: Enter 802.11 power save\n", __func__);
-
-                       pwrpriv->bFwCurrentInPSMode = true;
-                       pwrpriv->pwr_mode = ps_mode;
-                       pwrpriv->smart_ps = smart_ps;
-                       pwrpriv->bcn_ant_mode = bcn_ant_mode;
-                       rtl8723a_set_FwPwrMode_cmd(padapter, ps_mode);
-
-                       rtw_set_rpwm23a(padapter, PS_STATE_S2);
-               }
-       }
-}
-
-/*
- * Return:
- *     0:      Leave OK
- *     -1:     Timeout
- *     -2:     Other error
- */
-s32 LPS_RF_ON_check23a(struct rtw_adapter *padapter, u32 delay_ms)
-{
-       unsigned long start_time, end_time;
-       u8 bAwake = false;
-       s32 err = 0;
-
-       start_time = jiffies;
-       end_time = start_time + msecs_to_jiffies(delay_ms);
-
-       while (1) {
-               bAwake = rtl8723a_get_fwlps_rf_on(padapter);
-               if (bAwake == true)
-                       break;
-
-               if (padapter->bSurpriseRemoved == true) {
-                       err = -2;
-                       DBG_8723A("%s: device surprise removed!!\n", __func__);
-                       break;
-               }
-
-               if (time_after(jiffies, end_time)) {
-                       err = -1;
-                       DBG_8723A("%s: Wait for FW LPS leave more than %u "
-                                 "ms!\n", __func__, delay_ms);
-                       break;
-               }
-               udelay(100);
-       }
-
-       return err;
-}
-
-/*     Description: */
-/*             Enter the leisure power save mode. */
-void LPS_Enter23a(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       if (!PS_RDY_CHECK(padapter))
-               return;
-
-       if (pwrpriv->bLeisurePs) {
-               /*  Idle for a while if we connect to AP a while ago. */
-               if (pwrpriv->LpsIdleCount >= 2) { /*   4 Sec */
-                       if (pwrpriv->pwr_mode == PS_MODE_ACTIVE) {
-                               pwrpriv->bpower_saving = true;
-                               DBG_8723A("%s smart_ps:%d\n", __func__,
-                                         pwrpriv->smart_ps);
-                               /* For Tenda W311R IOT issue */
-                               rtw_set_ps_mode23a(padapter,
-                                                  pwrpriv->power_mgnt,
-                                                  pwrpriv->smart_ps, 0);
-                       }
-               } else
-                       pwrpriv->LpsIdleCount++;
-       }
-}
-
-/*     Description: */
-/*             Leave the leisure power save mode. */
-void LPS_Leave23a(struct rtw_adapter *padapter)
-{
-#define LPS_LEAVE_TIMEOUT_MS 100
-
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       if (pwrpriv->bLeisurePs) {
-               if (pwrpriv->pwr_mode != PS_MODE_ACTIVE) {
-                       rtw_set_ps_mode23a(padapter, PS_MODE_ACTIVE, 0, 0);
-
-                       if (pwrpriv->pwr_mode == PS_MODE_ACTIVE)
-                               LPS_RF_ON_check23a(padapter,
-                                                  LPS_LEAVE_TIMEOUT_MS);
-               }
-       }
-
-       pwrpriv->bpower_saving = false;
-}
-
-/*  Description: Leave all power save mode: LPS, FwLPS, IPS if needed. */
-/*  Move code to function by tynli. 2010.03.26. */
-void LeaveAllPowerSaveMode23a(struct rtw_adapter *Adapter)
-{
-       struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
-       u8 enqueue = 0;
-
-       /* DBG_8723A("%s.....\n", __func__); */
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               rtw_lps_ctrl_wk_cmd23a(Adapter, LPS_CTRL_LEAVE, enqueue);
-}
-
-void rtw_init_pwrctrl_priv23a(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       sema_init(&pwrctrlpriv->lock, 1);
-       pwrctrlpriv->rf_pwrstate = rf_on;
-       pwrctrlpriv->ips_enter23a_cnts = 0;
-       pwrctrlpriv->ips_leave23a_cnts = 0;
-       pwrctrlpriv->bips_processing = false;
-
-       pwrctrlpriv->ips_mode = padapter->registrypriv.ips_mode;
-       pwrctrlpriv->ips_mode_req = padapter->registrypriv.ips_mode;
-
-       pwrctrlpriv->pwr_state_check_interval = RTW_PWR_STATE_CHK_INTERVAL;
-       pwrctrlpriv->pwr_state_check_cnts = 0;
-       pwrctrlpriv->bInSuspend = false;
-       pwrctrlpriv->bkeepfwalive = false;
-
-       pwrctrlpriv->LpsIdleCount = 0;
-
-       /*  PS_MODE_MIN; */
-       pwrctrlpriv->power_mgnt = padapter->registrypriv.power_mgnt;
-       pwrctrlpriv->bLeisurePs =
-               (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt)?true:false;
-
-       pwrctrlpriv->bFwCurrentInPSMode = false;
-
-       pwrctrlpriv->rpwm = 0;
-       pwrctrlpriv->cpwm = PS_STATE_S4;
-
-       pwrctrlpriv->pwr_mode = PS_MODE_ACTIVE;
-       pwrctrlpriv->smart_ps = padapter->registrypriv.smart_ps;
-       pwrctrlpriv->bcn_ant_mode = 0;
-
-       pwrctrlpriv->tog = 0x80;
-
-       pwrctrlpriv->btcoex_rfon = false;
-
-       setup_timer(&pwrctrlpriv->pwr_state_check_timer,
-                   pwr_state_check_handler, (unsigned long)padapter);
-}
-
-void rtw_free_pwrctrl_priv(struct rtw_adapter *adapter)
-{
-}
-
-inline void rtw_set_ips_deny23a(struct rtw_adapter *padapter, u32 ms)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-
-       pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ms);
-}
-
-/*
-* rtw_pwr_wakeup - Wake the NIC up from: 1)IPS. 2)USB autosuspend
-* @adapter: pointer to _adapter structure
-* @ips_deffer_ms: the ms will prevent from falling into IPS after wakeup
-* Return _SUCCESS or _FAIL
-*/
-
-int _rtw_pwr_wakeup23a(struct rtw_adapter *padapter, u32 ips_deffer_ms, const char *caller)
-{
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int ret = _SUCCESS;
-       unsigned long start = jiffies;
-       unsigned long new_deny_time;
-
-       new_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms);
-
-       if (time_before(pwrpriv->ips_deny_time, new_deny_time))
-               pwrpriv->ips_deny_time = new_deny_time;
-
-       if (pwrpriv->ps_processing) {
-               DBG_8723A("%s wait ps_processing...\n", __func__);
-               while (pwrpriv->ps_processing &&
-                      jiffies_to_msecs(jiffies - start) <= 3000)
-                       msleep(10);
-               if (pwrpriv->ps_processing)
-                       DBG_8723A("%s wait ps_processing timeout\n", __func__);
-               else
-                       DBG_8723A("%s wait ps_processing done\n", __func__);
-       }
-
-       if (rtw_sreset_inprogress(padapter)) {
-               DBG_8723A("%s wait sreset_inprogress...\n", __func__);
-               while (rtw_sreset_inprogress(padapter) &&
-                      jiffies_to_msecs(jiffies - start) <= 4000)
-                       msleep(10);
-               if (rtw_sreset_inprogress(padapter))
-                       DBG_8723A("%s wait sreset_inprogress timeout\n",
-                                 __func__);
-               else
-                       DBG_8723A("%s wait sreset_inprogress done\n", __func__);
-       }
-
-       if (pwrpriv->bInSuspend) {
-               DBG_8723A("%s wait bInSuspend...\n", __func__);
-               while (pwrpriv->bInSuspend &&
-                      (jiffies_to_msecs(jiffies - start) <= 3000)) {
-                       msleep(10);
-               }
-               if (pwrpriv->bInSuspend)
-                       DBG_8723A("%s wait bInSuspend timeout\n", __func__);
-               else
-                       DBG_8723A("%s wait bInSuspend done\n", __func__);
-       }
-
-       /* System suspend is not allowed to wakeup */
-       if (pwrpriv->bInSuspend) {
-               ret = _FAIL;
-               goto exit;
-       }
-
-       /* I think this should be check in IPS, LPS, autosuspend functions... */
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               ret = _SUCCESS;
-               goto exit;
-       }
-
-       if (rf_off == pwrpriv->rf_pwrstate) {
-               DBG_8723A("%s call ips_leave23a....\n", __func__);
-               if (ips_leave23a(padapter)== _FAIL) {
-                       DBG_8723A("======> ips_leave23a fail.............\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-       }
-
-       /* TODO: the following checking need to be merged... */
-       if (padapter->bDriverStopped || !padapter->bup ||
-           !padapter->hw_init_completed) {
-               DBG_8723A("%s: bDriverStopped =%d, bup =%d, hw_init_completed "
-                         "=%u\n", caller, padapter->bDriverStopped,
-                         padapter->bup, padapter->hw_init_completed);
-               ret = _FAIL;
-               goto exit;
-       }
-
-exit:
-       new_deny_time = jiffies + msecs_to_jiffies(ips_deffer_ms);
-       if (time_before(pwrpriv->ips_deny_time, new_deny_time))
-               pwrpriv->ips_deny_time = new_deny_time;
-       return ret;
-}
-
-int rtw_pm_set_lps23a(struct rtw_adapter *padapter, u8 mode)
-{
-       int ret = 0;
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       if (mode < PS_MODE_NUM) {
-               if (pwrctrlpriv->power_mgnt != mode) {
-                       if (PS_MODE_ACTIVE == mode)
-                               LeaveAllPowerSaveMode23a(padapter);
-                       else
-                               pwrctrlpriv->LpsIdleCount = 2;
-                       pwrctrlpriv->power_mgnt = mode;
-                       pwrctrlpriv->bLeisurePs =
-                               (PS_MODE_ACTIVE != pwrctrlpriv->power_mgnt) ?
-                               true:false;
-               }
-       } else
-               ret = -EINVAL;
-
-       return ret;
-}
-
-int rtw_pm_set_ips23a(struct rtw_adapter *padapter, u8 mode)
-{
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       if (mode != IPS_NORMAL && mode != IPS_LEVEL_2 && mode != IPS_NONE)
-               return -EINVAL;
-
-       pwrctrlpriv->ips_mode_req = mode;
-       if (mode == IPS_NONE) {
-               DBG_8723A("%s %s\n", __func__, "IPS_NONE");
-               if (padapter->bSurpriseRemoved == 0 &&
-                   rtw_pwr_wakeup(padapter) == _FAIL)
-                       return -EFAULT;
-       }
-
-       return 0;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_recv.c b/drivers/staging/rtl8723au/core/rtw_recv.c
deleted file mode 100644 (file)
index 150dabc..0000000
+++ /dev/null
@@ -1,2204 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_RECV_C_
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <mlme_osdep.h>
-#include <linux/ip.h>
-#include <linux/if_ether.h>
-#include <usb_ops.h>
-#include <linux/ieee80211.h>
-#include <wifi.h>
-#include <rtl8723a_recv.h>
-#include <rtl8723a_xmit.h>
-
-void rtw_signal_stat_timer_hdl23a(unsigned long data);
-
-void _rtw_init_sta_recv_priv23a(struct sta_recv_priv *psta_recvpriv)
-{
-
-
-
-       spin_lock_init(&psta_recvpriv->lock);
-
-       /* for (i = 0; i<MAX_RX_NUMBLKS; i++) */
-       /*      _rtw_init_queue23a(&psta_recvpriv->blk_strms[i]); */
-
-       _rtw_init_queue23a(&psta_recvpriv->defrag_q);
-
-
-}
-
-int _rtw_init_recv_priv23a(struct recv_priv *precvpriv,
-                       struct rtw_adapter *padapter)
-{
-       struct recv_frame *precvframe;
-       int i;
-       int res = _SUCCESS;
-
-       spin_lock_init(&precvpriv->lock);
-
-       _rtw_init_queue23a(&precvpriv->free_recv_queue);
-       _rtw_init_queue23a(&precvpriv->recv_pending_queue);
-       _rtw_init_queue23a(&precvpriv->uc_swdec_pending_queue);
-
-       precvpriv->adapter = padapter;
-
-       for (i = 0; i < NR_RECVFRAME ; i++) {
-               precvframe = kzalloc(sizeof(struct recv_frame), GFP_KERNEL);
-               if (!precvframe)
-                       break;
-               INIT_LIST_HEAD(&precvframe->list);
-
-               list_add_tail(&precvframe->list,
-                             &precvpriv->free_recv_queue.queue);
-
-               precvframe->adapter = padapter;
-               precvframe++;
-       }
-
-       precvpriv->free_recvframe_cnt = i;
-       precvpriv->rx_pending_cnt = 1;
-
-       res = rtl8723au_init_recv_priv(padapter);
-
-       setup_timer(&precvpriv->signal_stat_timer, rtw_signal_stat_timer_hdl23a,
-                   (unsigned long)padapter);
-
-       precvpriv->signal_stat_sampling_interval = 1000; /* ms */
-
-       rtw_set_signal_stat_timer(precvpriv);
-
-       return res;
-}
-
-void _rtw_free_recv_priv23a(struct recv_priv *precvpriv)
-{
-       struct rtw_adapter *padapter = precvpriv->adapter;
-       struct recv_frame *precvframe, *ptmp;
-
-       rtw_free_uc_swdec_pending_queue23a(padapter);
-
-       list_for_each_entry_safe(precvframe, ptmp,
-                                &precvpriv->free_recv_queue.queue, list) {
-               list_del_init(&precvframe->list);
-               kfree(precvframe);
-       }
-
-       rtl8723au_free_recv_priv(padapter);
-}
-
-struct recv_frame *rtw_alloc_recvframe23a(struct rtw_queue *pfree_recv_queue)
-{
-       struct recv_frame *pframe;
-       struct rtw_adapter *padapter;
-       struct recv_priv *precvpriv;
-
-       spin_lock_bh(&pfree_recv_queue->lock);
-
-       pframe = list_first_entry_or_null(&pfree_recv_queue->queue,
-                                         struct recv_frame, list);
-       if (pframe) {
-               list_del_init(&pframe->list);
-               padapter = pframe->adapter;
-               if (padapter) {
-                       precvpriv = &padapter->recvpriv;
-                       if (pfree_recv_queue == &precvpriv->free_recv_queue)
-                               precvpriv->free_recvframe_cnt--;
-               }
-       }
-
-       spin_unlock_bh(&pfree_recv_queue->lock);
-
-       return pframe;
-}
-
-int rtw_free_recvframe23a(struct recv_frame *precvframe)
-{
-       struct rtw_adapter *padapter = precvframe->adapter;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       struct rtw_queue *pfree_recv_queue;
-
-       if (precvframe->pkt) {
-               dev_kfree_skb_any(precvframe->pkt);/* free skb by driver */
-               precvframe->pkt = NULL;
-       }
-
-       pfree_recv_queue = &precvpriv->free_recv_queue;
-       spin_lock_bh(&pfree_recv_queue->lock);
-
-       list_del_init(&precvframe->list);
-
-       list_add_tail(&precvframe->list, get_list_head(pfree_recv_queue));
-
-       if (padapter) {
-               if (pfree_recv_queue == &precvpriv->free_recv_queue)
-                       precvpriv->free_recvframe_cnt++;
-       }
-
-       spin_unlock_bh(&pfree_recv_queue->lock);
-
-
-
-       return _SUCCESS;
-}
-
-int rtw_enqueue_recvframe23a(struct recv_frame *precvframe, struct rtw_queue *queue)
-{
-       struct rtw_adapter *padapter = precvframe->adapter;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       spin_lock_bh(&queue->lock);
-
-       list_del_init(&precvframe->list);
-
-       list_add_tail(&precvframe->list, get_list_head(queue));
-
-       if (padapter) {
-               if (queue == &precvpriv->free_recv_queue)
-                       precvpriv->free_recvframe_cnt++;
-       }
-
-       spin_unlock_bh(&queue->lock);
-
-       return _SUCCESS;
-}
-
-/*
-caller : defrag ; recvframe_chk_defrag23a in recv_thread  (passive)
-pframequeue: defrag_queue : will be accessed in recv_thread  (passive)
-
-using spinlock to protect
-
-*/
-
-static void rtw_free_recvframe23a_queue(struct rtw_queue *pframequeue)
-{
-       struct recv_frame *hdr, *ptmp;
-       struct list_head *phead;
-
-       spin_lock(&pframequeue->lock);
-       phead = get_list_head(pframequeue);
-       list_for_each_entry_safe(hdr, ptmp, phead, list)
-               rtw_free_recvframe23a(hdr);
-       spin_unlock(&pframequeue->lock);
-}
-
-u32 rtw_free_uc_swdec_pending_queue23a(struct rtw_adapter *adapter)
-{
-       u32 cnt = 0;
-       struct recv_frame *pending_frame;
-
-       while ((pending_frame = rtw_alloc_recvframe23a(&adapter->recvpriv.uc_swdec_pending_queue))) {
-               rtw_free_recvframe23a(pending_frame);
-               DBG_8723A("%s: dequeue uc_swdec_pending_queue\n", __func__);
-               cnt++;
-       }
-
-       return cnt;
-}
-
-struct recv_buf *rtw_dequeue_recvbuf23a (struct rtw_queue *queue)
-{
-       unsigned long irqL;
-       struct recv_buf *precvbuf;
-
-       spin_lock_irqsave(&queue->lock, irqL);
-
-       precvbuf = list_first_entry_or_null(&queue->queue,
-                                           struct recv_buf, list);
-       if (precvbuf)
-               list_del_init(&precvbuf->list);
-
-       spin_unlock_irqrestore(&queue->lock, irqL);
-
-       return precvbuf;
-}
-
-int recvframe_chkmic(struct rtw_adapter *adapter,
-                    struct recv_frame *precvframe);
-int recvframe_chkmic(struct rtw_adapter *adapter,
-                    struct recv_frame *precvframe) {
-
-       int     i, res = _SUCCESS;
-       u32     datalen;
-       u8      miccode[8];
-       u8      bmic_err = false, brpt_micerror = true;
-       u8      *pframe, *payload, *pframemic;
-       u8      *mickey;
-       struct  sta_info *stainfo;
-       struct  rx_pkt_attrib *prxattrib = &precvframe->attrib;
-       struct  security_priv *psecuritypriv = &adapter->securitypriv;
-
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-
-       stainfo = rtw_get_stainfo23a(&adapter->stapriv, &prxattrib->ta[0]);
-
-       if (prxattrib->encrypt == WLAN_CIPHER_SUITE_TKIP) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "recvframe_chkmic:prxattrib->encrypt == WLAN_CIPHER_SUITE_TKIP\n");
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "recvframe_chkmic:da = %pM\n", prxattrib->ra);
-
-               /* calculate mic code */
-               if (stainfo != NULL) {
-                       if (is_multicast_ether_addr(prxattrib->ra)) {
-                               mickey = &psecuritypriv->dot118021XGrprxmickey[prxattrib->key_index].skey[0];
-
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                        "recvframe_chkmic: bcmc key\n");
-
-                               if (!psecuritypriv->binstallGrpkey) {
-                                       res = _FAIL;
-                                       RT_TRACE(_module_rtl871x_recv_c_,
-                                                _drv_err_,
-                                                "recvframe_chkmic:didn't install group key!\n");
-                                       DBG_8723A("\n recvframe_chkmic:didn't "
-                                                 "install group key!!!!!!\n");
-                                       goto exit;
-                               }
-                       } else {
-                               mickey = &stainfo->dot11tkiprxmickey.skey[0];
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "recvframe_chkmic: unicast key\n");
-                       }
-
-                       /* icv_len included the mic code */
-                       datalen = precvframe->pkt->len-prxattrib->
-                               hdrlen-prxattrib->iv_len-prxattrib->icv_len - 8;
-                       pframe = precvframe->pkt->data;
-                       payload = pframe + prxattrib->hdrlen +
-                               prxattrib->iv_len;
-
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "prxattrib->iv_len =%d prxattrib->icv_len =%d\n",
-                                prxattrib->iv_len, prxattrib->icv_len);
-
-                       /* care the length of the data */
-                       rtw_seccalctkipmic23a(mickey, pframe, payload,
-                                          datalen, &miccode[0],
-                                          (unsigned char)prxattrib->priority);
-
-                       pframemic = payload + datalen;
-
-                       bmic_err = false;
-
-                       for (i = 0; i < 8; i++) {
-                               if (miccode[i] != *(pframemic + i)) {
-                                       RT_TRACE(_module_rtl871x_recv_c_,
-                                                _drv_err_,
-                                                "recvframe_chkmic:miccode[%d](%02x) != *(pframemic+%d)(%02x)\n",
-                                                i, miccode[i],
-                                                i, *(pframemic + i));
-                                       bmic_err = true;
-                               }
-                       }
-
-                       if (bmic_err == true) {
-                               int i;
-
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "*(pframemic-8)-*(pframemic-1) =%*phC\n",
-                                        8, pframemic - 8);
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "*(pframemic-16)-*(pframemic-9) =%*phC\n",
-                                        8, pframemic - 16);
-
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "====== demp packet (len =%d) ======\n",
-                                        precvframe->pkt->len);
-                               for (i = 0; i < precvframe->pkt->len; i = i + 8) {
-                                       RT_TRACE(_module_rtl871x_recv_c_,
-                                                _drv_err_, "%*phC\n",
-                                                8, precvframe->pkt->data + i);
-                               }
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "====== demp packet end [len =%d]======\n",
-                                        precvframe->pkt->len);
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "hrdlen =%d\n", prxattrib->hdrlen);
-
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                        "ra = %pM psecuritypriv->binstallGrpkey =%d\n",
-                                        prxattrib->ra,
-                                        psecuritypriv->binstallGrpkey);
-
-                               /*  double check key_index for some timing
-                                   issue, cannot compare with
-                                   psecuritypriv->dot118021XGrpKeyid also
-                                   cause timing issue */
-                               if ((is_multicast_ether_addr(prxattrib->ra)) &&
-                                   (prxattrib->key_index !=
-                                    pmlmeinfo->key_index))
-                                       brpt_micerror = false;
-
-                               if ((prxattrib->bdecrypted == true) &&
-                                   (brpt_micerror == true)) {
-                                       rtw_handle_tkip_mic_err23a(adapter, (u8)is_multicast_ether_addr(prxattrib->ra));
-                                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                                "mic error :prxattrib->bdecrypted =%d\n",
-                                                prxattrib->bdecrypted);
-                                       DBG_8723A(" mic error :prxattrib->"
-                                                 "bdecrypted =%d\n",
-                                                 prxattrib->bdecrypted);
-                               } else {
-                                       RT_TRACE(_module_rtl871x_recv_c_,
-                                                _drv_err_,
-                                                "mic error :prxattrib->bdecrypted =%d\n",
-                                                prxattrib->bdecrypted);
-                                       DBG_8723A(" mic error :prxattrib->"
-                                                 "bdecrypted =%d\n",
-                                                 prxattrib->bdecrypted);
-                               }
-
-                               res = _FAIL;
-                       } else {
-                               /* mic checked ok */
-                               if (!psecuritypriv->bcheck_grpkey &&
-                                   is_multicast_ether_addr(prxattrib->ra)) {
-                                       psecuritypriv->bcheck_grpkey = 1;
-                                       RT_TRACE(_module_rtl871x_recv_c_,
-                                                _drv_err_,
-                                                "psecuritypriv->bcheck_grpkey = true\n");
-                               }
-                       }
-               } else {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "recvframe_chkmic: rtw_get_stainfo23a ==NULL!!!\n");
-               }
-
-               skb_trim(precvframe->pkt, precvframe->pkt->len - 8);
-       }
-
-exit:
-
-
-
-       return res;
-}
-
-/* decrypt and set the ivlen, icvlen of the recv_frame */
-struct recv_frame *decryptor(struct rtw_adapter *padapter,
-                            struct recv_frame *precv_frame);
-struct recv_frame *decryptor(struct rtw_adapter *padapter,
-                            struct recv_frame *precv_frame)
-{
-       struct rx_pkt_attrib *prxattrib = &precv_frame->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct recv_frame *return_packet = precv_frame;
-       int res = _SUCCESS;
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                "prxstat->decrypted =%x prxattrib->encrypt = 0x%03x\n",
-                prxattrib->bdecrypted, prxattrib->encrypt);
-
-       if (prxattrib->encrypt > 0) {
-               u8 *iv = precv_frame->pkt->data + prxattrib->hdrlen;
-
-               prxattrib->key_index = (((iv[3]) >> 6) & 0x3);
-
-               if (prxattrib->key_index > WEP_KEYS) {
-                       DBG_8723A("prxattrib->key_index(%d) > WEP_KEYS\n",
-                                 prxattrib->key_index);
-
-                       switch (prxattrib->encrypt) {
-                       case WLAN_CIPHER_SUITE_WEP40:
-                       case WLAN_CIPHER_SUITE_WEP104:
-                               prxattrib->key_index =
-                                       psecuritypriv->dot11PrivacyKeyIndex;
-                               break;
-                       case WLAN_CIPHER_SUITE_TKIP:
-                       case WLAN_CIPHER_SUITE_CCMP:
-                       default:
-                               prxattrib->key_index =
-                                       psecuritypriv->dot118021XGrpKeyid;
-                               break;
-                       }
-               }
-       }
-
-       if ((prxattrib->encrypt > 0) && ((prxattrib->bdecrypted == 0))) {
-               psecuritypriv->hw_decrypted = 0;
-               switch (prxattrib->encrypt) {
-               case WLAN_CIPHER_SUITE_WEP40:
-               case WLAN_CIPHER_SUITE_WEP104:
-                       rtw_wep_decrypt23a(padapter, precv_frame);
-                       break;
-               case WLAN_CIPHER_SUITE_TKIP:
-                       res = rtw_tkip_decrypt23a(padapter, precv_frame);
-                       break;
-               case WLAN_CIPHER_SUITE_CCMP:
-                       res = rtw_aes_decrypt23a(padapter, precv_frame);
-                       break;
-               default:
-                       break;
-               }
-       } else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
-                  (psecuritypriv->busetkipkey == 1 ||
-                   prxattrib->encrypt != WLAN_CIPHER_SUITE_TKIP)) {
-                       psecuritypriv->hw_decrypted = 1;
-       }
-
-       if (res == _FAIL) {
-               rtw_free_recvframe23a(return_packet);
-               return_packet = NULL;
-       }
-
-
-
-       return return_packet;
-}
-
-/* set the security information in the recv_frame */
-static struct recv_frame *portctrl(struct rtw_adapter *adapter,
-                                  struct recv_frame *precv_frame)
-{
-       u8 *psta_addr, *ptr;
-       uint auth_alg;
-       struct recv_frame *pfhdr;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv ;
-       struct recv_frame *prtnframe;
-       u16 ether_type;
-       u16 eapol_type = ETH_P_PAE;/* for Funia BD's WPA issue */
-       struct rx_pkt_attrib *pattrib;
-
-       pstapriv = &adapter->stapriv;
-
-       auth_alg = adapter->securitypriv.dot11AuthAlgrthm;
-
-       pfhdr = precv_frame;
-       pattrib = &pfhdr->attrib;
-       psta_addr = pattrib->ta;
-       psta = rtw_get_stainfo23a(pstapriv, psta_addr);
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                "########portctrl:adapter->securitypriv.dot11AuthAlgrthm =%d\n",
-                adapter->securitypriv.dot11AuthAlgrthm);
-
-       prtnframe = precv_frame;
-
-       if (auth_alg == dot11AuthAlgrthm_8021X) {
-               /* get ether_type */
-               ptr = pfhdr->pkt->data + pfhdr->attrib.hdrlen;
-
-               ether_type = (ptr[6] << 8) | ptr[7];
-
-               if (psta && psta->ieee8021x_blocked) {
-                       /* blocked */
-                       /* only accept EAPOL frame */
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "########portctrl:psta->ieee8021x_blocked ==1\n");
-
-                       if (ether_type != eapol_type) {
-                               /* free this frame */
-                               rtw_free_recvframe23a(precv_frame);
-                               prtnframe = NULL;
-                       }
-               }
-       }
-
-       return prtnframe;
-}
-
-int recv_decache(struct recv_frame *precv_frame, u8 bretry,
-                struct stainfo_rxcache *prxcache);
-int recv_decache(struct recv_frame *precv_frame, u8 bretry,
-                struct stainfo_rxcache *prxcache)
-{
-       int tid = precv_frame->attrib.priority;
-
-       u16 seq_ctrl = ((precv_frame->attrib.seq_num & 0xffff) << 4) |
-               (precv_frame->attrib.frag_num & 0xf);
-
-
-
-       if (tid > 15) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                        "recv_decache, (tid>15)! seq_ctrl = 0x%x, tid = 0x%x\n",
-                        seq_ctrl, tid);
-
-               return _FAIL;
-       }
-
-       if (1) { /* if (bretry) */
-               if (seq_ctrl == prxcache->tid_rxseq[tid]) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                "recv_decache, seq_ctrl = 0x%x, tid = 0x%x, tid_rxseq = 0x%x\n",
-                                seq_ctrl, tid, prxcache->tid_rxseq[tid]);
-
-                       return _FAIL;
-               }
-       }
-
-       prxcache->tid_rxseq[tid] = seq_ctrl;
-
-
-
-       return _SUCCESS;
-}
-
-void process23a_pwrbit_data(struct rtw_adapter *padapter,
-                        struct recv_frame *precv_frame);
-void process23a_pwrbit_data(struct rtw_adapter *padapter,
-                        struct recv_frame *precv_frame)
-{
-#ifdef CONFIG_8723AU_AP_MODE
-       unsigned char pwrbit;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta;
-
-       psta = rtw_get_stainfo23a(pstapriv, pattrib->src);
-
-       if (psta) {
-               pwrbit = ieee80211_has_pm(hdr->frame_control);
-
-               if (pwrbit) {
-                       if (!(psta->state & WIFI_SLEEP_STATE))
-                               stop_sta_xmit23a(padapter, psta);
-               } else {
-                       if (psta->state & WIFI_SLEEP_STATE)
-                               wakeup_sta_to_xmit23a(padapter, psta);
-               }
-       }
-
-#endif
-}
-
-void process_wmmps_data(struct rtw_adapter *padapter,
-                       struct recv_frame *precv_frame);
-void process_wmmps_data(struct rtw_adapter *padapter,
-                       struct recv_frame *precv_frame)
-{
-#ifdef CONFIG_8723AU_AP_MODE
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta;
-
-       psta = rtw_get_stainfo23a(pstapriv, pattrib->src);
-
-       if (!psta)
-               return;
-
-
-       if (!psta->qos_option)
-               return;
-
-       if (!(psta->qos_info & 0xf))
-               return;
-
-       if (psta->state & WIFI_SLEEP_STATE) {
-               u8 wmmps_ac = 0;
-
-               switch (pattrib->priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               if (wmmps_ac) {
-                       if (psta->sleepq_ac_len > 0) {
-                               /* process received triggered frame */
-                               xmit_delivery_enabled_frames23a(padapter, psta);
-                       } else {
-                               /* issue one qos null frame with More data bit = 0 and the EOSP bit set (= 1) */
-                               issue_qos_nulldata23a(padapter, psta->hwaddr,
-                                                  (u16)pattrib->priority,
-                                                  0, 0);
-                       }
-               }
-       }
-
-#endif
-}
-
-static void count_rx_stats(struct rtw_adapter *padapter,
-                          struct recv_frame *prframe, struct sta_info *sta)
-{
-       int sz;
-       struct sta_info *psta = NULL;
-       struct stainfo_stats *pstats = NULL;
-       struct rx_pkt_attrib *pattrib = & prframe->attrib;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       sz = prframe->pkt->len;
-       precvpriv->rx_bytes += sz;
-
-       padapter->mlmepriv.LinkDetectInfo.NumRxOkInPeriod++;
-
-       if ((!is_broadcast_ether_addr(pattrib->dst)) &&
-           (!is_multicast_ether_addr(pattrib->dst)))
-               padapter->mlmepriv.LinkDetectInfo.NumRxUnicastOkInPeriod++;
-
-       if (sta)
-               psta = sta;
-       else
-               psta = prframe->psta;
-
-       if (psta) {
-               pstats = &psta->sta_stats;
-
-               pstats->rx_data_pkts++;
-               pstats->rx_bytes += sz;
-       }
-}
-
-static int sta2sta_data_frame(struct rtw_adapter *adapter,
-                             struct recv_frame *precv_frame,
-                             struct sta_info**psta)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       int ret = _SUCCESS;
-       struct rx_pkt_attrib *pattrib = & precv_frame->attrib;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
-       u8 *sta_addr = NULL;
-       int bmcast = is_multicast_ether_addr(pattrib->dst);
-
-
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-
-               /*  filter packets that SA is myself or multicast or broadcast */
-               if (ether_addr_equal(myhwaddr, pattrib->src)) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "SA == myself\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (!ether_addr_equal(myhwaddr, pattrib->dst) && !bmcast) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (ether_addr_equal(pattrib->bssid, "\x0\x0\x0\x0\x0\x0") ||
-                   ether_addr_equal(mybssid, "\x0\x0\x0\x0\x0\x0") ||
-                   !ether_addr_equal(pattrib->bssid, mybssid)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               sta_addr = pattrib->src;
-       } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               /*  For Station mode, sa and bssid should always be BSSID,
-                   and DA is my mac-address */
-               if (!ether_addr_equal(pattrib->bssid, pattrib->src)) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "bssid != TA under STATION_MODE; drop pkt\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               sta_addr = pattrib->bssid;
-
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               if (bmcast) {
-                       /*  For AP mode, if DA == MCAST, then BSSID should be also MCAST */
-                       if (!is_multicast_ether_addr(pattrib->bssid)) {
-                               ret = _FAIL;
-                               goto exit;
-                       }
-               } else { /*  not mc-frame */
-                       /*  For AP mode, if DA is non-MCAST, then it must
-                           be BSSID, and bssid == BSSID */
-                       if (!ether_addr_equal(pattrib->bssid, pattrib->dst)) {
-                               ret = _FAIL;
-                               goto exit;
-                       }
-
-                       sta_addr = pattrib->src;
-               }
-       } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-               ether_addr_copy(pattrib->dst, hdr->addr1);
-               ether_addr_copy(pattrib->src, hdr->addr2);
-               ether_addr_copy(pattrib->bssid, hdr->addr3);
-               ether_addr_copy(pattrib->ra, pattrib->dst);
-               ether_addr_copy(pattrib->ta, pattrib->src);
-
-               sta_addr = mybssid;
-       } else {
-               ret  = _FAIL;
-       }
-
-       if (bmcast)
-               *psta = rtw_get_bcmc_stainfo23a(adapter);
-       else
-               *psta = rtw_get_stainfo23a(pstapriv, sta_addr); /*  get ap_info */
-
-       if (*psta == NULL) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "can't get psta under sta2sta_data_frame ; drop pkt\n");
-               ret = _FAIL;
-               goto exit;
-       }
-
-exit:
-
-       return ret;
-}
-
-int ap2sta_data_frame(struct rtw_adapter *adapter,
-                     struct recv_frame *precv_frame,
-                     struct sta_info **psta);
-int ap2sta_data_frame(struct rtw_adapter *adapter,
-                     struct recv_frame *precv_frame,
-                     struct sta_info **psta)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       struct rx_pkt_attrib *pattrib = & precv_frame->attrib;
-       int ret = _SUCCESS;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       u8 *mybssid  = get_bssid(pmlmepriv);
-       u8 *myhwaddr = myid(&adapter->eeprompriv);
-       int bmcast = is_multicast_ether_addr(pattrib->dst);
-
-
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
-           (check_fwstate(pmlmepriv, _FW_LINKED) ||
-            check_fwstate(pmlmepriv, _FW_UNDER_LINKING))) {
-
-               /* filter packets that SA is myself or multicast or broadcast */
-               if (ether_addr_equal(myhwaddr, pattrib->src)) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "SA == myself\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               /*  da should be for me */
-               if (!ether_addr_equal(myhwaddr, pattrib->dst) && !bmcast) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "ap2sta_data_frame:  compare DA failed; DA=%pM\n",
-                                pattrib->dst);
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               /*  check BSSID */
-               if (ether_addr_equal(pattrib->bssid, "\x0\x0\x0\x0\x0\x0") ||
-                   ether_addr_equal(mybssid, "\x0\x0\x0\x0\x0\x0") ||
-                   !ether_addr_equal(pattrib->bssid, mybssid)) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "ap2sta_data_frame:  compare BSSID failed; BSSID=%pM\n",
-                                pattrib->bssid);
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "mybssid=%pM\n", mybssid);
-
-                       if (!bmcast) {
-                               DBG_8723A("issue_deauth23a to the nonassociated ap=%pM for the reason(7)\n",
-                                         pattrib->bssid);
-                               issue_deauth23a(adapter, pattrib->bssid,
-                                            WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-                       }
-
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (bmcast)
-                       *psta = rtw_get_bcmc_stainfo23a(adapter);
-               else
-                       /*  get ap_info */
-                       *psta = rtw_get_stainfo23a(pstapriv, pattrib->bssid);
-
-               if (*psta == NULL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "ap2sta: can't get psta under STATION_MODE; drop pkt\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               if (ieee80211_is_nullfunc(hdr->frame_control)) {
-                       /* No data, will not indicate to upper layer,
-                          temporily count it here */
-                       count_rx_stats(adapter, precv_frame, *psta);
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-
-       } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE) &&
-                  check_fwstate(pmlmepriv, _FW_LINKED)) {
-               ether_addr_copy(pattrib->dst, hdr->addr1);
-               ether_addr_copy(pattrib->src, hdr->addr2);
-               ether_addr_copy(pattrib->bssid, hdr->addr3);
-               ether_addr_copy(pattrib->ra, pattrib->dst);
-               ether_addr_copy(pattrib->ta, pattrib->src);
-
-               /*  */
-               ether_addr_copy(pattrib->bssid,  mybssid);
-
-               /*  get sta_info */
-               *psta = rtw_get_stainfo23a(pstapriv, pattrib->bssid);
-               if (*psta == NULL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "can't get psta under MP_MODE ; drop pkt\n");
-                       ret = _FAIL;
-                       goto exit;
-               }
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               /* Special case */
-               ret = RTW_RX_HANDLED;
-               goto exit;
-       } else {
-               if (ether_addr_equal(myhwaddr, pattrib->dst) && !bmcast) {
-                       *psta = rtw_get_stainfo23a(pstapriv, pattrib->bssid);
-                       if (*psta == NULL) {
-                               DBG_8723A("issue_deauth23a to the ap=%pM for the reason(7)\n",
-                                         pattrib->bssid);
-
-                               issue_deauth23a(adapter, pattrib->bssid,
-                                            WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-                       }
-               }
-
-               ret = _FAIL;
-       }
-
-exit:
-
-
-
-       return ret;
-}
-
-int sta2ap_data_frame(struct rtw_adapter *adapter,
-                     struct recv_frame *precv_frame,
-                     struct sta_info **psta);
-int sta2ap_data_frame(struct rtw_adapter *adapter,
-                     struct recv_frame *precv_frame,
-                     struct sta_info **psta)
-{
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       struct rx_pkt_attrib *pattrib = & precv_frame->attrib;
-       struct sta_priv *pstapriv = &adapter->stapriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       unsigned char *mybssid = get_bssid(pmlmepriv);
-       int ret = _SUCCESS;
-
-
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               /* For AP mode, RA = BSSID, TX = STA(SRC_ADDR), A3 = DST_ADDR */
-               if (!ether_addr_equal(pattrib->bssid, mybssid)) {
-                       ret = _FAIL;
-                       goto exit;
-               }
-
-               *psta = rtw_get_stainfo23a(pstapriv, pattrib->src);
-               if (*psta == NULL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "can't get psta under AP_MODE; drop pkt\n");
-                       DBG_8723A("issue_deauth23a to sta=%pM for the reason(7)\n",
-                                 pattrib->src);
-
-                       issue_deauth23a(adapter, pattrib->src,
-                                    WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-
-               process23a_pwrbit_data(adapter, precv_frame);
-
-               /* We only get here if it's a data frame, so no need to
-                * confirm data frame type first */
-               if (ieee80211_is_data_qos(hdr->frame_control))
-                       process_wmmps_data(adapter, precv_frame);
-
-               if (ieee80211_is_nullfunc(hdr->frame_control)) {
-                       /* No data, will not indicate to upper layer,
-                          temporily count it here */
-                       count_rx_stats(adapter, precv_frame, *psta);
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-       } else {
-               u8 *myhwaddr = myid(&adapter->eeprompriv);
-
-               if (!ether_addr_equal(pattrib->ra, myhwaddr)) {
-                       ret = RTW_RX_HANDLED;
-                       goto exit;
-               }
-               DBG_8723A("issue_deauth23a to sta=%pM for the reason(7)\n",
-                         pattrib->src);
-               issue_deauth23a(adapter, pattrib->src,
-                            WLAN_REASON_CLASS3_FRAME_FROM_NONASSOC_STA);
-               ret = RTW_RX_HANDLED;
-               goto exit;
-       }
-
-exit:
-
-
-
-       return ret;
-}
-
-static int validate_recv_ctrl_frame(struct rtw_adapter *padapter,
-                                   struct recv_frame *precv_frame)
-{
-#ifdef CONFIG_8723AU_AP_MODE
-       struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-
-       if (!ieee80211_is_ctl(hdr->frame_control))
-               return _FAIL;
-
-       /* receive the frames that ra(a1) is my address */
-       if (!ether_addr_equal(hdr->addr1, myid(&padapter->eeprompriv)))
-               return _FAIL;
-
-       /* only handle ps-poll */
-       if (ieee80211_is_pspoll(hdr->frame_control)) {
-               struct ieee80211_pspoll *psp = (struct ieee80211_pspoll *)hdr;
-               u16 aid;
-               u8 wmmps_ac = 0;
-               struct sta_info *psta = NULL;
-
-               aid = le16_to_cpu(psp->aid) & 0x3fff;
-               psta = rtw_get_stainfo23a(pstapriv, hdr->addr2);
-
-               if (!psta || psta->aid != aid)
-                       return _FAIL;
-
-               /* for rx pkt statistics */
-               psta->sta_stats.rx_ctrl_pkts++;
-
-               switch (pattrib->priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(0);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(0);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(0);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(0);
-                       break;
-               }
-
-               if (wmmps_ac)
-                       return _FAIL;
-
-               if (psta->state & WIFI_STA_ALIVE_CHK_STATE) {
-                       DBG_8723A("%s alive check-rx ps-poll\n", __func__);
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
-               }
-
-               if ((psta->state & WIFI_SLEEP_STATE) &&
-                   (pstapriv->sta_dz_bitmap & CHKBIT(psta->aid))) {
-                       struct list_head *xmitframe_phead;
-                       struct xmit_frame *pxmitframe;
-                       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-                       spin_lock_bh(&pxmitpriv->lock);
-
-                       xmitframe_phead = get_list_head(&psta->sleep_q);
-                       pxmitframe = list_first_entry_or_null(xmitframe_phead,
-                                                             struct xmit_frame,
-                                                             list);
-                       if (pxmitframe) {
-                               list_del_init(&pxmitframe->list);
-
-                               psta->sleepq_len--;
-
-                               if (psta->sleepq_len>0)
-                                       pxmitframe->attrib.mdata = 1;
-                               else
-                                       pxmitframe->attrib.mdata = 0;
-
-                               pxmitframe->attrib.triggered = 1;
-
-                               rtl8723au_hal_xmitframe_enqueue(padapter,
-                                                               pxmitframe);
-
-                               if (psta->sleepq_len == 0) {
-                                       pstapriv->tim_bitmap &= ~CHKBIT(psta->aid);
-                                       update_beacon23a(padapter, WLAN_EID_TIM,
-                                                        NULL, false);
-                               }
-
-                               spin_unlock_bh(&pxmitpriv->lock);
-
-                       } else {
-                               spin_unlock_bh(&pxmitpriv->lock);
-
-                               if (pstapriv->tim_bitmap & CHKBIT(psta->aid)) {
-                                       if (psta->sleepq_len == 0) {
-                                               DBG_8723A("no buffered packets "
-                                                         "to xmit\n");
-
-                                               /* issue nulldata with More data bit = 0 to indicate we have no buffered packets */
-                                               issue_nulldata23a(padapter,
-                                                              psta->hwaddr,
-                                                              0, 0, 0);
-                                       } else {
-                                               DBG_8723A("error!psta->sleepq"
-                                                         "_len =%d\n",
-                                                         psta->sleepq_len);
-                                               psta->sleepq_len = 0;
-                                       }
-
-                                       pstapriv->tim_bitmap &= ~CHKBIT(psta->aid);
-
-                                       update_beacon23a(padapter, WLAN_EID_TIM,
-                                                        NULL, false);
-                               }
-                       }
-               }
-       }
-
-#endif
-       return _FAIL;
-}
-
-struct recv_frame *recvframe_chk_defrag23a(struct rtw_adapter *padapter,
-                                       struct recv_frame *precv_frame);
-static int validate_recv_mgnt_frame(struct rtw_adapter *padapter,
-                                   struct recv_frame *precv_frame)
-{
-       struct sta_info *psta;
-       struct sk_buff *skb;
-       struct ieee80211_hdr *hdr;
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                "+validate_recv_mgnt_frame\n");
-
-       precv_frame = recvframe_chk_defrag23a(padapter, precv_frame);
-       if (precv_frame == NULL) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                        "%s: fragment packet\n", __func__);
-               return _SUCCESS;
-       }
-
-       skb = precv_frame->pkt;
-       hdr = (struct ieee80211_hdr *) skb->data;
-
-               /* for rx pkt statistics */
-       psta = rtw_get_stainfo23a(&padapter->stapriv, hdr->addr2);
-       if (psta) {
-               psta->sta_stats.rx_mgnt_pkts++;
-
-               if (ieee80211_is_beacon(hdr->frame_control))
-                       psta->sta_stats.rx_beacon_pkts++;
-               else if (ieee80211_is_probe_req(hdr->frame_control))
-                       psta->sta_stats.rx_probereq_pkts++;
-               else if (ieee80211_is_probe_resp(hdr->frame_control)) {
-                       if (ether_addr_equal(padapter->eeprompriv.mac_addr,
-                                   hdr->addr1))
-                               psta->sta_stats.rx_probersp_pkts++;
-                       else if (is_broadcast_ether_addr(hdr->addr1) ||
-                                is_multicast_ether_addr(hdr->addr1))
-                               psta->sta_stats.rx_probersp_bm_pkts++;
-                       else
-                               psta->sta_stats.rx_probersp_uo_pkts++;
-               }
-       }
-
-       mgt_dispatcher23a(padapter, precv_frame);
-
-       return _SUCCESS;
-}
-
-static int validate_recv_data_frame(struct rtw_adapter *adapter,
-                                   struct recv_frame *precv_frame)
-{
-       u8 bretry;
-       u8 *psa, *pda;
-       struct sta_info *psta = NULL;
-       struct rx_pkt_attrib *pattrib = & precv_frame->attrib;
-       struct security_priv *psecuritypriv = &adapter->securitypriv;
-       int ret = _SUCCESS;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-
-
-
-       bretry = ieee80211_has_retry(hdr->frame_control);
-       pda = ieee80211_get_DA(hdr);
-       psa = ieee80211_get_SA(hdr);
-
-       ether_addr_copy(pattrib->dst, pda);
-       ether_addr_copy(pattrib->src, psa);
-
-       switch (hdr->frame_control &
-               cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS)) {
-       case cpu_to_le16(0):
-               ether_addr_copy(pattrib->bssid, hdr->addr3);
-               ether_addr_copy(pattrib->ra, pda);
-               ether_addr_copy(pattrib->ta, psa);
-               ret = sta2sta_data_frame(adapter, precv_frame, &psta);
-               break;
-
-       case cpu_to_le16(IEEE80211_FCTL_FROMDS):
-               ether_addr_copy(pattrib->bssid, hdr->addr2);
-               ether_addr_copy(pattrib->ra, pda);
-               ether_addr_copy(pattrib->ta, hdr->addr2);
-               ret = ap2sta_data_frame(adapter, precv_frame, &psta);
-               break;
-
-       case cpu_to_le16(IEEE80211_FCTL_TODS):
-               ether_addr_copy(pattrib->bssid, hdr->addr1);
-               ether_addr_copy(pattrib->ra, hdr->addr1);
-               ether_addr_copy(pattrib->ta, psa);
-               ret = sta2ap_data_frame(adapter, precv_frame, &psta);
-               break;
-
-       case cpu_to_le16(IEEE80211_FCTL_TODS | IEEE80211_FCTL_FROMDS):
-               /*
-                * There is no BSSID in this case, but the driver has been
-                * using addr1 so far, so keep it for now.
-                */
-               ether_addr_copy(pattrib->bssid, hdr->addr1);
-               ether_addr_copy(pattrib->ra, hdr->addr1);
-               ether_addr_copy(pattrib->ta, hdr->addr2);
-               ret = _FAIL;
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_, "case 3\n");
-               break;
-       }
-
-       if ((ret == _FAIL) || (ret == RTW_RX_HANDLED))
-               goto exit;
-
-       if (!psta) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "after to_fr_ds_chk; psta == NULL\n");
-               ret = _FAIL;
-               goto exit;
-       }
-
-       precv_frame->psta = psta;
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       if (ieee80211_has_a4(hdr->frame_control))
-               pattrib->hdrlen += ETH_ALEN;
-
-       /* parsing QC field */
-       if (pattrib->qos == 1) {
-               __le16 *qptr = (__le16 *)ieee80211_get_qos_ctl(hdr);
-               u16 qos_ctrl = le16_to_cpu(*qptr);
-
-               pattrib->priority = qos_ctrl & IEEE80211_QOS_CTL_TID_MASK;
-               pattrib->ack_policy = (qos_ctrl >> 5) & 3;
-               pattrib->amsdu =
-                       (qos_ctrl & IEEE80211_QOS_CTL_A_MSDU_PRESENT) >> 7;
-               pattrib->hdrlen += IEEE80211_QOS_CTL_LEN;
-
-               if (pattrib->priority != 0 && pattrib->priority != 3) {
-                       adapter->recvpriv.bIsAnyNonBEPkts = true;
-               }
-       } else {
-               pattrib->priority = 0;
-               pattrib->ack_policy = 0;
-               pattrib->amsdu = 0;
-       }
-
-       if (pattrib->order) { /* HT-CTRL 11n */
-               pattrib->hdrlen += 4;
-       }
-
-       precv_frame->preorder_ctrl = &psta->recvreorder_ctrl[pattrib->priority];
-
-       /*  decache, drop duplicate recv packets */
-       if (recv_decache(precv_frame, bretry, &psta->sta_recvpriv.rxcache) ==
-           _FAIL) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "decache : drop pkt\n");
-               ret = _FAIL;
-               goto exit;
-       }
-
-       if (pattrib->privacy) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "validate_recv_data_frame:pattrib->privacy =%x\n",
-                        pattrib->privacy);
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "^^^^^^^^^^^is_multicast_ether_addr(pattrib->ra(0x%02x)) =%d^^^^^^^^^^^^^^^6\n",
-                        pattrib->ra[0],
-                        is_multicast_ether_addr(pattrib->ra));
-
-               GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt,
-                              is_multicast_ether_addr(pattrib->ra));
-
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "pattrib->encrypt =%d\n", pattrib->encrypt);
-
-               switch (pattrib->encrypt) {
-               case WLAN_CIPHER_SUITE_WEP40:
-               case WLAN_CIPHER_SUITE_WEP104:
-                       pattrib->iv_len = IEEE80211_WEP_IV_LEN;
-                       pattrib->icv_len = IEEE80211_WEP_ICV_LEN;
-                       break;
-               case WLAN_CIPHER_SUITE_TKIP:
-                       pattrib->iv_len = IEEE80211_TKIP_IV_LEN;
-                       pattrib->icv_len = IEEE80211_TKIP_ICV_LEN;
-                       break;
-               case WLAN_CIPHER_SUITE_CCMP:
-                       pattrib->iv_len = IEEE80211_CCMP_HDR_LEN;
-                       pattrib->icv_len = IEEE80211_CCMP_MIC_LEN;
-                       break;
-               default:
-                       pattrib->iv_len = 0;
-                       pattrib->icv_len = 0;
-                       break;
-               }
-       } else {
-               pattrib->encrypt = 0;
-               pattrib->iv_len = 0;
-               pattrib->icv_len = 0;
-       }
-
-exit:
-
-
-
-       return ret;
-}
-
-static void dump_rx_pkt(struct sk_buff *skb, u16 type, int level)
-{
-       int i;
-       u8 *ptr;
-
-       if ((level == 1) ||
-           ((level == 2) && (type == IEEE80211_FTYPE_MGMT)) ||
-           ((level == 3) && (type == IEEE80211_FTYPE_DATA))) {
-
-               ptr = skb->data;
-
-               DBG_8723A("#############################\n");
-
-               for (i = 0; i < 64; i = i + 8)
-                       DBG_8723A("%*phC:\n", 8, ptr + i);
-               DBG_8723A("#############################\n");
-       }
-}
-
-static int validate_recv_frame(struct rtw_adapter *adapter,
-                              struct recv_frame *precv_frame)
-{
-       /* shall check frame subtype, to / from ds, da, bssid */
-
-       /* then call check if rx seq/frag. duplicated. */
-       u8 type;
-       u8 subtype;
-       int retval = _SUCCESS;
-       struct rx_pkt_attrib *pattrib = & precv_frame->attrib;
-       struct sk_buff *skb = precv_frame->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       u8 ver;
-       u8 bDumpRxPkt;
-       u16 seq_ctrl, fctl;
-
-       fctl = le16_to_cpu(hdr->frame_control);
-       ver = fctl & IEEE80211_FCTL_VERS;
-       type = fctl & IEEE80211_FCTL_FTYPE;
-       subtype = fctl & IEEE80211_FCTL_STYPE;
-
-       /* add version chk */
-       if (ver != 0) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "validate_recv_data_frame fail! (ver!= 0)\n");
-               retval = _FAIL;
-               goto exit;
-       }
-
-       seq_ctrl = le16_to_cpu(hdr->seq_ctrl);
-       pattrib->frag_num = seq_ctrl & IEEE80211_SCTL_FRAG;
-       pattrib->seq_num = seq_ctrl >> 4;
-
-       pattrib->pw_save = ieee80211_has_pm(hdr->frame_control);
-       pattrib->mfrag = ieee80211_has_morefrags(hdr->frame_control);
-       pattrib->mdata = ieee80211_has_moredata(hdr->frame_control);
-       pattrib->privacy = ieee80211_has_protected(hdr->frame_control);
-       pattrib->order = ieee80211_has_order(hdr->frame_control);
-
-       GetHalDefVar8192CUsb(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt);
-
-       if (unlikely(bDumpRxPkt == 1))
-               dump_rx_pkt(skb, type, bDumpRxPkt);
-
-       switch (type) {
-       case IEEE80211_FTYPE_MGMT:
-               retval = validate_recv_mgnt_frame(adapter, precv_frame);
-               if (retval == _FAIL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "validate_recv_mgnt_frame fail\n");
-               }
-               retval = _FAIL; /*  only data frame return _SUCCESS */
-               break;
-       case IEEE80211_FTYPE_CTL:
-               retval = validate_recv_ctrl_frame(adapter, precv_frame);
-               if (retval == _FAIL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "validate_recv_ctrl_frame fail\n");
-               }
-               retval = _FAIL; /*  only data frame return _SUCCESS */
-               break;
-       case IEEE80211_FTYPE_DATA:
-               pattrib->qos = (subtype & IEEE80211_STYPE_QOS_DATA) ? 1 : 0;
-               retval = validate_recv_data_frame(adapter, precv_frame);
-               if (retval == _FAIL) {
-                       struct recv_priv *precvpriv = &adapter->recvpriv;
-
-                       precvpriv->rx_drop++;
-               }
-               break;
-       default:
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "validate_recv_data_frame fail! type = 0x%x\n", type);
-               retval = _FAIL;
-               break;
-       }
-
-exit:
-       return retval;
-}
-
-/* remove the wlanhdr and add the eth_hdr */
-
-static int wlanhdr_to_ethhdr (struct recv_frame *precvframe)
-{
-       u16     eth_type, len, hdrlen;
-       u8      bsnaphdr;
-       u8      *psnap;
-       struct rtw_adapter *adapter = precvframe->adapter;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-
-       struct sk_buff *skb = precvframe->pkt;
-       u8 *ptr;
-       struct rx_pkt_attrib *pattrib = &precvframe->attrib;
-
-
-
-       ptr = skb->data;
-       hdrlen = pattrib->hdrlen;
-       psnap = ptr + hdrlen;
-       eth_type = (psnap[6] << 8) | psnap[7];
-       /* convert hdr + possible LLC headers into Ethernet header */
-       if ((ether_addr_equal(psnap, rfc1042_header) &&
-            eth_type != ETH_P_AARP && eth_type != ETH_P_IPX) ||
-           ether_addr_equal(psnap, bridge_tunnel_header)) {
-               /* remove RFC1042 or Bridge-Tunnel encapsulation
-                  and replace EtherType */
-               bsnaphdr = true;
-               hdrlen += SNAP_SIZE;
-       } else {
-               /* Leave Ethernet header part of hdr and full payload */
-               bsnaphdr = false;
-               eth_type = (psnap[0] << 8) | psnap[1];
-       }
-
-       len = skb->len - hdrlen;
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                "=== pattrib->hdrlen: %x,  pattrib->iv_len:%x ===\n",
-                pattrib->hdrlen,  pattrib->iv_len);
-
-       pattrib->eth_type = eth_type;
-       if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-               ptr += hdrlen;
-               *ptr = 0x87;
-               *(ptr + 1) = 0x12;
-
-               eth_type = 0x8712;
-               /*  append rx status for mp test packets */
-
-               ptr = skb_pull(skb, (hdrlen - sizeof(struct ethhdr) + 2) - 24);
-               memcpy(ptr, skb->head, 24);
-               ptr += 24;
-       } else {
-               ptr = skb_pull(skb, (hdrlen - sizeof(struct ethhdr) +
-                                    (bsnaphdr ? 2:0)));
-       }
-
-       ether_addr_copy(ptr, pattrib->dst);
-       ether_addr_copy(ptr + ETH_ALEN, pattrib->src);
-
-       if (!bsnaphdr) {
-               put_unaligned_be16(len, ptr + 12);
-       }
-
-
-       return _SUCCESS;
-}
-
-/* perform defrag */
-struct recv_frame *recvframe_defrag(struct rtw_adapter *adapter,
-                                   struct rtw_queue *defrag_q);
-struct recv_frame *recvframe_defrag(struct rtw_adapter *adapter,
-                                   struct rtw_queue *defrag_q)
-{
-       struct list_head *phead;
-       u8 wlanhdr_offset;
-       u8 curfragnum;
-       struct recv_frame *pnfhdr, *ptmp;
-       struct recv_frame *prframe, *pnextrframe;
-       struct rtw_queue *pfree_recv_queue;
-       struct sk_buff *skb;
-
-       curfragnum = 0;
-       pfree_recv_queue = &adapter->recvpriv.free_recv_queue;
-
-       phead = get_list_head(defrag_q);
-       prframe = list_first_entry(phead, struct recv_frame, list);
-       list_del_init(&prframe->list);
-       skb = prframe->pkt;
-
-       if (curfragnum != prframe->attrib.frag_num) {
-               /* the first fragment number must be 0 */
-               /* free the whole queue */
-               rtw_free_recvframe23a(prframe);
-               rtw_free_recvframe23a_queue(defrag_q);
-
-               return NULL;
-       }
-
-       curfragnum++;
-
-       list_for_each_entry_safe(pnfhdr, ptmp, phead, list) {
-               pnextrframe = (struct recv_frame *)pnfhdr;
-               /* check the fragment sequence  (2nd ~n fragment frame) */
-
-               if (curfragnum != pnfhdr->attrib.frag_num) {
-                       /* the fragment number must be increasing
-                          (after decache) */
-                       /* release the defrag_q & prframe */
-                       rtw_free_recvframe23a(prframe);
-                       rtw_free_recvframe23a_queue(defrag_q);
-                       return NULL;
-               }
-
-               curfragnum++;
-
-               /* copy the 2nd~n fragment frame's payload to the
-                  first fragment */
-               /* get the 2nd~last fragment frame's payload */
-
-               wlanhdr_offset = pnfhdr->attrib.hdrlen + pnfhdr->attrib.iv_len;
-
-               skb_pull(pnfhdr->pkt, wlanhdr_offset);
-
-               /* append  to first fragment frame's tail
-                  (if privacy frame, pull the ICV) */
-
-               skb_trim(skb, skb->len - prframe->attrib.icv_len);
-
-               memcpy(skb_tail_pointer(skb), pnfhdr->pkt->data,
-                      pnfhdr->pkt->len);
-
-               skb_put(skb, pnfhdr->pkt->len);
-
-               prframe->attrib.icv_len = pnfhdr->attrib.icv_len;
-       }
-
-       /* free the defrag_q queue and return the prframe */
-       rtw_free_recvframe23a_queue(defrag_q);
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                "Performance defrag!!!!!\n");
-
-       return prframe;
-}
-
-/* check if need to defrag, if needed queue the frame to defrag_q */
-struct recv_frame *recvframe_chk_defrag23a(struct rtw_adapter *padapter,
-                                       struct recv_frame *precv_frame)
-{
-       u8      ismfrag;
-       u8      fragnum;
-       u8      *psta_addr;
-       struct recv_frame *pfhdr;
-       struct sta_info *psta;
-       struct sta_priv *pstapriv;
-       struct list_head *phead;
-       struct recv_frame *prtnframe = NULL;
-       struct rtw_queue *pfree_recv_queue, *pdefrag_q;
-
-
-
-       pstapriv = &padapter->stapriv;
-
-       pfhdr = precv_frame;
-
-       pfree_recv_queue = &padapter->recvpriv.free_recv_queue;
-
-       /* need to define struct of wlan header frame ctrl */
-       ismfrag = pfhdr->attrib.mfrag;
-       fragnum = pfhdr->attrib.frag_num;
-
-       psta_addr = pfhdr->attrib.ta;
-       psta = rtw_get_stainfo23a(pstapriv, psta_addr);
-       if (!psta) {
-               struct ieee80211_hdr *hdr =
-                       (struct ieee80211_hdr *) pfhdr->pkt->data;
-               if (!ieee80211_is_data(hdr->frame_control)) {
-                       psta = rtw_get_bcmc_stainfo23a(padapter);
-                       pdefrag_q = &psta->sta_recvpriv.defrag_q;
-               } else
-                       pdefrag_q = NULL;
-       } else
-               pdefrag_q = &psta->sta_recvpriv.defrag_q;
-
-       if ((ismfrag == 0) && (fragnum == 0)) {
-               prtnframe = precv_frame;/* isn't a fragment frame */
-       }
-
-       if (ismfrag == 1) {
-               /* 0~(n-1) fragment frame */
-               /* enqueue to defraf_g */
-               if (pdefrag_q != NULL) {
-                       if (fragnum == 0) {
-                               /* the first fragment */
-                               if (!list_empty(&pdefrag_q->queue)) {
-                                       /* free current defrag_q */
-                                       rtw_free_recvframe23a_queue(pdefrag_q);
-                               }
-                       }
-
-                       /* Then enqueue the 0~(n-1) fragment into the
-                          defrag_q */
-
-                       /* spin_lock(&pdefrag_q->lock); */
-                       phead = get_list_head(pdefrag_q);
-                       list_add_tail(&pfhdr->list, phead);
-                       /* spin_unlock(&pdefrag_q->lock); */
-
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "Enqueuq: ismfrag = %d, fragnum = %d\n",
-                                ismfrag, fragnum);
-
-                       prtnframe = NULL;
-
-               } else {
-                       /* can't find this ta's defrag_queue,
-                          so free this recv_frame */
-                       rtw_free_recvframe23a(precv_frame);
-                       prtnframe = NULL;
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "Free because pdefrag_q == NULL: ismfrag = %d, fragnum = %d\n",
-                                ismfrag, fragnum);
-               }
-       }
-
-       if ((ismfrag == 0) && (fragnum != 0)) {
-               /* the last fragment frame */
-               /* enqueue the last fragment */
-               if (pdefrag_q != NULL) {
-                       /* spin_lock(&pdefrag_q->lock); */
-                       phead = get_list_head(pdefrag_q);
-                       list_add_tail(&pfhdr->list, phead);
-                       /* spin_unlock(&pdefrag_q->lock); */
-
-                       /* call recvframe_defrag to defrag */
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "defrag: ismfrag = %d, fragnum = %d\n",
-                                ismfrag, fragnum);
-                       precv_frame = recvframe_defrag(padapter, pdefrag_q);
-                       prtnframe = precv_frame;
-               } else {
-                       /* can't find this ta's defrag_queue,
-                          so free this recv_frame */
-                       rtw_free_recvframe23a(precv_frame);
-                       prtnframe = NULL;
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "Free because pdefrag_q == NULL: ismfrag = %d, fragnum = %d\n",
-                                ismfrag, fragnum);
-               }
-
-       }
-
-       if ((prtnframe != NULL) && (prtnframe->attrib.privacy)) {
-               /* after defrag we must check tkip mic code */
-               if (recvframe_chkmic(padapter,  prtnframe) == _FAIL) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "recvframe_chkmic(padapter,  prtnframe) ==_FAIL\n");
-                       rtw_free_recvframe23a(prtnframe);
-                       prtnframe = NULL;
-               }
-       }
-
-
-
-       return prtnframe;
-}
-
-int amsdu_to_msdu(struct rtw_adapter *padapter, struct recv_frame *prframe);
-int amsdu_to_msdu(struct rtw_adapter *padapter, struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib;
-       struct sk_buff *skb, *sub_skb;
-       struct sk_buff_head skb_list;
-
-       pattrib = &prframe->attrib;
-
-       skb = prframe->pkt;
-       skb_pull(skb, prframe->attrib.hdrlen);
-       __skb_queue_head_init(&skb_list);
-
-       ieee80211_amsdu_to_8023s(skb, &skb_list, NULL, 0, 0, false);
-
-       while (!skb_queue_empty(&skb_list)) {
-               sub_skb = __skb_dequeue(&skb_list);
-
-               sub_skb->protocol = eth_type_trans(sub_skb, padapter->pnetdev);
-               sub_skb->dev = padapter->pnetdev;
-
-               sub_skb->ip_summed = CHECKSUM_NONE;
-
-               netif_rx(sub_skb);
-       }
-
-       prframe->pkt = NULL;
-       rtw_free_recvframe23a(prframe);
-       return _SUCCESS;
-}
-
-int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num);
-int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_num)
-{
-       u8      wsize = preorder_ctrl->wsize_b;
-       u16     wend = (preorder_ctrl->indicate_seq + wsize -1) & 0xFFF;
-
-       /*  Rx Reorder initialize condition. */
-       if (preorder_ctrl->indicate_seq == 0xFFFF)
-               preorder_ctrl->indicate_seq = seq_num;
-
-       /*  Drop out the packet which SeqNum is smaller than WinStart */
-       if (SN_LESS(seq_num, preorder_ctrl->indicate_seq))
-               return false;
-
-       /*  */
-       /*  Sliding window manipulation. Conditions includes: */
-       /*  1. Incoming SeqNum is equal to WinStart =>Window shift 1 */
-       /*  2. Incoming SeqNum is larger than the WinEnd => Window shift N */
-       /*  */
-       if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) {
-               preorder_ctrl->indicate_seq =
-                       (preorder_ctrl->indicate_seq + 1) & 0xFFF;
-       } else if (SN_LESS(wend, seq_num)) {
-               /*  boundary situation, when seq_num cross 0xFFF */
-               if (seq_num >= (wsize - 1))
-                       preorder_ctrl->indicate_seq = seq_num + 1 -wsize;
-               else
-                       preorder_ctrl->indicate_seq = 0xFFF - (wsize - (seq_num + 1)) + 1;
-       }
-       return true;
-}
-
-static int enqueue_reorder_recvframe23a(struct recv_reorder_ctrl *preorder_ctrl,
-                                       struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib = &prframe->attrib;
-       struct rtw_queue *ppending_recvframe_queue;
-       struct list_head *phead, *plist, *ptmp;
-       struct recv_frame *hdr;
-       struct rx_pkt_attrib *pnextattrib;
-
-       ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-       phead = get_list_head(ppending_recvframe_queue);
-
-       list_for_each_safe(plist, ptmp, phead) {
-               hdr = container_of(plist, struct recv_frame, list);
-               pnextattrib = &hdr->attrib;
-
-               if (SN_LESS(pnextattrib->seq_num, pattrib->seq_num)) {
-                       continue;
-               } else if (SN_EQUAL(pnextattrib->seq_num, pattrib->seq_num)) {
-                       /* Duplicate entry is found!! Do not insert current entry. */
-                       return false;
-               } else {
-                       break;
-               }
-
-       }
-
-       list_del_init(&prframe->list);
-
-       list_add_tail(&prframe->list, plist);
-
-       return true;
-}
-
-int recv_indicatepkts_in_order(struct rtw_adapter *padapter,
-                              struct recv_reorder_ctrl *preorder_ctrl,
-                              int bforced);
-int recv_indicatepkts_in_order(struct rtw_adapter *padapter,
-                              struct recv_reorder_ctrl *preorder_ctrl,
-                              int bforced)
-{
-       struct list_head *phead, *plist;
-       struct recv_frame *prframe;
-       struct rx_pkt_attrib *pattrib;
-       int bPktInBuf = false;
-       struct recv_priv *precvpriv;
-       struct rtw_queue *ppending_recvframe_queue;
-
-       precvpriv = &padapter->recvpriv;
-       ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-       phead = get_list_head(ppending_recvframe_queue);
-       plist = phead->next;
-
-       /*  Handling some condition for forced indicate case. */
-       if (bforced) {
-               if (list_empty(phead)) {
-                       return true;
-               }
-
-               prframe = container_of(plist, struct recv_frame, list);
-               pattrib = &prframe->attrib;
-               preorder_ctrl->indicate_seq = pattrib->seq_num;
-       }
-
-       /*  Prepare indication list and indication. */
-       /*  Check if there is any packet need indicate. */
-       while (!list_empty(phead)) {
-
-               prframe = container_of(plist, struct recv_frame, list);
-               pattrib = &prframe->attrib;
-
-               if (!SN_LESS(preorder_ctrl->indicate_seq, pattrib->seq_num)) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                "recv_indicatepkts_in_order: indicate =%d seq =%d amsdu =%d\n",
-                                preorder_ctrl->indicate_seq,
-                                pattrib->seq_num, pattrib->amsdu);
-
-                       plist = plist->next;
-                       list_del_init(&prframe->list);
-
-                       if (SN_EQUAL(preorder_ctrl->indicate_seq,
-                                    pattrib->seq_num)) {
-                               preorder_ctrl->indicate_seq =
-                                       (preorder_ctrl->indicate_seq + 1)&0xFFF;
-                       }
-
-                       if (!pattrib->amsdu) {
-                               if ((padapter->bDriverStopped == false) &&
-                                   (padapter->bSurpriseRemoved == false)) {
-                                       rtw_recv_indicatepkt23a(padapter, prframe);
-                               }
-                       } else {
-                               if (amsdu_to_msdu(padapter, prframe) !=
-                                   _SUCCESS)
-                                       rtw_free_recvframe23a(prframe);
-                       }
-
-                       /* Update local variables. */
-                       bPktInBuf = false;
-
-               } else {
-                       bPktInBuf = true;
-                       break;
-               }
-
-       }
-
-       return bPktInBuf;
-}
-
-int recv_indicatepkt_reorder(struct rtw_adapter *padapter,
-                            struct recv_frame *prframe);
-int recv_indicatepkt_reorder(struct rtw_adapter *padapter,
-                            struct recv_frame *prframe)
-{
-       int retval = _SUCCESS;
-       struct rx_pkt_attrib *pattrib;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct rtw_queue *ppending_recvframe_queue;
-
-       pattrib = &prframe->attrib;
-       preorder_ctrl = prframe->preorder_ctrl;
-       ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-       if (!pattrib->amsdu) {
-               /* s1. */
-               wlanhdr_to_ethhdr(prframe);
-
-               if ((pattrib->qos!= 1) || (pattrib->eth_type == ETH_P_ARP) ||
-                   (pattrib->ack_policy != 0)) {
-                       if ((padapter->bDriverStopped == false) &&
-                           (padapter->bSurpriseRemoved == false)) {
-                               RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                        "@@@@  recv_indicatepkt_reorder -recv_func recv_indicatepkt\n");
-
-                               rtw_recv_indicatepkt23a(padapter, prframe);
-                               return _SUCCESS;
-                       }
-
-                       return _FAIL;
-               }
-
-               if (preorder_ctrl->enable == false) {
-                       /* indicate this recv_frame */
-                       preorder_ctrl->indicate_seq = pattrib->seq_num;
-                       rtw_recv_indicatepkt23a(padapter, prframe);
-
-                       preorder_ctrl->indicate_seq =
-                               (preorder_ctrl->indicate_seq + 1) % 4096;
-                       return _SUCCESS;
-               }
-       } else {
-                /* temp filter -> means didn't support A-MSDUs in a A-MPDU */
-               if (preorder_ctrl->enable == false) {
-                       preorder_ctrl->indicate_seq = pattrib->seq_num;
-                       retval = amsdu_to_msdu(padapter, prframe);
-
-                       preorder_ctrl->indicate_seq =
-                               (preorder_ctrl->indicate_seq + 1) % 4096;
-                       return retval;
-               }
-       }
-
-       spin_lock_bh(&ppending_recvframe_queue->lock);
-
-       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                "recv_indicatepkt_reorder: indicate =%d seq =%d\n",
-                preorder_ctrl->indicate_seq, pattrib->seq_num);
-
-       /* s2. check if winstart_b(indicate_seq) needs to been updated */
-       if (!check_indicate_seq(preorder_ctrl, pattrib->seq_num)) {
-               goto _err_exit;
-       }
-
-       /* s3. Insert all packet into Reorder Queue to maintain its ordering. */
-       if (!enqueue_reorder_recvframe23a(preorder_ctrl, prframe)) {
-               goto _err_exit;
-       }
-
-       /* s4. */
-       /*  Indication process. */
-       /*  After Packet dropping and Sliding Window shifting as above,
-           we can now just indicate the packets */
-       /*  with the SeqNum smaller than latest WinStart and buffer
-           other packets. */
-       /*  */
-       /*  For Rx Reorder condition: */
-       /*  1. All packets with SeqNum smaller than WinStart => Indicate */
-       /*  2. All packets with SeqNum larger than or equal to WinStart =>
-           Buffer it. */
-       /*  */
-
-       if (recv_indicatepkts_in_order(padapter, preorder_ctrl, false) == true) {
-               mod_timer(&preorder_ctrl->reordering_ctrl_timer,
-                         jiffies + msecs_to_jiffies(REORDER_WAIT_TIME));
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-       } else {
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-               del_timer_sync(&preorder_ctrl->reordering_ctrl_timer);
-       }
-       return _SUCCESS;
-
-_err_exit:
-
-       spin_unlock_bh(&ppending_recvframe_queue->lock);
-       return _FAIL;
-}
-
-void rtw_reordering_ctrl_timeout_handler23a(unsigned long pcontext)
-{
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct rtw_adapter *padapter;
-       struct rtw_queue *ppending_recvframe_queue;
-
-       preorder_ctrl = (struct recv_reorder_ctrl *)pcontext;
-       padapter = preorder_ctrl->padapter;
-       ppending_recvframe_queue = &preorder_ctrl->pending_recvframe_queue;
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved) {
-               return;
-       }
-
-       spin_lock_bh(&ppending_recvframe_queue->lock);
-
-       if (recv_indicatepkts_in_order(padapter, preorder_ctrl, true) == true) {
-               mod_timer(&preorder_ctrl->reordering_ctrl_timer,
-                         jiffies + msecs_to_jiffies(REORDER_WAIT_TIME));
-       }
-
-       spin_unlock_bh(&ppending_recvframe_queue->lock);
-}
-
-int process_recv_indicatepkts(struct rtw_adapter *padapter,
-                             struct recv_frame *prframe);
-int process_recv_indicatepkts(struct rtw_adapter *padapter,
-                             struct recv_frame *prframe)
-{
-       int retval = _SUCCESS;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-
-       if (phtpriv->ht_option == true) { /* B/G/N Mode */
-               /*  including perform A-MPDU Rx Ordering Buffer Control */
-               if (recv_indicatepkt_reorder(padapter, prframe) != _SUCCESS) {
-                       if ((padapter->bDriverStopped == false) &&
-                           (padapter->bSurpriseRemoved == false)) {
-                               retval = _FAIL;
-                               return retval;
-                       }
-               }
-       } else { /* B/G mode */
-               retval = wlanhdr_to_ethhdr(prframe);
-               if (retval != _SUCCESS) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "wlanhdr_to_ethhdr: drop pkt\n");
-                       return retval;
-               }
-
-               if ((padapter->bDriverStopped == false) &&
-                   (padapter->bSurpriseRemoved == false)) {
-                       /* indicate this recv_frame */
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                "@@@@ process_recv_indicatepkts- recv_func recv_indicatepkt\n");
-                       rtw_recv_indicatepkt23a(padapter, prframe);
-               } else {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                "@@@@ process_recv_indicatepkts- recv_func free_indicatepkt\n");
-
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_notice_,
-                                "recv_func:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n",
-                                padapter->bDriverStopped,
-                                padapter->bSurpriseRemoved);
-                       retval = _FAIL;
-                       return retval;
-               }
-
-       }
-
-       return retval;
-}
-
-static int recv_func_prehandle(struct rtw_adapter *padapter,
-                              struct recv_frame *rframe)
-{
-       int ret;
-
-       /* check the frame crtl field and decache */
-       ret = validate_recv_frame(padapter, rframe);
-       if (ret != _SUCCESS) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "recv_func: validate_recv_frame fail! drop pkt\n");
-               rtw_free_recvframe23a(rframe);
-               goto exit;
-       }
-
-exit:
-       return ret;
-}
-
-static int recv_func_posthandle(struct rtw_adapter *padapter,
-                               struct recv_frame *prframe)
-{
-       int ret = _SUCCESS;
-       struct recv_frame *orig_prframe = prframe;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       /*  DATA FRAME */
-       prframe = decryptor(padapter, prframe);
-       if (prframe == NULL) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "decryptor: drop pkt\n");
-               ret = _FAIL;
-               goto _recv_data_drop;
-       }
-
-       prframe = recvframe_chk_defrag23a(padapter, prframe);
-       if (!prframe) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "recvframe_chk_defrag23a: drop pkt\n");
-               goto _recv_data_drop;
-       }
-
-       /*
-        * Pull off crypto headers
-        */
-       if (prframe->attrib.iv_len > 0) {
-               skb_pull(prframe->pkt, prframe->attrib.iv_len);
-       }
-
-       if (prframe->attrib.icv_len > 0) {
-               skb_trim(prframe->pkt,
-                        prframe->pkt->len - prframe->attrib.icv_len);
-       }
-
-       prframe = portctrl(padapter, prframe);
-       if (!prframe) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "portctrl: drop pkt\n");
-               ret = _FAIL;
-               goto _recv_data_drop;
-       }
-
-       count_rx_stats(padapter, prframe, NULL);
-
-       ret = process_recv_indicatepkts(padapter, prframe);
-       if (ret != _SUCCESS) {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "recv_func: process_recv_indicatepkts fail!\n");
-               rtw_free_recvframe23a(orig_prframe);/* free this recv_frame */
-               goto _recv_data_drop;
-       }
-       return ret;
-
-_recv_data_drop:
-       precvpriv->rx_drop++;
-       return ret;
-}
-
-int rtw_recv_entry23a(struct recv_frame *rframe)
-{
-       int ret, r;
-       struct rtw_adapter *padapter = rframe->adapter;
-       struct rx_pkt_attrib *prxattrib = &rframe->attrib;
-       struct recv_priv *recvpriv = &padapter->recvpriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-
-       /* check if need to handle uc_swdec_pending_queue*/
-       if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
-           psecuritypriv->busetkipkey) {
-               struct recv_frame *pending_frame;
-
-               while ((pending_frame = rtw_alloc_recvframe23a(&padapter->recvpriv.uc_swdec_pending_queue))) {
-                       r = recv_func_posthandle(padapter, pending_frame);
-                       if (r == _SUCCESS)
-                               DBG_8723A("%s: dequeue uc_swdec_pending_queue\n", __func__);
-               }
-       }
-
-       ret = recv_func_prehandle(padapter, rframe);
-
-       if (ret == _SUCCESS) {
-               /* check if need to enqueue into uc_swdec_pending_queue*/
-               if (check_fwstate(mlmepriv, WIFI_STATION_STATE) &&
-                   !is_multicast_ether_addr(prxattrib->ra) &&
-                   prxattrib->encrypt > 0 &&
-                   (prxattrib->bdecrypted == 0) &&
-                   !is_wep_enc(psecuritypriv->dot11PrivacyAlgrthm) &&
-                   !psecuritypriv->busetkipkey) {
-                       rtw_enqueue_recvframe23a(rframe, &padapter->recvpriv.uc_swdec_pending_queue);
-                       DBG_8723A("%s: no key, enqueue uc_swdec_pending_queue\n", __func__);
-                       goto exit;
-               }
-
-               ret = recv_func_posthandle(padapter, rframe);
-
-               recvpriv->rx_pkts++;
-       }
-
-exit:
-       return ret;
-}
-
-void rtw_signal_stat_timer_hdl23a(unsigned long data)
-{
-       struct rtw_adapter *adapter = (struct rtw_adapter *)data;
-       struct recv_priv *recvpriv = &adapter->recvpriv;
-
-       u32 tmp_s, tmp_q;
-       u8 avg_signal_strength = 0;
-       u8 avg_signal_qual = 0;
-       u32 num_signal_strength = 0;
-       u32 num_signal_qual = 0;
-       u8 _alpha = 3;  /* this value is based on converging_constant = 5000 */
-                       /* and sampling_interval = 1000 */
-
-       if (recvpriv->signal_strength_data.update_req == 0) {
-               /*  update_req is clear, means we got rx */
-               avg_signal_strength = recvpriv->signal_strength_data.avg_val;
-               num_signal_strength = recvpriv->signal_strength_data.total_num;
-               /*  after avg_vals are acquired, we can re-stat */
-               /* the signal values */
-               recvpriv->signal_strength_data.update_req = 1;
-       }
-
-       if (recvpriv->signal_qual_data.update_req == 0) {
-               /*  update_req is clear, means we got rx */
-               avg_signal_qual = recvpriv->signal_qual_data.avg_val;
-               num_signal_qual = recvpriv->signal_qual_data.total_num;
-               /*  after avg_vals are acquired, we can re-stat */
-               /*the signal values */
-               recvpriv->signal_qual_data.update_req = 1;
-       }
-
-       /* update value of signal_strength, rssi, signal_qual */
-       if (!check_fwstate(&adapter->mlmepriv, _FW_UNDER_SURVEY)) {
-               tmp_s = avg_signal_strength + (_alpha - 1) *
-                        recvpriv->signal_strength;
-               if (tmp_s %_alpha)
-                       tmp_s = tmp_s / _alpha + 1;
-               else
-                       tmp_s = tmp_s / _alpha;
-               if (tmp_s > 100)
-                       tmp_s = 100;
-
-               tmp_q = avg_signal_qual + (_alpha - 1) * recvpriv->signal_qual;
-               if (tmp_q %_alpha)
-                       tmp_q = tmp_q / _alpha + 1;
-               else
-                       tmp_q = tmp_q / _alpha;
-               if (tmp_q > 100)
-                       tmp_q = 100;
-
-               recvpriv->signal_strength = tmp_s;
-               recvpriv->signal_qual = tmp_q;
-
-               DBG_8723A("%s signal_strength:%3u, signal_qual:%3u, "
-                         "num_signal_strength:%u, num_signal_qual:%u\n",
-                         __func__, recvpriv->signal_strength,
-                         recvpriv->signal_qual, num_signal_strength,
-                         num_signal_qual);
-       }
-
-       rtw_set_signal_stat_timer(recvpriv);
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_security.c b/drivers/staging/rtl8723au/core/rtw_security.c
deleted file mode 100644 (file)
index 5a4cfdf..0000000
+++ /dev/null
@@ -1,1630 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define  _RTW_SECURITY_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-#include <osdep_intf.h>
-
-/* WEP related ===== */
-
-#define CRC32_POLY 0x04c11db7
-
-struct arc4context {
-       u32 x;
-       u32 y;
-       u8 state[256];
-};
-
-static void arcfour_init(struct arc4context *parc4ctx, u8 *key, u32 key_len)
-{
-       u32 t, u;
-       u32 keyindex;
-       u32 stateindex;
-       u8 *state;
-       u32 counter;
-
-       state = parc4ctx->state;
-       parc4ctx->x = 0;
-       parc4ctx->y = 0;
-       for (counter = 0; counter < 256; counter++)
-               state[counter] = (u8)counter;
-       keyindex = 0;
-       stateindex = 0;
-       for (counter = 0; counter < 256; counter++) {
-               t = state[counter];
-               stateindex = (stateindex + key[keyindex] + t) & 0xff;
-               u = state[stateindex];
-               state[stateindex] = (u8)t;
-               state[counter] = (u8)u;
-               if (++keyindex >= key_len)
-                       keyindex = 0;
-       }
-
-}
-
-static u32 arcfour_byte(struct arc4context *parc4ctx)
-{
-       u32 x;
-       u32 y;
-       u32 sx, sy;
-       u8 *state;
-
-       state = parc4ctx->state;
-       x = (parc4ctx->x + 1) & 0xff;
-       sx = state[x];
-       y = (sx + parc4ctx->y) & 0xff;
-       sy = state[y];
-       parc4ctx->x = x;
-       parc4ctx->y = y;
-       state[y] = (u8)sx;
-       state[x] = (u8)sy;
-
-       return state[(sx + sy) & 0xff];
-}
-
-static void arcfour_encrypt(struct arc4context *parc4ctx, u8 *dest,
-                           u8 *src, u32 len)
-{
-       u32 i;
-
-       for (i = 0; i < len; i++)
-               dest[i] = src[i] ^ (unsigned char)arcfour_byte(parc4ctx);
-}
-
-static int bcrc32initialized;
-static u32 crc32_table[256];
-
-static u8 crc32_reverseBit(u8 data)
-{
-       u8 retval = ((data << 7) & 0x80) | ((data << 5) & 0x40) |
-               ((data << 3) & 0x20) | ((data << 1) & 0x10) |
-               ((data >> 1) & 0x08) | ((data >> 3) & 0x04) |
-               ((data >> 5) & 0x02) | ((data >> 7) & 0x01);
-       return retval;
-}
-
-static void crc32_init(void)
-{
-       int i, j;
-       u32 c;
-       u8 *p, *p1;
-       u8 k;
-
-       if (bcrc32initialized == 1)
-               return;
-
-       p = (u8 *) &c;
-       c = 0x12340000;
-
-       for (i = 0; i < 256; ++i) {
-               k = crc32_reverseBit((u8)i);
-
-               for (c = ((u32)k) << 24, j = 8; j > 0; --j)
-                       c = c & 0x80000000 ? (c << 1) ^ CRC32_POLY : (c << 1);
-
-               p1 = (u8 *)&crc32_table[i];
-
-               p1[0] = crc32_reverseBit(p[3]);
-               p1[1] = crc32_reverseBit(p[2]);
-               p1[2] = crc32_reverseBit(p[1]);
-               p1[3] = crc32_reverseBit(p[0]);
-       }
-
-       bcrc32initialized = 1;
-}
-
-static u32 getcrc32(u8 *buf, int len)
-{
-       u8 *p;
-       u32 crc;
-
-       if (bcrc32initialized == 0)
-               crc32_init();
-
-       crc = 0xffffffff; /* preload shift register, per CRC-32 spec */
-
-       for (p = buf; len > 0; ++p, --len)
-               crc = crc32_table[(crc ^ *p) & 0xff] ^ (crc >> 8);
-
-       return ~crc; /* transmit complement, per CRC-32 spec */
-}
-
-/* Need to consider the fragment  situation */
-void rtw_wep_encrypt23a(struct rtw_adapter *padapter,
-                    struct xmit_frame *pxmitframe)
-{
-       /*  exclude ICV */
-       __le32 crc;
-       struct arc4context mycontext;
-       int curfragnum, length, index;
-       u32 keylength;
-       u8 *pframe, *payload, *iv; /* wepkey */
-       u8 wepkey[16];
-       u8 hw_hdr_offset = 0;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       if (!pxmitframe->buf_addr)
-               return;
-
-       hw_hdr_offset = TXDESC_OFFSET;
-
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       /* start to encrypt each fragment */
-       if (pattrib->encrypt != WLAN_CIPHER_SUITE_WEP40 &&
-           pattrib->encrypt != WLAN_CIPHER_SUITE_WEP104)
-               return;
-
-       index = psecuritypriv->dot11PrivacyKeyIndex;
-       keylength = psecuritypriv->wep_key[index].keylen;
-
-       for (curfragnum = 0; curfragnum < pattrib->nr_frags ; curfragnum++) {
-               iv = pframe + pattrib->hdrlen;
-               memcpy(&wepkey[0], iv, 3);
-               memcpy(&wepkey[3], &psecuritypriv->wep_key[index].key,
-                      keylength);
-               payload = pframe + pattrib->iv_len + pattrib->hdrlen;
-
-               if ((curfragnum + 1) == pattrib->nr_frags) {
-                       /* the last fragment */
-                       length = pattrib->last_txcmdsz - pattrib->hdrlen -
-                               pattrib->iv_len - pattrib->icv_len;
-
-                       crc = cpu_to_le32(getcrc32(payload, length));
-
-                       arcfour_init(&mycontext, wepkey, 3 + keylength);
-                       arcfour_encrypt(&mycontext, payload, payload, length);
-                       arcfour_encrypt(&mycontext, payload + length,
-                                       (char *)&crc, 4);
-               } else {
-                       length = pxmitpriv->frag_len - pattrib->hdrlen -
-                               pattrib->iv_len - pattrib->icv_len;
-                       crc = cpu_to_le32(getcrc32(payload, length));
-                       arcfour_init(&mycontext, wepkey, 3 + keylength);
-                       arcfour_encrypt(&mycontext, payload, payload, length);
-                       arcfour_encrypt(&mycontext, payload + length,
-                                       (char *)&crc, 4);
-
-                       pframe += pxmitpriv->frag_len;
-                       pframe = PTR_ALIGN(pframe, 4);
-               }
-       }
-
-}
-
-void rtw_wep_decrypt23a(struct rtw_adapter *padapter,
-                    struct recv_frame *precvframe)
-{
-       /*  exclude ICV */
-       u32 actual_crc, expected_crc;
-       struct arc4context mycontext;
-       int length;
-       u32 keylength;
-       u8 *pframe, *payload, *iv, wepkey[16];
-       u8 keyindex;
-       struct rx_pkt_attrib *prxattrib = &precvframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sk_buff *skb = precvframe->pkt;
-
-       pframe = skb->data;
-
-       /* start to decrypt recvframe */
-       if (prxattrib->encrypt != WLAN_CIPHER_SUITE_WEP40 &&
-           prxattrib->encrypt != WLAN_CIPHER_SUITE_WEP104)
-               return;
-
-       iv = pframe + prxattrib->hdrlen;
-       /* keyindex = (iv[3]&0x3); */
-       keyindex = prxattrib->key_index;
-       keylength = psecuritypriv->wep_key[keyindex].keylen;
-       memcpy(&wepkey[0], iv, 3);
-       /* memcpy(&wepkey[3], &psecuritypriv->dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], keylength); */
-       memcpy(&wepkey[3], &psecuritypriv->wep_key[keyindex].key, keylength);
-       length = skb->len - prxattrib->hdrlen - prxattrib->iv_len;
-
-       payload = pframe + prxattrib->iv_len + prxattrib->hdrlen;
-
-       /* decrypt payload include icv */
-       arcfour_init(&mycontext, wepkey, 3 + keylength);
-       arcfour_encrypt(&mycontext, payload, payload, length);
-
-       /* calculate icv and compare the icv */
-       actual_crc = getcrc32(payload, length - 4);
-       expected_crc = get_unaligned_le32(&payload[length - 4]);
-
-       if (actual_crc != expected_crc) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s:icv CRC mismatch: "
-                        "actual: %08x, expected: %08x\n",
-                        __func__, actual_crc, expected_crc);
-       }
-}
-
-/* 3           ===== TKIP related ===== */
-
-static u32 secmicgetuint32(u8 *p)
-/*  Convert from Byte[] to u32 in a portable way */
-{
-       s32 i;
-       u32 res = 0;
-
-       for (i = 0; i < 4; i++)
-               res |= ((u32)(*p++)) << (8 * i);
-
-       return res;
-}
-
-static void secmicputuint32(u8 *p, u32 val)
-/*  Convert from long to Byte[] in a portable way */
-{
-       long i;
-
-       for (i = 0; i < 4; i++) {
-               *p++ = (u8) (val & 0xff);
-               val >>= 8;
-       }
-
-}
-
-static void secmicclear(struct mic_data *pmicdata)
-{
-/*  Reset the state to the empty message. */
-
-       pmicdata->L = pmicdata->K0;
-       pmicdata->R = pmicdata->K1;
-       pmicdata->nBytesInM = 0;
-       pmicdata->M = 0;
-
-}
-
-void rtw_secmicsetkey23a(struct mic_data *pmicdata, u8 *key)
-{
-       /*  Set the key */
-
-       pmicdata->K0 = secmicgetuint32(key);
-       pmicdata->K1 = secmicgetuint32(key + 4);
-       /*  and reset the message */
-       secmicclear(pmicdata);
-
-}
-
-void rtw_secmicappend23abyte23a(struct mic_data *pmicdata, u8 b)
-{
-
-       /*  Append the byte to our word-sized buffer */
-       pmicdata->M |= ((unsigned long)b) << (8 * pmicdata->nBytesInM);
-       pmicdata->nBytesInM++;
-       /*  Process the word if it is full. */
-       if (pmicdata->nBytesInM >= 4) {
-               pmicdata->L ^= pmicdata->M;
-               pmicdata->R ^= ROL32(pmicdata->L, 17);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ((pmicdata->L & 0xff00ff00) >> 8) | ((pmicdata->L & 0x00ff00ff) << 8);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ROL32(pmicdata->L, 3);
-               pmicdata->L += pmicdata->R;
-               pmicdata->R ^= ROR32(pmicdata->L, 2);
-               pmicdata->L += pmicdata->R;
-               /*  Clear the buffer */
-               pmicdata->M = 0;
-               pmicdata->nBytesInM = 0;
-       }
-
-}
-
-void rtw_secmicappend23a(struct mic_data *pmicdata, u8 *src, u32 nbytes)
-{
-
-       /*  This is simple */
-       while (nbytes > 0) {
-               rtw_secmicappend23abyte23a(pmicdata, *src++);
-               nbytes--;
-       }
-
-}
-
-void rtw_secgetmic23a(struct mic_data *pmicdata, u8 *dst)
-{
-
-       /*  Append the minimum padding */
-       rtw_secmicappend23abyte23a(pmicdata, 0x5a);
-       rtw_secmicappend23abyte23a(pmicdata, 0);
-       rtw_secmicappend23abyte23a(pmicdata, 0);
-       rtw_secmicappend23abyte23a(pmicdata, 0);
-       rtw_secmicappend23abyte23a(pmicdata, 0);
-       /*  and then zeroes until the length is a multiple of 4 */
-       while (pmicdata->nBytesInM != 0)
-               rtw_secmicappend23abyte23a(pmicdata, 0);
-       /*  The appendByte function has already computed the result. */
-       secmicputuint32(dst, pmicdata->L);
-       secmicputuint32(dst + 4, pmicdata->R);
-       /*  Reset to the empty message. */
-       secmicclear(pmicdata);
-
-}
-
-void rtw_seccalctkipmic23a(u8 *key, u8 *header, u8 *data, u32 data_len,
-                          u8 *mic_code, u8 pri)
-{
-
-       struct mic_data micdata;
-       u8 priority[4] = {0x0, 0x0, 0x0, 0x0};
-
-       rtw_secmicsetkey23a(&micdata, key);
-       priority[0] = pri;
-
-       /* Michael MIC pseudo header: DA, SA, 3 x 0, Priority */
-       if (header[1]&1) { /* ToDS == 1 */
-                       rtw_secmicappend23a(&micdata, &header[16], 6); /* DA */
-               if (header[1]&2) /* From Ds == 1 */
-                       rtw_secmicappend23a(&micdata, &header[24], 6);
-               else
-                       rtw_secmicappend23a(&micdata, &header[10], 6);
-       } else { /* ToDS == 0 */
-               rtw_secmicappend23a(&micdata, &header[4], 6); /* DA */
-               if (header[1]&2) /* From Ds == 1 */
-                       rtw_secmicappend23a(&micdata, &header[16], 6);
-               else
-                       rtw_secmicappend23a(&micdata, &header[10], 6);
-
-       }
-       rtw_secmicappend23a(&micdata, &priority[0], 4);
-
-       rtw_secmicappend23a(&micdata, data, data_len);
-
-       rtw_secgetmic23a(&micdata, mic_code);
-
-}
-
-/* macros for extraction/creation of unsigned char/unsigned short values  */
-#define RotR1(v16)   ((((v16) >> 1) & 0x7FFF) ^ (((v16) & 1) << 15))
-#define   Lo8(v16)   ((u8)((v16)       & 0x00FF))
-#define   Hi8(v16)   ((u8)(((v16) >> 8) & 0x00FF))
-#define  Lo16(v32)   ((u16)((v32)       & 0xFFFF))
-#define  Hi16(v32)   ((u16)(((v32) >> 16) & 0xFFFF))
-#define  Mk16(hi, lo) ((lo) ^ (((u16)(hi)) << 8))
-
-/* select the Nth 16-bit word of the temporal key unsigned char array TK[] */
-#define  TK16(N)     Mk16(tk[2 * (N) + 1], tk[2 * (N)])
-
-/* S-box lookup: 16 bits --> 16 bits */
-#define _S_(v16)     (Sbox1[0][Lo8(v16)] ^ Sbox1[1][Hi8(v16)])
-
-/* fixed algorithm "parameters" */
-#define PHASE1_LOOP_CNT   8    /* this needs to be "big enough"     */
-#define TA_SIZE           6    /*  48-bit transmitter address       */
-#define TK_SIZE          16    /* 128-bit temporal key              */
-#define P1K_SIZE         10    /*  80-bit Phase1 key                */
-#define RC4_KEY_SIZE     16    /* 128-bit RC4KEY (104 bits unknown) */
-
-/* 2-unsigned char by 2-unsigned char subset of the full AES S-box table */
-static const unsigned short Sbox1[2][256] = {
-       /* Sbox for hash (can be in ROM) */
-       {
-               0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
-               0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
-               0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
-               0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
-               0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
-               0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
-               0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
-               0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0x7FCD, 0xEA9F,
-               0x121B, 0x1D9E, 0x5874, 0x342E, 0x362D, 0xDCB2, 0xB4EE, 0x5BFB,
-               0xA4F6, 0x764D, 0xB761, 0x7DCE, 0x527B, 0xDD3E, 0x5E71, 0x1397,
-               0xA6F5, 0xB968, 0x0000, 0xC12C, 0x4060, 0xE31F, 0x79C8, 0xB6ED,
-               0xD4BE, 0x8D46, 0x67D9, 0x724B, 0x94DE, 0x98D4, 0xB0E8, 0x854A,
-               0xBB6B, 0xC52A, 0x4FE5, 0xED16, 0x86C5, 0x9AD7, 0x6655, 0x1194,
-               0x8ACF, 0xE910, 0x0406, 0xFE81, 0xA0F0, 0x7844, 0x25BA, 0x4BE3,
-               0xA2F3, 0x5DFE, 0x80C0, 0x058A, 0x3FAD, 0x21BC, 0x7048, 0xF104,
-               0x63DF, 0x77C1, 0xAF75, 0x4263, 0x2030, 0xE51A, 0xFD0E, 0xBF6D,
-               0x814C, 0x1814, 0x2635, 0xC32F, 0xBEE1, 0x35A2, 0x88CC, 0x2E39,
-               0x9357, 0x55F2, 0xFC82, 0x7A47, 0xC8AC, 0xBAE7, 0x322B, 0xE695,
-               0xC0A0, 0x1998, 0x9ED1, 0xA37F, 0x4466, 0x547E, 0x3BAB, 0x0B83,
-               0x8CCA, 0xC729, 0x6BD3, 0x283C, 0xA779, 0xBCE2, 0x161D, 0xAD76,
-               0xDB3B, 0x6456, 0x744E, 0x141E, 0x92DB, 0x0C0A, 0x486C, 0xB8E4,
-               0x9F5D, 0xBD6E, 0x43EF, 0xC4A6, 0x39A8, 0x31A4, 0xD337, 0xF28B,
-               0xD532, 0x8B43, 0x6E59, 0xDAB7, 0x018C, 0xB164, 0x9CD2, 0x49E0,
-               0xD8B4, 0xACFA, 0xF307, 0xCF25, 0xCAAF, 0xF48E, 0x47E9, 0x1018,
-               0x6FD5, 0xF088, 0x4A6F, 0x5C72, 0x3824, 0x57F1, 0x73C7, 0x9751,
-               0xCB23, 0xA17C, 0xE89C, 0x3E21, 0x96DD, 0x61DC, 0x0D86, 0x0F85,
-               0xE090, 0x7C42, 0x71C4, 0xCCAA, 0x90D8, 0x0605, 0xF701, 0x1C12,
-               0xC2A3, 0x6A5F, 0xAEF9, 0x69D0, 0x1791, 0x9958, 0x3A27, 0x27B9,
-               0xD938, 0xEB13, 0x2BB3, 0x2233, 0xD2BB, 0xA970, 0x0789, 0x33A7,
-               0x2DB6, 0x3C22, 0x1592, 0xC920, 0x8749, 0xAAFF, 0x5078, 0xA57A,
-               0x038F, 0x59F8, 0x0980, 0x1A17, 0x65DA, 0xD731, 0x84C6, 0xD0B8,
-               0x82C3, 0x29B0, 0x5A77, 0x1E11, 0x7BCB, 0xA8FC, 0x6DD6, 0x2C3A,
-       },
-       { /* second half of table is unsigned char-reversed version of first! */
-               0xA5C6, 0x84F8, 0x99EE, 0x8DF6, 0x0DFF, 0xBDD6, 0xB1DE, 0x5491,
-               0x5060, 0x0302, 0xA9CE, 0x7D56, 0x19E7, 0x62B5, 0xE64D, 0x9AEC,
-               0x458F, 0x9D1F, 0x4089, 0x87FA, 0x15EF, 0xEBB2, 0xC98E, 0x0BFB,
-               0xEC41, 0x67B3, 0xFD5F, 0xEA45, 0xBF23, 0xF753, 0x96E4, 0x5B9B,
-               0xC275, 0x1CE1, 0xAE3D, 0x6A4C, 0x5A6C, 0x417E, 0x02F5, 0x4F83,
-               0x5C68, 0xF451, 0x34D1, 0x08F9, 0x93E2, 0x73AB, 0x5362, 0x3F2A,
-               0x0C08, 0x5295, 0x6546, 0x5E9D, 0x2830, 0xA137, 0x0F0A, 0xB52F,
-               0x090E, 0x3624, 0x9B1B, 0x3DDF, 0x26CD, 0x694E, 0xCD7F, 0x9FEA,
-               0x1B12, 0x9E1D, 0x7458, 0x2E34, 0x2D36, 0xB2DC, 0xEEB4, 0xFB5B,
-               0xF6A4, 0x4D76, 0x61B7, 0xCE7D, 0x7B52, 0x3EDD, 0x715E, 0x9713,
-               0xF5A6, 0x68B9, 0x0000, 0x2CC1, 0x6040, 0x1FE3, 0xC879, 0xEDB6,
-               0xBED4, 0x468D, 0xD967, 0x4B72, 0xDE94, 0xD498, 0xE8B0, 0x4A85,
-               0x6BBB, 0x2AC5, 0xE54F, 0x16ED, 0xC586, 0xD79A, 0x5566, 0x9411,
-               0xCF8A, 0x10E9, 0x0604, 0x81FE, 0xF0A0, 0x4478, 0xBA25, 0xE34B,
-               0xF3A2, 0xFE5D, 0xC080, 0x8A05, 0xAD3F, 0xBC21, 0x4870, 0x04F1,
-               0xDF63, 0xC177, 0x75AF, 0x6342, 0x3020, 0x1AE5, 0x0EFD, 0x6DBF,
-               0x4C81, 0x1418, 0x3526, 0x2FC3, 0xE1BE, 0xA235, 0xCC88, 0x392E,
-               0x5793, 0xF255, 0x82FC, 0x477A, 0xACC8, 0xE7BA, 0x2B32, 0x95E6,
-               0xA0C0, 0x9819, 0xD19E, 0x7FA3, 0x6644, 0x7E54, 0xAB3B, 0x830B,
-               0xCA8C, 0x29C7, 0xD36B, 0x3C28, 0x79A7, 0xE2BC, 0x1D16, 0x76AD,
-               0x3BDB, 0x5664, 0x4E74, 0x1E14, 0xDB92, 0x0A0C, 0x6C48, 0xE4B8,
-               0x5D9F, 0x6EBD, 0xEF43, 0xA6C4, 0xA839, 0xA431, 0x37D3, 0x8BF2,
-               0x32D5, 0x438B, 0x596E, 0xB7DA, 0x8C01, 0x64B1, 0xD29C, 0xE049,
-               0xB4D8, 0xFAAC, 0x07F3, 0x25CF, 0xAFCA, 0x8EF4, 0xE947, 0x1810,
-               0xD56F, 0x88F0, 0x6F4A, 0x725C, 0x2438, 0xF157, 0xC773, 0x5197,
-               0x23CB, 0x7CA1, 0x9CE8, 0x213E, 0xDD96, 0xDC61, 0x860D, 0x850F,
-               0x90E0, 0x427C, 0xC471, 0xAACC, 0xD890, 0x0506, 0x01F7, 0x121C,
-               0xA3C2, 0x5F6A, 0xF9AE, 0xD069, 0x9117, 0x5899, 0x273A, 0xB927,
-               0x38D9, 0x13EB, 0xB32B, 0x3322, 0xBBD2, 0x70A9, 0x8907, 0xA733,
-               0xB62D, 0x223C, 0x9215, 0x20C9, 0x4987, 0xFFAA, 0x7850, 0x7AA5,
-               0x8F03, 0xF859, 0x8009, 0x171A, 0xDA65, 0x31D7, 0xC684, 0xB8D0,
-               0xC382, 0xB029, 0x775A, 0x111E, 0xCB7B, 0xFCA8, 0xD66D, 0x3A2C,
-       }
-};
-
- /*
-**********************************************************************
-* Routine: Phase 1 -- generate P1K, given TA, TK, IV32
-*
-* Inputs:
-*     tk[]      = temporal key                         [128 bits]
-*     ta[]      = transmitter's MAC address            [ 48 bits]
-*     iv32      = upper 32 bits of IV                  [ 32 bits]
-* Output:
-*     p1k[]     = Phase 1 key                          [ 80 bits]
-*
-* Note:
-*     This function only needs to be called every 2**16 packets,
-*     although in theory it could be called every packet.
-*
-**********************************************************************
-*/
-static void phase1(u16 *p1k, const u8 *tk, const u8 *ta, u32 iv32)
-{
-       int  i;
-
-       /* Initialize the 80 bits of P1K[] from IV32 and TA[0..5] */
-       p1k[0]      = Lo16(iv32);
-       p1k[1]      = Hi16(iv32);
-       p1k[2]      = Mk16(ta[1], ta[0]); /* use TA[] as little-endian */
-       p1k[3]      = Mk16(ta[3], ta[2]);
-       p1k[4]      = Mk16(ta[5], ta[4]);
-
-       /* Now compute an unbalanced Feistel cipher with 80-bit block */
-       /* size on the 80-bit block P1K[], using the 128-bit key TK[] */
-       for (i = 0; i < PHASE1_LOOP_CNT; i++) {
-               /* Each add operation here is mod 2**16 */
-               p1k[0] += _S_(p1k[4] ^ TK16((i & 1) + 0));
-               p1k[1] += _S_(p1k[0] ^ TK16((i & 1) + 2));
-               p1k[2] += _S_(p1k[1] ^ TK16((i & 1) + 4));
-               p1k[3] += _S_(p1k[2] ^ TK16((i & 1) + 6));
-               p1k[4] += _S_(p1k[3] ^ TK16((i & 1) + 0));
-               p1k[4] +=  (unsigned short) i; /* avoid "slide attacks" */
-               }
-
-}
-
-/*
-**********************************************************************
-* Routine: Phase 2 -- generate RC4KEY, given TK, P1K, IV16
-*
-* Inputs:
-*     tk[]      = Temporal key                         [128 bits]
-*     p1k[]     = Phase 1 output key                   [ 80 bits]
-*     iv16      = low 16 bits of IV counter            [ 16 bits]
-* Output:
-*     rc4key[]  = the key used to encrypt the packet   [128 bits]
-*
-* Note:
-*     The value {TA, IV32, IV16} for Phase1/Phase2 must be unique
-*     across all packets using the same key TK value. Then, for a
-*     given value of TK[], this TKIP48 construction guarantees that
-*     the final RC4KEY value is unique across all packets.
-*
-* Suggested implementation optimization: if PPK[] is "overlaid"
-*     appropriately on RC4KEY[], there is no need for the final
-*     for loop below that copies the PPK[] result into RC4KEY[].
-*
-**********************************************************************
-*/
-static void phase2(u8 *rc4key, const u8 *tk, const u16 *p1k, u16 iv16)
-{
-       int  i;
-       u16 PPK[6]; /* temporary key for mixing    */
-
-       /* Note: all adds in the PPK[] equations below are mod 2**16 */
-       for (i = 0; i < 5; i++)
-               PPK[i] = p1k[i]; /* first, copy P1K to PPK */
-
-       PPK[5] = p1k[4] + iv16; /* next,  add in IV16 */
-
-       /* Bijective non-linear mixing of the 96 bits of PPK[0..5] */
-       PPK[0] += _S_(PPK[5] ^ TK16(0)); /* Mix key in each "round" */
-       PPK[1] += _S_(PPK[0] ^ TK16(1));
-       PPK[2] += _S_(PPK[1] ^ TK16(2));
-       PPK[3] += _S_(PPK[2] ^ TK16(3));
-       PPK[4] += _S_(PPK[3] ^ TK16(4));
-       PPK[5] += _S_(PPK[4] ^ TK16(5)); /* Total # S-box lookups == 6 */
-
-       /* Final sweep: bijective, "linear". Rotates kill LSB correlations */
-       PPK[0] +=  RotR1(PPK[5] ^ TK16(6));
-       PPK[1] +=  RotR1(PPK[0] ^ TK16(7)); /* Use all of TK[] in Phase2 */
-       PPK[2] +=  RotR1(PPK[1]);
-       PPK[3] +=  RotR1(PPK[2]);
-       PPK[4] +=  RotR1(PPK[3]);
-       PPK[5] +=  RotR1(PPK[4]);
-       /* Note: At this point, for a given key TK[0..15], the 96-bit output */
-       /*       value PPK[0..5] is guaranteed to be unique, as a function   */
-       /*       of the 96-bit "input" value   {TA, IV32, IV16}. That is,    */
-       /*       P1K is now a keyed permutation of {TA, IV32, IV16}.         */
-
-       /* Set RC4KEY[0..3], which includes "cleartext" portion of RC4 key   */
-       rc4key[0] = Hi8(iv16);                 /* RC4KEY[0..2] is the WEP IV */
-       rc4key[1] = (Hi8(iv16) | 0x20) & 0x7F; /* Help avoid weak (FMS) keys */
-       rc4key[2] = Lo8(iv16);
-       rc4key[3] = Lo8((PPK[5] ^ TK16(0)) >> 1);
-
-       /* Copy 96 bits of PPK[0..5] to RC4KEY[4..15]  (little-endian) */
-       for (i = 0; i < 6; i++) {
-               rc4key[4 + 2 * i] = Lo8(PPK[i]);
-               rc4key[5 + 2 * i] = Hi8(PPK[i]);
-       }
-
-}
-
-/* The hlen isn't include the IV */
-int rtw_tkip_encrypt23a(struct rtw_adapter *padapter,
-                       struct xmit_frame *pxmitframe)
-{
-       u16 pnl;
-       u32 pnh;
-       u8 rc4key[16];
-       u8 ttkey[16];
-       __le32 crc;
-       u8 hw_hdr_offset = 0;
-       struct arc4context mycontext;
-       int curfragnum, length;
-       u8 *pframe, *payload, *iv, *prwskey;
-       union pn48 dot11txpn;
-       struct sta_info *stainfo;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int res = _SUCCESS;
-
-       if (pattrib->encrypt != WLAN_CIPHER_SUITE_TKIP)
-               return _FAIL;
-
-       if (!pxmitframe->buf_addr)
-               return _FAIL;
-
-       hw_hdr_offset = TXDESC_OFFSET;
-
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       if (pattrib->psta)
-               stainfo = pattrib->psta;
-       else {
-               DBG_8723A("%s, call rtw_get_stainfo()\n", __func__);
-               stainfo = rtw_get_stainfo23a(&padapter->stapriv,
-                                            &pattrib->ra[0]);
-       }
-
-       if (!stainfo) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s: stainfo == NULL!!!\n", __func__);
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return _FAIL;
-       }
-
-       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                "%s: stainfo!= NULL!!!\n", __func__);
-
-       if (!(stainfo->state & _FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, stainfo->state);
-               return _FAIL;
-       }
-
-       if (is_multicast_ether_addr(pattrib->ra))
-               prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
-       else
-               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-
-       /* 4 start to encrypt each fragment */
-       for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-               iv = pframe + pattrib->hdrlen;
-               payload = pframe + pattrib->iv_len + pattrib->hdrlen;
-
-               GET_TKIP_PN(iv, dot11txpn);
-
-               pnl = (u16)(dot11txpn.val);
-               pnh = (u32)(dot11txpn.val>>16);
-
-               phase1((u16 *)&ttkey[0], prwskey, &pattrib->ta[0], pnh);
-
-               phase2(&rc4key[0], prwskey, (u16 *)&ttkey[0], pnl);
-
-               if ((curfragnum + 1) == pattrib->nr_frags) { /* 4 the last fragment */
-                       length = (pattrib->last_txcmdsz -
-                                 pattrib->hdrlen -
-                                 pattrib->iv_len -
-                                 pattrib->icv_len);
-
-                       RT_TRACE(_module_rtl871x_security_c_, _drv_info_,
-                                "pattrib->iv_len =%x, pattrib->icv_len =%x\n",
-                                pattrib->iv_len,
-                                pattrib->icv_len);
-                       crc = cpu_to_le32(getcrc32(payload, length));
-
-                       arcfour_init(&mycontext, rc4key, 16);
-                       arcfour_encrypt(&mycontext, payload, payload, length);
-                       arcfour_encrypt(&mycontext, payload + length,
-                                       (char *)&crc, 4);
-
-               } else {
-                       length = (pxmitpriv->frag_len -
-                                 pattrib->hdrlen -
-                                 pattrib->iv_len -
-                                 pattrib->icv_len);
-
-                       crc = cpu_to_le32(getcrc32(payload, length));
-                       arcfour_init(&mycontext, rc4key, 16);
-                       arcfour_encrypt(&mycontext, payload, payload, length);
-                       arcfour_encrypt(&mycontext, payload + length,
-                                       (char *)&crc, 4);
-
-                       pframe += pxmitpriv->frag_len;
-                       pframe  = PTR_ALIGN(pframe, 4);
-               }
-       }
-
-       return res;
-}
-
-/* The hlen isn't include the IV */
-int rtw_tkip_decrypt23a(struct rtw_adapter *padapter,
-                       struct recv_frame *precvframe)
-{
-       u16 pnl;
-       u32 pnh;
-       u8 rc4key[16];
-       u8 ttkey[16];
-       u32 actual_crc, expected_crc;
-       struct arc4context mycontext;
-       int length;
-       u8 *pframe, *payload, *iv, *prwskey;
-       union pn48 dot11txpn;
-       struct sta_info *stainfo;
-       struct rx_pkt_attrib *prxattrib = &precvframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sk_buff *skb = precvframe->pkt;
-       int res = _SUCCESS;
-
-       if (prxattrib->encrypt != WLAN_CIPHER_SUITE_TKIP)
-               return _FAIL;
-
-       pframe = skb->data;
-
-       stainfo = rtw_get_stainfo23a(&padapter->stapriv,
-                                    &prxattrib->ta[0]);
-       if (!stainfo) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s: stainfo == NULL!!!\n", __func__);
-               return _FAIL;
-       }
-
-       /* 4 start to decrypt recvframe */
-       if (is_multicast_ether_addr(prxattrib->ra)) {
-               if (psecuritypriv->binstallGrpkey == 0) {
-                       res = _FAIL;
-                       DBG_8723A("%s:rx bc/mc packets, but didn't install group key!!!!!!!!!!\n", __func__);
-                       goto exit;
-               }
-               prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
-       } else {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s: stainfo!= NULL!!!\n", __func__);
-               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-       }
-
-       iv = pframe + prxattrib->hdrlen;
-       payload = pframe + prxattrib->iv_len + prxattrib->hdrlen;
-       length = skb->len - prxattrib->hdrlen - prxattrib->iv_len;
-
-       GET_TKIP_PN(iv, dot11txpn);
-
-       pnl = (u16)(dot11txpn.val);
-       pnh = (u32)(dot11txpn.val>>16);
-
-       phase1((u16 *)&ttkey[0], prwskey, &prxattrib->ta[0], pnh);
-       phase2(&rc4key[0], prwskey, (unsigned short *)&ttkey[0], pnl);
-
-       /* 4 decrypt payload include icv */
-       arcfour_init(&mycontext, rc4key, 16);
-       arcfour_encrypt(&mycontext, payload, payload, length);
-
-       actual_crc = getcrc32(payload, length - 4);
-       expected_crc = get_unaligned_le32(&payload[length - 4]);
-
-       if (actual_crc != expected_crc) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s:icv CRC mismatch: "
-                        "actual: %08x, expected: %08x\n",
-                        __func__, actual_crc, expected_crc);
-               res = _FAIL;
-       }
-
-exit:
-       return res;
-}
-
-/* 3                   ===== AES related ===== */
-
-#define MAX_MSG_SIZE   2048
-/*****************************/
-/******** SBOX Table *********/
-/*****************************/
-
-static  u8 sbox_table[256] = {
-       0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-       0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-       0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-       0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-       0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-       0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-       0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-       0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-       0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-       0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-       0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-       0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-       0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-       0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-       0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-       0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-       0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-       0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-       0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-       0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-       0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-       0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-       0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-       0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-       0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-       0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-       0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-       0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-       0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-       0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-       0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-       0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-/*****************************/
-/**** Function Prototypes ****/
-/*****************************/
-
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists,
-                                 int qc_exists);
-
-static void xor_128(u8 *a, u8 *b, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = a[i] ^ b[i];
-}
-
-static void xor_32(u8 *a, u8 *b, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 4; i++)
-               out[i] = a[i] ^ b[i];
-}
-
-static u8 sbox(u8 a)
-{
-       return sbox_table[(int)a];
-}
-
-static void next_key(u8 *key, int round)
-{
-       u8 rcon;
-       u8 sbox_key[4];
-       u8 rcon_table[12] = {
-               0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-               0x1b, 0x36, 0x36, 0x36
-       };
-
-       sbox_key[0] = sbox(key[13]);
-       sbox_key[1] = sbox(key[14]);
-       sbox_key[2] = sbox(key[15]);
-       sbox_key[3] = sbox(key[12]);
-
-       rcon = rcon_table[round];
-
-       xor_32(&key[0], sbox_key, &key[0]);
-       key[0] = key[0] ^ rcon;
-
-       xor_32(&key[4], &key[0], &key[4]);
-       xor_32(&key[8], &key[4], &key[8]);
-       xor_32(&key[12], &key[8], &key[12]);
-
-}
-
-static void byte_sub(u8 *in, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = sbox(in[i]);
-}
-
-static void shift_row(u8 *in, u8 *out)
-{
-
-       out[0] =  in[0];
-       out[1] =  in[5];
-       out[2] =  in[10];
-       out[3] =  in[15];
-       out[4] =  in[4];
-       out[5] =  in[9];
-       out[6] =  in[14];
-       out[7] =  in[3];
-       out[8] =  in[8];
-       out[9] =  in[13];
-       out[10] = in[2];
-       out[11] = in[7];
-       out[12] = in[12];
-       out[13] = in[1];
-       out[14] = in[6];
-       out[15] = in[11];
-
-}
-
-static void mix_column(u8 *in, u8 *out)
-{
-       int i;
-       u8 add1b[4];
-       u8 add1bf7[4];
-       u8 rotl[4];
-       u8 swap_halfs[4];
-       u8 andf7[4];
-       u8 rotr[4];
-       u8 temp[4];
-       u8 tempb[4];
-
-       for (i = 0; i < 4; i++) {
-               if ((in[i] & 0x80) == 0x80)
-                       add1b[i] = 0x1b;
-               else
-                       add1b[i] = 0x00;
-       }
-
-       swap_halfs[0] = in[2]; /* Swap halfs */
-       swap_halfs[1] = in[3];
-       swap_halfs[2] = in[0];
-       swap_halfs[3] = in[1];
-
-       rotl[0] = in[3]; /* Rotate left 8 bits */
-       rotl[1] = in[0];
-       rotl[2] = in[1];
-       rotl[3] = in[2];
-
-       andf7[0] = in[0] & 0x7f;
-       andf7[1] = in[1] & 0x7f;
-       andf7[2] = in[2] & 0x7f;
-       andf7[3] = in[3] & 0x7f;
-
-       for (i = 3; i > 0; i--) { /* logical shift left 1 bit */
-               andf7[i] = andf7[i] << 1;
-               if ((andf7[i - 1] & 0x80) == 0x80)
-                       andf7[i] = (andf7[i] | 0x01);
-       }
-       andf7[0] = andf7[0] << 1;
-       andf7[0] = andf7[0] & 0xfe;
-
-       xor_32(add1b, andf7, add1bf7);
-
-       xor_32(in, add1bf7, rotr);
-
-       temp[0] = rotr[0]; /* Rotate right 8 bits */
-       rotr[0] = rotr[1];
-       rotr[1] = rotr[2];
-       rotr[2] = rotr[3];
-       rotr[3] = temp[0];
-
-       xor_32(add1bf7, rotr, temp);
-       xor_32(swap_halfs, rotl, tempb);
-       xor_32(temp, tempb, out);
-
-}
-
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext)
-{
-       int round;
-       int i;
-       u8 intermediatea[16];
-       u8 intermediateb[16];
-       u8 round_key[16];
-
-       for (i = 0; i < 16; i++)
-               round_key[i] = key[i];
-
-       for (round = 0; round < 11; round++) {
-               if (round == 0) {
-                       xor_128(round_key, data, ciphertext);
-                       next_key(round_key, round);
-               } else if (round == 10) {
-                       byte_sub(ciphertext, intermediatea);
-                       shift_row(intermediatea, intermediateb);
-                       xor_128(intermediateb, round_key, ciphertext);
-               } else { /* 1 - 9 */
-                       byte_sub(ciphertext, intermediatea);
-                       shift_row(intermediatea, intermediateb);
-                       mix_column(&intermediateb[0], &intermediatea[0]);
-                       mix_column(&intermediateb[4], &intermediatea[4]);
-                       mix_column(&intermediateb[8], &intermediatea[8]);
-                       mix_column(&intermediateb[12], &intermediatea[12]);
-                       xor_128(intermediatea, round_key, ciphertext);
-                       next_key(round_key, round);
-               }
-       }
-
-}
-
-/************************************************/
-/* construct_mic_iv()                           */
-/* Builds the MIC IV from header fields and PN  */
-/************************************************/
-static void construct_mic_iv(u8 *mic_iv, int qc_exists, int a4_exists, u8 *mpdu,
-                            uint payload_length, u8 *pn_vector)
-{
-       int i;
-
-       mic_iv[0] = 0x59;
-       if (qc_exists && a4_exists)
-               mic_iv[1] = mpdu[30] & 0x0f; /* QoS_TC        */
-       if (qc_exists && !a4_exists)
-               mic_iv[1] = mpdu[24] & 0x0f; /* mute bits 7-4 */
-       if (!qc_exists)
-               mic_iv[1] = 0x00;
-       for (i = 2; i < 8; i++)
-               mic_iv[i] = mpdu[i + 8]; /* mic_iv[2:7] = A2[0:5] = mpdu[10:15] */
-       for (i = 8; i < 14; i++)
-               mic_iv[i] = pn_vector[13 - i]; /* mic_iv[8:13] = PN[5:0] */
-       mic_iv[14] = (unsigned char)(payload_length / 256);
-       mic_iv[15] = (unsigned char)(payload_length % 256);
-}
-
-/************************************************/
-/* construct_mic_header1()                      */
-/* Builds the first MIC header block from       */
-/* header fields.                               */
-/************************************************/
-static void construct_mic_header1(u8 *mic_header1, int header_length, u8 *mpdu)
-{
-       mic_header1[0] = (u8)((header_length - 2) / 256);
-       mic_header1[1] = (u8)((header_length - 2) % 256);
-       mic_header1[2] = mpdu[0] & 0xcf; /* Mute CF poll & CF ack bits */
-       mic_header1[3] = mpdu[1] & 0xc7; /* Mute retry, more data and pwr mgt bits */
-       mic_header1[4] = mpdu[4]; /* A1 */
-       mic_header1[5] = mpdu[5];
-       mic_header1[6] = mpdu[6];
-       mic_header1[7] = mpdu[7];
-       mic_header1[8] = mpdu[8];
-       mic_header1[9] = mpdu[9];
-       mic_header1[10] = mpdu[10]; /* A2 */
-       mic_header1[11] = mpdu[11];
-       mic_header1[12] = mpdu[12];
-       mic_header1[13] = mpdu[13];
-       mic_header1[14] = mpdu[14];
-       mic_header1[15] = mpdu[15];
-
-}
-
-/************************************************/
-/* construct_mic_header2()                      */
-/* Builds the last MIC header block from        */
-/* header fields.                               */
-/************************************************/
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists,
-                                 int qc_exists)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               mic_header2[i] = 0x00;
-
-       mic_header2[0] = mpdu[16]; /* A3 */
-       mic_header2[1] = mpdu[17];
-       mic_header2[2] = mpdu[18];
-       mic_header2[3] = mpdu[19];
-       mic_header2[4] = mpdu[20];
-       mic_header2[5] = mpdu[21];
-
-       mic_header2[6] = 0x00;
-       mic_header2[7] = 0x00; /* mpdu[23]; */
-
-       if (!qc_exists && a4_exists) {
-               for (i = 0; i < 6; i++)
-                       mic_header2[8+i] = mpdu[24+i]; /* A4 */
-       }
-
-       if (qc_exists && !a4_exists) {
-               mic_header2[8] = mpdu[24] & 0x0f; /* mute bits 15 - 4 */
-               mic_header2[9] = mpdu[25] & 0x00;
-       }
-
-       if (qc_exists && a4_exists) {
-               for (i = 0; i < 6; i++)
-                       mic_header2[8+i] = mpdu[24+i]; /* A4 */
-
-               mic_header2[14] = mpdu[30] & 0x0f;
-               mic_header2[15] = mpdu[31] & 0x00;
-       }
-
-}
-
-/************************************************/
-/* construct_mic_header2()                      */
-/* Builds the last MIC header block from        */
-/* header fields.                               */
-/************************************************/
-static void construct_ctr_preload(u8 *ctr_preload, int a4_exists, int qc_exists,
-                                 u8 *mpdu, u8 *pn_vector, int c)
-{
-       int i = 0;
-
-       for (i = 0; i < 16; i++)
-               ctr_preload[i] = 0x00;
-
-       i = 0;
-
-       ctr_preload[0] = 0x01; /* flag */
-       if (qc_exists && a4_exists)
-               ctr_preload[1] = mpdu[30] & 0x0f; /* QoC_Control */
-       if (qc_exists && !a4_exists)
-               ctr_preload[1] = mpdu[24] & 0x0f;
-
-       for (i = 2; i < 8; i++)
-               ctr_preload[i] = mpdu[i + 8]; /* ctr_preload[2:7] = A2[0:5] = mpdu[10:15] */
-       for (i = 8; i < 14; i++)
-               ctr_preload[i] = pn_vector[13 - i]; /* ctr_preload[8:13] = PN[5:0] */
-       ctr_preload[14] =  (unsigned char) (c / 256); /* Ctr */
-       ctr_preload[15] =  (unsigned char) (c % 256);
-
-}
-
-/************************************/
-/* bitwise_xor()                    */
-/* A 128 bit, bitwise exclusive or  */
-/************************************/
-static void bitwise_xor(u8 *ina, u8 *inb, u8 *out)
-{
-       int i;
-
-       for (i = 0; i < 16; i++)
-               out[i] = ina[i] ^ inb[i];
-}
-
-static int aes_cipher(u8 *key, uint hdrlen, u8 *pframe, uint plen)
-{
-       uint qc_exists, a4_exists, i, j, payload_remainder,
-            num_blocks, payload_index;
-       u8 pn_vector[6];
-       u8 mic_iv[16];
-       u8 mic_header1[16];
-       u8 mic_header2[16];
-       u8 ctr_preload[16];
-       /* Intermediate Buffers */
-       u8 chain_buffer[16];
-       u8 aes_out[16];
-       u8 padded_buffer[16];
-       u8 mic[8];
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)pframe;
-       u16 frsubtype = le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_STYPE;
-
-       memset((void *)mic_iv, 0, 16);
-       memset((void *)mic_header1, 0, 16);
-       memset((void *)mic_header2, 0, 16);
-       memset((void *)ctr_preload, 0, 16);
-       memset((void *)chain_buffer, 0, 16);
-       memset((void *)aes_out, 0, 16);
-       memset((void *)padded_buffer, 0, 16);
-
-       if ((hdrlen == sizeof(struct ieee80211_hdr_3addr) ||
-           (hdrlen == sizeof(struct ieee80211_qos_hdr))))
-               a4_exists = 0;
-       else
-               a4_exists = 1;
-
-       if (ieee80211_is_data(hdr->frame_control)) {
-               if ((frsubtype == IEEE80211_STYPE_DATA_CFACK) ||
-                   (frsubtype == IEEE80211_STYPE_DATA_CFPOLL) ||
-                   (frsubtype == IEEE80211_STYPE_DATA_CFACKPOLL)) {
-                       qc_exists = 1;
-                       if (hdrlen != sizeof(struct ieee80211_qos_hdr))
-                               hdrlen += 2;
-               } else if ((frsubtype == IEEE80211_STYPE_QOS_DATA) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFACK) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFPOLL) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFACKPOLL)) {
-                       if (hdrlen != sizeof(struct ieee80211_qos_hdr))
-                               hdrlen += 2;
-                       qc_exists = 1;
-               } else {
-                       qc_exists = 0;
-               }
-       } else {
-               qc_exists = 0;
-       }
-       pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen + 1];
-       pn_vector[2] = pframe[hdrlen + 4];
-       pn_vector[3] = pframe[hdrlen + 5];
-       pn_vector[4] = pframe[hdrlen + 6];
-       pn_vector[5] = pframe[hdrlen + 7];
-
-       construct_mic_iv(mic_iv, qc_exists, a4_exists, pframe, plen, pn_vector);
-
-       construct_mic_header1(mic_header1, hdrlen, pframe);
-       construct_mic_header2(mic_header2, pframe, a4_exists, qc_exists);
-
-       payload_remainder = plen % 16;
-       num_blocks = plen / 16;
-
-       /* Find start of payload */
-       payload_index = hdrlen + 8;
-
-       /* Calculate MIC */
-       aes128k128d(key, mic_iv, aes_out);
-       bitwise_xor(aes_out, mic_header1, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-       bitwise_xor(aes_out, mic_header2, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-
-       for (i = 0; i < num_blocks; i++) {
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
-
-               payload_index += 16;
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       /* Add on the final payload block if it needs padding */
-       if (payload_remainder > 0) {
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index++];
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       for (j = 0; j < 8; j++)
-               mic[j] = aes_out[j];
-
-       /* Insert MIC into payload */
-       for (j = 0; j < 8; j++)
-               pframe[payload_index + j] = mic[j];
-
-       payload_index = hdrlen + 8;
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     pframe, pn_vector, i + 1);
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
-               for (j = 0; j < 16; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) {
-               /* If there is a short final block, then pad it,
-                * encrypt it and copy the unpadded part back
-                */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe,
-                                     pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       /* Encrypt the MIC */
-       construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe,
-                             pn_vector, 0);
-
-       for (j = 0; j < 16; j++)
-               padded_buffer[j] = 0x00;
-       for (j = 0; j < 8; j++)
-               padded_buffer[j] = pframe[j + hdrlen + 8 + plen];
-
-       aes128k128d(key, ctr_preload, aes_out);
-       bitwise_xor(aes_out, padded_buffer, chain_buffer);
-       for (j = 0; j < 8; j++)
-               pframe[payload_index++] = chain_buffer[j];
-
-       return _SUCCESS;
-}
-
-int rtw_aes_encrypt23a(struct rtw_adapter *padapter,
-                      struct xmit_frame *pxmitframe)
-{      /* exclude ICV */
-       /* Intermediate Buffers */
-       int curfragnum, length;
-       u8 *pframe, *prwskey;
-       u8 hw_hdr_offset = 0;
-       struct sta_info *stainfo;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int res = _SUCCESS;
-
-       if (!pxmitframe->buf_addr)
-               return _FAIL;
-
-       hw_hdr_offset = TXDESC_OFFSET;
-
-       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-       /* 4 start to encrypt each fragment */
-       if (pattrib->encrypt != WLAN_CIPHER_SUITE_CCMP)
-               return _FAIL;
-
-       if (pattrib->psta) {
-               stainfo = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               stainfo = rtw_get_stainfo23a(&padapter->stapriv, &pattrib->ra[0]);
-       }
-
-       if (!stainfo) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s: stainfo == NULL!!!\n", __func__);
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               res = _FAIL;
-               goto out;
-       }
-       if (!(stainfo->state & _FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n",
-                         __func__, stainfo->state);
-               return _FAIL;
-       }
-       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                "%s: stainfo!= NULL!!!\n", __func__);
-
-       if (is_multicast_ether_addr(pattrib->ra))
-               prwskey = psecuritypriv->dot118021XGrpKey[psecuritypriv->dot118021XGrpKeyid].skey;
-       else
-               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-
-       for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
-               /* 4 the last fragment */
-               if ((curfragnum + 1) == pattrib->nr_frags) {
-                       length = pattrib->last_txcmdsz -
-                               pattrib->hdrlen-pattrib->iv_len -
-                               pattrib->icv_len;
-
-                       aes_cipher(prwskey, pattrib->hdrlen, pframe, length);
-               } else {
-                       length = pxmitpriv->frag_len-pattrib->hdrlen -
-                               pattrib->iv_len - pattrib->icv_len;
-
-                       aes_cipher(prwskey, pattrib->hdrlen, pframe, length);
-                       pframe += pxmitpriv->frag_len;
-                       pframe = PTR_ALIGN(pframe, 4);
-               }
-       }
-out:
-       return res;
-}
-
-static int aes_decipher(u8 *key, uint hdrlen, u8 *pframe, uint plen)
-{
-       static u8 message[MAX_MSG_SIZE];
-       uint qc_exists, a4_exists, i, j, payload_remainder,
-            num_blocks, payload_index;
-       int res = _SUCCESS;
-       u8 pn_vector[6];
-       u8 mic_iv[16];
-       u8 mic_header1[16];
-       u8 mic_header2[16];
-       u8 ctr_preload[16];
-       /* Intermediate Buffers */
-       u8 chain_buffer[16];
-       u8 aes_out[16];
-       u8 padded_buffer[16];
-       u8 mic[8];
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)pframe;
-       u16 frsubtype = le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_STYPE;
-
-       memset((void *)mic_iv, 0, 16);
-       memset((void *)mic_header1, 0, 16);
-       memset((void *)mic_header2, 0, 16);
-       memset((void *)ctr_preload, 0, 16);
-       memset((void *)chain_buffer, 0, 16);
-       memset((void *)aes_out, 0, 16);
-       memset((void *)padded_buffer, 0, 16);
-
-       /* start to decrypt the payload */
-
-       num_blocks = (plen - 8) / 16; /* plen including llc, payload_length and mic) */
-
-       payload_remainder = (plen - 8) % 16;
-
-       pn_vector[0]  = pframe[hdrlen];
-       pn_vector[1]  = pframe[hdrlen + 1];
-       pn_vector[2]  = pframe[hdrlen + 4];
-       pn_vector[3]  = pframe[hdrlen + 5];
-       pn_vector[4]  = pframe[hdrlen + 6];
-       pn_vector[5]  = pframe[hdrlen + 7];
-
-       if ((hdrlen == sizeof(struct ieee80211_hdr_3addr) ||
-           (hdrlen == sizeof(struct ieee80211_qos_hdr))))
-               a4_exists = 0;
-       else
-               a4_exists = 1;
-
-       if (ieee80211_is_data(hdr->frame_control)) {
-               if ((frsubtype == IEEE80211_STYPE_DATA_CFACK) ||
-                   (frsubtype == IEEE80211_STYPE_DATA_CFPOLL) ||
-                   (frsubtype == IEEE80211_STYPE_DATA_CFACKPOLL)) {
-                       qc_exists = 1;
-                       if (hdrlen != sizeof(struct ieee80211_hdr_3addr))
-                               hdrlen += 2;
-               } else if ((frsubtype == IEEE80211_STYPE_QOS_DATA) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFACK) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFPOLL) ||
-                          (frsubtype == IEEE80211_STYPE_QOS_DATA_CFACKPOLL)) {
-                       if (hdrlen != sizeof(struct ieee80211_hdr_3addr))
-                               hdrlen += 2;
-                       qc_exists = 1;
-               } else {
-                       qc_exists = 0;
-               }
-       } else {
-               qc_exists = 0;
-       }
-
-       /* now, decrypt pframe with hdrlen offset and plen long */
-
-       payload_index = hdrlen + 8; /*  8 is for extiv */
-
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     pframe, pn_vector, i + 1);
-
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &pframe[payload_index], chain_buffer);
-
-               for (j = 0; j < 16; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) {
-               /* If there is a short final block, then pad it,
-                * encrypt it and copy the unpadded part back
-                */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists, pframe,
-                                     pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = pframe[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       pframe[payload_index++] = chain_buffer[j];
-       }
-
-       /* start to calculate the mic */
-       if ((hdrlen + plen + 8) <= MAX_MSG_SIZE)
-               memcpy(message, pframe, (hdrlen + plen + 8)); /* 8 is for ext iv len */
-
-       pn_vector[0] = pframe[hdrlen];
-       pn_vector[1] = pframe[hdrlen + 1];
-       pn_vector[2] = pframe[hdrlen + 4];
-       pn_vector[3] = pframe[hdrlen + 5];
-       pn_vector[4] = pframe[hdrlen + 6];
-       pn_vector[5] = pframe[hdrlen + 7];
-
-       construct_mic_iv(mic_iv, qc_exists, a4_exists, message,
-                        plen - 8, pn_vector);
-
-       construct_mic_header1(mic_header1, hdrlen, message);
-       construct_mic_header2(mic_header2, message, a4_exists, qc_exists);
-
-       payload_remainder = (plen - 8) % 16;
-       num_blocks = (plen - 8) / 16;
-
-       /* Find start of payload */
-       payload_index = hdrlen + 8;
-
-       /* Calculate MIC */
-       aes128k128d(key, mic_iv, aes_out);
-       bitwise_xor(aes_out, mic_header1, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-       bitwise_xor(aes_out, mic_header2, chain_buffer);
-       aes128k128d(key, chain_buffer, aes_out);
-
-       for (i = 0; i < num_blocks; i++) {
-               bitwise_xor(aes_out, &message[payload_index], chain_buffer);
-
-               payload_index += 16;
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       /* Add on the final payload block if it needs padding */
-       if (payload_remainder > 0) {
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = message[payload_index++];
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               aes128k128d(key, chain_buffer, aes_out);
-       }
-
-       for (j = 0 ; j < 8; j++)
-               mic[j] = aes_out[j];
-
-       /* Insert MIC into payload */
-       for (j = 0; j < 8; j++)
-               message[payload_index + j] = mic[j];
-
-       payload_index = hdrlen + 8;
-       for (i = 0; i < num_blocks; i++) {
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     message, pn_vector, i + 1);
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, &message[payload_index], chain_buffer);
-               for (j = 0; j < 16; j++)
-                       message[payload_index++] = chain_buffer[j];
-       }
-
-       if (payload_remainder > 0) {
-               /* If there is a short final block, then pad it,
-                * encrypt it and copy the unpadded part back
-                */
-               construct_ctr_preload(ctr_preload, a4_exists, qc_exists,
-                                     message, pn_vector, num_blocks + 1);
-
-               for (j = 0; j < 16; j++)
-                       padded_buffer[j] = 0x00;
-               for (j = 0; j < payload_remainder; j++)
-                       padded_buffer[j] = message[payload_index + j];
-               aes128k128d(key, ctr_preload, aes_out);
-               bitwise_xor(aes_out, padded_buffer, chain_buffer);
-               for (j = 0; j < payload_remainder; j++)
-                       message[payload_index++] = chain_buffer[j];
-       }
-
-       /* Encrypt the MIC */
-       construct_ctr_preload(ctr_preload, a4_exists, qc_exists, message,
-                             pn_vector, 0);
-
-       for (j = 0; j < 16; j++)
-               padded_buffer[j] = 0x00;
-       for (j = 0; j < 8; j++)
-               padded_buffer[j] = message[j + hdrlen + 8 + plen - 8];
-
-       aes128k128d(key, ctr_preload, aes_out);
-       bitwise_xor(aes_out, padded_buffer, chain_buffer);
-       for (j = 0; j < 8; j++)
-               message[payload_index++] = chain_buffer[j];
-
-       /* compare the mic */
-       for (i = 0; i < 8; i++) {
-               if (pframe[hdrlen + 8 + plen - 8 + i] != message[hdrlen + 8 + plen - 8 + i]) {
-                       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                                "%s:mic check error mic[%d]: pframe(%x) != message(%x)\n",
-                                __func__, i,
-                                pframe[hdrlen + 8 + plen - 8 + i],
-                                message[hdrlen + 8 + plen - 8 + i]);
-                       DBG_8723A("%s:mic check error mic[%d]: pframe(%x) != message(%x)\n",
-                                 __func__, i,
-                                 pframe[hdrlen + 8 + plen - 8 + i],
-                                 message[hdrlen + 8 + plen - 8 + i]);
-                       res = _FAIL;
-               }
-       }
-       return res;
-}
-
-int rtw_aes_decrypt23a(struct rtw_adapter *padapter,
-                      struct recv_frame *precvframe)
-{      /*  exclude ICV */
-       struct sta_info *stainfo;
-       struct rx_pkt_attrib *prxattrib = &precvframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sk_buff *skb = precvframe->pkt;
-       int length;
-       u8 *pframe, *prwskey;
-       int res = _SUCCESS;
-
-       pframe = skb->data;
-       /* 4 start to encrypt each fragment */
-       if (prxattrib->encrypt != WLAN_CIPHER_SUITE_CCMP)
-               return _FAIL;
-
-       stainfo = rtw_get_stainfo23a(&padapter->stapriv, &prxattrib->ta[0]);
-       if (!stainfo) {
-               RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                        "%s: stainfo == NULL!!!\n", __func__);
-               res = _FAIL;
-               goto exit;
-       }
-
-       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                "%s: stainfo!= NULL!!!\n", __func__);
-
-       if (is_multicast_ether_addr(prxattrib->ra)) {
-               /* in concurrent we should use sw decrypt in
-                * group key, so we remove this message
-                */
-               if (!psecuritypriv->binstallGrpkey) {
-                       res = _FAIL;
-                       DBG_8723A("%s:rx bc/mc packets, but didn't install "
-                                 "group key!!!!!!!!!!\n", __func__);
-                       goto exit;
-               }
-               prwskey = psecuritypriv->dot118021XGrpKey[prxattrib->key_index].skey;
-               if (psecuritypriv->dot118021XGrpKeyid != prxattrib->key_index) {
-                       DBG_8723A("not match packet_index =%d, install_index ="
-                                 "%d\n", prxattrib->key_index,
-                                 psecuritypriv->dot118021XGrpKeyid);
-                       res = _FAIL;
-                       goto exit;
-               }
-       } else {
-               prwskey = &stainfo->dot118021x_UncstKey.skey[0];
-       }
-
-       length = skb->len - prxattrib->hdrlen - prxattrib->iv_len;
-
-       res = aes_decipher(prwskey, prxattrib->hdrlen, pframe, length);
-exit:
-       return res;
-}
-
-void rtw_use_tkipkey_handler23a(void *function_context)
-{
-       struct rtw_adapter *padapter = function_context;
-
-       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                "^^^%s ^^^\n", __func__);
-       padapter->securitypriv.busetkipkey = 1;
-       RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-                "^^^%s padapter->securitypriv.busetkipkey =%d^^^\n",
-                __func__, padapter->securitypriv.busetkipkey);
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_sreset.c b/drivers/staging/rtl8723au/core/rtw_sreset.c
deleted file mode 100644 (file)
index 29a29d9..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#include <rtw_sreset.h>
-#include <usb_ops_linux.h>
-
-void rtw_sreset_init(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
-       mutex_init(&psrtpriv->silentreset_mutex);
-       psrtpriv->silent_reset_inprogress = false;
-       psrtpriv->last_tx_time = 0;
-       psrtpriv->last_tx_complete_time = 0;
-}
-
-void rtw_sreset_reset_value(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
-       psrtpriv->silent_reset_inprogress = false;
-       psrtpriv->last_tx_time = 0;
-       psrtpriv->last_tx_complete_time = 0;
-}
-
-bool rtw_sreset_inprogress(struct rtw_adapter *padapter)
-{
-       struct rtw_adapter *primary_adapter = GET_PRIMARY_ADAPTER(padapter);
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(primary_adapter);
-
-       return pHalData->srestpriv.silent_reset_inprogress;
-}
-
-static void sreset_restore_security_station(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *psta;
-       struct mlme_ext_info *pmlmeinfo = &padapter->mlmeextpriv.mlmext_info;
-       u8 val8;
-
-       if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X)
-               val8 = 0xcc;
-       else
-               val8 = 0xcf;
-
-       rtl8723a_set_sec_cfg(padapter, val8);
-
-       if (padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_TKIP ||
-           padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_CCMP) {
-               psta = rtw_get_stainfo23a(pstapriv, get_bssid(mlmepriv));
-               if (psta == NULL) {
-                       /* DEBUG_ERR(("Set wpa_set_encryption: Obtain Sta_info fail\n")); */
-               } else {
-                       /* pairwise key */
-                       rtw_setstakey_cmd23a(padapter, (unsigned char *)psta, true);
-                       /* group key */
-                       rtw_set_key23a(padapter,&padapter->securitypriv, padapter->securitypriv.dot118021XGrpKeyid, 0);
-               }
-       }
-}
-
-static void sreset_restore_network_station(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u8 threshold;
-
-       rtw_setopmode_cmd23a(padapter, NL80211_IFTYPE_STATION);
-
-       /*  TH = 1 => means that invalidate usb rx aggregation */
-       /*  TH = 0 => means that validate usb rx aggregation, use init value. */
-       if (mlmepriv->htpriv.ht_option) {
-               if (padapter->registrypriv.wifi_spec == 1)
-                       threshold = 1;
-               else
-                       threshold = 0;
-       } else
-               threshold = 1;
-
-       rtl8723a_set_rxdma_agg_pg_th(padapter, threshold);
-
-       set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                             pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
-
-       hw_var_set_bssid(padapter, pmlmeinfo->network.MacAddress);
-       hw_var_set_mlme_join(padapter, 0);
-
-       rtl8723a_set_media_status(padapter, pmlmeinfo->state & 0x3);
-
-       mlmeext_joinbss_event_callback23a(padapter, 1);
-       /* restore Sequence No. */
-       rtl8723au_write8(padapter, REG_NQOS_SEQ, padapter->xmitpriv.nqos_ssn);
-
-       sreset_restore_security_station(padapter);
-}
-
-static void sreset_restore_network_status(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *mlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(mlmepriv, WIFI_STATION_STATE)) {
-               DBG_8723A("%s(%s): fwstate:0x%08x - WIFI_STATION_STATE\n",
-                         __func__, padapter->pnetdev->name,
-                         get_fwstate(mlmepriv));
-               sreset_restore_network_station(padapter);
-#ifdef CONFIG_8723AU_AP_MODE
-       } else if (check_fwstate(mlmepriv, WIFI_AP_STATE)) {
-               DBG_8723A("%s(%s): fwstate:0x%08x - WIFI_AP_STATE\n",
-                         __func__, padapter->pnetdev->name,
-                         get_fwstate(mlmepriv));
-               rtw_ap_restore_network(padapter);
-#endif
-       } else if (check_fwstate(mlmepriv, WIFI_ADHOC_STATE)) {
-               DBG_8723A("%s(%s): fwstate:0x%08x - WIFI_ADHOC_STATE\n",
-                         __func__, padapter->pnetdev->name,
-                         get_fwstate(mlmepriv));
-       } else {
-               DBG_8723A("%s(%s): fwstate:0x%08x - ???\n", __func__,
-                         padapter->pnetdev->name, get_fwstate(mlmepriv));
-       }
-}
-
-static void sreset_stop_adapter(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-
-       if (padapter == NULL)
-               return;
-
-       DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name);
-
-       if (!rtw_netif_queue_stopped(padapter->pnetdev))
-               netif_tx_stop_all_queues(padapter->pnetdev);
-
-       rtw_cancel_all_timer23a(padapter);
-
-       /* TODO: OS and HCI independent */
-       tasklet_kill(&pxmitpriv->xmit_tasklet);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               rtw_scan_abort23a(padapter);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               rtw23a_join_to_handler((unsigned long)padapter);
-}
-
-static void sreset_start_adapter(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-
-       if (padapter == NULL)
-               return;
-
-       DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               sreset_restore_network_status(padapter);
-
-       /* TODO: OS and HCI independent */
-       tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-
-       mod_timer(&padapter->mlmepriv.dynamic_chk_timer,
-                 jiffies + msecs_to_jiffies(2000));
-
-       if (rtw_netif_queue_stopped(padapter->pnetdev))
-               netif_tx_wake_all_queues(padapter->pnetdev);
-}
-
-void rtw_sreset_reset(struct rtw_adapter *active_adapter)
-{
-       struct rtw_adapter *padapter = GET_PRIMARY_ADAPTER(active_adapter);
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       unsigned long start = jiffies;
-
-       DBG_8723A("%s\n", __func__);
-
-       mutex_lock(&psrtpriv->silentreset_mutex);
-       psrtpriv->silent_reset_inprogress = true;
-       pwrpriv->change_rfpwrstate = rf_off;
-
-       sreset_stop_adapter(padapter);
-
-       ips_enter23a(padapter);
-       ips_leave23a(padapter);
-
-       sreset_start_adapter(padapter);
-       psrtpriv->silent_reset_inprogress = false;
-       mutex_unlock(&psrtpriv->silentreset_mutex);
-
-       DBG_8723A("%s done in %d ms\n", __func__,
-                 jiffies_to_msecs(jiffies - start));
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_sta_mgt.c b/drivers/staging/rtl8723au/core/rtw_sta_mgt.c
deleted file mode 100644 (file)
index a9b778c..0000000
+++ /dev/null
@@ -1,439 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_STA_MGT_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <xmit_osdep.h>
-#include <mlme_osdep.h>
-#include <sta_info.h>
-#include <rtl8723a_hal.h>
-
-static const u8 bc_addr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-static void _rtw_init_stainfo(struct sta_info *psta)
-{
-       memset((u8 *)psta, 0, sizeof(struct sta_info));
-       spin_lock_init(&psta->lock);
-       INIT_LIST_HEAD(&psta->list);
-       INIT_LIST_HEAD(&psta->hash_list);
-       _rtw_init_queue23a(&psta->sleep_q);
-       psta->sleepq_len = 0;
-       _rtw_init_sta_xmit_priv23a(&psta->sta_xmitpriv);
-       _rtw_init_sta_recv_priv23a(&psta->sta_recvpriv);
-#ifdef CONFIG_8723AU_AP_MODE
-       INIT_LIST_HEAD(&psta->asoc_list);
-       INIT_LIST_HEAD(&psta->auth_list);
-       psta->expire_to = 0;
-       psta->flags = 0;
-       psta->capability = 0;
-       psta->bpairwise_key_installed = false;
-       psta->nonerp_set = 0;
-       psta->no_short_slot_time_set = 0;
-       psta->no_short_preamble_set = 0;
-       psta->no_ht_gf_set = 0;
-       psta->no_ht_set = 0;
-       psta->ht_20mhz_set = 0;
-       psta->keep_alive_trycnt = 0;
-#endif /*  CONFIG_8723AU_AP_MODE */
-}
-
-int _rtw_init_sta_priv23a(struct sta_priv *pstapriv)
-{
-       int i;
-
-       spin_lock_init(&pstapriv->sta_hash_lock);
-       pstapriv->asoc_sta_count = 0;
-       for (i = 0; i < NUM_STA; i++)
-               INIT_LIST_HEAD(&pstapriv->sta_hash[i]);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       pstapriv->sta_dz_bitmap = 0;
-       pstapriv->tim_bitmap = 0;
-       INIT_LIST_HEAD(&pstapriv->asoc_list);
-       INIT_LIST_HEAD(&pstapriv->auth_list);
-       spin_lock_init(&pstapriv->asoc_list_lock);
-       spin_lock_init(&pstapriv->auth_list_lock);
-       pstapriv->asoc_list_cnt = 0;
-       pstapriv->auth_list_cnt = 0;
-       pstapriv->auth_to = 3; /*  3*2 = 6 sec */
-       pstapriv->assoc_to = 3;
-       /* pstapriv->expire_to = 900;  900*2 = 1800 sec = 30 min,
-           expire after no any traffic. */
-       /* pstapriv->expire_to = 30;  30*2 = 60 sec = 1 min,
-           expire after no any traffic. */
-       pstapriv->expire_to = 3; /*  3*2 = 6 sec */
-       pstapriv->max_num_sta = NUM_STA;
-#endif
-       return _SUCCESS;
-}
-
-int _rtw_free_sta_priv23a(struct sta_priv *pstapriv)
-{
-       struct list_head *phead;
-       struct sta_info *psta, *ptmp;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       int index;
-
-       if (pstapriv) {
-               /*      delete all reordering_ctrl_timer                */
-               spin_lock_bh(&pstapriv->sta_hash_lock);
-               for (index = 0; index < NUM_STA; index++) {
-                       phead = &pstapriv->sta_hash[index];
-                       list_for_each_entry_safe(psta, ptmp, phead, hash_list) {
-                               int i;
-
-                               for (i = 0; i < 16 ; i++) {
-                                       preorder_ctrl = &psta->recvreorder_ctrl[i];
-                                       del_timer_sync(&preorder_ctrl->reordering_ctrl_timer);
-                               }
-                       }
-               }
-               spin_unlock_bh(&pstapriv->sta_hash_lock);
-               /*===============================*/
-       }
-       return _SUCCESS;
-}
-
-struct sta_info *
-rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp)
-{
-       struct list_head        *phash_list;
-       struct sta_info *psta;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       s32     index;
-       int i = 0;
-       u16  wRxSeqInitialValue = 0xffff;
-
-       psta = kmalloc(sizeof(struct sta_info), gfp);
-       if (!psta)
-               return NULL;
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-
-       _rtw_init_stainfo(psta);
-
-       psta->padapter = pstapriv->padapter;
-
-       ether_addr_copy(psta->hwaddr, hwaddr);
-
-       index = wifi_mac_hash(hwaddr);
-
-       RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_info_,
-                "rtw_alloc_stainfo23a: index  = %x\n", index);
-       if (index >= NUM_STA) {
-               RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_,
-                        "ERROR => rtw_alloc_stainfo23a: index >= NUM_STA\n");
-               psta = NULL;
-               goto exit;
-       }
-       phash_list = &pstapriv->sta_hash[index];
-
-       list_add_tail(&psta->hash_list, phash_list);
-
-       pstapriv->asoc_sta_count++;
-
-/*  For the SMC router, the sequence number of first packet of WPS
-     handshake will be 0. */
-/*  In this case, this packet will be dropped by recv_decache function
-    if we use the 0x00 as the default value for tid_rxseq variable. */
-/*  So, we initialize the tid_rxseq variable as the 0xffff. */
-
-       for (i = 0; i < 16; i++)
-               memcpy(&psta->sta_recvpriv.rxcache.tid_rxseq[i],
-                       &wRxSeqInitialValue, 2);
-
-       RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_info_,
-                "alloc number_%d stainfo  with hwaddr = %pM\n",
-                pstapriv->asoc_sta_count, hwaddr);
-
-       init_addba_retry_timer23a(psta);
-
-       /* for A-MPDU Rx reordering buffer control */
-       for (i = 0; i < 16; i++) {
-               preorder_ctrl = &psta->recvreorder_ctrl[i];
-
-               preorder_ctrl->padapter = pstapriv->padapter;
-
-               preorder_ctrl->enable = false;
-
-               preorder_ctrl->indicate_seq = 0xffff;
-               preorder_ctrl->wend_b = 0xffff;
-               /* preorder_ctrl->wsize_b = (NR_RECVBUFF-2); */
-               preorder_ctrl->wsize_b = 64;/* 64; */
-
-               _rtw_init_queue23a(&preorder_ctrl->pending_recvframe_queue);
-
-               rtw_init_recv_timer23a(preorder_ctrl);
-       }
-       /* init for DM */
-       psta->rssi_stat.UndecoratedSmoothedPWDB = (-1);
-       psta->rssi_stat.UndecoratedSmoothedCCK = (-1);
-
-       /* init for the sequence number of received management frame */
-       psta->RxMgmtFrameSeqNum = 0xffff;
-exit:
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-       return psta;
-}
-
-/*  using pstapriv->sta_hash_lock to protect */
-int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct  sta_xmit_priv   *pstaxmitpriv;
-       struct  xmit_priv       *pxmitpriv = &padapter->xmitpriv;
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-       struct hw_xmit *phwxmit;
-       int i;
-
-       if (!psta)
-               goto exit;
-
-       spin_lock_bh(&psta->lock);
-       psta->state &= ~_FW_LINKED;
-       spin_unlock_bh(&psta->lock);
-
-       pstaxmitpriv = &psta->sta_xmitpriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       rtw_free_xmitframe_queue23a(pxmitpriv, &psta->sleep_q);
-       psta->sleepq_len = 0;
-
-       /* vo */
-       rtw_free_xmitframe_queue23a(pxmitpriv, &pstaxmitpriv->vo_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vo_q.tx_pending);
-       phwxmit = pxmitpriv->hwxmits;
-       phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt;
-       pstaxmitpriv->vo_q.qcnt = 0;
-
-       /* vi */
-       rtw_free_xmitframe_queue23a(pxmitpriv, &pstaxmitpriv->vi_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vi_q.tx_pending);
-       phwxmit = pxmitpriv->hwxmits+1;
-       phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt;
-       pstaxmitpriv->vi_q.qcnt = 0;
-
-       /* be */
-       rtw_free_xmitframe_queue23a(pxmitpriv, &pstaxmitpriv->be_q.sta_pending);
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-       phwxmit = pxmitpriv->hwxmits+2;
-       phwxmit->accnt -= pstaxmitpriv->be_q.qcnt;
-       pstaxmitpriv->be_q.qcnt = 0;
-
-       /* bk */
-       rtw_free_xmitframe_queue23a(pxmitpriv, &pstaxmitpriv->bk_q.sta_pending);
-       list_del_init(&pstaxmitpriv->bk_q.tx_pending);
-       phwxmit = pxmitpriv->hwxmits+3;
-       phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt;
-       pstaxmitpriv->bk_q.qcnt = 0;
-
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       list_del_init(&psta->hash_list);
-       RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_,
-                "free number_%d stainfo  with hwaddr = %pM\n",
-                pstapriv->asoc_sta_count, psta->hwaddr);
-       pstapriv->asoc_sta_count--;
-
-       /*  re-init sta_info; 20061114  will be init in alloc_stainfo */
-       /* _rtw_init_sta_xmit_priv23a(&psta->sta_xmitpriv); */
-       /* _rtw_init_sta_recv_priv23a(&psta->sta_recvpriv); */
-
-       del_timer_sync(&psta->addba_retry_timer);
-
-       /* for A-MPDU Rx reordering buffer control,
-          cancel reordering_ctrl_timer */
-       for (i = 0; i < 16; i++) {
-               struct list_head        *phead, *plist;
-               struct recv_frame *prframe;
-               struct rtw_queue *ppending_recvframe_queue;
-
-               preorder_ctrl = &psta->recvreorder_ctrl[i];
-
-               del_timer_sync(&preorder_ctrl->reordering_ctrl_timer);
-
-               ppending_recvframe_queue =
-                       &preorder_ctrl->pending_recvframe_queue;
-
-               spin_lock_bh(&ppending_recvframe_queue->lock);
-               phead =         get_list_head(ppending_recvframe_queue);
-               plist = phead->next;
-
-               while (!list_empty(phead)) {
-                       prframe = container_of(plist, struct recv_frame, list);
-                       plist = plist->next;
-                       list_del_init(&prframe->list);
-                       rtw_free_recvframe23a(prframe);
-               }
-               spin_unlock_bh(&ppending_recvframe_queue->lock);
-       }
-       if (!(psta->state & WIFI_AP_STATE))
-               rtl8723a_SetHalODMVar(padapter, HAL_ODM_STA_INFO, psta, false);
-#ifdef CONFIG_8723AU_AP_MODE
-       spin_lock_bh(&pstapriv->auth_list_lock);
-       if (!list_empty(&psta->auth_list)) {
-               list_del_init(&psta->auth_list);
-               pstapriv->auth_list_cnt--;
-       }
-       spin_unlock_bh(&pstapriv->auth_list_lock);
-
-       psta->expire_to = 0;
-
-       psta->sleepq_ac_len = 0;
-       psta->qos_info = 0;
-
-       psta->max_sp_len = 0;
-       psta->uapsd_bk = 0;
-       psta->uapsd_be = 0;
-       psta->uapsd_vi = 0;
-       psta->uapsd_vo = 0;
-
-       psta->has_legacy_ac = 0;
-
-       pstapriv->sta_dz_bitmap &= ~CHKBIT(psta->aid);
-       pstapriv->tim_bitmap &= ~CHKBIT(psta->aid);
-
-       if ((psta->aid > 0) && (pstapriv->sta_aid[psta->aid - 1] == psta)) {
-               pstapriv->sta_aid[psta->aid - 1] = NULL;
-               psta->aid = 0;
-       }
-#endif /*  CONFIG_8723AU_AP_MODE */
-
-       kfree(psta);
-exit:
-       return _SUCCESS;
-}
-
-/*  free all stainfo which in sta_hash[all] */
-void rtw_free_all_stainfo23a(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       struct sta_info *psta, *ptmp;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info *pbcmc_stainfo = rtw_get_bcmc_stainfo23a(padapter);
-       s32 index;
-
-       if (pstapriv->asoc_sta_count == 1)
-               return;
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       for (index = 0; index < NUM_STA; index++) {
-               phead = &pstapriv->sta_hash[index];
-               list_for_each_entry_safe(psta, ptmp, phead, hash_list) {
-                       if (pbcmc_stainfo != psta)
-                               rtw_free_stainfo23a(padapter, psta);
-               }
-       }
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-}
-
-/* any station allocated can be searched by hash list */
-struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr)
-{
-       struct list_head *phead;
-       struct sta_info *pos, *psta = NULL;
-       u32 index;
-       const u8 *addr;
-
-       if (!hwaddr)
-               return NULL;
-
-       if (is_multicast_ether_addr(hwaddr))
-               addr = bc_addr;
-       else
-               addr = hwaddr;
-
-       index = wifi_mac_hash(addr);
-
-       spin_lock_bh(&pstapriv->sta_hash_lock);
-       phead = &pstapriv->sta_hash[index];
-       list_for_each_entry(pos, phead, hash_list) {
-               psta = pos;
-
-               /*  if found the matched address */
-               if (ether_addr_equal(psta->hwaddr, addr))
-                       break;
-
-               psta = NULL;
-       }
-       spin_unlock_bh(&pstapriv->sta_hash_lock);
-       return psta;
-}
-
-int rtw_init_bcmc_stainfo23a(struct rtw_adapter *padapter)
-{
-       struct  sta_priv *pstapriv = &padapter->stapriv;
-       struct sta_info         *psta;
-       struct tx_servq *ptxservq;
-       int res = _SUCCESS;
-
-       psta = rtw_alloc_stainfo23a(pstapriv, bc_addr, GFP_KERNEL);
-       if (!psta) {
-               res = _FAIL;
-               RT_TRACE(_module_rtl871x_sta_mgt_c_, _drv_err_,
-                        "rtw_alloc_stainfo23a fail\n");
-               return res;
-       }
-       /*  default broadcast & multicast use macid 1 */
-       psta->mac_id = 1;
-
-       ptxservq = &psta->sta_xmitpriv.be_q;
-       return _SUCCESS;
-}
-
-struct sta_info *rtw_get_bcmc_stainfo23a(struct rtw_adapter *padapter)
-{
-       struct sta_info         *psta;
-       struct sta_priv         *pstapriv = &padapter->stapriv;
-
-       psta = rtw_get_stainfo23a(pstapriv, bc_addr);
-       return psta;
-}
-
-bool rtw_access_ctrl23a(struct rtw_adapter *padapter, u8 *mac_addr)
-{
-       bool res = true;
-#ifdef CONFIG_8723AU_AP_MODE
-       struct list_head *phead;
-       struct rtw_wlan_acl_node *paclnode;
-       bool match = false;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;
-       struct rtw_queue *pacl_node_q = &pacl_list->acl_node_q;
-
-       spin_lock_bh(&pacl_node_q->lock);
-       phead = get_list_head(pacl_node_q);
-       list_for_each_entry(paclnode, phead, list) {
-               if (ether_addr_equal(paclnode->addr, mac_addr)) {
-                       if (paclnode->valid) {
-                               match = true;
-                               break;
-                       }
-               }
-       }
-       spin_unlock_bh(&pacl_node_q->lock);
-
-       if (pacl_list->mode == 1)/* accept unless in deny list */
-               res = (match) ?  false : true;
-       else if (pacl_list->mode == 2)/* deny unless in accept list */
-               res = (match) ?  true : false;
-       else
-                res = true;
-#endif
-       return res;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
deleted file mode 100644 (file)
index 694cf17..0000000
+++ /dev/null
@@ -1,1537 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_WLAN_UTIL_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <linux/ieee80211.h>
-#include <wifi.h>
-#include <rtl8723a_spec.h>
-
-static unsigned char ARTHEROS_OUI1[] = {0x00, 0x03, 0x7f};
-static unsigned char ARTHEROS_OUI2[] = {0x00, 0x13, 0x74};
-
-static unsigned char BROADCOM_OUI1[] = {0x00, 0x10, 0x18};
-static unsigned char BROADCOM_OUI2[] = {0x00, 0x0a, 0xf7};
-
-static unsigned char CISCO_OUI[] = {0x00, 0x40, 0x96};
-static unsigned char MARVELL_OUI[] = {0x00, 0x50, 0x43};
-static unsigned char RALINK_OUI[] = {0x00, 0x0c, 0x43};
-static unsigned char REALTEK_OUI[] = {0x00, 0xe0, 0x4c};
-static unsigned char AIRGOCAP_OUI[] = {0x00, 0x0a, 0xf5};
-static unsigned char EPIGRAM_OUI[] = {0x00, 0x90, 0x4c};
-
-static unsigned char WPA_TKIP_CIPHER[4] = {0x00, 0x50, 0xf2, 0x02};
-static unsigned char RSN_TKIP_CIPHER[4] = {0x00, 0x0f, 0xac, 0x02};
-
-#define R2T_PHY_DELAY          0
-
-/* define WAIT_FOR_BCN_TO_MIN  3000 */
-#define WAIT_FOR_BCN_TO_MIN    6000
-#define WAIT_FOR_BCN_TO_MAX    20000
-
-static u8 rtw_basic_rate_cck[4] = {
-       IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK
-};
-
-static u8 rtw_basic_rate_ofdm[3] = {
-       IEEE80211_OFDM_RATE_6MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_12MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_24MB | IEEE80211_BASIC_RATE_MASK
-};
-
-static u8 rtw_basic_rate_mix[7] = {
-       IEEE80211_CCK_RATE_1MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_2MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_5MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_CCK_RATE_11MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_6MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_12MB | IEEE80211_BASIC_RATE_MASK,
-       IEEE80211_OFDM_RATE_24MB | IEEE80211_BASIC_RATE_MASK
-};
-
-int cckrates_included23a(unsigned char *rate, int ratelen)
-{
-       int     i;
-
-       for (i = 0; i < ratelen; i++) {
-               if  (((rate[i]) & 0x7f) == 2 || ((rate[i]) & 0x7f) == 4 ||
-                    ((rate[i]) & 0x7f) == 11  || ((rate[i]) & 0x7f) == 22)
-                       return true;
-       }
-
-       return false;
-}
-
-int cckratesonly_included23a(unsigned char *rate, int ratelen)
-{
-       int     i;
-
-       for (i = 0; i < ratelen; i++) {
-               if  (((rate[i]) & 0x7f) != 2 && ((rate[i]) & 0x7f) != 4 &&
-                    ((rate[i]) & 0x7f) != 11 && ((rate[i]) & 0x7f) != 22)
-               return false;
-       }
-
-       return true;
-}
-
-unsigned char networktype_to_raid23a(unsigned char network_type)
-{
-       unsigned char raid;
-
-       switch (network_type) {
-       case WIRELESS_11B:
-               raid = RATR_INX_WIRELESS_B;
-               break;
-       case WIRELESS_11A:
-       case WIRELESS_11G:
-               raid = RATR_INX_WIRELESS_G;
-               break;
-       case WIRELESS_11BG:
-               raid = RATR_INX_WIRELESS_GB;
-               break;
-       case WIRELESS_11_24N:
-       case WIRELESS_11_5N:
-               raid = RATR_INX_WIRELESS_N;
-               break;
-       case WIRELESS_11A_5N:
-       case WIRELESS_11G_24N:
-               raid = RATR_INX_WIRELESS_NG;
-               break;
-       case WIRELESS_11BG_24N:
-               raid = RATR_INX_WIRELESS_NGB;
-               break;
-       default:
-               raid = RATR_INX_WIRELESS_GB;
-               break;
-       }
-       return raid;
-}
-
-u8 judge_network_type23a(struct rtw_adapter *padapter,
-                        unsigned char *rate, int ratelen)
-{
-       u8 network_type = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeext->cur_channel > 14) {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_5N;
-               network_type |= WIRELESS_11A;
-       } else {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_24N;
-
-               if ((cckratesonly_included23a(rate, ratelen)) == true)
-                       network_type |= WIRELESS_11B;
-               else if ((cckrates_included23a(rate, ratelen)) == true)
-                       network_type |= WIRELESS_11BG;
-               else
-                       network_type |= WIRELESS_11G;
-       }
-       return  network_type;
-}
-
-static unsigned char ratetbl_val_2wifirate(unsigned char rate)
-{
-       unsigned char val = 0;
-
-       switch (rate & 0x7f) {
-       case 0:
-               val = IEEE80211_CCK_RATE_1MB;
-               break;
-       case 1:
-               val = IEEE80211_CCK_RATE_2MB;
-               break;
-       case 2:
-               val = IEEE80211_CCK_RATE_5MB;
-               break;
-       case 3:
-               val = IEEE80211_CCK_RATE_11MB;
-               break;
-       case 4:
-               val = IEEE80211_OFDM_RATE_6MB;
-               break;
-       case 5:
-               val = IEEE80211_OFDM_RATE_9MB;
-               break;
-       case 6:
-               val = IEEE80211_OFDM_RATE_12MB;
-               break;
-       case 7:
-               val = IEEE80211_OFDM_RATE_18MB;
-               break;
-       case 8:
-               val = IEEE80211_OFDM_RATE_24MB;
-               break;
-       case 9:
-               val = IEEE80211_OFDM_RATE_36MB;
-               break;
-       case 10:
-               val = IEEE80211_OFDM_RATE_48MB;
-               break;
-       case 11:
-               val = IEEE80211_OFDM_RATE_54MB;
-               break;
-       }
-       return val;
-}
-
-static int is_basicrate(struct rtw_adapter *padapter, unsigned char rate)
-{
-       int i;
-       unsigned char val;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       for (i = 0; i < NumRates; i++) {
-               val = pmlmeext->basicrate[i];
-
-               if (val != 0xff && val != 0xfe) {
-                       if (rate == ratetbl_val_2wifirate(val))
-                               return true;
-               }
-       }
-
-       return false;
-}
-
-static unsigned int ratetbl2rateset(struct rtw_adapter *padapter,
-                                   unsigned char *rateset)
-{
-       int i;
-       unsigned char rate;
-       unsigned int len = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       for (i = 0; i < NumRates; i++) {
-               rate = pmlmeext->datarate[i];
-
-               switch (rate) {
-               case 0xff:
-                       return len;
-               case 0xfe:
-                       continue;
-               default:
-                       rate = ratetbl_val_2wifirate(rate);
-
-                       if (is_basicrate(padapter, rate) == true)
-                               rate |= IEEE80211_BASIC_RATE_MASK;
-
-                       rateset[len] = rate;
-                       len++;
-                       break;
-               }
-       }
-       return len;
-}
-
-void get_rate_set23a(struct rtw_adapter *padapter,
-                    unsigned char *pbssrate, int *bssrate_len)
-{
-       unsigned char supportedrates[NumRates];
-
-       memset(supportedrates, 0, NumRates);
-       *bssrate_len = ratetbl2rateset(padapter, supportedrates);
-       memcpy(pbssrate, supportedrates, *bssrate_len);
-}
-
-void UpdateBrateTbl23a(struct rtw_adapter *Adapter, u8 *mBratesOS)
-{
-       u8 i;
-       u8 rate;
-
-       /*  1M, 2M, 5.5M, 11M, 6M, 12M, 24M are mandatory. */
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               rate = mBratesOS[i] & 0x7f;
-               switch (rate) {
-               case IEEE80211_CCK_RATE_1MB:
-               case IEEE80211_CCK_RATE_2MB:
-               case IEEE80211_CCK_RATE_5MB:
-               case IEEE80211_CCK_RATE_11MB:
-               case IEEE80211_OFDM_RATE_6MB:
-               case IEEE80211_OFDM_RATE_12MB:
-               case IEEE80211_OFDM_RATE_24MB:
-                       mBratesOS[i] |= IEEE80211_BASIC_RATE_MASK;
-                       break;
-               default:
-                       break;
-               }
-       }
-}
-
-void Update23aTblForSoftAP(u8 *bssrateset, u32 bssratelen)
-{
-       u8 i;
-       u8 rate;
-
-       for (i = 0; i < bssratelen; i++) {
-               rate = bssrateset[i] & 0x7f;
-               switch (rate) {
-               case IEEE80211_CCK_RATE_1MB:
-               case IEEE80211_CCK_RATE_2MB:
-               case IEEE80211_CCK_RATE_5MB:
-               case IEEE80211_CCK_RATE_11MB:
-                       bssrateset[i] |= IEEE80211_BASIC_RATE_MASK;
-                       break;
-               }
-       }
-}
-
-inline u8 rtw_get_oper_ch23a(struct rtw_adapter *adapter)
-{
-       return adapter_to_dvobj(adapter)->oper_channel;
-}
-
-inline void rtw_set_oper_ch23a(struct rtw_adapter *adapter, u8 ch)
-{
-       adapter_to_dvobj(adapter)->oper_channel = ch;
-}
-
-inline void rtw_set_oper_bw23a(struct rtw_adapter *adapter, u8 bw)
-{
-       adapter_to_dvobj(adapter)->oper_bwmode = bw;
-}
-
-inline void rtw_set_oper_ch23aoffset23a(struct rtw_adapter *adapter, u8 offset)
-{
-       adapter_to_dvobj(adapter)->oper_ch_offset = offset;
-}
-
-void SelectChannel23a(struct rtw_adapter *padapter, unsigned char channel)
-{
-       mutex_lock(&adapter_to_dvobj(padapter)->setch_mutex);
-
-       /* saved channel info */
-       rtw_set_oper_ch23a(padapter, channel);
-
-       PHY_SwChnl8723A(padapter, channel);
-
-       mutex_unlock(&adapter_to_dvobj(padapter)->setch_mutex);
-}
-
-static void set_bwmode(struct rtw_adapter *padapter, unsigned short bwmode,
-                      unsigned char channel_offset)
-{
-       mutex_lock(&adapter_to_dvobj(padapter)->setbw_mutex);
-
-       /* saved bw info */
-       rtw_set_oper_bw23a(padapter, bwmode);
-       rtw_set_oper_ch23aoffset23a(padapter, channel_offset);
-
-       PHY_SetBWMode23a8723A(padapter, (enum ht_channel_width)bwmode,
-                             channel_offset);
-
-       mutex_unlock(&adapter_to_dvobj(padapter)->setbw_mutex);
-}
-
-void set_channel_bwmode23a(struct rtw_adapter *padapter, unsigned char channel,
-                          unsigned char channel_offset, unsigned short bwmode)
-{
-       u8 center_ch;
-
-       if (bwmode == HT_CHANNEL_WIDTH_20 ||
-           channel_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE) {
-               /* SelectChannel23a(padapter, channel); */
-               center_ch = channel;
-       } else {
-               /* switch to the proper channel */
-               if (channel_offset == HAL_PRIME_CHNL_OFFSET_LOWER) {
-                       /* SelectChannel23a(padapter, channel + 2); */
-                       center_ch = channel + 2;
-               } else {
-                       /* SelectChannel23a(padapter, channel - 2); */
-                       center_ch = channel - 2;
-               }
-       }
-
-       /* set Channel */
-       mutex_lock(&adapter_to_dvobj(padapter)->setch_mutex);
-
-       /* saved channel/bw info */
-       rtw_set_oper_ch23a(padapter, channel);
-       rtw_set_oper_bw23a(padapter, bwmode);
-       rtw_set_oper_ch23aoffset23a(padapter, channel_offset);
-
-       PHY_SwChnl8723A(padapter, center_ch); /*  set center channel */
-
-       mutex_unlock(&adapter_to_dvobj(padapter)->setch_mutex);
-
-       set_bwmode(padapter, bwmode, channel_offset);
-}
-
-inline u8 *get_my_bssid23a(struct wlan_bssid_ex *pnetwork)
-{
-       return pnetwork->MacAddress;
-}
-
-bool is_client_associated_to_ap23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info *pmlmeinfo;
-
-       if (!padapter)
-               return false;
-
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS &&
-           (pmlmeinfo->state & 0x03) == MSR_INFRA)
-               return true;
-       else
-               return false;
-}
-
-bool is_client_associated_to_ibss23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS &&
-           (pmlmeinfo->state & 0x03) == MSR_ADHOC)
-               return true;
-       else
-               return false;
-}
-
-bool is_IBSS_empty23a(struct rtw_adapter *padapter)
-{
-       unsigned int i;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       for (i = IBSS_START_MAC_ID; i < NUM_STA; i++) {
-               if (pmlmeinfo->FW_sta_info[i].status == 1)
-                       return false;
-       }
-
-       return true;
-}
-
-unsigned int decide_wait_for_beacon_timeout23a(unsigned int bcn_interval)
-{
-       if ((bcn_interval << 2) < WAIT_FOR_BCN_TO_MIN)
-               return WAIT_FOR_BCN_TO_MIN;
-       else if ((bcn_interval << 2) > WAIT_FOR_BCN_TO_MAX)
-               return WAIT_FOR_BCN_TO_MAX;
-       else
-               return bcn_interval << 2;
-}
-
-void clear_cam_entry23a(struct rtw_adapter *padapter, u8 entry)
-{
-       unsigned char null_sta[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
-
-       unsigned char null_key[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                                   0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-                                   0x00, 0x00, 0x00, 0x00};
-
-       rtl8723a_cam_write(padapter, entry, 0, null_sta, null_key);
-}
-
-int allocate_fw_sta_entry23a(struct rtw_adapter *padapter)
-{
-       unsigned int mac_id;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       for (mac_id = IBSS_START_MAC_ID; mac_id < NUM_STA; mac_id++) {
-               if (pmlmeinfo->FW_sta_info[mac_id].status == 0) {
-                       pmlmeinfo->FW_sta_info[mac_id].status = 1;
-                       pmlmeinfo->FW_sta_info[mac_id].retry = 0;
-                       break;
-               }
-       }
-
-       return mac_id;
-}
-
-void flush_all_cam_entry23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       rtl8723a_cam_invalidate_all(padapter);
-
-       memset(pmlmeinfo->FW_sta_info, 0, sizeof(pmlmeinfo->FW_sta_info));
-}
-
-int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p)
-{
-       /* struct registry_priv *pregpriv = &padapter->registrypriv; */
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmepriv->qos_option == 0) {
-               pmlmeinfo->WMM_enable = 0;
-               return _FAIL;
-       }
-
-       pmlmeinfo->WMM_enable = 1;
-       memcpy(&pmlmeinfo->WMM_param, p + 2 + 6,
-              sizeof(struct WMM_para_element));
-       return true;
-}
-
-void WMMOnAssocRsp23a(struct rtw_adapter *padapter)
-{
-       u8 ACI, ACM, AIFS, ECWMin, ECWMax, aSifsTime;
-       u8 acm_mask;
-       u16 TXOP;
-       u32 acParm, i;
-       u32 edca[4], inx[4];
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-
-       if (pmlmeinfo->WMM_enable == 0) {
-               padapter->mlmepriv.acm_mask = 0;
-               return;
-       }
-
-       acm_mask = 0;
-
-       if (pmlmeext->cur_wireless_mode == WIRELESS_11B)
-               aSifsTime = 10;
-       else
-               aSifsTime = 16;
-
-       for (i = 0; i < 4; i++) {
-               ACI = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN >> 5) & 0x03;
-               ACM = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN >> 4) & 0x01;
-
-               /* AIFS = AIFSN * slot time + SIFS - r2t phy delay */
-               AIFS = (pmlmeinfo->WMM_param.ac_param[i].ACI_AIFSN & 0x0f) *
-                       pmlmeinfo->slotTime + aSifsTime;
-
-               ECWMin = pmlmeinfo->WMM_param.ac_param[i].CW & 0x0f;
-               ECWMax = (pmlmeinfo->WMM_param.ac_param[i].CW & 0xf0) >> 4;
-               TXOP = le16_to_cpu(pmlmeinfo->WMM_param.ac_param[i].TXOP_limit);
-
-               acParm = AIFS | (ECWMin << 8) | (ECWMax << 12) | (TXOP << 16);
-
-               switch (ACI) {
-               case 0x0:
-                       rtl8723a_set_ac_param_be(padapter, acParm);
-                       acm_mask |= (ACM? BIT(1):0);
-                       edca[XMIT_BE_QUEUE] = acParm;
-                       break;
-               case 0x1:
-                       rtl8723a_set_ac_param_bk(padapter, acParm);
-                       /* acm_mask |= (ACM? BIT(0):0); */
-                       edca[XMIT_BK_QUEUE] = acParm;
-                       break;
-               case 0x2:
-                       rtl8723a_set_ac_param_vi(padapter, acParm);
-                       acm_mask |= (ACM? BIT(2):0);
-                       edca[XMIT_VI_QUEUE] = acParm;
-                       break;
-               case 0x3:
-                       rtl8723a_set_ac_param_vo(padapter, acParm);
-                       acm_mask |= (ACM? BIT(3):0);
-                       edca[XMIT_VO_QUEUE] = acParm;
-                       break;
-               }
-
-               DBG_8723A("WMM(%x): %x, %x\n", ACI, ACM, acParm);
-       }
-
-       if (padapter->registrypriv.acm_method == 1)
-               rtl8723a_set_acm_ctrl(padapter, acm_mask);
-       else
-               padapter->mlmepriv.acm_mask = acm_mask;
-
-       inx[0] = 0; inx[1] = 1; inx[2] = 2; inx[3] = 3;
-
-       if (pregpriv->wifi_spec == 1) {
-               u32 j, change_inx = false;
-
-               /* entry indx: 0->vo, 1->vi, 2->be, 3->bk. */
-               for (i = 0; i < 4; i++) {
-                       for (j = i+1; j < 4; j++) {
-                               /* compare CW and AIFS */
-                               if ((edca[j] & 0xFFFF) < (edca[i] & 0xFFFF)) {
-                                       change_inx = true;
-                               } else if ((edca[j] & 0xFFFF) ==
-                                          (edca[i] & 0xFFFF)) {
-                                       /* compare TXOP */
-                                       if ((edca[j] >> 16) > (edca[i] >> 16))
-                                               change_inx = true;
-                               }
-
-                               if (change_inx) {
-                                       swap(edca[i], edca[j]);
-                                       swap(inx[i], inx[j]);
-                                       change_inx = false;
-                               }
-                       }
-               }
-       }
-
-       for (i = 0; i<4; i++) {
-               pxmitpriv->wmm_para_seq[i] = inx[i];
-               DBG_8723A("wmm_para_seq(%d): %d\n", i,
-                         pxmitpriv->wmm_para_seq[i]);
-       }
-}
-
-static void bwmode_update_check(struct rtw_adapter *padapter, const u8 *p)
-{
-       struct ieee80211_ht_operation *pHT_info;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-       unsigned char new_bwmode;
-       unsigned char new_ch_offset;
-
-       if (!p)
-               return;
-       if (!phtpriv->ht_option)
-               return;
-       if (p[1] != sizeof(struct ieee80211_ht_operation))
-               return;
-
-       pHT_info = (struct ieee80211_ht_operation *)(p + 2);
-
-       if ((pHT_info->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) &&
-           pregistrypriv->cbw40_enable) {
-               new_bwmode = HT_CHANNEL_WIDTH_40;
-
-               switch (pHT_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET){
-               case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
-                       break;
-               case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
-                       break;
-               default:
-                       new_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       break;
-               }
-       } else {
-               new_bwmode = HT_CHANNEL_WIDTH_20;
-               new_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-       }
-
-       if (new_bwmode != pmlmeext->cur_bwmode ||
-           new_ch_offset != pmlmeext->cur_ch_offset) {
-               pmlmeinfo->bwmode_updated = true;
-
-               pmlmeext->cur_bwmode = new_bwmode;
-               pmlmeext->cur_ch_offset = new_ch_offset;
-
-               /* update HT info also */
-               HT_info_handler23a(padapter, p);
-       } else
-               pmlmeinfo->bwmode_updated = false;
-
-       if (pmlmeinfo->bwmode_updated) {
-               struct sta_info *psta;
-               struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               /* set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                  pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); */
-
-               /* update ap's stainfo */
-               psta = rtw_get_stainfo23a(pstapriv, cur_network->MacAddress);
-               if (psta) {
-                       struct ht_priv *phtpriv_sta = &psta->htpriv;
-
-                       if (phtpriv_sta->ht_option) {
-                               /*  bwmode */
-                               phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
-                               phtpriv_sta->ch_offset =
-                                       pmlmeext->cur_ch_offset;
-                       } else {
-                               phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_20;
-                               phtpriv_sta->ch_offset =
-                                       HAL_PRIME_CHNL_OFFSET_DONT_CARE;
-                       }
-               }
-       }
-}
-
-void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p)
-{
-       unsigned int i;
-       u8 rf_type;
-       u8 max_AMPDU_len, min_MPDU_spacing;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-       struct ieee80211_ht_cap *cap;
-       u8 *dstcap;
-
-       if (!p)
-               return;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       pmlmeinfo->HT_caps_enable = 1;
-
-       cap = &pmlmeinfo->ht_cap;
-       dstcap = (u8 *)cap;
-       for (i = 0; i < p[1]; i++) {
-               if (i != 2) {
-                       dstcap[i] &= p[i + 2];
-               } else {
-                       /* modify from  fw by Thomas 2010/11/17 */
-                       if ((cap->ampdu_params_info &
-                            IEEE80211_HT_AMPDU_PARM_FACTOR) >
-                           (p[i + 2] & IEEE80211_HT_AMPDU_PARM_FACTOR))
-                               max_AMPDU_len = p[i + 2] &
-                                       IEEE80211_HT_AMPDU_PARM_FACTOR;
-                       else
-                               max_AMPDU_len = cap->ampdu_params_info &
-                                       IEEE80211_HT_AMPDU_PARM_FACTOR;
-
-                       if ((cap->ampdu_params_info &
-                            IEEE80211_HT_AMPDU_PARM_DENSITY) >
-                           (p[i + 2] & IEEE80211_HT_AMPDU_PARM_DENSITY))
-                               min_MPDU_spacing = cap->ampdu_params_info &
-                                       IEEE80211_HT_AMPDU_PARM_DENSITY;
-                       else
-                               min_MPDU_spacing = p[i + 2] &
-                                       IEEE80211_HT_AMPDU_PARM_DENSITY;
-
-                       cap->ampdu_params_info =
-                               max_AMPDU_len | min_MPDU_spacing;
-               }
-       }
-
-       rf_type = rtl8723a_get_rf_type(padapter);
-
-       /* update the MCS rates */
-       for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
-               if (rf_type == RF_1T1R || rf_type == RF_1T2R)
-                       cap->mcs.rx_mask[i] &= MCS_rate_1R23A[i];
-               else
-                       cap->mcs.rx_mask[i] &= MCS_rate_2R23A[i];
-       }
-}
-
-void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct ht_priv *phtpriv = &pmlmepriv->htpriv;
-
-       if (!p)
-               return;
-
-       if (!phtpriv->ht_option)
-               return;
-
-       if (p[1] != sizeof(struct ieee80211_ht_operation))
-               return;
-
-       pmlmeinfo->HT_info_enable = 1;
-       memcpy(&pmlmeinfo->HT_info, p + 2, p[1]);
-}
-
-void HTOnAssocRsp23a(struct rtw_adapter *padapter)
-{
-       unsigned char max_AMPDU_len;
-       unsigned char min_MPDU_spacing;
-       /* struct registry_priv  *pregpriv = &padapter->registrypriv; */
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       DBG_8723A("%s\n", __func__);
-
-       if (pmlmeinfo->HT_info_enable && pmlmeinfo->HT_caps_enable)
-               pmlmeinfo->HT_enable = 1;
-       else {
-               pmlmeinfo->HT_enable = 0;
-               /* set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
-                  pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode); */
-               return;
-       }
-
-       /* handle A-MPDU parameter field */
-       /*
-               AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
-               AMPDU_para [4:2]:Min MPDU Start Spacing
-       */
-       max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info &
-               IEEE80211_HT_AMPDU_PARM_FACTOR;
-
-       min_MPDU_spacing =
-               (pmlmeinfo->ht_cap.ampdu_params_info &
-                IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2;
-
-       rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing);
-       rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len);
-}
-
-void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (p[1] > 1)
-               return;
-
-       pmlmeinfo->ERP_enable = 1;
-       memcpy(&pmlmeinfo->ERP_IE, p + 2, p[1]);
-}
-
-void VCS_update23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct registry_priv *pregpriv = &padapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       switch (pregpriv->vrtl_carrier_sense) { /* 0:off 1:on 2:auto */
-       case 0: /* off */
-               psta->rtsen = 0;
-               psta->cts2self = 0;
-               break;
-       case 1: /* on */
-               if (pregpriv->vcs_type == RTS_CTS) {
-                       psta->rtsen = 1;
-                       psta->cts2self = 0;
-               } else {
-                       psta->rtsen = 0;
-                       psta->cts2self = 1;
-               }
-               break;
-       case 2: /* auto */
-       default:
-               if (pmlmeinfo->ERP_enable && pmlmeinfo->ERP_IE & BIT(1)) {
-                       if (pregpriv->vcs_type == RTS_CTS) {
-                               psta->rtsen = 1;
-                               psta->cts2self = 0;
-                       } else {
-                               psta->rtsen = 0;
-                               psta->cts2self = 1;
-                       }
-               } else {
-                       psta->rtsen = 0;
-                       psta->cts2self = 0;
-               }
-               break;
-       }
-}
-
-int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
-                         struct ieee80211_mgmt *mgmt, u32 pkt_len)
-{
-       struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
-       struct ieee80211_ht_operation *pht_info;
-       unsigned short val16;
-       u8 crypto, bcn_channel;
-       int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r;
-       int pie_len, ssid_len, privacy;
-       const u8 *p, *ssid;
-
-       if (!is_client_associated_to_ap23a(Adapter))
-               return _SUCCESS;
-
-       if (unlikely(!ieee80211_is_beacon(mgmt->frame_control))) {
-               printk(KERN_WARNING "%s: received a non beacon frame!\n",
-                      __func__);
-               return _FAIL;
-       }
-
-       if (!ether_addr_equal(cur_network->network.MacAddress, mgmt->bssid)) {
-               DBG_8723A("%s: linked but recv other bssid bcn %pM %pM\n",
-                         __func__, mgmt->bssid,
-                         cur_network->network.MacAddress);
-               return _FAIL;
-       }
-
-       /* check bw and channel offset */
-       /* parsing HT_CAP_IE */
-       pie_len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
-
-       /* Checking for channel */
-       p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, mgmt->u.beacon.variable,
-                            pie_len);
-       if (p)
-               bcn_channel = p[2];
-       else {
-               /* In 5G, some ap do not have DSSET IE checking HT
-                  info for channel */
-               p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
-                                    mgmt->u.beacon.variable, pie_len);
-
-               if (p && p[1] > 0) {
-                       pht_info = (struct ieee80211_ht_operation *)(p + 2);
-                       bcn_channel = pht_info->primary_chan;
-               } else { /* we don't find channel IE, so don't check it */
-                       DBG_8723A("Oops: %s we don't find channel IE, so don't "
-                                 "check it\n", __func__);
-                       bcn_channel = Adapter->mlmeextpriv.cur_channel;
-               }
-       }
-       if (bcn_channel != Adapter->mlmeextpriv.cur_channel) {
-               DBG_8723A("%s beacon channel:%d cur channel:%d disconnect\n",
-                         __func__, bcn_channel,
-                         Adapter->mlmeextpriv.cur_channel);
-               goto _mismatch;
-       }
-
-       /* checking SSID */
-       p = cfg80211_find_ie(WLAN_EID_SSID, mgmt->u.beacon.variable, pie_len);
-       if (p && p[1]) {
-               ssid = p + 2;
-               ssid_len = p[1];
-       } else {
-               DBG_8723A("%s marc: cannot find SSID for survey event\n",
-                         __func__);
-               ssid = NULL;
-               ssid_len = 0;
-       }
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "%s bssid.Ssid.Ssid:%s bssid.Ssid.SsidLength:%d cur_network->network.Ssid.Ssid:%s len:%d\n",
-                __func__, ssid, ssid_len, cur_network->network.Ssid.ssid,
-                cur_network->network.Ssid.ssid_len);
-
-       if (ssid_len != cur_network->network.Ssid.ssid_len || ssid_len > 32 ||
-           (ssid_len &&
-            memcmp(ssid, cur_network->network.Ssid.ssid, ssid_len))) {
-               DBG_8723A("%s(), SSID is not match return FAIL\n", __func__);
-               goto _mismatch;
-       }
-
-       /* check encryption info */
-       val16 = le16_to_cpu(mgmt->u.beacon.capab_info);
-
-       if (val16 & WLAN_CAPABILITY_PRIVACY)
-               privacy = 1;
-       else
-               privacy = 0;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                "%s(): cur_network->network.Privacy is %d, bssid.Privacy is %d\n",
-                __func__, cur_network->network.Privacy, privacy);
-       if (cur_network->network.Privacy != privacy) {
-               DBG_8723A("%s(), privacy is not match return FAIL\n", __func__);
-               goto _mismatch;
-       }
-
-       p = cfg80211_find_ie(WLAN_EID_RSN, mgmt->u.beacon.variable, pie_len);
-       if (p && p[1]) {
-               crypto = ENCRYP_PROTOCOL_WPA2;
-               if (p && p[1]) {
-                       r = rtw_parse_wpa2_ie23a(p, p[1] + 2, &group_cipher,
-                                                &pairwise_cipher, &is_8021x);
-                       if (r == _SUCCESS)
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "%s pnetwork->pairwise_cipher: %d, pnetwork->group_cipher: %d, is_802x : %d\n",
-                                        __func__, pairwise_cipher,
-                                        group_cipher, is_8021x);
-                       }
-       } else {
-               p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                           WLAN_OUI_TYPE_MICROSOFT_WPA,
-                                           mgmt->u.beacon.variable, pie_len);
-               if (p && p[1]) {
-                       crypto = ENCRYP_PROTOCOL_WPA;
-                       r = rtw_parse_wpa_ie23a(p, p[1] + 2, &group_cipher,
-                                               &pairwise_cipher, &is_8021x);
-                       if (r == _SUCCESS)
-                               RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
-                                        "%s pnetwork->pairwise_cipher: %d, group_cipher is %d, is_8021x is %d\n",
-                                        __func__, pairwise_cipher,
-                                        group_cipher, is_8021x);
-               } else {
-                       if (privacy)
-                               crypto = ENCRYP_PROTOCOL_WEP;
-                       else
-                               crypto = ENCRYP_PROTOCOL_OPENSYS;
-               }
-       }
-
-       if (cur_network->BcnInfo.encryp_protocol != crypto) {
-               DBG_8723A("%s(): encryption mismatch, return FAIL\n", __func__);
-               goto _mismatch;
-       }
-
-       if (crypto == ENCRYP_PROTOCOL_WPA || crypto == ENCRYP_PROTOCOL_WPA2) {
-               RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
-                        "%s cur_network->group_cipher is %d: %d\n", __func__,
-                        cur_network->BcnInfo.group_cipher, group_cipher);
-               if (pairwise_cipher != cur_network->BcnInfo.pairwise_cipher ||
-                   group_cipher != cur_network->BcnInfo.group_cipher) {
-                       DBG_8723A("%s pairwise_cipher(%x:%x) or group_cipher "
-                                 "(%x:%x) is not match, return FAIL\n",
-                                 __func__, pairwise_cipher,
-                                 cur_network->BcnInfo.pairwise_cipher,
-                                 group_cipher,
-                                 cur_network->BcnInfo.group_cipher);
-                       goto _mismatch;
-               }
-
-               if (is_8021x != cur_network->BcnInfo.is_8021x) {
-                       DBG_8723A("%s authentication is not match, return "
-                                 "FAIL\n", __func__);
-                       goto _mismatch;
-               }
-       }
-
-       return _SUCCESS;
-
-_mismatch:
-
-       return _FAIL;
-}
-
-void update_beacon23a_info(struct rtw_adapter *padapter,
-                          struct ieee80211_mgmt *mgmt,
-                          uint pkt_len, struct sta_info *psta)
-{
-       unsigned int len;
-       const u8 *p;
-
-       len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
-
-       p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, mgmt->u.beacon.variable,
-                            len);
-       if (p)
-               bwmode_update_check(padapter, p);
-
-       p = cfg80211_find_ie(WLAN_EID_ERP_INFO, mgmt->u.beacon.variable, len);
-       if (p) {
-               ERP_IE_handler23a(padapter, p);
-               VCS_update23a(padapter, psta);
-       }
-}
-
-bool is_ap_in_tkip23a(struct rtw_adapter *padapter)
-{
-       u32 i;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       const u8 *p;
-
-       if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) {
-               for (i = 0; i < pmlmeinfo->network.IELength;) {
-                       p = pmlmeinfo->network.IEs + i;
-
-                       switch (p[0]) {
-                       case WLAN_EID_VENDOR_SPECIFIC:
-                               if (!memcmp(p + 2, RTW_WPA_OUI23A_TYPE, 4) &&
-                                   !memcmp(p + 2 + 12, WPA_TKIP_CIPHER, 4))
-                                       return true;
-                               break;
-                       case WLAN_EID_RSN:
-                               if (!memcmp(p + 2 + 8, RSN_TKIP_CIPHER, 4))
-                                       return true;
-                               break;
-                       default:
-                               break;
-                       }
-                       i += (p[1] + 2);
-               }
-               return false;
-       } else
-               return false;
-}
-
-bool should_forbid_n_rate23a(struct rtw_adapter *padapter)
-{
-       u32 i;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_bssid_ex  *cur_network = &pmlmepriv->cur_network.network;
-       const u8 *p;
-
-       if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) {
-               for (i = 0; i < cur_network->IELength;) {
-                       p = cur_network->IEs + i;
-
-                       switch (p[0]) {
-                       case WLAN_EID_VENDOR_SPECIFIC:
-                               if (!memcmp(p + 2, RTW_WPA_OUI23A_TYPE, 4) &&
-                                   (!memcmp(p + 2 + 12,
-                                            WPA_CIPHER_SUITE_CCMP23A, 4) ||
-                                    !memcmp(p + 2 + 16,
-                                            WPA_CIPHER_SUITE_CCMP23A, 4)))
-                                       return false;
-                               break;
-                       case WLAN_EID_RSN:
-                               if (!memcmp(p + 2 + 8,
-                                           RSN_CIPHER_SUITE_CCMP23A, 4) ||
-                                   !memcmp(p + 2 + 12,
-                                           RSN_CIPHER_SUITE_CCMP23A, 4))
-                               return false;
-                       default:
-                               break;
-                       }
-
-                       i += (p[1] + 2);
-               }
-               return true;
-       } else {
-               return false;
-       }
-}
-
-bool is_ap_in_wep23a(struct rtw_adapter *padapter)
-{
-       u32 i;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       const u8 *p;
-
-       if (cur_network->capability & WLAN_CAPABILITY_PRIVACY) {
-               for (i = 0; i < pmlmeinfo->network.IELength;) {
-                       p = pmlmeinfo->network.IEs + i;
-
-                       switch (p[0]) {
-                       case WLAN_EID_VENDOR_SPECIFIC:
-                               if (!memcmp(p + 2, RTW_WPA_OUI23A_TYPE, 4))
-                                       return false;
-                               break;
-                       case WLAN_EID_RSN:
-                               return false;
-
-                       default:
-                               break;
-                       }
-
-                       i += (p[1] + 2);
-               }
-
-               return true;
-       } else
-               return false;
-}
-
-static int wifirate2_ratetbl_inx23a(unsigned char rate)
-{
-       int inx = 0;
-
-       rate = rate & 0x7f;
-
-       switch (rate) {
-       case 54*2:
-               inx = 11;
-               break;
-       case 48*2:
-               inx = 10;
-               break;
-       case 36*2:
-               inx = 9;
-               break;
-       case 24*2:
-               inx = 8;
-               break;
-       case 18*2:
-               inx = 7;
-               break;
-       case 12*2:
-               inx = 6;
-               break;
-       case 9*2:
-               inx = 5;
-               break;
-       case 6*2:
-               inx = 4;
-               break;
-       case 11*2:
-               inx = 3;
-               break;
-       case 11:
-               inx = 2;
-               break;
-       case 2*2:
-               inx = 1;
-               break;
-       case 1*2:
-               inx = 0;
-               break;
-       }
-       return inx;
-}
-
-unsigned int update_basic_rate23a(unsigned char *ptn, unsigned int ptn_sz)
-{
-       unsigned int i, num_of_rate;
-       unsigned int mask = 0;
-
-       num_of_rate = (ptn_sz > NumRates)? NumRates: ptn_sz;
-
-       for (i = 0; i < num_of_rate; i++) {
-               if ((*(ptn + i)) & 0x80)
-                       mask |= 0x1 << wifirate2_ratetbl_inx23a(*(ptn + i));
-       }
-       return mask;
-}
-
-unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz)
-{
-       unsigned int i, num_of_rate;
-       unsigned int mask = 0;
-
-       num_of_rate = (ptn_sz > NumRates) ? NumRates : ptn_sz;
-
-       for (i = 0; i < num_of_rate; i++)
-               mask |= 0x1 << wifirate2_ratetbl_inx23a(*(ptn + i));
-       return mask;
-}
-
-unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *pHT_caps)
-{
-       unsigned int mask;
-
-       mask = pHT_caps->mcs.rx_mask[0] << 12 |
-               pHT_caps->mcs.rx_mask[1] << 20;
-
-       return mask;
-}
-
-int support_short_GI23a(struct rtw_adapter *padapter,
-                       struct ieee80211_ht_cap *pHT_caps)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       unsigned char bit_offset;
-
-       if (!pmlmeinfo->HT_enable)
-               return _FAIL;
-       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_RALINK)
-               return _FAIL;
-       bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
-
-       if (pHT_caps->cap_info & cpu_to_le16(0x1 << bit_offset))
-               return _SUCCESS;
-       else
-               return _FAIL;
-}
-
-unsigned char get_highest_rate_idx23a(u32 mask)
-{
-       int i;
-       unsigned char rate_idx = 0;
-
-       for (i = 27; i >= 0; i--) {
-               if (mask & BIT(i)) {
-                       rate_idx = i;
-                       break;
-               }
-       }
-       return rate_idx;
-}
-
-void Update_RA_Entry23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       rtw_hal_update_ra_mask23a(psta, 0);
-}
-
-static void enable_rate_adaptive(struct rtw_adapter *padapter,
-                                struct sta_info *psta)
-{
-       Update_RA_Entry23a(padapter, psta);
-}
-
-void set_sta_rate23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       /* rate adaptive */
-       enable_rate_adaptive(padapter, psta);
-}
-
-/*  Update RRSR and Rate for USERATE */
-void update_tx_basic_rate23a(struct rtw_adapter *padapter, u8 wirelessmode)
-{
-       unsigned char supported_rates[NDIS_802_11_LENGTH_RATES_EX];
-
-       memset(supported_rates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
-       if (wirelessmode == WIRELESS_11B) {
-               memcpy(supported_rates, rtw_basic_rate_cck, 4);
-       } else if (wirelessmode & WIRELESS_11B) {
-               memcpy(supported_rates, rtw_basic_rate_mix, 7);
-       } else {
-               memcpy(supported_rates, rtw_basic_rate_ofdm, 3);
-       }
-
-       if (wirelessmode & WIRELESS_11B)
-               update_mgnt_tx_rate23a(padapter, IEEE80211_CCK_RATE_1MB);
-       else
-               update_mgnt_tx_rate23a(padapter, IEEE80211_OFDM_RATE_6MB);
-
-       HalSetBrateCfg23a(padapter, supported_rates);
-}
-
-unsigned char check_assoc_AP23a(u8 *pframe, uint len)
-{
-       int i;
-       u8 epigram_vendor_flag;
-       u8 ralink_vendor_flag;
-       const u8 *p;
-
-       epigram_vendor_flag = 0;
-       ralink_vendor_flag = 0;
-
-       for (i = 0; i < len;) {
-               p = pframe + i;
-
-               switch (p[0]) {
-               case WLAN_EID_VENDOR_SPECIFIC:
-                       if (!memcmp(p + 2, ARTHEROS_OUI1, 3) ||
-                           !memcmp(p + 2, ARTHEROS_OUI2, 3)) {
-                               DBG_8723A("link to Artheros AP\n");
-                               return HT_IOT_PEER_ATHEROS;
-                       } else if (!memcmp(p + 2, BROADCOM_OUI1, 3) ||
-                                  !memcmp(p + 2, BROADCOM_OUI2, 3)) {
-                               DBG_8723A("link to Broadcom AP\n");
-                               return HT_IOT_PEER_BROADCOM;
-                       } else if (!memcmp(p + 2, MARVELL_OUI, 3)) {
-                               DBG_8723A("link to Marvell AP\n");
-                               return HT_IOT_PEER_MARVELL;
-                       } else if (!memcmp(p + 2, RALINK_OUI, 3)) {
-                               if (!ralink_vendor_flag)
-                                       ralink_vendor_flag = 1;
-                               else {
-                                       DBG_8723A("link to Ralink AP\n");
-                                       return HT_IOT_PEER_RALINK;
-                               }
-                       } else if (!memcmp(p + 2, CISCO_OUI, 3)) {
-                               DBG_8723A("link to Cisco AP\n");
-                               return HT_IOT_PEER_CISCO;
-                       } else if (!memcmp(p + 2, REALTEK_OUI, 3)) {
-                               DBG_8723A("link to Realtek 96B\n");
-                               return HT_IOT_PEER_REALTEK;
-                       } else if (!memcmp(p + 2, AIRGOCAP_OUI, 3)) {
-                               DBG_8723A("link to Airgo Cap\n");
-                               return HT_IOT_PEER_AIRGO;
-                       } else if (!memcmp(p + 2, EPIGRAM_OUI, 3)) {
-                               epigram_vendor_flag = 1;
-                               if (ralink_vendor_flag) {
-                                       DBG_8723A("link to Tenda W311R AP\n");
-                                       return HT_IOT_PEER_TENDA;
-                               } else
-                                       DBG_8723A("Capture EPIGRAM_OUI\n");
-                       } else
-                               break;
-               default:
-                       break;
-               }
-
-               i += (p[1] + 2);
-       }
-
-       if (ralink_vendor_flag && !epigram_vendor_flag) {
-               DBG_8723A("link to Ralink AP\n");
-               return HT_IOT_PEER_RALINK;
-       } else if (ralink_vendor_flag && epigram_vendor_flag) {
-               DBG_8723A("link to Tenda W311R AP\n");
-               return HT_IOT_PEER_TENDA;
-       } else {
-               DBG_8723A("link to new AP\n");
-               return HT_IOT_PEER_UNKNOWN;
-       }
-}
-
-void update_IOT_info23a(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       switch (pmlmeinfo->assoc_AP_vendor) {
-       case HT_IOT_PEER_MARVELL:
-               pmlmeinfo->turboMode_cts2self = 1;
-               pmlmeinfo->turboMode_rtsen = 0;
-               break;
-       case HT_IOT_PEER_RALINK:
-               pmlmeinfo->turboMode_cts2self = 0;
-               pmlmeinfo->turboMode_rtsen = 1;
-               /* disable high power */
-               rtl8723a_odm_support_ability_clr(padapter, (u32)
-                                                ~DYNAMIC_BB_DYNAMIC_TXPWR);
-               break;
-       case HT_IOT_PEER_REALTEK:
-               /* rtw_write16(padapter, 0x4cc, 0xffff); */
-               /* rtw_write16(padapter, 0x546, 0x01c0); */
-               /* disable high power */
-               rtl8723a_odm_support_ability_clr(padapter, (u32)
-                                                ~DYNAMIC_BB_DYNAMIC_TXPWR);
-               break;
-       default:
-               pmlmeinfo->turboMode_cts2self = 0;
-               pmlmeinfo->turboMode_rtsen = 1;
-               break;
-       }
-}
-
-void update_capinfo23a(struct rtw_adapter *Adapter, u16 updateCap)
-{
-       struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (updateCap & cShortPreamble) {
-               /*  Short Preamble */
-               if (pmlmeinfo->preamble_mode != PREAMBLE_SHORT) {
-                       /*  PREAMBLE_LONG or PREAMBLE_AUTO */
-                       pmlmeinfo->preamble_mode = PREAMBLE_SHORT;
-                       rtl8723a_ack_preamble(Adapter, true);
-               }
-       } else { /*  Long Preamble */
-               if (pmlmeinfo->preamble_mode != PREAMBLE_LONG) {
-                       /*  PREAMBLE_SHORT or PREAMBLE_AUTO */
-                       pmlmeinfo->preamble_mode = PREAMBLE_LONG;
-                       rtl8723a_ack_preamble(Adapter, false);
-               }
-       }
-       if (updateCap & cIBSS) {
-               /* Filen: See 802.11-2007 p.91 */
-               pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
-       } else {
-               /* Filen: See 802.11-2007 p.90 */
-               if (pmlmeext->cur_wireless_mode &
-                   (WIRELESS_11G | WIRELESS_11_24N)) {
-                       if (updateCap & cShortSlotTime) { /*  Short Slot Time */
-                               if (pmlmeinfo->slotTime != SHORT_SLOT_TIME)
-                                       pmlmeinfo->slotTime = SHORT_SLOT_TIME;
-                       } else { /*  Long Slot Time */
-                               if (pmlmeinfo->slotTime != NON_SHORT_SLOT_TIME)
-                                       pmlmeinfo->slotTime =
-                                               NON_SHORT_SLOT_TIME;
-                       }
-               } else if (pmlmeext->cur_wireless_mode &
-                          (WIRELESS_11A | WIRELESS_11_5N)) {
-                       pmlmeinfo->slotTime = SHORT_SLOT_TIME;
-               } else {
-                       /* B Mode */
-                       pmlmeinfo->slotTime = NON_SHORT_SLOT_TIME;
-               }
-       }
-       rtl8723a_set_slot_time(Adapter, pmlmeinfo->slotTime);
-}
-
-void update_wireless_mode23a(struct rtw_adapter *padapter)
-{
-       int ratelen, network_type = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       unsigned char *rate = cur_network->SupportedRates;
-
-       ratelen = rtw_get_rateset_len23a(cur_network->SupportedRates);
-
-       if ((pmlmeinfo->HT_info_enable) && (pmlmeinfo->HT_caps_enable))
-               pmlmeinfo->HT_enable = 1;
-
-       if (pmlmeext->cur_channel > 14) {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_5N;
-               network_type |= WIRELESS_11A;
-       } else {
-               if (pmlmeinfo->HT_enable)
-                       network_type = WIRELESS_11_24N;
-
-               if (cckratesonly_included23a(rate, ratelen) == true)
-                       network_type |= WIRELESS_11B;
-               else if (cckrates_included23a(rate, ratelen) == true)
-                       network_type |= WIRELESS_11BG;
-               else
-                       network_type |= WIRELESS_11G;
-       }
-
-       pmlmeext->cur_wireless_mode =
-               network_type & padapter->registrypriv.wireless_mode;
-
-       /* 0x0808 -> for CCK, 0x0a0a -> for OFDM */
-       /* change this value if having IOT issues. */
-       rtl8723a_set_resp_sifs(padapter, 0x08, 0x08, 0x0a, 0x0a);
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-               update_mgnt_tx_rate23a(padapter, IEEE80211_CCK_RATE_1MB);
-        else
-               update_mgnt_tx_rate23a(padapter, IEEE80211_OFDM_RATE_6MB);
-}
-
-void update_bmc_sta_support_rate23a(struct rtw_adapter *padapter, u32 mac_id)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pmlmeext->cur_wireless_mode & WIRELESS_11B) {
-               /*  Only B, B/G, and B/G/N AP could use CCK rate */
-               memcpy((pmlmeinfo->FW_sta_info[mac_id].SupportedRates),
-                      rtw_basic_rate_cck, 4);
-       } else {
-               memcpy(pmlmeinfo->FW_sta_info[mac_id].SupportedRates,
-                      rtw_basic_rate_ofdm, 3);
-       }
-}
-
-int update_sta_support_rate23a(struct rtw_adapter *padapter, u8 *pvar_ie,
-                              uint var_ie_len, int cam_idx)
-{
-       int supportRateNum = 0;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       const u8 *p;
-
-       p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, pvar_ie, var_ie_len);
-       if (!p)
-               return _FAIL;
-
-       memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates, p + 2, p[1]);
-       supportRateNum = p[1];
-
-       p = cfg80211_find_ie(WLAN_EID_EXT_SUPP_RATES, pvar_ie, var_ie_len);
-       if (p)
-               memcpy(pmlmeinfo->FW_sta_info[cam_idx].SupportedRates +
-                      supportRateNum, p + 2, p[1]);
-       return _SUCCESS;
-}
-
-void process_addba_req23a(struct rtw_adapter *padapter,
-                         u8 *paddba_req, u8 *addr)
-{
-       struct sta_info *psta;
-       u16 tid, start_seq, param;
-       struct recv_reorder_ctrl *preorder_ctrl;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct ADDBA_request *preq = (struct ADDBA_request *)paddba_req;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       psta = rtw_get_stainfo23a(pstapriv, addr);
-
-       if (psta) {
-               start_seq = le16_to_cpu(preq->BA_starting_seqctrl) >> 4;
-
-               param = le16_to_cpu(preq->BA_para_set);
-               tid = (param >> 2) & 0x0f;
-
-               preorder_ctrl = &psta->recvreorder_ctrl[tid];
-
-               preorder_ctrl->indicate_seq = 0xffff;
-
-               preorder_ctrl->enable = (pmlmeinfo->bAcceptAddbaReq == true) ?
-                       true : false;
-       }
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_xmit.c b/drivers/staging/rtl8723au/core/rtw_xmit.c
deleted file mode 100644 (file)
index 3de40cf..0000000
+++ /dev/null
@@ -1,2341 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_XMIT_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-#include <osdep_intf.h>
-#include <linux/ip.h>
-#include <usb_ops.h>
-#include <rtl8723a_xmit.h>
-
-static void _init_txservq(struct tx_servq *ptxservq)
-{
-
-       INIT_LIST_HEAD(&ptxservq->tx_pending);
-       _rtw_init_queue23a(&ptxservq->sta_pending);
-       ptxservq->qcnt = 0;
-
-}
-
-void   _rtw_init_sta_xmit_priv23a(struct sta_xmit_priv *psta_xmitpriv)
-{
-
-       spin_lock_init(&psta_xmitpriv->lock);
-
-       /* for (i = 0 ; i < MAX_NUMBLKS; i++) */
-       /*      _init_txservq(&psta_xmitpriv->blk_q[i]); */
-
-       _init_txservq(&psta_xmitpriv->be_q);
-       _init_txservq(&psta_xmitpriv->bk_q);
-       _init_txservq(&psta_xmitpriv->vi_q);
-       _init_txservq(&psta_xmitpriv->vo_q);
-       INIT_LIST_HEAD(&psta_xmitpriv->legacy_dz);
-       INIT_LIST_HEAD(&psta_xmitpriv->apsd);
-
-}
-
-int _rtw_init_xmit_priv23a(struct xmit_priv *pxmitpriv,
-                          struct rtw_adapter *padapter)
-{
-       int i;
-       struct xmit_buf *pxmitbuf;
-       struct xmit_frame *pxframe;
-       int res = _SUCCESS;
-       u32 max_xmit_extbuf_size = MAX_XMIT_EXTBUF_SZ;
-       u32 num_xmit_extbuf = NR_XMIT_EXTBUFF;
-
-       spin_lock_init(&pxmitpriv->lock);
-       spin_lock_init(&pxmitpriv->lock_sctx);
-       sema_init(&pxmitpriv->xmit_sema, 0);
-       sema_init(&pxmitpriv->terminate_xmitthread_sema, 0);
-
-       pxmitpriv->adapter = padapter;
-
-       _rtw_init_queue23a(&pxmitpriv->be_pending);
-       _rtw_init_queue23a(&pxmitpriv->bk_pending);
-       _rtw_init_queue23a(&pxmitpriv->vi_pending);
-       _rtw_init_queue23a(&pxmitpriv->vo_pending);
-       _rtw_init_queue23a(&pxmitpriv->bm_pending);
-
-       _rtw_init_queue23a(&pxmitpriv->free_xmit_queue);
-
-       for (i = 0; i < NR_XMITFRAME; i++) {
-               pxframe = kzalloc(sizeof(struct xmit_frame), GFP_KERNEL);
-               if (!pxframe)
-                       break;
-               INIT_LIST_HEAD(&pxframe->list);
-
-               pxframe->padapter = padapter;
-               pxframe->frame_tag = NULL_FRAMETAG;
-
-               list_add_tail(&pxframe->list,
-                             &pxmitpriv->free_xmit_queue.queue);
-       }
-
-       pxmitpriv->free_xmitframe_cnt = i;
-
-       pxmitpriv->frag_len = MAX_FRAG_THRESHOLD;
-
-       /* init xmit_buf */
-       _rtw_init_queue23a(&pxmitpriv->free_xmitbuf_queue);
-       INIT_LIST_HEAD(&pxmitpriv->xmitbuf_list);
-       _rtw_init_queue23a(&pxmitpriv->pending_xmitbuf_queue);
-
-       for (i = 0; i < NR_XMITBUFF; i++) {
-               pxmitbuf = kzalloc(sizeof(struct xmit_buf), GFP_KERNEL);
-               if (!pxmitbuf)
-                       goto fail;
-               INIT_LIST_HEAD(&pxmitbuf->list);
-               INIT_LIST_HEAD(&pxmitbuf->list2);
-
-               pxmitbuf->padapter = padapter;
-
-               /* Tx buf allocation may fail sometimes, so sleep and retry. */
-               res = rtw_os_xmit_resource_alloc23a(padapter, pxmitbuf,
-                                                (MAX_XMITBUF_SZ + XMITBUF_ALIGN_SZ));
-               if (res == _FAIL) {
-                       goto fail;
-               }
-
-               list_add_tail(&pxmitbuf->list,
-                             &pxmitpriv->free_xmitbuf_queue.queue);
-               list_add_tail(&pxmitbuf->list2,
-                             &pxmitpriv->xmitbuf_list);
-       }
-
-       pxmitpriv->free_xmitbuf_cnt = NR_XMITBUFF;
-
-       /* init xframe_ext queue,  the same count as extbuf  */
-       _rtw_init_queue23a(&pxmitpriv->free_xframe_ext_queue);
-
-       for (i = 0; i < num_xmit_extbuf; i++) {
-               pxframe = kzalloc(sizeof(struct xmit_frame), GFP_KERNEL);
-               if (!pxframe)
-                       break;
-               INIT_LIST_HEAD(&pxframe->list);
-
-               pxframe->padapter = padapter;
-               pxframe->frame_tag = NULL_FRAMETAG;
-
-               pxframe->pkt = NULL;
-
-               pxframe->buf_addr = NULL;
-               pxframe->pxmitbuf = NULL;
-
-               pxframe->ext_tag = 1;
-
-               list_add_tail(&pxframe->list,
-                             &pxmitpriv->free_xframe_ext_queue.queue);
-       }
-       pxmitpriv->free_xframe_ext_cnt = i;
-
-       /*  Init xmit extension buff */
-       _rtw_init_queue23a(&pxmitpriv->free_xmit_extbuf_queue);
-       INIT_LIST_HEAD(&pxmitpriv->xmitextbuf_list);
-
-       for (i = 0; i < num_xmit_extbuf; i++) {
-               pxmitbuf = kzalloc(sizeof(struct xmit_buf), GFP_KERNEL);
-               if (!pxmitbuf)
-                       goto fail;
-               INIT_LIST_HEAD(&pxmitbuf->list);
-               INIT_LIST_HEAD(&pxmitbuf->list2);
-
-               pxmitbuf->padapter = padapter;
-
-               /* Tx buf allocation may fail sometimes, so sleep and retry. */
-               res = rtw_os_xmit_resource_alloc23a(padapter, pxmitbuf,
-                                                max_xmit_extbuf_size + XMITBUF_ALIGN_SZ);
-               if (res == _FAIL) {
-                       goto exit;
-               }
-
-               list_add_tail(&pxmitbuf->list,
-                             &pxmitpriv->free_xmit_extbuf_queue.queue);
-               list_add_tail(&pxmitbuf->list2,
-                             &pxmitpriv->xmitextbuf_list);
-       }
-
-       pxmitpriv->free_xmit_extbuf_cnt = num_xmit_extbuf;
-
-       rtw_alloc_hwxmits23a(padapter);
-       rtw_init_hwxmits23a(pxmitpriv->hwxmits, pxmitpriv->hwxmit_entry);
-
-       for (i = 0; i < 4; i ++)
-               pxmitpriv->wmm_para_seq[i] = i;
-
-       sema_init(&pxmitpriv->tx_retevt, 0);
-
-       pxmitpriv->ack_tx = false;
-       mutex_init(&pxmitpriv->ack_tx_mutex);
-       rtw_sctx_init23a(&pxmitpriv->ack_tx_ops, 0);
-       tasklet_init(&padapter->xmitpriv.xmit_tasklet,
-                    (void(*)(unsigned long))rtl8723au_xmit_tasklet,
-                    (unsigned long)padapter);
-
-exit:
-
-       return res;
-fail:
-       goto exit;
-}
-
-void _rtw_free_xmit_priv23a(struct xmit_priv *pxmitpriv)
-{
-       struct rtw_adapter *padapter = pxmitpriv->adapter;
-       struct xmit_frame *pxframe, *ptmp;
-       struct xmit_buf *pxmitbuf, *ptmp2;
-
-       list_for_each_entry_safe(pxframe, ptmp,
-                                &pxmitpriv->free_xmit_queue.queue, list) {
-               list_del_init(&pxframe->list);
-               rtw_os_xmit_complete23a(padapter, pxframe);
-               kfree(pxframe);
-       }
-
-       list_for_each_entry_safe(pxmitbuf, ptmp2,
-                                &pxmitpriv->xmitbuf_list, list2) {
-               list_del_init(&pxmitbuf->list2);
-               rtw_os_xmit_resource_free23a(padapter, pxmitbuf);
-               kfree(pxmitbuf);
-       }
-
-       /* free xframe_ext queue,  the same count as extbuf  */
-       list_for_each_entry_safe(pxframe, ptmp,
-                                &pxmitpriv->free_xframe_ext_queue.queue,
-                                list) {
-               list_del_init(&pxframe->list);
-               rtw_os_xmit_complete23a(padapter, pxframe);
-               kfree(pxframe);
-       }
-
-       /*  free xmit extension buff */
-       list_for_each_entry_safe(pxmitbuf, ptmp2,
-                                &pxmitpriv->xmitextbuf_list, list2) {
-               list_del_init(&pxmitbuf->list2);
-               rtw_os_xmit_resource_free23a(padapter, pxmitbuf);
-               kfree(pxmitbuf);
-       }
-
-       rtw_free_hwxmits23a(padapter);
-       mutex_destroy(&pxmitpriv->ack_tx_mutex);
-}
-
-static void update_attrib_vcs_info(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       u32     sz;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct sta_info *psta = pattrib->psta;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       if (pattrib->psta) {
-               psta = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(&padapter->stapriv, &pattrib->ra[0]);
-       }
-
-       if (psta == NULL) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return;
-       }
-
-       if (!(psta->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
-               return;
-       }
-
-       if (pattrib->nr_frags != 1)
-               sz = padapter->xmitpriv.frag_len;
-       else /* no frag */
-               sz = pattrib->last_txcmdsz;
-
-       /*  (1) RTS_Threshold is compared to the MPDU, not MSDU. */
-       /*  (2) If there are more than one frag in  this MSDU, only the first frag uses protection frame. */
-       /*              Other fragments are protected by previous fragment. */
-       /*              So we only need to check the length of first fragment. */
-       if (pmlmeext->cur_wireless_mode < WIRELESS_11_24N  || padapter->registrypriv.wifi_spec) {
-               if (sz > padapter->registrypriv.rts_thresh) {
-                       pattrib->vcs_mode = RTS_CTS;
-               } else {
-                       if (psta->rtsen)
-                               pattrib->vcs_mode = RTS_CTS;
-                       else if (psta->cts2self)
-                               pattrib->vcs_mode = CTS_TO_SELF;
-                       else
-                               pattrib->vcs_mode = NONE_VCS;
-               }
-       } else {
-               while (true) {
-                       /* IOT action */
-                       if (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_ATHEROS &&
-                           pattrib->ampdu_en &&
-                           padapter->securitypriv.dot11PrivacyAlgrthm ==
-                           WLAN_CIPHER_SUITE_CCMP) {
-                               pattrib->vcs_mode = CTS_TO_SELF;
-                               break;
-                       }
-
-                       /* check ERP protection */
-                       if (psta->rtsen || psta->cts2self) {
-                               if (psta->rtsen)
-                                       pattrib->vcs_mode = RTS_CTS;
-                               else if (psta->cts2self)
-                                       pattrib->vcs_mode = CTS_TO_SELF;
-
-                               break;
-                       }
-
-                       /* check HT op mode */
-                       if (pattrib->ht_en) {
-                               u8 HTOpMode = pmlmeinfo->HT_protection;
-
-                               if ((pmlmeext->cur_bwmode && (HTOpMode == 2 || HTOpMode == 3)) ||
-                                   (!pmlmeext->cur_bwmode && HTOpMode == 3)) {
-                                       pattrib->vcs_mode = RTS_CTS;
-                                       break;
-                               }
-                       }
-
-                       /* check rts */
-                       if (sz > padapter->registrypriv.rts_thresh) {
-                               pattrib->vcs_mode = RTS_CTS;
-                               break;
-                       }
-
-                       /* to do list: check MIMO power save condition. */
-
-                       /* check AMPDU aggregation for TXOP */
-                       if (pattrib->ampdu_en) {
-                               pattrib->vcs_mode = RTS_CTS;
-                               break;
-                       }
-
-                       pattrib->vcs_mode = NONE_VCS;
-                       break;
-               }
-       }
-}
-
-static void update_attrib_phy_info(struct pkt_attrib *pattrib, struct sta_info *psta)
-{
-       /*if (psta->rtsen)
-               pattrib->vcs_mode = RTS_CTS;
-       else if (psta->cts2self)
-               pattrib->vcs_mode = CTS_TO_SELF;
-       else
-               pattrib->vcs_mode = NONE_VCS;*/
-
-       pattrib->mdata = 0;
-       pattrib->eosp = 0;
-       pattrib->triggered = 0;
-
-       /* qos_en, ht_en, init rate, , bw, ch_offset, sgi */
-       pattrib->qos_en = psta->qos_option;
-
-       pattrib->raid = psta->raid;
-       pattrib->ht_en = psta->htpriv.ht_option;
-       pattrib->bwmode = psta->htpriv.bwmode;
-       pattrib->ch_offset = psta->htpriv.ch_offset;
-       pattrib->sgi = psta->htpriv.sgi;
-       pattrib->ampdu_en = false;
-
-       pattrib->retry_ctrl = false;
-}
-
-u8 qos_acm23a(u8 acm_mask, u8 priority)
-{
-       u8 change_priority = priority;
-
-       switch (priority) {
-       case 0:
-       case 3:
-               if (acm_mask & BIT(1))
-                       change_priority = 1;
-               break;
-       case 1:
-       case 2:
-               break;
-       case 4:
-       case 5:
-               if (acm_mask & BIT(2))
-                       change_priority = 0;
-               break;
-       case 6:
-       case 7:
-               if (acm_mask & BIT(3))
-                       change_priority = 5;
-               break;
-       default:
-               DBG_8723A("qos_acm23a(): invalid pattrib->priority: %d!!!\n",
-                         priority);
-               change_priority = 0;
-               break;
-       }
-
-       return change_priority;
-}
-
-static void set_qos(struct sk_buff *skb, struct pkt_attrib *pattrib)
-{
-       u8 *pframe = skb->data;
-       struct iphdr *ip_hdr;
-       u8 UserPriority = 0;
-
-       /*  get UserPriority from IP hdr */
-       if (pattrib->ether_type == ETH_P_IP) {
-               ip_hdr = (struct iphdr *)(pframe + ETH_HLEN);
-               UserPriority = ip_hdr->tos >> 5;
-       } else if (pattrib->ether_type == ETH_P_PAE) {
-               /*  "When priority processing of data frames is supported, */
-               /*  a STA's SME should send EAPOL-Key frames at the highest
-                   priority." */
-               UserPriority = 7;
-       }
-
-       pattrib->priority = UserPriority;
-       pattrib->hdrlen = sizeof(struct ieee80211_qos_hdr);
-       pattrib->type = IEEE80211_FTYPE_DATA | IEEE80211_STYPE_QOS_DATA;
-}
-
-static int update_attrib(struct rtw_adapter *padapter,
-                        struct sk_buff *skb, struct pkt_attrib *pattrib)
-{
-       struct sta_info *psta = NULL;
-       int bmcast;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int res = _SUCCESS;
-       struct ethhdr *ehdr = (struct ethhdr *) skb->data;
-
-       pattrib->ether_type = ntohs(ehdr->h_proto);
-
-       ether_addr_copy(pattrib->dst, ehdr->h_dest);
-       ether_addr_copy(pattrib->src, ehdr->h_source);
-
-       pattrib->pctrl = 0;
-
-       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-           check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-               ether_addr_copy(pattrib->ra, pattrib->dst);
-               ether_addr_copy(pattrib->ta, pattrib->src);
-       } else if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               ether_addr_copy(pattrib->ra, get_bssid(pmlmepriv));
-               ether_addr_copy(pattrib->ta, pattrib->src);
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               ether_addr_copy(pattrib->ra, pattrib->dst);
-               ether_addr_copy(pattrib->ta, get_bssid(pmlmepriv));
-       }
-
-       pattrib->pktlen = skb->len - ETH_HLEN;
-
-       if (pattrib->ether_type == ETH_P_IP) {
-               /*  The following is for DHCP and ARP packet, we use cck1M
-                   to tx these packets and let LPS awake some time */
-               /*  to prevent DHCP protocol fail */
-               pattrib->dhcp_pkt = 0;
-               /* MINIMUM_DHCP_PACKET_SIZE) { */
-               if (pattrib->pktlen > 282 + 24) {
-                       if (pattrib->ether_type == ETH_P_IP) {/*  IP header */
-                               u8 *pframe = skb->data;
-
-                               pframe += ETH_HLEN;
-
-                               if ((pframe[21] == 68 && pframe[23] == 67) ||
-                                   (pframe[21] == 67 && pframe[23] == 68)) {
-                                       /*  68 : UDP BOOTP client */
-                                       /*  67 : UDP BOOTP server */
-                                       RT_TRACE(_module_rtl871x_xmit_c_,
-                                                _drv_err_,
-                                                "======================update_attrib: get DHCP Packet\n");
-                                       pattrib->dhcp_pkt = 1;
-                               }
-                       }
-               }
-       } else if (pattrib->ether_type == ETH_P_PAE) {
-               DBG_8723A_LEVEL(_drv_always_, "send eapol packet\n");
-       }
-
-       if ((pattrib->ether_type == ETH_P_PAE) || (pattrib->dhcp_pkt == 1)) {
-               rtw_set_scan_deny(padapter, 3000);
-       }
-
-       /*  If EAPOL , ARP , OR DHCP packet, driver must be in active mode. */
-       if ((pattrib->ether_type == ETH_P_ARP) ||
-           (pattrib->ether_type == ETH_P_PAE) || (pattrib->dhcp_pkt == 1)) {
-               rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_SPECIAL_PACKET, 1);
-       }
-
-       bmcast = is_multicast_ether_addr(pattrib->ra);
-
-       /*  get sta_info */
-       if (bmcast) {
-               psta = rtw_get_bcmc_stainfo23a(padapter);
-       } else {
-               psta = rtw_get_stainfo23a(pstapriv, pattrib->ra);
-               if (psta == NULL) { /*  if we cannot get psta => drrp the pkt */
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_alert_,
-                                "update_attrib => get sta_info fail, ra:%pM\n",
-                                pattrib->ra);
-                       res = _FAIL;
-                       goto exit;
-               } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE) &&
-                          (!(psta->state & _FW_LINKED))) {
-                       res = _FAIL;
-                       goto exit;
-               }
-       }
-
-       if (psta) {
-               pattrib->mac_id = psta->mac_id;
-               /* DBG_8723A("%s ==> mac_id(%d)\n", __func__, pattrib->mac_id); */
-               pattrib->psta = psta;
-       } else {
-               /*  if we cannot get psta => drop the pkt */
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_alert_,
-                        "update_attrib => get sta_info fail, ra:%pM\n",
-                        pattrib->ra);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pattrib->ack_policy = 0;
-       /*  get ether_hdr_len */
-
-       /* pattrib->ether_type == 0x8100) ? (14 + 4): 14; vlan tag */
-       pattrib->pkt_hdrlen = ETH_HLEN;
-
-       pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
-       pattrib->type = IEEE80211_FTYPE_DATA;
-       pattrib->priority = 0;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE | WIFI_ADHOC_STATE |
-                         WIFI_ADHOC_MASTER_STATE)) {
-               if (psta->qos_option)
-                       set_qos(skb, pattrib);
-       } else {
-               if (pmlmepriv->qos_option) {
-                       set_qos(skb, pattrib);
-
-                       if (pmlmepriv->acm_mask != 0) {
-                               pattrib->priority = qos_acm23a(pmlmepriv->acm_mask,
-                                                           pattrib->priority);
-                       }
-               }
-       }
-
-       if (psta->ieee8021x_blocked == true) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "psta->ieee8021x_blocked == true\n");
-
-               pattrib->encrypt = 0;
-
-               if ((pattrib->ether_type != ETH_P_PAE) &&
-                   !check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "psta->ieee8021x_blocked == true,  pattrib->ether_type(%.4x) != 0x888e\n",
-                                pattrib->ether_type);
-                       res = _FAIL;
-                       goto exit;
-               }
-       } else {
-               GET_ENCRY_ALGO(psecuritypriv, psta, pattrib->encrypt, bmcast);
-
-               switch (psecuritypriv->dot11AuthAlgrthm) {
-               case dot11AuthAlgrthm_Open:
-               case dot11AuthAlgrthm_Shared:
-               case dot11AuthAlgrthm_Auto:
-                       pattrib->key_idx =
-                               (u8)psecuritypriv->dot11PrivacyKeyIndex;
-                       break;
-               case dot11AuthAlgrthm_8021X:
-                       if (bmcast)
-                               pattrib->key_idx =
-                                       (u8)psecuritypriv->dot118021XGrpKeyid;
-                       else
-                               pattrib->key_idx = 0;
-                       break;
-               default:
-                       pattrib->key_idx = 0;
-                       break;
-               }
-
-       }
-
-       switch (pattrib->encrypt) {
-       case WLAN_CIPHER_SUITE_WEP40:
-       case WLAN_CIPHER_SUITE_WEP104:
-               pattrib->iv_len = IEEE80211_WEP_IV_LEN;
-               pattrib->icv_len = IEEE80211_WEP_ICV_LEN;
-               break;
-
-       case WLAN_CIPHER_SUITE_TKIP:
-               pattrib->iv_len = IEEE80211_TKIP_IV_LEN;
-               pattrib->icv_len = IEEE80211_TKIP_ICV_LEN;
-
-               if (!padapter->securitypriv.busetkipkey) {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "padapter->securitypriv.busetkipkey(%d) == false drop packet\n",
-                                padapter->securitypriv.busetkipkey);
-                       res = _FAIL;
-                       goto exit;
-               }
-
-               break;
-       case WLAN_CIPHER_SUITE_CCMP:
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "pattrib->encrypt =%d (WLAN_CIPHER_SUITE_CCMP)\n",
-                        pattrib->encrypt);
-               pattrib->iv_len = IEEE80211_CCMP_HDR_LEN;
-               pattrib->icv_len = IEEE80211_CCMP_MIC_LEN;
-               break;
-
-       default:
-               pattrib->iv_len = 0;
-               pattrib->icv_len = 0;
-               break;
-       }
-
-       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                "update_attrib: encrypt =%d\n", pattrib->encrypt);
-
-       if (pattrib->encrypt && !psecuritypriv->hw_decrypted) {
-               pattrib->bswenc = true;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "update_attrib: encrypt =%d bswenc = true\n",
-                        pattrib->encrypt);
-       } else {
-               pattrib->bswenc = false;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "update_attrib: bswenc = false\n");
-       }
-       update_attrib_phy_info(pattrib, psta);
-
-exit:
-
-       return res;
-}
-
-static int xmitframe_addmic(struct rtw_adapter *padapter,
-                           struct xmit_frame *pxmitframe) {
-       struct mic_data micdata;
-       struct sta_info *stainfo;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int curfragnum, length;
-       u8 *pframe, *payload, mic[8];
-       u8 priority[4]= {0x0, 0x0, 0x0, 0x0};
-       u8 hw_hdr_offset = 0;
-       int bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (pattrib->psta) {
-               stainfo = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               stainfo = rtw_get_stainfo23a(&padapter->stapriv, &pattrib->ra[0]);
-       }
-
-       if (!stainfo) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return _FAIL;
-       }
-
-       if (!(stainfo->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n",
-                         __func__, stainfo->state);
-               return _FAIL;
-       }
-
-       hw_hdr_offset = TXDESC_OFFSET;
-
-       if (pattrib->encrypt == WLAN_CIPHER_SUITE_TKIP) {
-               /* encode mic code */
-               if (stainfo) {
-                       u8 null_key[16]={0x0, 0x0, 0x0, 0x0,
-                                        0x0, 0x0, 0x0, 0x0,
-                                        0x0, 0x0, 0x0, 0x0,
-                                        0x0, 0x0, 0x0, 0x0};
-
-                       pframe = pxmitframe->buf_addr + hw_hdr_offset;
-
-                       if (bmcst) {
-                               if (!memcmp(psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey, null_key, 16)) {
-                                       return _FAIL;
-                               }
-                               /* start to calculate the mic code */
-                               rtw_secmicsetkey23a(&micdata, psecuritypriv->dot118021XGrptxmickey[psecuritypriv->dot118021XGrpKeyid].skey);
-                       } else {
-                               if (!memcmp(&stainfo->dot11tkiptxmickey.skey[0],
-                                           null_key, 16)) {
-                                       return _FAIL;
-                               }
-                               /* start to calculate the mic code */
-                               rtw_secmicsetkey23a(&micdata, &stainfo->dot11tkiptxmickey.skey[0]);
-                       }
-
-                       if (pframe[1] & 1) {   /* ToDS == 1 */
-                               /* DA */
-                               rtw_secmicappend23a(&micdata, &pframe[16], 6);
-                               if (pframe[1] & 2)  /* From Ds == 1 */
-                                       rtw_secmicappend23a(&micdata,
-                                                        &pframe[24], 6);
-                               else
-                                       rtw_secmicappend23a(&micdata,
-                                                        &pframe[10], 6);
-                       } else {        /* ToDS == 0 */
-                               /* DA */
-                               rtw_secmicappend23a(&micdata, &pframe[4], 6);
-                               if (pframe[1] & 2)  /* From Ds == 1 */
-                                       rtw_secmicappend23a(&micdata,
-                                                        &pframe[16], 6);
-                               else
-                                       rtw_secmicappend23a(&micdata,
-                                                        &pframe[10], 6);
-                       }
-
-                       /* if (pmlmepriv->qos_option == 1) */
-                       if (pattrib->qos_en)
-                               priority[0] = (u8)pxmitframe->attrib.priority;
-
-                       rtw_secmicappend23a(&micdata, &priority[0], 4);
-
-                       payload = pframe;
-
-                       for (curfragnum = 0; curfragnum < pattrib->nr_frags;
-                            curfragnum++) {
-                               payload = PTR_ALIGN(payload, 4);
-                               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                        "=== curfragnum =%d, pframe = 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x,!!!\n",
-                                        curfragnum, *payload, *(payload + 1),
-                                        *(payload + 2), *(payload + 3),
-                                        *(payload + 4), *(payload + 5),
-                                        *(payload + 6), *(payload + 7));
-
-                               payload = payload + pattrib->hdrlen +
-                                       pattrib->iv_len;
-                               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                        "curfragnum =%d pattrib->hdrlen =%d pattrib->iv_len =%d\n",
-                                        curfragnum,
-                                        pattrib->hdrlen, pattrib->iv_len);
-                               if ((curfragnum + 1) == pattrib->nr_frags) {
-                                       length = pattrib->last_txcmdsz -
-                                               pattrib->hdrlen -
-                                               pattrib->iv_len -
-                                               ((pattrib->bswenc) ?
-                                                pattrib->icv_len : 0);
-                                       rtw_secmicappend23a(&micdata, payload,
-                                                        length);
-                                       payload = payload + length;
-                               } else {
-                                       length = pxmitpriv->frag_len -
-                                               pattrib->hdrlen -
-                                               pattrib->iv_len -
-                                               ((pattrib->bswenc) ?
-                                                pattrib->icv_len : 0);
-                                       rtw_secmicappend23a(&micdata, payload,
-                                                        length);
-                                       payload = payload + length +
-                                               pattrib->icv_len;
-                                       RT_TRACE(_module_rtl871x_xmit_c_,
-                                                _drv_err_,
-                                                "curfragnum =%d length =%d pattrib->icv_len =%d\n",
-                                                curfragnum, length,
-                                                pattrib->icv_len);
-                               }
-                       }
-                       rtw_secgetmic23a(&micdata, &mic[0]);
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "xmitframe_addmic: before add mic code!!\n");
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "xmitframe_addmic: pattrib->last_txcmdsz =%d!!!\n",
-                                pattrib->last_txcmdsz);
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "xmitframe_addmic: mic[0]= 0x%.2x , mic[1]=0x%.2x , mic[2]= 0x%.2x , mic[3]= 0x%.2x\nmic[4]= 0x%.2x , mic[5]= 0x%.2x , mic[6]= 0x%.2x , mic[7]= 0x%.2x !!!!\n",
-                                mic[0], mic[1], mic[2], mic[3],
-                                mic[4], mic[5], mic[6], mic[7]);
-                       /* add mic code  and add the mic code length
-                          in last_txcmdsz */
-
-                       memcpy(payload, &mic[0], 8);
-                       pattrib->last_txcmdsz += 8;
-
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                                "======== last pkt ========\n");
-                       payload = payload - pattrib->last_txcmdsz + 8;
-                       for (curfragnum = 0; curfragnum < pattrib->last_txcmdsz;
-                            curfragnum = curfragnum + 8) {
-                               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                                        "%.2x,  %.2x,  %.2x,  %.2x,  %.2x,  %.2x,  %.2x,  %.2x\n",
-                                        *(payload + curfragnum),
-                                        *(payload + curfragnum + 1),
-                                        *(payload + curfragnum + 2),
-                                        *(payload + curfragnum + 3),
-                                        *(payload + curfragnum + 4),
-                                        *(payload + curfragnum + 5),
-                                        *(payload + curfragnum + 6),
-                                        *(payload + curfragnum + 7));
-                       }
-               } else {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "xmitframe_addmic: rtw_get_stainfo23a ==NULL!!!\n");
-               }
-       }
-
-       return _SUCCESS;
-}
-
-static int xmitframe_swencrypt(struct rtw_adapter *padapter,
-                              struct xmit_frame *pxmitframe)
-{
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-       /* if ((psecuritypriv->sw_encrypt)||(pattrib->bswenc)) */
-       if (pattrib->bswenc) {
-               /* DBG_8723A("start xmitframe_swencrypt\n"); */
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_alert_,
-                        "### xmitframe_swencrypt\n");
-               switch (pattrib->encrypt) {
-               case WLAN_CIPHER_SUITE_WEP40:
-               case WLAN_CIPHER_SUITE_WEP104:
-                       rtw_wep_encrypt23a(padapter, pxmitframe);
-                       break;
-               case WLAN_CIPHER_SUITE_TKIP:
-                       rtw_tkip_encrypt23a(padapter, pxmitframe);
-                       break;
-               case WLAN_CIPHER_SUITE_CCMP:
-                       rtw_aes_encrypt23a(padapter, pxmitframe);
-                       break;
-               default:
-                               break;
-               }
-
-       } else {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_notice_,
-                        "### xmitframe_hwencrypt\n");
-       }
-
-       return _SUCCESS;
-}
-
-static int rtw_make_wlanhdr(struct rtw_adapter *padapter, u8 *hdr,
-                           struct pkt_attrib *pattrib)
-{
-       struct ieee80211_hdr *pwlanhdr = (struct ieee80211_hdr *)hdr;
-       struct ieee80211_qos_hdr *qoshdr;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       u8 qos_option = false;
-       int res = _SUCCESS;
-
-       struct sta_info *psta;
-
-       int bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (pattrib->psta) {
-               psta = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               if (bmcst) {
-                       psta = rtw_get_bcmc_stainfo23a(padapter);
-               } else {
-                       psta = rtw_get_stainfo23a(&padapter->stapriv, pattrib->ra);
-               }
-       }
-
-       if (psta == NULL) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return _FAIL;
-       }
-
-       if (!(psta->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__, psta->state);
-               return _FAIL;
-       }
-
-       memset(hdr, 0, WLANHDR_OFFSET);
-
-       pwlanhdr->frame_control = cpu_to_le16(pattrib->type);
-
-       if (pattrib->type & IEEE80211_FTYPE_DATA) {
-               if (check_fwstate(pmlmepriv,  WIFI_STATION_STATE)) {
-                       /* to_ds = 1, fr_ds = 0; */
-                       /* Data transfer to AP */
-                       pwlanhdr->frame_control |=
-                               cpu_to_le16(IEEE80211_FCTL_TODS);
-                       ether_addr_copy(pwlanhdr->addr1, get_bssid(pmlmepriv));
-                       ether_addr_copy(pwlanhdr->addr2, pattrib->src);
-                       ether_addr_copy(pwlanhdr->addr3, pattrib->dst);
-
-                       if (pmlmepriv->qos_option)
-                               qos_option = true;
-
-               } else if (check_fwstate(pmlmepriv,  WIFI_AP_STATE)) {
-                       /* to_ds = 0, fr_ds = 1; */
-                       pwlanhdr->frame_control |=
-                               cpu_to_le16(IEEE80211_FCTL_FROMDS);
-                       ether_addr_copy(pwlanhdr->addr1, pattrib->dst);
-                       ether_addr_copy(pwlanhdr->addr2, get_bssid(pmlmepriv));
-                       ether_addr_copy(pwlanhdr->addr3, pattrib->src);
-
-                       if (psta->qos_option)
-                               qos_option = true;
-               } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-                          check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-                       ether_addr_copy(pwlanhdr->addr1, pattrib->dst);
-                       ether_addr_copy(pwlanhdr->addr2, pattrib->src);
-                       ether_addr_copy(pwlanhdr->addr3, get_bssid(pmlmepriv));
-
-                       if (psta->qos_option)
-                               qos_option = true;
-               }
-               else {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "fw_state:%x is not allowed to xmit frame\n",
-                                get_fwstate(pmlmepriv));
-                       res = _FAIL;
-                       goto exit;
-               }
-               if (pattrib->mdata)
-                       pwlanhdr->frame_control |=
-                               cpu_to_le16(IEEE80211_FCTL_MOREDATA);
-               if (pattrib->encrypt)
-                       pwlanhdr->frame_control |=
-                               cpu_to_le16(IEEE80211_FCTL_PROTECTED);
-               if (qos_option) {
-                       qoshdr = (struct ieee80211_qos_hdr *)hdr;
-
-                       qoshdr->qos_ctrl = cpu_to_le16(
-                               pattrib->priority & IEEE80211_QOS_CTL_TID_MASK);
-
-                       qoshdr->qos_ctrl |= cpu_to_le16(
-                               (pattrib->ack_policy << 5) &
-                               IEEE80211_QOS_CTL_ACK_POLICY_MASK);
-
-                       if (pattrib->eosp)
-                               qoshdr->qos_ctrl |=
-                                       cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
-               }
-               /* TODO: fill HT Control Field */
-
-               /* Update Seq Num will be handled by f/w */
-               if (psta) {
-                       psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
-                       psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
-                       pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
-                       /* We dont need to worry about frag bits here */
-                       pwlanhdr->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(
-                                                             pattrib->seqnum));
-                       /* check if enable ampdu */
-                       if (pattrib->ht_en && psta->htpriv.ampdu_enable) {
-                               if (pattrib->priority >= 16)
-                                       printk(KERN_WARNING "%s: Invalid "
-                                              "pattrib->priority %i\n",
-                                              __func__, pattrib->priority);
-                               if (psta->htpriv.agg_enable_bitmap &
-                                   BIT(pattrib->priority))
-                                       pattrib->ampdu_en = true;
-                       }
-                       /* re-check if enable ampdu by BA_starting_seqctrl */
-                       if (pattrib->ampdu_en) {
-                               u16 tx_seq;
-
-                               tx_seq = psta->BA_starting_seqctrl[pattrib->priority & 0x0f];
-
-                               /* check BA_starting_seqctrl */
-                               if (SN_LESS(pattrib->seqnum, tx_seq)) {
-                                       /* DBG_8723A("tx ampdu seqnum(%d) < tx_seq(%d)\n", pattrib->seqnum, tx_seq); */
-                                       pattrib->ampdu_en = false;/* AGG BK */
-                               } else if (SN_EQUAL(pattrib->seqnum, tx_seq)) {
-                                       psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (tx_seq+1)&0xfff;
-                                       pattrib->ampdu_en = true;/* AGG EN */
-                               } else {
-                                       /* DBG_8723A("tx ampdu over run\n"); */
-                                       psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (pattrib->seqnum+1)&0xfff;
-                                       pattrib->ampdu_en = true;/* AGG EN */
-                               }
-                       }
-               }
-       }
-exit:
-       return res;
-}
-
-s32 rtw_txframes_pending23a(struct rtw_adapter *padapter)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       return (!list_empty(&pxmitpriv->be_pending.queue)) ||
-               (!list_empty(&pxmitpriv->bk_pending.queue)) ||
-               (!list_empty(&pxmitpriv->vi_pending.queue)) ||
-               (!list_empty(&pxmitpriv->vo_pending.queue));
-}
-
-s32 rtw_txframes_sta_ac_pending23a(struct rtw_adapter *padapter,
-                               struct pkt_attrib *pattrib)
-{
-       struct sta_info *psta;
-       struct tx_servq *ptxservq;
-       int priority = pattrib->priority;
-
-       if (pattrib->psta) {
-               psta = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(&padapter->stapriv, &pattrib->ra[0]);
-       }
-       if (psta == NULL) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return 0;
-       }
-       if (!(psta->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__,
-                         psta->state);
-               return 0;
-       }
-       switch (priority) {
-       case 1:
-       case 2:
-               ptxservq = &psta->sta_xmitpriv.bk_q;
-               break;
-       case 4:
-       case 5:
-               ptxservq = &psta->sta_xmitpriv.vi_q;
-               break;
-       case 6:
-       case 7:
-               ptxservq = &psta->sta_xmitpriv.vo_q;
-               break;
-       case 0:
-       case 3:
-       default:
-               ptxservq = &psta->sta_xmitpriv.be_q;
-               break;
-       }
-       return ptxservq->qcnt;
-}
-
-/* Logical Link Control(LLC) SubNetwork Attachment Point(SNAP) header
- * IEEE LLC/SNAP header contains 8 octets
- * First 3 octets comprise the LLC portion
- * SNAP portion, 5 octets, is divided into two fields:
- *     Organizationally Unique Identifier(OUI), 3 octets,
- *     type, defined by that organization, 2 octets.
- */
-static int rtw_put_snap(u8 *data, u16 h_proto)
-{
-       if (h_proto == ETH_P_IPX || h_proto == ETH_P_AARP)
-               ether_addr_copy(data, bridge_tunnel_header);
-       else
-               ether_addr_copy(data, rfc1042_header);
-
-       data += ETH_ALEN;
-       put_unaligned_be16(h_proto, data);
-       return ETH_ALEN + sizeof(u16);
-}
-
-/*
-
-This sub-routine will perform all the following:
-
-1. remove 802.3 header.
-2. create wlan_header, based on the info in pxmitframe
-3. append sta's iv/ext-iv
-4. append LLC
-5. move frag chunk from pframe to pxmitframe->mem
-6. apply sw-encrypt, if necessary.
-
-*/
-int rtw_xmitframe_coalesce23a(struct rtw_adapter *padapter, struct sk_buff *skb,
-                             struct xmit_frame *pxmitframe)
-{
-       struct sta_info *psta;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct ieee80211_hdr *hdr;
-       s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
-       u8 *pframe, *mem_start;
-       u8 hw_hdr_offset;
-       u8 *pbuf_start;
-       u8 *pdata = skb->data;
-       int data_len = skb->len;
-       s32 bmcst = is_multicast_ether_addr(pattrib->ra);
-       int res = _SUCCESS;
-
-       if (pattrib->psta)
-               psta = pattrib->psta;
-       else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(&padapter->stapriv, pattrib->ra);
-       }
-
-       if (!psta) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return _FAIL;
-       }
-
-       if (!(psta->state &_FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n",
-                         __func__, psta->state);
-               return _FAIL;
-       }
-
-       if (!pxmitframe->buf_addr) {
-               DBG_8723A("==> %s buf_addr == NULL\n", __func__);
-               return _FAIL;
-       }
-
-       pbuf_start = pxmitframe->buf_addr;
-
-       hw_hdr_offset = TXDESC_OFFSET;
-
-       mem_start = pbuf_start + hw_hdr_offset;
-
-       if (rtw_make_wlanhdr(padapter, mem_start, pattrib) == _FAIL) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "%s: rtw_make_wlanhdr fail; drop pkt\n", __func__);
-               res = _FAIL;
-               goto exit;
-       }
-
-       pdata += pattrib->pkt_hdrlen;
-       data_len -= pattrib->pkt_hdrlen;
-
-       frg_inx = 0;
-       frg_len = pxmitpriv->frag_len - 4;/* 2346-4 = 2342 */
-
-       while (1) {
-               llc_sz = 0;
-
-               mpdu_len = frg_len;
-
-               pframe = mem_start;
-               hdr = (struct ieee80211_hdr *)mem_start;
-
-               pframe += pattrib->hdrlen;
-               mpdu_len -= pattrib->hdrlen;
-
-               /* adding icv, if necessary... */
-               if (pattrib->iv_len) {
-                       if (psta) {
-                               switch (pattrib->encrypt) {
-                               case WLAN_CIPHER_SUITE_WEP40:
-                               case WLAN_CIPHER_SUITE_WEP104:
-                                       WEP_IV(pattrib->iv, psta->dot11txpn,
-                                              pattrib->key_idx);
-                                       break;
-                               case WLAN_CIPHER_SUITE_TKIP:
-                                       if (bmcst)
-                                               TKIP_IV(pattrib->iv,
-                                                       psta->dot11txpn,
-                                                       pattrib->key_idx);
-                                       else
-                                               TKIP_IV(pattrib->iv,
-                                                       psta->dot11txpn, 0);
-                                       break;
-                               case WLAN_CIPHER_SUITE_CCMP:
-                                       if (bmcst)
-                                               AES_IV(pattrib->iv,
-                                                      psta->dot11txpn,
-                                                      pattrib->key_idx);
-                                       else
-                                               AES_IV(pattrib->iv,
-                                                      psta->dot11txpn, 0);
-                                       break;
-                               }
-                       }
-
-                       memcpy(pframe, pattrib->iv, pattrib->iv_len);
-
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_notice_,
-                                "rtw_xmiaframe_coalesce23a: keyid =%d pattrib->iv[3]=%.2x pframe =%.2x %.2x %.2x %.2x\n",
-                                padapter->securitypriv.dot11PrivacyKeyIndex,
-                                pattrib->iv[3], *pframe, *(pframe+1),
-                                *(pframe+2), *(pframe+3));
-                       pframe += pattrib->iv_len;
-                       mpdu_len -= pattrib->iv_len;
-               }
-               if (frg_inx == 0) {
-                       llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
-                       pframe += llc_sz;
-                       mpdu_len -= llc_sz;
-               }
-
-               if (pattrib->icv_len > 0 && pattrib->bswenc)
-                       mpdu_len -= pattrib->icv_len;
-
-               if (bmcst)
-                       /*  don't do fragment to broadcast/multicast packets */
-                       mem_sz = min_t(s32, data_len, pattrib->pktlen);
-               else
-                       mem_sz = min_t(s32, data_len, mpdu_len);
-
-               memcpy(pframe, pdata, mem_sz);
-
-               pframe += mem_sz;
-               pdata += mem_sz;
-               data_len -= mem_sz;
-
-               if ((pattrib->icv_len >0) && (pattrib->bswenc)) {
-                       memcpy(pframe, pattrib->icv, pattrib->icv_len);
-                       pframe += pattrib->icv_len;
-               }
-
-               frg_inx++;
-
-               if (bmcst || data_len <= 0) {
-                       pattrib->nr_frags = frg_inx;
-
-                       pattrib->last_txcmdsz = pattrib->hdrlen +
-                                               pattrib->iv_len +
-                                               ((pattrib->nr_frags == 1) ?
-                                               llc_sz : 0) +
-                                               ((pattrib->bswenc) ?
-                                               pattrib->icv_len : 0) + mem_sz;
-                       hdr->frame_control &=
-                               ~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
-
-                       break;
-               } else {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "%s: There're still something in packet!\n",
-                                __func__);
-               }
-               hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
-
-               mem_start = PTR_ALIGN(pframe, 4) + hw_hdr_offset;
-               memcpy(mem_start, pbuf_start + hw_hdr_offset, pattrib->hdrlen);
-       }
-
-       if (xmitframe_addmic(padapter, pxmitframe) == _FAIL) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "xmitframe_addmic(padapter, pxmitframe) == _FAIL\n");
-               DBG_8723A("xmitframe_addmic(padapter, pxmitframe) == _FAIL\n");
-               res = _FAIL;
-               goto exit;
-       }
-
-       xmitframe_swencrypt(padapter, pxmitframe);
-
-       if (bmcst == false)
-               update_attrib_vcs_info(padapter, pxmitframe);
-       else
-               pattrib->vcs_mode = NONE_VCS;
-
-exit:
-       return res;
-}
-
-void rtw_update_protection23a(struct rtw_adapter *padapter, u8 *ie, uint ie_len)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       uint protection;
-       const u8 *p;
-
-       switch (pregistrypriv->vrtl_carrier_sense) {
-       case DISABLE_VCS:
-               pxmitpriv->vcs = NONE_VCS;
-               break;
-       case ENABLE_VCS:
-               break;
-       case AUTO_VCS:
-       default:
-               p = cfg80211_find_ie(WLAN_EID_ERP_INFO, ie, ie_len);
-               if (!p)
-                       pxmitpriv->vcs = NONE_VCS;
-               else {
-                       protection = (*(p + 2)) & BIT(1);
-                       if (protection) {
-                               if (pregistrypriv->vcs_type == RTS_CTS)
-                                       pxmitpriv->vcs = RTS_CTS;
-                               else
-                                       pxmitpriv->vcs = CTS_TO_SELF;
-                       } else {
-                               pxmitpriv->vcs = NONE_VCS;
-                       }
-               }
-               break;
-       }
-}
-
-void rtw_count_tx_stats23a(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe, int sz)
-{
-       struct sta_info *psta = NULL;
-       struct stainfo_stats *pstats = NULL;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv        *pmlmepriv = &padapter->mlmepriv;
-
-       if (pxmitframe->frame_tag == DATA_FRAMETAG) {
-               pxmitpriv->tx_bytes += sz;
-               pmlmepriv->LinkDetectInfo.NumTxOkInPeriod++;
-
-               psta = pxmitframe->attrib.psta;
-               if (psta) {
-                       pstats = &psta->sta_stats;
-                       pstats->tx_pkts++;
-                       pstats->tx_bytes += sz;
-               }
-       }
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf23a_ext(struct xmit_priv *pxmitpriv)
-{
-       unsigned long irqL;
-       struct xmit_buf *pxmitbuf =  NULL;
-       struct list_head *phead;
-       struct rtw_queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-
-       spin_lock_irqsave(&pfree_queue->lock, irqL);
-
-       phead = get_list_head(pfree_queue);
-
-       if (!list_empty(phead)) {
-               pxmitbuf = list_first_entry(phead, struct xmit_buf, list);
-
-               list_del_init(&pxmitbuf->list);
-
-               pxmitpriv->free_xmit_extbuf_cnt--;
-               pxmitbuf->priv_data = NULL;
-               pxmitbuf->ext_tag = true;
-
-               if (pxmitbuf->sctx) {
-                       DBG_8723A("%s pxmitbuf->sctx is not NULL\n", __func__);
-                       rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
-               }
-       }
-
-       spin_unlock_irqrestore(&pfree_queue->lock, irqL);
-
-       return pxmitbuf;
-}
-
-int rtw_free_xmitbuf_ext23a(struct xmit_priv *pxmitpriv,
-                           struct xmit_buf *pxmitbuf)
-{
-       unsigned long irqL;
-       struct rtw_queue *pfree_queue = &pxmitpriv->free_xmit_extbuf_queue;
-
-       if (pxmitbuf == NULL)
-               return _FAIL;
-
-       spin_lock_irqsave(&pfree_queue->lock, irqL);
-
-       list_del_init(&pxmitbuf->list);
-
-       list_add_tail(&pxmitbuf->list, get_list_head(pfree_queue));
-       pxmitpriv->free_xmit_extbuf_cnt++;
-
-       spin_unlock_irqrestore(&pfree_queue->lock, irqL);
-
-       return _SUCCESS;
-}
-
-struct xmit_buf *rtw_alloc_xmitbuf23a(struct xmit_priv *pxmitpriv)
-{
-       unsigned long irqL;
-       struct xmit_buf *pxmitbuf =  NULL;
-       struct list_head *phead;
-       struct rtw_queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-
-       /* DBG_8723A("+rtw_alloc_xmitbuf23a\n"); */
-
-       spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL);
-
-       phead = get_list_head(pfree_xmitbuf_queue);
-
-       if (!list_empty(phead)) {
-               pxmitbuf = list_first_entry(phead, struct xmit_buf, list);
-
-               list_del_init(&pxmitbuf->list);
-
-               pxmitpriv->free_xmitbuf_cnt--;
-               pxmitbuf->priv_data = NULL;
-               pxmitbuf->ext_tag = false;
-               pxmitbuf->flags = XMIT_VO_QUEUE;
-
-               if (pxmitbuf->sctx) {
-                       DBG_8723A("%s pxmitbuf->sctx is not NULL\n", __func__);
-                       rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_ALLOC);
-               }
-       }
-
-       spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL);
-
-       return pxmitbuf;
-}
-
-int rtw_free_xmitbuf23a(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
-{
-       unsigned long irqL;
-       struct rtw_queue *pfree_xmitbuf_queue = &pxmitpriv->free_xmitbuf_queue;
-
-       /* DBG_8723A("+rtw_free_xmitbuf23a\n"); */
-
-       if (pxmitbuf == NULL)
-               return _FAIL;
-
-       if (pxmitbuf->sctx) {
-               DBG_8723A("%s pxmitbuf->sctx is not NULL\n", __func__);
-               rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_BUF_FREE);
-       }
-
-       if (pxmitbuf->ext_tag) {
-               rtw_free_xmitbuf_ext23a(pxmitpriv, pxmitbuf);
-       } else {
-               spin_lock_irqsave(&pfree_xmitbuf_queue->lock, irqL);
-
-               list_del_init(&pxmitbuf->list);
-
-               list_add_tail(&pxmitbuf->list,
-                             get_list_head(pfree_xmitbuf_queue));
-
-               pxmitpriv->free_xmitbuf_cnt++;
-               spin_unlock_irqrestore(&pfree_xmitbuf_queue->lock, irqL);
-       }
-
-       return _SUCCESS;
-}
-
-static void rtw_init_xmitframe(struct xmit_frame *pxframe)
-{
-       if (pxframe !=  NULL) {
-               /* default value setting */
-               pxframe->buf_addr = NULL;
-               pxframe->pxmitbuf = NULL;
-
-               memset(&pxframe->attrib, 0, sizeof(struct pkt_attrib));
-               /* pxframe->attrib.psta = NULL; */
-
-               pxframe->frame_tag = DATA_FRAMETAG;
-
-               pxframe->pkt = NULL;
-               pxframe->pkt_offset = 1;/* default use pkt_offset to fill tx desc */
-
-               pxframe->ack_report = 0;
-       }
-}
-
-/*
-Calling context:
-1. OS_TXENTRY
-2. RXENTRY (rx_thread or RX_ISR/RX_CallBack)
-
-If we turn on USE_RXTHREAD, then, no need for critical section.
-Otherwise, we must use _enter/_exit critical to protect free_xmit_queue...
-
-Must be very very cautious...
-
-*/
-static struct xmit_frame *rtw_alloc_xmitframe(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_frame *pxframe;
-       struct rtw_queue *pfree_xmit_queue = &pxmitpriv->free_xmit_queue;
-
-       spin_lock_bh(&pfree_xmit_queue->lock);
-
-       pxframe = list_first_entry_or_null(&pfree_xmit_queue->queue,
-                                          struct xmit_frame, list);
-       if (!pxframe) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_alloc_xmitframe:%d\n",
-                        pxmitpriv->free_xmitframe_cnt);
-       } else {
-               list_del_init(&pxframe->list);
-               pxmitpriv->free_xmitframe_cnt--;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_alloc_xmitframe():free_xmitframe_cnt =%d\n",
-                        pxmitpriv->free_xmitframe_cnt);
-       }
-
-       spin_unlock_bh(&pfree_xmit_queue->lock);
-
-       rtw_init_xmitframe(pxframe);
-
-       return pxframe;
-}
-
-struct xmit_frame *rtw_alloc_xmitframe23a_ext(struct xmit_priv *pxmitpriv)
-{
-       struct xmit_frame *pxframe;
-       struct rtw_queue *queue = &pxmitpriv->free_xframe_ext_queue;
-
-       spin_lock_bh(&queue->lock);
-
-       pxframe = list_first_entry_or_null(&queue->queue,
-                                          struct xmit_frame, list);
-       if (!pxframe) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_alloc_xmitframe23a_ext:%d\n",
-                        pxmitpriv->free_xframe_ext_cnt);
-       } else {
-               list_del_init(&pxframe->list);
-               pxmitpriv->free_xframe_ext_cnt--;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_alloc_xmitframe23a_ext():free_xmitframe_cnt =%d\n",
-                        pxmitpriv->free_xframe_ext_cnt);
-       }
-
-       spin_unlock_bh(&queue->lock);
-
-       rtw_init_xmitframe(pxframe);
-
-       return pxframe;
-}
-
-s32 rtw_free_xmitframe23a(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe)
-{
-       struct rtw_queue *queue = NULL;
-       struct rtw_adapter *padapter = pxmitpriv->adapter;
-       struct sk_buff *pndis_pkt = NULL;
-
-       if (pxmitframe == NULL) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "====== rtw_free_xmitframe23a():pxmitframe == NULL!!!!!!!!!!\n");
-               goto exit;
-       }
-
-       if (pxmitframe->pkt) {
-               pndis_pkt = pxmitframe->pkt;
-               pxmitframe->pkt = NULL;
-       }
-
-       if (pxmitframe->ext_tag == 0)
-               queue = &pxmitpriv->free_xmit_queue;
-       else if (pxmitframe->ext_tag == 1)
-               queue = &pxmitpriv->free_xframe_ext_queue;
-
-       if (!queue)
-               goto check_pkt_complete;
-       spin_lock_bh(&queue->lock);
-
-       list_del_init(&pxmitframe->list);
-       list_add_tail(&pxmitframe->list, get_list_head(queue));
-       if (pxmitframe->ext_tag == 0) {
-               pxmitpriv->free_xmitframe_cnt++;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_,
-                        "rtw_free_xmitframe23a():free_xmitframe_cnt =%d\n",
-                        pxmitpriv->free_xmitframe_cnt);
-       } else if (pxmitframe->ext_tag == 1) {
-               pxmitpriv->free_xframe_ext_cnt++;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_debug_,
-                        "rtw_free_xmitframe23a():free_xframe_ext_cnt =%d\n",
-                        pxmitpriv->free_xframe_ext_cnt);
-       }
-
-       spin_unlock_bh(&queue->lock);
-
-check_pkt_complete:
-
-       if (pndis_pkt)
-               rtw_os_pkt_complete23a(padapter, pndis_pkt);
-
-exit:
-
-       return _SUCCESS;
-}
-
-void rtw_free_xmitframe_queue23a(struct xmit_priv *pxmitpriv,
-                                struct rtw_queue *pframequeue)
-{
-       struct list_head *phead;
-       struct xmit_frame *pxmitframe, *ptmp;
-
-       spin_lock_bh(&pframequeue->lock);
-       phead = get_list_head(pframequeue);
-       list_for_each_entry_safe(pxmitframe, ptmp, phead, list)
-               rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-       spin_unlock_bh(&pframequeue->lock);
-
-}
-
-int rtw_xmitframe_enqueue23a(struct rtw_adapter *padapter,
-                            struct xmit_frame *pxmitframe)
-{
-       if (rtw_xmit23a_classifier(padapter, pxmitframe) == _FAIL) {
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "rtw_xmitframe_enqueue23a: drop xmit pkt for classifier fail\n");
-               return _FAIL;
-       }
-
-       return _SUCCESS;
-}
-
-static struct xmit_frame *
-dequeue_one_xmitframe(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit,
-                     struct tx_servq *ptxservq, struct rtw_queue *pframe_queue)
-{
-       struct list_head *phead;
-       struct xmit_frame *pxmitframe = NULL;
-
-       phead = get_list_head(pframe_queue);
-
-       if (!list_empty(phead)) {
-               pxmitframe = list_first_entry(phead, struct xmit_frame, list);
-               list_del_init(&pxmitframe->list);
-               ptxservq->qcnt--;
-       }
-       return pxmitframe;
-}
-
-struct xmit_frame *
-rtw_dequeue_xframe23a(struct xmit_priv *pxmitpriv, struct hw_xmit *phwxmit_i,
-                  int entry)
-{
-       struct list_head *sta_phead;
-       struct hw_xmit *phwxmit;
-       struct tx_servq *ptxservq = NULL, *ptmp;
-       struct rtw_queue *pframe_queue = NULL;
-       struct xmit_frame *pxmitframe = NULL;
-       struct rtw_adapter *padapter = pxmitpriv->adapter;
-       struct registry_priv    *pregpriv = &padapter->registrypriv;
-       int i, inx[4];
-
-       inx[0] = 0;
-       inx[1] = 1;
-       inx[2] = 2;
-       inx[3] = 3;
-       if (pregpriv->wifi_spec == 1) {
-               int j;
-
-               for (j = 0; j < 4; j++)
-                       inx[j] = pxmitpriv->wmm_para_seq[j];
-       }
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       for (i = 0; i < entry; i++) {
-               phwxmit = phwxmit_i + inx[i];
-
-               sta_phead = get_list_head(phwxmit->sta_queue);
-               list_for_each_entry_safe(ptxservq, ptmp, sta_phead,
-                                        tx_pending) {
-                       pframe_queue = &ptxservq->sta_pending;
-
-                       pxmitframe = dequeue_one_xmitframe(pxmitpriv, phwxmit, ptxservq, pframe_queue);
-
-                       if (pxmitframe) {
-                               phwxmit->accnt--;
-
-                               /* Remove sta node when there is no pending packets. */
-                               /* must be done after get_next and
-                                  before break */
-                               if (list_empty(&pframe_queue->queue))
-                                       list_del_init(&ptxservq->tx_pending);
-                               goto exit;
-                       }
-               }
-       }
-exit:
-       spin_unlock_bh(&pxmitpriv->lock);
-       return pxmitframe;
-}
-
-struct tx_servq *rtw_get_sta_pending23a(struct rtw_adapter *padapter, struct sta_info *psta, int up, u8 *ac)
-{
-       struct tx_servq *ptxservq = NULL;
-
-       switch (up) {
-       case 1:
-       case 2:
-               ptxservq = &psta->sta_xmitpriv.bk_q;
-               *(ac) = 3;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_get_sta_pending23a : BK\n");
-               break;
-       case 4:
-       case 5:
-               ptxservq = &psta->sta_xmitpriv.vi_q;
-               *(ac) = 1;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_get_sta_pending23a : VI\n");
-               break;
-       case 6:
-       case 7:
-               ptxservq = &psta->sta_xmitpriv.vo_q;
-               *(ac) = 0;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_get_sta_pending23a : VO\n");
-               break;
-       case 0:
-       case 3:
-       default:
-               ptxservq = &psta->sta_xmitpriv.be_q;
-               *(ac) = 2;
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_get_sta_pending23a : BE\n");
-               break;
-       }
-       return ptxservq;
-}
-
-/*
- * Will enqueue pxmitframe to the proper queue,
- * and indicate it to xx_pending list.....
- */
-int rtw_xmit23a_classifier(struct rtw_adapter *padapter,
-                          struct xmit_frame *pxmitframe)
-{
-       struct sta_info *psta;
-       struct tx_servq *ptxservq;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct hw_xmit  *phwxmits =  padapter->xmitpriv.hwxmits;
-       u8      ac_index;
-       int res = _SUCCESS;
-
-       if (pattrib->psta) {
-               psta = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(pstapriv, pattrib->ra);
-       }
-       if (psta == NULL) {
-               res = _FAIL;
-               DBG_8723A("rtw_xmit23a_classifier: psta == NULL\n");
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                        "rtw_xmit23a_classifier: psta == NULL\n");
-               goto exit;
-       }
-       if (!(psta->state & _FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__,
-                         psta->state);
-               return _FAIL;
-       }
-       ptxservq = rtw_get_sta_pending23a(padapter, psta, pattrib->priority,
-                                      (u8 *)(&ac_index));
-
-       if (list_empty(&ptxservq->tx_pending)) {
-               list_add_tail(&ptxservq->tx_pending,
-                             get_list_head(phwxmits[ac_index].sta_queue));
-       }
-
-       list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending));
-       ptxservq->qcnt++;
-       phwxmits[ac_index].accnt++;
-exit:
-       return res;
-}
-
-void rtw_alloc_hwxmits23a(struct rtw_adapter *padapter)
-{
-       struct hw_xmit *hwxmits;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int size;
-
-       pxmitpriv->hwxmit_entry = HWXMIT_ENTRY;
-
-       size = sizeof(struct hw_xmit) * (pxmitpriv->hwxmit_entry + 1);
-       pxmitpriv->hwxmits = kzalloc(size, GFP_KERNEL);
-
-       hwxmits = pxmitpriv->hwxmits;
-
-       if (pxmitpriv->hwxmit_entry == 5) {
-               /* pxmitpriv->bmc_txqueue.head = 0; */
-               /* hwxmits[0] .phwtxqueue = &pxmitpriv->bmc_txqueue; */
-               hwxmits[0] .sta_queue = &pxmitpriv->bm_pending;
-
-               /* pxmitpriv->vo_txqueue.head = 0; */
-               /* hwxmits[1] .phwtxqueue = &pxmitpriv->vo_txqueue; */
-               hwxmits[1] .sta_queue = &pxmitpriv->vo_pending;
-
-               /* pxmitpriv->vi_txqueue.head = 0; */
-               /* hwxmits[2] .phwtxqueue = &pxmitpriv->vi_txqueue; */
-               hwxmits[2] .sta_queue = &pxmitpriv->vi_pending;
-
-               /* pxmitpriv->bk_txqueue.head = 0; */
-               /* hwxmits[3] .phwtxqueue = &pxmitpriv->bk_txqueue; */
-               hwxmits[3] .sta_queue = &pxmitpriv->bk_pending;
-
-               /* pxmitpriv->be_txqueue.head = 0; */
-               /* hwxmits[4] .phwtxqueue = &pxmitpriv->be_txqueue; */
-               hwxmits[4] .sta_queue = &pxmitpriv->be_pending;
-
-       } else if (pxmitpriv->hwxmit_entry == 4) {
-
-               /* pxmitpriv->vo_txqueue.head = 0; */
-               /* hwxmits[0] .phwtxqueue = &pxmitpriv->vo_txqueue; */
-               hwxmits[0] .sta_queue = &pxmitpriv->vo_pending;
-
-               /* pxmitpriv->vi_txqueue.head = 0; */
-               /* hwxmits[1] .phwtxqueue = &pxmitpriv->vi_txqueue; */
-               hwxmits[1] .sta_queue = &pxmitpriv->vi_pending;
-
-               /* pxmitpriv->be_txqueue.head = 0; */
-               /* hwxmits[2] .phwtxqueue = &pxmitpriv->be_txqueue; */
-               hwxmits[2] .sta_queue = &pxmitpriv->be_pending;
-
-               /* pxmitpriv->bk_txqueue.head = 0; */
-               /* hwxmits[3] .phwtxqueue = &pxmitpriv->bk_txqueue; */
-               hwxmits[3] .sta_queue = &pxmitpriv->bk_pending;
-       } else {
-
-       }
-}
-
-void rtw_free_hwxmits23a(struct rtw_adapter *padapter)
-{
-       struct hw_xmit *hwxmits;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       hwxmits = pxmitpriv->hwxmits;
-       kfree(hwxmits);
-}
-
-void rtw_init_hwxmits23a(struct hw_xmit *phwxmit, int entry)
-{
-       int i;
-
-       for (i = 0; i < entry; i++, phwxmit++)
-               phwxmit->accnt = 0;
-}
-
-u32 rtw_get_ff_hwaddr23a(struct xmit_frame *pxmitframe)
-{
-       u32 addr;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-
-       switch (pattrib->qsel) {
-       case 0:
-       case 3:
-               addr = BE_QUEUE_INX;
-               break;
-       case 1:
-       case 2:
-               addr = BK_QUEUE_INX;
-               break;
-       case 4:
-       case 5:
-               addr = VI_QUEUE_INX;
-               break;
-       case 6:
-       case 7:
-               addr = VO_QUEUE_INX;
-               break;
-       case 0x10:
-               addr = BCN_QUEUE_INX;
-               break;
-       case 0x11:/* BC/MC in PS (HIQ) */
-               addr = HIGH_QUEUE_INX;
-               break;
-       case 0x12:
-       default:
-               addr = MGT_QUEUE_INX;
-               break;
-       }
-
-       return addr;
-}
-
-/*
- * The main transmit(tx) entry
- *
- * Return
- *     1       enqueue
- *     0       success, hardware will handle this xmit frame(packet)
- *     <0      fail
- */
-int rtw_xmit23a(struct rtw_adapter *padapter, struct sk_buff *skb)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct xmit_frame *pxmitframe = NULL;
-       int res;
-
-       pxmitframe = rtw_alloc_xmitframe(pxmitpriv);
-
-       if (pxmitframe == NULL) {
-               RT_TRACE(_module_xmit_osdep_c_, _drv_err_,
-                        "rtw_xmit23a: no more pxmitframe\n");
-               return -1;
-       }
-
-       res = update_attrib(padapter, skb, &pxmitframe->attrib);
-
-       if (res == _FAIL) {
-               RT_TRACE(_module_xmit_osdep_c_, _drv_err_,
-                        "rtw_xmit23a: update attrib fail\n");
-               rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-               return -1;
-       }
-       pxmitframe->pkt = skb;
-
-       pxmitframe->attrib.qsel = pxmitframe->attrib.priority;
-
-#ifdef CONFIG_8723AU_AP_MODE
-       spin_lock_bh(&pxmitpriv->lock);
-       if (xmitframe_enqueue_for_sleeping_sta23a(padapter, pxmitframe)) {
-               spin_unlock_bh(&pxmitpriv->lock);
-               return 1;
-       }
-       spin_unlock_bh(&pxmitpriv->lock);
-#endif
-
-       if (rtl8723au_hal_xmit(padapter, pxmitframe) == false)
-               return 1;
-
-       return 0;
-}
-
-#if defined(CONFIG_8723AU_AP_MODE)
-
-int xmitframe_enqueue_for_sleeping_sta23a(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe)
-{
-       int ret = false;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       int bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (!check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return ret;
-
-       if (pattrib->psta) {
-               psta = pattrib->psta;
-       } else {
-               DBG_8723A("%s, call rtw_get_stainfo23a()\n", __func__);
-               psta = rtw_get_stainfo23a(pstapriv, pattrib->ra);
-       }
-
-       if (psta == NULL) {
-               DBG_8723A("%s, psta == NUL\n", __func__);
-               return false;
-       }
-
-       if (!(psta->state & _FW_LINKED)) {
-               DBG_8723A("%s, psta->state(0x%x) != _FW_LINKED\n", __func__,
-                         psta->state);
-               return false;
-       }
-
-       if (pattrib->triggered == 1) {
-               if (bmcst)
-                       pattrib->qsel = 0x11;/* HIQ */
-               return ret;
-       }
-
-       if (bmcst) {
-               spin_lock_bh(&psta->sleep_q.lock);
-
-               if (pstapriv->sta_dz_bitmap) {
-                       /* if anyone sta is in ps mode */
-                       list_del_init(&pxmitframe->list);
-
-                       /* spin_lock_bh(&psta->sleep_q.lock); */
-
-                       list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
-
-                       psta->sleepq_len++;
-
-                       pstapriv->tim_bitmap |= BIT(0);/*  */
-                       pstapriv->sta_dz_bitmap |= BIT(0);
-
-                       /* DBG_8723A("enqueue, sq_len =%d, tim =%x\n", psta->sleepq_len, pstapriv->tim_bitmap); */
-
-                       /* tx bc/mc packets after update bcn */
-                       update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-
-                       /* spin_unlock_bh(&psta->sleep_q.lock); */
-
-                       ret = true;
-
-               }
-
-               spin_unlock_bh(&psta->sleep_q.lock);
-
-               return ret;
-
-       }
-
-       spin_lock_bh(&psta->sleep_q.lock);
-
-       if (psta->state&WIFI_SLEEP_STATE) {
-               u8 wmmps_ac = 0;
-
-               if (pstapriv->sta_dz_bitmap & CHKBIT(psta->aid)) {
-                       list_del_init(&pxmitframe->list);
-
-                       /* spin_lock_bh(&psta->sleep_q.lock); */
-
-                       list_add_tail(&pxmitframe->list, get_list_head(&psta->sleep_q));
-
-                       psta->sleepq_len++;
-
-                       switch (pattrib->priority) {
-                       case 1:
-                       case 2:
-                               wmmps_ac = psta->uapsd_bk & BIT(0);
-                               break;
-                       case 4:
-                       case 5:
-                               wmmps_ac = psta->uapsd_vi & BIT(0);
-                               break;
-                       case 6:
-                       case 7:
-                               wmmps_ac = psta->uapsd_vo & BIT(0);
-                               break;
-                       case 0:
-                       case 3:
-                       default:
-                               wmmps_ac = psta->uapsd_be & BIT(0);
-                               break;
-                       }
-
-                       if (wmmps_ac)
-                               psta->sleepq_ac_len++;
-
-                       if (((psta->has_legacy_ac) && (!wmmps_ac)) ||
-                          ((!psta->has_legacy_ac) && (wmmps_ac))) {
-                               pstapriv->tim_bitmap |= CHKBIT(psta->aid);
-
-                               if (psta->sleepq_len == 1) {
-                                       /* update BCN for TIM IE */
-                                       update_beacon23a(padapter, WLAN_EID_TIM,
-                                                        NULL, false);
-                               }
-                       }
-
-                       /* spin_unlock_bh(&psta->sleep_q.lock); */
-
-                       /* if (psta->sleepq_len > (NR_XMITFRAME>>3)) */
-                       /*  */
-                       /*      wakeup_sta_to_xmit23a(padapter, psta); */
-                       /*  */
-
-                       ret = true;
-
-               }
-
-       }
-
-       spin_unlock_bh(&psta->sleep_q.lock);
-
-       return ret;
-}
-
-static void
-dequeue_xmitframes_to_sleeping_queue(struct rtw_adapter *padapter,
-                                    struct sta_info *psta,
-                                    struct rtw_queue *pframequeue)
-{
-       int ret;
-       struct list_head *phead;
-       u8 ac_index;
-       struct tx_servq *ptxservq;
-       struct pkt_attrib *pattrib;
-       struct xmit_frame *pxmitframe, *ptmp;
-       struct hw_xmit *phwxmits = padapter->xmitpriv.hwxmits;
-
-       phead = get_list_head(pframequeue);
-       list_for_each_entry_safe(pxmitframe, ptmp, phead, list) {
-               ret = xmitframe_enqueue_for_sleeping_sta23a(padapter, pxmitframe);
-
-               if (ret == true) {
-                       pattrib = &pxmitframe->attrib;
-
-                       ptxservq = rtw_get_sta_pending23a(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
-
-                       ptxservq->qcnt--;
-                       phwxmits[ac_index].accnt--;
-               } else {
-                       /* DBG_8723A("xmitframe_enqueue_for_sleeping_sta23a return false\n"); */
-               }
-       }
-}
-
-void stop_sta_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct sta_info *psta_bmc;
-       struct sta_xmit_priv *pstaxmitpriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       pstaxmitpriv = &psta->sta_xmitpriv;
-
-       /* for BC/MC Frames */
-       psta_bmc = rtw_get_bcmc_stainfo23a(padapter);
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       psta->state |= WIFI_SLEEP_STATE;
-
-       pstapriv->sta_dz_bitmap |= CHKBIT(psta->aid);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vo_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vo_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta, &pstaxmitpriv->vi_q.sta_pending);
-       list_del_init(&pstaxmitpriv->vi_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta,
-                                            &pstaxmitpriv->be_q.sta_pending);
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta,
-                                            &pstaxmitpriv->bk_q.sta_pending);
-       list_del_init(&pstaxmitpriv->bk_q.tx_pending);
-
-       /* for BC/MC Frames */
-       pstaxmitpriv = &psta_bmc->sta_xmitpriv;
-       dequeue_xmitframes_to_sleeping_queue(padapter, psta_bmc,
-                                            &pstaxmitpriv->be_q.sta_pending);
-       list_del_init(&pstaxmitpriv->be_q.tx_pending);
-
-       spin_unlock_bh(&pxmitpriv->lock);
-}
-
-void wakeup_sta_to_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       u8 update_mask = 0, wmmps_ac = 0;
-       struct sta_info *psta_bmc;
-       struct list_head *phead;
-       struct xmit_frame *pxmitframe = NULL, *ptmp;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-       phead = get_list_head(&psta->sleep_q);
-       list_for_each_entry_safe(pxmitframe, ptmp, phead, list) {
-               list_del_init(&pxmitframe->list);
-
-               switch (pxmitframe->attrib.priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               psta->sleepq_len--;
-               if (psta->sleepq_len > 0)
-                       pxmitframe->attrib.mdata = 1;
-               else
-                       pxmitframe->attrib.mdata = 0;
-
-               if (wmmps_ac) {
-                       psta->sleepq_ac_len--;
-                       if (psta->sleepq_ac_len > 0) {
-                               pxmitframe->attrib.mdata = 1;
-                               pxmitframe->attrib.eosp = 0;
-                       } else {
-                               pxmitframe->attrib.mdata = 0;
-                               pxmitframe->attrib.eosp = 1;
-                       }
-               }
-
-               pxmitframe->attrib.triggered = 1;
-               rtl8723au_hal_xmitframe_enqueue(padapter, pxmitframe);
-       }
-
-       if (psta->sleepq_len == 0) {
-               pstapriv->tim_bitmap &= ~CHKBIT(psta->aid);
-
-               /* update BCN for TIM IE */
-               update_mask = BIT(0);
-
-               if (psta->state&WIFI_SLEEP_STATE)
-                       psta->state ^= WIFI_SLEEP_STATE;
-
-               if (psta->state & WIFI_STA_ALIVE_CHK_STATE) {
-                       psta->expire_to = pstapriv->expire_to;
-                       psta->state ^= WIFI_STA_ALIVE_CHK_STATE;
-               }
-
-               pstapriv->sta_dz_bitmap &= ~CHKBIT(psta->aid);
-       }
-       /* spin_unlock_bh(&psta->sleep_q.lock); */
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       /* for BC/MC Frames */
-       psta_bmc = rtw_get_bcmc_stainfo23a(padapter);
-       if (!psta_bmc)
-               return;
-
-       if ((pstapriv->sta_dz_bitmap&0xfffe) == 0x0) {
-               /* no any sta in ps mode */
-               spin_lock_bh(&pxmitpriv->lock);
-               phead = get_list_head(&psta_bmc->sleep_q);
-               list_for_each_entry_safe(pxmitframe, ptmp, phead, list) {
-                       list_del_init(&pxmitframe->list);
-
-                       psta_bmc->sleepq_len--;
-                       if (psta_bmc->sleepq_len > 0)
-                               pxmitframe->attrib.mdata = 1;
-                       else
-                               pxmitframe->attrib.mdata = 0;
-
-                       pxmitframe->attrib.triggered = 1;
-                       rtl8723au_hal_xmitframe_enqueue(padapter, pxmitframe);
-               }
-               if (psta_bmc->sleepq_len == 0) {
-                       pstapriv->tim_bitmap &= ~BIT(0);
-                       pstapriv->sta_dz_bitmap &= ~BIT(0);
-
-                       /* update BCN for TIM IE */
-                       /* update_BCNTIM(padapter); */
-                       update_mask |= BIT(1);
-               }
-               /* spin_unlock_bh(&psta_bmc->sleep_q.lock); */
-               spin_unlock_bh(&pxmitpriv->lock);
-       }
-
-       if (update_mask)
-               update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-}
-
-void xmit_delivery_enabled_frames23a(struct rtw_adapter *padapter,
-                                 struct sta_info *psta)
-{
-       u8 wmmps_ac = 0;
-       struct list_head *phead;
-       struct xmit_frame *pxmitframe, *ptmp;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       /* spin_lock_bh(&psta->sleep_q.lock); */
-       spin_lock_bh(&pxmitpriv->lock);
-       phead = get_list_head(&psta->sleep_q);
-       list_for_each_entry_safe(pxmitframe, ptmp, phead, list) {
-               switch (pxmitframe->attrib.priority) {
-               case 1:
-               case 2:
-                       wmmps_ac = psta->uapsd_bk & BIT(1);
-                       break;
-               case 4:
-               case 5:
-                       wmmps_ac = psta->uapsd_vi & BIT(1);
-                       break;
-               case 6:
-               case 7:
-                       wmmps_ac = psta->uapsd_vo & BIT(1);
-                       break;
-               case 0:
-               case 3:
-               default:
-                       wmmps_ac = psta->uapsd_be & BIT(1);
-                       break;
-               }
-
-               if (!wmmps_ac)
-                       continue;
-
-               list_del_init(&pxmitframe->list);
-
-               psta->sleepq_len--;
-               psta->sleepq_ac_len--;
-
-               if (psta->sleepq_ac_len > 0) {
-                       pxmitframe->attrib.mdata = 1;
-                       pxmitframe->attrib.eosp = 0;
-               } else {
-                       pxmitframe->attrib.mdata = 0;
-                       pxmitframe->attrib.eosp = 1;
-               }
-
-               pxmitframe->attrib.triggered = 1;
-
-               rtl8723au_hal_xmitframe_enqueue(padapter, pxmitframe);
-
-               if ((psta->sleepq_ac_len == 0) && (!psta->has_legacy_ac) &&
-                   (wmmps_ac)) {
-                       pstapriv->tim_bitmap &= ~CHKBIT(psta->aid);
-
-                       /* update BCN for TIM IE */
-                       update_beacon23a(padapter, WLAN_EID_TIM, NULL, false);
-               }
-       }
-       spin_unlock_bh(&pxmitpriv->lock);
-}
-
-#endif
-
-void rtw_sctx_init23a(struct submit_ctx *sctx, int timeout_ms)
-{
-       sctx->timeout_ms = timeout_ms;
-       init_completion(&sctx->done);
-       sctx->status = RTW_SCTX_SUBMITTED;
-}
-
-int rtw_sctx_wait23a(struct submit_ctx *sctx)
-{
-       int ret = _FAIL;
-       unsigned long expire;
-       int status = 0;
-
-       expire = sctx->timeout_ms ? msecs_to_jiffies(sctx->timeout_ms) :
-                MAX_SCHEDULE_TIMEOUT;
-       if (!wait_for_completion_timeout(&sctx->done, expire)) {
-               /* timeout, do something?? */
-               status = RTW_SCTX_DONE_TIMEOUT;
-               DBG_8723A("%s timeout\n", __func__);
-       } else {
-               status = sctx->status;
-       }
-
-       if (status == RTW_SCTX_DONE_SUCCESS)
-               ret = _SUCCESS;
-
-       return ret;
-}
-
-static bool rtw_sctx_chk_waring_status(int status)
-{
-       switch (status) {
-       case RTW_SCTX_DONE_UNKNOWN:
-       case RTW_SCTX_DONE_BUF_ALLOC:
-       case RTW_SCTX_DONE_BUF_FREE:
-       case RTW_SCTX_DONE_DRV_STOP:
-       case RTW_SCTX_DONE_DEV_REMOVE:
-               return true;
-       default:
-               return false;
-       }
-}
-
-void rtw23a_sctx_done_err(struct submit_ctx **sctx, int status)
-{
-       if (*sctx) {
-               if (rtw_sctx_chk_waring_status(status))
-                       DBG_8723A("%s status:%d\n", __func__, status);
-               (*sctx)->status = status;
-               complete(&(*sctx)->done);
-               *sctx = NULL;
-       }
-}
-
-int rtw_ack_tx_wait23a(struct xmit_priv *pxmitpriv, u32 timeout_ms)
-{
-       struct submit_ctx *pack_tx_ops = &pxmitpriv->ack_tx_ops;
-
-       pack_tx_ops->timeout_ms = timeout_ms;
-       pack_tx_ops->status = RTW_SCTX_SUBMITTED;
-
-       return rtw_sctx_wait23a(pack_tx_ops);
-}
-
diff --git a/drivers/staging/rtl8723au/hal/Hal8723PwrSeq.c b/drivers/staging/rtl8723au/hal/Hal8723PwrSeq.c
deleted file mode 100644 (file)
index 747f86c..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#include "Hal8723PwrSeq.h"
-
-/*
-    drivers should parse below arrays and do the corresponding actions
-*/
-/* 3 Power on  Array */
-struct wlan_pwr_cfg rtl8723AU_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_CARDEMU_TO_ACT
-       RTL8723A_TRANS_END
-};
-
-/* 3 Radio off GPIO Array */
-struct wlan_pwr_cfg rtl8723AU_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_ACT_TO_CARDEMU
-       RTL8723A_TRANS_END
-};
-
-/* 3 Card Disable Array */
-struct wlan_pwr_cfg rtl8723AU_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_ACT_TO_CARDEMU
-       RTL8723A_TRANS_CARDEMU_TO_CARDDIS
-       RTL8723A_TRANS_END
-};
-
-/* 3 Card Enable Array */
-struct wlan_pwr_cfg rtl8723AU_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_CARDDIS_TO_CARDEMU
-       RTL8723A_TRANS_CARDEMU_TO_ACT
-       RTL8723A_TRANS_END
-};
-
-/* 3 Suspend Array */
-struct wlan_pwr_cfg rtl8723AU_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_ACT_TO_CARDEMU
-       RTL8723A_TRANS_CARDEMU_TO_SUS
-       RTL8723A_TRANS_END
-};
-
-/* 3 Resume Array */
-struct wlan_pwr_cfg rtl8723AU_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_SUS_TO_CARDEMU
-       RTL8723A_TRANS_CARDEMU_TO_ACT
-       RTL8723A_TRANS_END
-};
-
-/* 3 HWPDN Array */
-struct wlan_pwr_cfg rtl8723AU_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       RTL8723A_TRANS_ACT_TO_CARDEMU
-       RTL8723A_TRANS_CARDEMU_TO_PDN
-       RTL8723A_TRANS_END
-};
-
-/* 3 Enter LPS */
-struct wlan_pwr_cfg rtl8723AU_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       /* FW behavior */
-       RTL8723A_TRANS_ACT_TO_LPS
-       RTL8723A_TRANS_END
-};
-
-/* 3 Leave LPS */
-struct wlan_pwr_cfg rtl8723AU_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS] = {
-       /* FW behavior */
-       RTL8723A_TRANS_LPS_TO_ACT
-       RTL8723A_TRANS_END
-};
diff --git a/drivers/staging/rtl8723au/hal/Hal8723UHWImg_CE.c b/drivers/staging/rtl8723au/hal/Hal8723UHWImg_CE.c
deleted file mode 100644 (file)
index 56833da..0000000
+++ /dev/null
@@ -1,136 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-/*Created on  2013/01/14, 15:51*/
-#include "odm_precomp.h"
-
-u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength] = {
-       0xe00, 0xffffffff, 0x0a0c0c0c,
-       0xe04, 0xffffffff, 0x02040608,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x0a0c0d0e,
-       0xe14, 0xffffffff, 0x02040608,
-       0xe18, 0xffffffff, 0x0a0c0d0e,
-       0xe1c, 0xffffffff, 0x02040608,
-       0x830, 0xffffffff, 0x0a0c0c0c,
-       0x834, 0xffffffff, 0x02040608,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x0a0c0d0e,
-       0x848, 0xffffffff, 0x02040608,
-       0x84c, 0xffffffff, 0x0a0c0d0e,
-       0x868, 0xffffffff, 0x02040608,
-       0xe00, 0xffffffff, 0x00000000,
-       0xe04, 0xffffffff, 0x00000000,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x00000000,
-       0xe14, 0xffffffff, 0x00000000,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x00000000,
-       0x834, 0xffffffff, 0x00000000,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x00000000,
-       0x848, 0xffffffff, 0x00000000,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       0xe00, 0xffffffff, 0x04040404,
-       0xe04, 0xffffffff, 0x00020204,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x06060606,
-       0xe14, 0xffffffff, 0x00020406,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x04040404,
-       0x834, 0xffffffff, 0x00020204,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x06060606,
-       0x848, 0xffffffff, 0x00020406,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       0xe00, 0xffffffff, 0x00000000,
-       0xe04, 0xffffffff, 0x00000000,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x00000000,
-       0xe14, 0xffffffff, 0x00000000,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x00000000,
-       0x834, 0xffffffff, 0x00000000,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x00000000,
-       0x848, 0xffffffff, 0x00000000,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       0xe00, 0xffffffff, 0x00000000,
-       0xe04, 0xffffffff, 0x00000000,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x00000000,
-       0xe14, 0xffffffff, 0x00000000,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x00000000,
-       0x834, 0xffffffff, 0x00000000,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x00000000,
-       0x848, 0xffffffff, 0x00000000,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       0xe00, 0xffffffff, 0x04040404,
-       0xe04, 0xffffffff, 0x00020204,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x00000000,
-       0xe14, 0xffffffff, 0x00000000,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x04040404,
-       0x834, 0xffffffff, 0x00020204,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x00000000,
-       0x848, 0xffffffff, 0x00000000,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       0xe00, 0xffffffff, 0x00000000,
-       0xe04, 0xffffffff, 0x00000000,
-       0xe08, 0x0000ff00, 0x00000000,
-       0x86c, 0xffffff00, 0x00000000,
-       0xe10, 0xffffffff, 0x00000000,
-       0xe14, 0xffffffff, 0x00000000,
-       0xe18, 0xffffffff, 0x00000000,
-       0xe1c, 0xffffffff, 0x00000000,
-       0x830, 0xffffffff, 0x00000000,
-       0x834, 0xffffffff, 0x00000000,
-       0x838, 0xffffff00, 0x00000000,
-       0x86c, 0x000000ff, 0x00000000,
-       0x83c, 0xffffffff, 0x00000000,
-       0x848, 0xffffffff, 0x00000000,
-       0x84c, 0xffffffff, 0x00000000,
-       0x868, 0xffffffff, 0x00000000,
-       };
-
-u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength] = {
-       0x0,
-};
diff --git a/drivers/staging/rtl8723au/hal/HalDMOutSrc8723A_CE.c b/drivers/staging/rtl8723au/hal/HalDMOutSrc8723A_CE.c
deleted file mode 100644 (file)
index 3f9ec9e..0000000
+++ /dev/null
@@ -1,1097 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/*  Description: */
-/*  This file is for 92CE/92CU dynamic mechanism only */
-
-/*  include files */
-
-#include "odm_precomp.h"
-#include <usb_ops_linux.h>
-
-#define                DPK_DELTA_MAPPING_NUM   13
-#define                index_mapping_HP_NUM    15
-/* 091212 chiyokolin */
-static void
-odm_TXPowerTrackingCallback_ThermalMeter_92C(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       u8 ThermalValue = 0, delta, delta_LCK, delta_IQK, delta_HP;
-       int ele_A, ele_D, TempCCk, X, value32;
-       int Y, ele_C;
-       s8 OFDM_index[2], CCK_index = 0, OFDM_index_old[2] = {0};
-       s8 CCK_index_old = 0;
-       int i = 0;
-       u8 OFDM_min_index = 6, rf; /* OFDM BB Swing should be less than +3.0dB*/
-       u8 ThermalValue_HP_count = 0;
-       u32 ThermalValue_HP = 0;
-       s32 index_mapping_HP[index_mapping_HP_NUM] = {
-               0, 1, 3, 4, 6,
-               7, 9, 10, 12, 13,
-               15, 16, 18, 19, 21
-       };
-       s8 index_HP;
-
-       pdmpriv->TXPowerTrackingCallbackCnt++;  /* cosa add for debug */
-       pdmpriv->bTXPowerTrackingInit = true;
-
-       if (pHalData->CurrentChannel == 14 && !pdmpriv->bCCKinCH14)
-               pdmpriv->bCCKinCH14 = true;
-       else if (pHalData->CurrentChannel != 14 && pdmpriv->bCCKinCH14)
-               pdmpriv->bCCKinCH14 = false;
-
-       ThermalValue = (u8)PHY_QueryRFReg(Adapter, RF_PATH_A, RF_T_METER,
-                                         0x1f);/*  0x24: RF Reg[4:0]    */
-
-       rtl8723a_phy_ap_calibrate(Adapter, (ThermalValue -
-                                 pHalData->EEPROMThermalMeter));
-
-       if (pHalData->rf_type == RF_2T2R)
-               rf = 2;
-       else
-               rf = 1;
-
-       if (ThermalValue) {
-               /* Query OFDM path A default setting     */
-               ele_D = rtl8723au_read32(Adapter, rOFDM0_XATxIQImbalance) &
-                       bMaskOFDM_D;
-               for (i = 0; i < OFDM_TABLE_SIZE_92C; i++) {
-                       /* find the index */
-                       if (ele_D == (OFDMSwingTable23A[i]&bMaskOFDM_D)) {
-                               OFDM_index_old[0] = (u8)i;
-                               break;
-                       }
-               }
-
-               /* Query OFDM path B default setting  */
-               if (pHalData->rf_type == RF_2T2R) {
-                       ele_D = rtl8723au_read32(Adapter,
-                                                rOFDM0_XBTxIQImbalance);
-                       ele_D &= bMaskOFDM_D;
-                       for (i = 0; i < OFDM_TABLE_SIZE_92C; i++) {     /* find the index  */
-                               if (ele_D == (OFDMSwingTable23A[i]&bMaskOFDM_D)) {
-                                       OFDM_index_old[1] = (u8)i;
-                                       break;
-                               }
-                       }
-               }
-
-               /* Query CCK default setting From 0xa24 */
-               TempCCk = rtl8723au_read32(Adapter, rCCK0_TxFilter2) & bMaskCCK;
-               for (i = 0 ; i < CCK_TABLE_SIZE ; i++) {
-                       if (pdmpriv->bCCKinCH14) {
-                               if (!memcmp(&TempCCk,
-                                           &CCKSwingTable_Ch1423A[i][2], 4)) {
-                                       CCK_index_old = (u8)i;
-                                       break;
-                               }
-                       } else {
-                               if (!memcmp(&TempCCk,
-                                           &CCKSwingTable_Ch1_Ch1323A[i][2], 4)) {
-                                       CCK_index_old = (u8)i;
-                                       break;
-                               }
-                       }
-               }
-
-               if (!pdmpriv->ThermalValue) {
-                       pdmpriv->ThermalValue = pHalData->EEPROMThermalMeter;
-                       pdmpriv->ThermalValue_LCK = ThermalValue;
-                       pdmpriv->ThermalValue_IQK = ThermalValue;
-                       pdmpriv->ThermalValue_DPK = pHalData->EEPROMThermalMeter;
-
-                       for (i = 0; i < rf; i++) {
-                               pdmpriv->OFDM_index_HP[i] = OFDM_index_old[i];
-                               pdmpriv->OFDM_index[i] = OFDM_index_old[i];
-                       }
-                       pdmpriv->CCK_index_HP = CCK_index_old;
-                       pdmpriv->CCK_index = CCK_index_old;
-               }
-
-               if (pHalData->BoardType == BOARD_USB_High_PA) {
-                       pdmpriv->ThermalValue_HP[pdmpriv->ThermalValue_HP_index] = ThermalValue;
-                       pdmpriv->ThermalValue_HP_index++;
-                       if (pdmpriv->ThermalValue_HP_index == HP_THERMAL_NUM)
-                               pdmpriv->ThermalValue_HP_index = 0;
-
-                       for (i = 0; i < HP_THERMAL_NUM; i++) {
-                               if (pdmpriv->ThermalValue_HP[i]) {
-                                       ThermalValue_HP += pdmpriv->ThermalValue_HP[i];
-                                       ThermalValue_HP_count++;
-                               }
-                       }
-
-                       if (ThermalValue_HP_count)
-                               ThermalValue = (u8)(ThermalValue_HP / ThermalValue_HP_count);
-               }
-
-               delta = (ThermalValue > pdmpriv->ThermalValue) ?
-                       (ThermalValue - pdmpriv->ThermalValue) :
-                       (pdmpriv->ThermalValue - ThermalValue);
-               if (pHalData->BoardType == BOARD_USB_High_PA) {
-                       if (pdmpriv->bDoneTxpower)
-                               delta_HP = (ThermalValue > pdmpriv->ThermalValue) ?
-                                          (ThermalValue - pdmpriv->ThermalValue) :
-                                          (pdmpriv->ThermalValue - ThermalValue);
-                       else
-                               delta_HP = ThermalValue > pHalData->EEPROMThermalMeter ?
-                                          (ThermalValue - pHalData->EEPROMThermalMeter) :
-                                          (pHalData->EEPROMThermalMeter - ThermalValue);
-               } else {
-                       delta_HP = 0;
-               }
-               delta_LCK = (ThermalValue > pdmpriv->ThermalValue_LCK) ?
-                           (ThermalValue - pdmpriv->ThermalValue_LCK) :
-                           (pdmpriv->ThermalValue_LCK - ThermalValue);
-               delta_IQK = (ThermalValue > pdmpriv->ThermalValue_IQK) ?
-                           (ThermalValue - pdmpriv->ThermalValue_IQK) :
-                           (pdmpriv->ThermalValue_IQK - ThermalValue);
-
-               if (delta_LCK > 1) {
-                       pdmpriv->ThermalValue_LCK = ThermalValue;
-                       rtl8723a_phy_lc_calibrate(Adapter);
-               }
-
-               if ((delta > 0 || delta_HP > 0) && pdmpriv->TxPowerTrackControl) {
-                       if (pHalData->BoardType == BOARD_USB_High_PA) {
-                               pdmpriv->bDoneTxpower = true;
-                               delta_HP = ThermalValue > pHalData->EEPROMThermalMeter ?
-                                          (ThermalValue - pHalData->EEPROMThermalMeter) :
-                                          (pHalData->EEPROMThermalMeter - ThermalValue);
-
-                               if (delta_HP > index_mapping_HP_NUM-1)
-                                       index_HP = index_mapping_HP[index_mapping_HP_NUM-1];
-                               else
-                                       index_HP = index_mapping_HP[delta_HP];
-
-                               if (ThermalValue > pHalData->EEPROMThermalMeter) {
-                                       /* set larger Tx power */
-                                       for (i = 0; i < rf; i++)
-                                               OFDM_index[i] = pdmpriv->OFDM_index_HP[i] - index_HP;
-                                       CCK_index = pdmpriv->CCK_index_HP - index_HP;
-                               } else {
-                                       for (i = 0; i < rf; i++)
-                                               OFDM_index[i] = pdmpriv->OFDM_index_HP[i] + index_HP;
-                                       CCK_index = pdmpriv->CCK_index_HP + index_HP;
-                               }
-
-                               delta_HP = (ThermalValue > pdmpriv->ThermalValue) ?
-                                          (ThermalValue - pdmpriv->ThermalValue) :
-                                          (pdmpriv->ThermalValue - ThermalValue);
-                       } else {
-                               if (ThermalValue > pdmpriv->ThermalValue) {
-                                       for (i = 0; i < rf; i++)
-                                               pdmpriv->OFDM_index[i] -= delta;
-                                       pdmpriv->CCK_index -= delta;
-                               } else {
-                                       for (i = 0; i < rf; i++)
-                                               pdmpriv->OFDM_index[i] += delta;
-                                       pdmpriv->CCK_index += delta;
-                               }
-                       }
-
-                       /* no adjust */
-                       if (pHalData->BoardType != BOARD_USB_High_PA) {
-                               if (ThermalValue > pHalData->EEPROMThermalMeter) {
-                                       for (i = 0; i < rf; i++)
-                                               OFDM_index[i] = pdmpriv->OFDM_index[i]+1;
-                                       CCK_index = pdmpriv->CCK_index+1;
-                               } else {
-                                       for (i = 0; i < rf; i++)
-                                               OFDM_index[i] = pdmpriv->OFDM_index[i];
-                                       CCK_index = pdmpriv->CCK_index;
-                               }
-                       }
-                       for (i = 0; i < rf; i++) {
-                               if (OFDM_index[i] > (OFDM_TABLE_SIZE_92C-1))
-                                       OFDM_index[i] = (OFDM_TABLE_SIZE_92C-1);
-                               else if (OFDM_index[i] < OFDM_min_index)
-                                       OFDM_index[i] = OFDM_min_index;
-                       }
-
-                       if (CCK_index > (CCK_TABLE_SIZE-1))
-                               CCK_index = CCK_TABLE_SIZE-1;
-                       else if (CCK_index < 0)
-                               CCK_index = 0;
-               }
-
-               if (pdmpriv->TxPowerTrackControl &&
-                   (delta != 0 || delta_HP != 0)) {
-                       /* Adujst OFDM Ant_A according to IQK result */
-                       ele_D = (OFDMSwingTable23A[OFDM_index[0]] & 0xFFC00000)>>22;
-                       X = pdmpriv->RegE94;
-                       Y = pdmpriv->RegE9C;
-
-                       if (X != 0) {
-                               if ((X & 0x00000200) != 0)
-                                       X = X | 0xFFFFFC00;
-                               ele_A = ((X * ele_D)>>8)&0x000003FF;
-
-                               /* new element C = element D x Y */
-                               if ((Y & 0x00000200) != 0)
-                                       Y = Y | 0xFFFFFC00;
-                               ele_C = ((Y * ele_D)>>8)&0x000003FF;
-
-                               /* write new elements A, C, D to regC80 and regC94, element B is always 0 */
-                               value32 = (ele_D<<22)|((ele_C&0x3F)<<16)|ele_A;
-                               rtl8723au_write32(Adapter,
-                                                 rOFDM0_XATxIQImbalance,
-                                                 value32);
-
-                               value32 = (ele_C&0x000003C0)>>6;
-                               PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE, bMaskH4Bits, value32);
-
-                               value32 = ((X * ele_D)>>7)&0x01;
-                               PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold,
-                                            BIT(31), value32);
-
-                               value32 = ((Y * ele_D)>>7)&0x01;
-                               PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold,
-                                            BIT(29), value32);
-                       } else {
-                               rtl8723au_write32(Adapter,
-                                                 rOFDM0_XATxIQImbalance,
-                                                 OFDMSwingTable23A[OFDM_index[0]]);
-                               PHY_SetBBReg(Adapter, rOFDM0_XCTxAFE,
-                                            bMaskH4Bits, 0x00);
-                               PHY_SetBBReg(Adapter, rOFDM0_ECCAThreshold,
-                                            BIT(31) | BIT(29), 0x00);
-                       }
-
-                       /* Adjust CCK according to IQK result */
-                       if (!pdmpriv->bCCKinCH14) {
-                               rtl8723au_write8(Adapter, 0xa22, CCKSwingTable_Ch1_Ch1323A[CCK_index][0]);
-                               rtl8723au_write8(Adapter, 0xa23, CCKSwingTable_Ch1_Ch1323A[CCK_index][1]);
-                               rtl8723au_write8(Adapter, 0xa24, CCKSwingTable_Ch1_Ch1323A[CCK_index][2]);
-                               rtl8723au_write8(Adapter, 0xa25, CCKSwingTable_Ch1_Ch1323A[CCK_index][3]);
-                               rtl8723au_write8(Adapter, 0xa26, CCKSwingTable_Ch1_Ch1323A[CCK_index][4]);
-                               rtl8723au_write8(Adapter, 0xa27, CCKSwingTable_Ch1_Ch1323A[CCK_index][5]);
-                               rtl8723au_write8(Adapter, 0xa28, CCKSwingTable_Ch1_Ch1323A[CCK_index][6]);
-                               rtl8723au_write8(Adapter, 0xa29, CCKSwingTable_Ch1_Ch1323A[CCK_index][7]);
-                       } else {
-                               rtl8723au_write8(Adapter, 0xa22, CCKSwingTable_Ch1423A[CCK_index][0]);
-                               rtl8723au_write8(Adapter, 0xa23, CCKSwingTable_Ch1423A[CCK_index][1]);
-                               rtl8723au_write8(Adapter, 0xa24, CCKSwingTable_Ch1423A[CCK_index][2]);
-                               rtl8723au_write8(Adapter, 0xa25, CCKSwingTable_Ch1423A[CCK_index][3]);
-                               rtl8723au_write8(Adapter, 0xa26, CCKSwingTable_Ch1423A[CCK_index][4]);
-                               rtl8723au_write8(Adapter, 0xa27, CCKSwingTable_Ch1423A[CCK_index][5]);
-                               rtl8723au_write8(Adapter, 0xa28, CCKSwingTable_Ch1423A[CCK_index][6]);
-                               rtl8723au_write8(Adapter, 0xa29, CCKSwingTable_Ch1423A[CCK_index][7]);
-                       }
-
-                       if (pHalData->rf_type == RF_2T2R) {
-                               ele_D = (OFDMSwingTable23A[(u8)OFDM_index[1]] & 0xFFC00000)>>22;
-
-                               /* new element A = element D x X */
-                               X = pdmpriv->RegEB4;
-                               Y = pdmpriv->RegEBC;
-
-                               if (X != 0) {
-                                       if ((X & 0x00000200) != 0)      /* consider minus */
-                                               X = X | 0xFFFFFC00;
-                                       ele_A = ((X * ele_D)>>8)&0x000003FF;
-
-                                       /* new element C = element D x Y */
-                                       if ((Y & 0x00000200) != 0)
-                                               Y = Y | 0xFFFFFC00;
-                                       ele_C = ((Y * ele_D)>>8)&0x00003FF;
-
-                                       /* write new elements A, C, D to regC88 and regC9C, element B is always 0 */
-                                       value32 = (ele_D<<22)|((ele_C&0x3F)<<16) | ele_A;
-                                       rtl8723au_write32(Adapter, rOFDM0_XBTxIQImbalance, value32);
-
-                                       value32 = (ele_C&0x000003C0)>>6;
-                                       PHY_SetBBReg(Adapter, rOFDM0_XDTxAFE, bMaskH4Bits, value32);
-
-                                       value32 = ((X * ele_D)>>7)&0x01;
-                                       PHY_SetBBReg(Adapter,
-                                                    rOFDM0_ECCAThreshold,
-                                                    BIT(27), value32);
-
-                                       value32 = ((Y * ele_D)>>7)&0x01;
-                                       PHY_SetBBReg(Adapter,
-                                                    rOFDM0_ECCAThreshold,
-                                                    BIT(25), value32);
-                               } else {
-                                       rtl8723au_write32(Adapter,
-                                                         rOFDM0_XBTxIQImbalance,
-                                                         OFDMSwingTable23A[OFDM_index[1]]);
-                                       PHY_SetBBReg(Adapter,
-                                                    rOFDM0_XDTxAFE,
-                                                    bMaskH4Bits, 0x00);
-                                       PHY_SetBBReg(Adapter,
-                                                    rOFDM0_ECCAThreshold,
-                                                    BIT(27) | BIT(25), 0x00);
-                               }
-                       }
-
-               }
-               if (delta_IQK > 3) {
-                       pdmpriv->ThermalValue_IQK = ThermalValue;
-                       rtl8723a_phy_iq_calibrate(Adapter, false);
-               }
-
-               /* update thermal meter value */
-               if (pdmpriv->TxPowerTrackControl)
-                       pdmpriv->ThermalValue = ThermalValue;
-       }
-       pdmpriv->TXPowercount = 0;
-}
-
-/*     Description: */
-/*             - Dispatch TxPower Tracking direct call ONLY for 92s. */
-/*             - We shall NOT schedule Workitem within PASSIVE LEVEL, which will cause system resource */
-/*                leakage under some platform. */
-/*     Assumption: */
-/*             PASSIVE_LEVEL when this routine is called. */
-static void ODM_TXPowerTracking92CDirectCall(struct rtw_adapter *Adapter)
-{
-       odm_TXPowerTrackingCallback_ThermalMeter_92C(Adapter);
-}
-
-void rtl8723a_odm_check_tx_power_tracking(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-       if (!pdmpriv->TM_Trigger) {             /* at least delay 1 sec */
-               PHY_SetRFReg(Adapter, RF_PATH_A, RF_T_METER, bRFRegOffsetMask, 0x60);
-
-               pdmpriv->TM_Trigger = 1;
-               return;
-       } else {
-               ODM_TXPowerTracking92CDirectCall(Adapter);
-               pdmpriv->TM_Trigger = 0;
-       }
-}
-
-/*     IQK */
-#define MAX_TOLERANCE          5
-#define IQK_DELAY_TIME         1       /* ms */
-
-static u8 _PHY_PathA_IQK(struct rtw_adapter *pAdapter, bool configPathB)
-{
-       u32 regEAC, regE94, regE9C, regEA4;
-       u8 result = 0x00;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-
-       /* path-A IQK setting */
-       rtl8723au_write32(pAdapter, rTx_IQK_Tone_A, 0x10008c1f);
-       rtl8723au_write32(pAdapter, rRx_IQK_Tone_A, 0x10008c1f);
-       rtl8723au_write32(pAdapter, rTx_IQK_PI_A, 0x82140102);
-
-       rtl8723au_write32(pAdapter, rRx_IQK_PI_A, configPathB ? 0x28160202 :
-               IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID)?0x28160202:0x28160502);
-
-       /* path-B IQK setting */
-       if (configPathB) {
-               rtl8723au_write32(pAdapter, rTx_IQK_Tone_B, 0x10008c22);
-               rtl8723au_write32(pAdapter, rRx_IQK_Tone_B, 0x10008c22);
-               rtl8723au_write32(pAdapter, rTx_IQK_PI_B, 0x82140102);
-               rtl8723au_write32(pAdapter, rRx_IQK_PI_B, 0x28160202);
-       }
-
-       /* LO calibration setting */
-       rtl8723au_write32(pAdapter, rIQK_AGC_Rsp, 0x001028d1);
-
-       /* One shot, path A LOK & IQK */
-       rtl8723au_write32(pAdapter, rIQK_AGC_Pts, 0xf9000000);
-       rtl8723au_write32(pAdapter, rIQK_AGC_Pts, 0xf8000000);
-
-       /*  delay x ms */
-       /* PlatformStallExecution(IQK_DELAY_TIME*1000); */
-       udelay(IQK_DELAY_TIME*1000);
-
-       /*  Check failed */
-       regEAC = rtl8723au_read32(pAdapter, rRx_Power_After_IQK_A_2);
-       regE94 = rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_A);
-       regE9C = rtl8723au_read32(pAdapter, rTx_Power_After_IQK_A);
-       regEA4 = rtl8723au_read32(pAdapter, rRx_Power_Before_IQK_A_2);
-
-       if (!(regEAC & BIT(28)) &&
-           (((regE94 & 0x03FF0000)>>16) != 0x142) &&
-           (((regE9C & 0x03FF0000)>>16) != 0x42))
-               result |= 0x01;
-       else                    /* if Tx not OK, ignore Rx */
-               return result;
-
-       if (!(regEAC & BIT(27)) && /* if Tx is OK, check whether Rx is OK */
-           (((regEA4 & 0x03FF0000)>>16) != 0x132) &&
-           (((regEAC & 0x03FF0000)>>16) != 0x36))
-               result |= 0x02;
-       else
-               DBG_8723A("Path A Rx IQK fail!!\n");
-       return result;
-}
-
-static u8 _PHY_PathB_IQK(struct rtw_adapter *pAdapter)
-{
-       u32 regEAC, regEB4, regEBC, regEC4, regECC;
-       u8 result = 0x00;
-
-       /* One shot, path B LOK & IQK */
-       rtl8723au_write32(pAdapter, rIQK_AGC_Cont, 0x00000002);
-       rtl8723au_write32(pAdapter, rIQK_AGC_Cont, 0x00000000);
-
-       /*  delay x ms */
-       udelay(IQK_DELAY_TIME*1000);
-
-       /*  Check failed */
-       regEAC = rtl8723au_read32(pAdapter, rRx_Power_After_IQK_A_2);
-       regEB4 = rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_B);
-       regEBC = rtl8723au_read32(pAdapter, rTx_Power_After_IQK_B);
-       regEC4 = rtl8723au_read32(pAdapter, rRx_Power_Before_IQK_B_2);
-       regECC = rtl8723au_read32(pAdapter, rRx_Power_After_IQK_B_2);
-
-       if (!(regEAC & BIT(31)) &&
-           (((regEB4 & 0x03FF0000)>>16) != 0x142) &&
-           (((regEBC & 0x03FF0000)>>16) != 0x42))
-               result |= 0x01;
-       else
-               return result;
-
-       if (!(regEAC & BIT(30)) &&
-           (((regEC4 & 0x03FF0000)>>16) != 0x132) &&
-           (((regECC & 0x03FF0000)>>16) != 0x36))
-               result |= 0x02;
-       else
-               DBG_8723A("Path B Rx IQK fail!!\n");
-       return result;
-}
-
-static void _PHY_PathAFillIQKMatrix(struct rtw_adapter *pAdapter,
-       bool bIQKOK,
-       int result[][8],
-       u8 final_candidate,
-       bool bTxOnly
-       )
-{
-       u32 Oldval_0, X, TX0_A, reg;
-       s32 Y, TX0_C;
-
-       DBG_8723A("Path A IQ Calibration %s !\n", (bIQKOK)?"Success":"Failed");
-
-       if (final_candidate == 0xFF) {
-               return;
-       } else if (bIQKOK) {
-               Oldval_0 = rtl8723au_read32(pAdapter, rOFDM0_XATxIQImbalance);
-               Oldval_0 = (Oldval_0 >> 22) & 0x3FF;
-
-               X = result[final_candidate][0];
-               if ((X & 0x00000200) != 0)
-                       X = X | 0xFFFFFC00;
-               TX0_A = (X * Oldval_0) >> 8;
-               PHY_SetBBReg(pAdapter, rOFDM0_XATxIQImbalance, 0x3FF, TX0_A);
-               PHY_SetBBReg(pAdapter, rOFDM0_ECCAThreshold, BIT(31),
-                            ((X * Oldval_0>>7) & 0x1));
-
-               Y = result[final_candidate][1];
-               if ((Y & 0x00000200) != 0)
-                       Y = Y | 0xFFFFFC00;
-               TX0_C = (Y * Oldval_0) >> 8;
-               PHY_SetBBReg(pAdapter, rOFDM0_XCTxAFE, 0xF0000000,
-                            ((TX0_C&0x3C0)>>6));
-               PHY_SetBBReg(pAdapter, rOFDM0_XATxIQImbalance, 0x003F0000,
-                            (TX0_C&0x3F));
-               PHY_SetBBReg(pAdapter, rOFDM0_ECCAThreshold, BIT(29),
-                            ((Y * Oldval_0>>7) & 0x1));
-
-               if (bTxOnly) {
-                       DBG_8723A("_PHY_PathAFillIQKMatrix only Tx OK\n");
-                       return;
-               }
-
-               reg = result[final_candidate][2];
-               PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0x3FF, reg);
-
-               reg = result[final_candidate][3] & 0x3F;
-               PHY_SetBBReg(pAdapter, rOFDM0_XARxIQImbalance, 0xFC00, reg);
-
-               reg = (result[final_candidate][3] >> 6) & 0xF;
-               PHY_SetBBReg(pAdapter, rOFDM0_RxIQExtAnta, 0xF0000000, reg);
-       }
-}
-
-static void _PHY_PathBFillIQKMatrix(struct rtw_adapter *pAdapter, bool bIQKOK, int result[][8], u8 final_candidate, bool bTxOnly)
-{
-       u32 Oldval_1, X, TX1_A, reg;
-       s32 Y, TX1_C;
-
-       DBG_8723A("Path B IQ Calibration %s !\n", (bIQKOK)?"Success":"Failed");
-
-       if (final_candidate == 0xFF) {
-               return;
-       } else if (bIQKOK) {
-               Oldval_1 = rtl8723au_read32(pAdapter, rOFDM0_XBTxIQImbalance);
-               Oldval_1 = (Oldval_1 >> 22) & 0x3FF;
-
-               X = result[final_candidate][4];
-               if ((X & 0x00000200) != 0)
-                       X = X | 0xFFFFFC00;
-               TX1_A = (X * Oldval_1) >> 8;
-               PHY_SetBBReg(pAdapter, rOFDM0_XBTxIQImbalance, 0x3FF, TX1_A);
-               PHY_SetBBReg(pAdapter, rOFDM0_ECCAThreshold, BIT(27),
-                            ((X * Oldval_1 >> 7) & 0x1));
-
-               Y = result[final_candidate][5];
-               if ((Y & 0x00000200) != 0)
-                       Y = Y | 0xFFFFFC00;
-               TX1_C = (Y * Oldval_1) >> 8;
-               PHY_SetBBReg(pAdapter, rOFDM0_XDTxAFE, 0xF0000000,
-                            ((TX1_C & 0x3C0) >> 6));
-               PHY_SetBBReg(pAdapter, rOFDM0_XBTxIQImbalance, 0x003F0000,
-                            (TX1_C & 0x3F));
-               PHY_SetBBReg(pAdapter, rOFDM0_ECCAThreshold, BIT(25),
-                            ((Y * Oldval_1 >> 7) & 0x1));
-
-               if (bTxOnly)
-                       return;
-
-               reg = result[final_candidate][6];
-               PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0x3FF, reg);
-
-               reg = result[final_candidate][7] & 0x3F;
-               PHY_SetBBReg(pAdapter, rOFDM0_XBRxIQImbalance, 0xFC00, reg);
-
-               reg = (result[final_candidate][7] >> 6) & 0xF;
-               PHY_SetBBReg(pAdapter, rOFDM0_AGCRSSITable, 0x0000F000, reg);
-       }
-}
-
-static void _PHY_SaveADDARegisters(struct rtw_adapter *pAdapter, u32 *ADDAReg, u32 *ADDABackup, u32 RegisterNum)
-{
-       u32 i;
-
-       for (i = 0 ; i < RegisterNum ; i++) {
-               ADDABackup[i] = rtl8723au_read32(pAdapter, ADDAReg[i]);
-       }
-}
-
-static void _PHY_SaveMACRegisters(struct rtw_adapter *pAdapter, u32 *MACReg,
-                                 u32 *MACBackup)
-{
-       u32 i;
-
-       for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++) {
-               MACBackup[i] = rtl8723au_read8(pAdapter, MACReg[i]);
-       }
-       MACBackup[i] = rtl8723au_read32(pAdapter, MACReg[i]);
-}
-
-static void _PHY_ReloadADDARegisters(struct rtw_adapter *pAdapter,
-                                    u32 *ADDAReg, u32 *ADDABackup,
-                                    u32 RegiesterNum)
-{
-       u32 i;
-
-       for (i = 0 ; i < RegiesterNum ; i++) {
-               rtl8723au_write32(pAdapter, ADDAReg[i], ADDABackup[i]);
-       }
-}
-
-static void _PHY_ReloadMACRegisters(struct rtw_adapter *pAdapter,
-                                   u32 *MACReg, u32 *MACBackup)
-{
-       u32 i;
-
-       for (i = 0 ; i < (IQK_MAC_REG_NUM - 1); i++)
-               rtl8723au_write8(pAdapter, MACReg[i], (u8)MACBackup[i]);
-
-       rtl8723au_write32(pAdapter, MACReg[i], MACBackup[i]);
-}
-
-static void _PHY_PathADDAOn(struct rtw_adapter *pAdapter, u32 *ADDAReg,
-                           bool isPathAOn, bool is2T)
-{
-       u32 pathOn;
-       u32 i;
-
-       pathOn = isPathAOn ? 0x04db25a4 : 0x0b1b25a4;
-       if (!is2T) {
-               pathOn = 0x0bdb25a0;
-               rtl8723au_write32(pAdapter, ADDAReg[0], 0x0b1b25a0);
-       } else {
-               rtl8723au_write32(pAdapter, ADDAReg[0], pathOn);
-       }
-
-       for (i = 1 ; i < IQK_ADDA_REG_NUM ; i++)
-               rtl8723au_write32(pAdapter, ADDAReg[i], pathOn);
-}
-
-static void _PHY_MACSettingCalibration(struct rtw_adapter *pAdapter,
-                                      u32 *MACReg, u32 *MACBackup)
-{
-       u32 i = 0;
-
-       rtl8723au_write8(pAdapter, MACReg[i], 0x3F);
-
-       for (i = 1 ; i < (IQK_MAC_REG_NUM - 1); i++) {
-               rtl8723au_write8(pAdapter, MACReg[i],
-                                (u8)(MACBackup[i] & ~BIT(3)));
-       }
-       rtl8723au_write8(pAdapter, MACReg[i], (u8)(MACBackup[i] & ~BIT(5)));
-}
-
-static void _PHY_PathAStandBy(struct rtw_adapter *pAdapter)
-{
-       rtl8723au_write32(pAdapter, rFPGA0_IQK, 0x0);
-       rtl8723au_write32(pAdapter, 0x840, 0x00010000);
-       rtl8723au_write32(pAdapter, rFPGA0_IQK, 0x80800000);
-}
-
-static void _PHY_PIModeSwitch(struct rtw_adapter *pAdapter, bool PIMode)
-{
-       u32 mode;
-
-       mode = PIMode ? 0x01000100 : 0x01000000;
-       rtl8723au_write32(pAdapter, 0x820, mode);
-       rtl8723au_write32(pAdapter, 0x828, mode);
-}
-
-/*
-return false => do IQK again
-*/
-static bool _PHY_SimularityCompare(struct rtw_adapter *pAdapter, int result[][8], u8 c1, u8 c2)
-{
-       u32 i, j, diff, SimularityBitMap, bound = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       u8 final_candidate[2] = {0xFF, 0xFF};   /* for path A and path B */
-       bool bResult = true;
-
-       if (pHalData->rf_type == RF_2T2R)
-               bound = 8;
-       else
-               bound = 4;
-
-       SimularityBitMap = 0;
-
-       for (i = 0; i < bound; i++) {
-               diff = (result[c1][i] > result[c2][i]) ? (result[c1][i] - result[c2][i]) : (result[c2][i] - result[c1][i]);
-               if (diff > MAX_TOLERANCE) {
-                       if ((i == 2 || i == 6) && !SimularityBitMap) {
-                               if (result[c1][i]+result[c1][i+1] == 0)
-                                       final_candidate[(i/4)] = c2;
-                               else if (result[c2][i]+result[c2][i+1] == 0)
-                                       final_candidate[(i/4)] = c1;
-                               else
-                                       SimularityBitMap = SimularityBitMap|(1<<i);
-                       } else {
-                               SimularityBitMap = SimularityBitMap|(1<<i);
-                       }
-               }
-       }
-
-       if (SimularityBitMap == 0) {
-               for (i = 0; i < (bound/4); i++) {
-                       if (final_candidate[i] != 0xFF) {
-                               for (j = i*4; j < (i+1)*4-2; j++)
-                                       result[3][j] = result[final_candidate[i]][j];
-                               bResult = false;
-                       }
-               }
-               return bResult;
-       } else if (!(SimularityBitMap & 0x0F)) {
-               /* path A OK */
-               for (i = 0; i < 4; i++)
-                       result[3][i] = result[c1][i];
-               return false;
-       } else if (!(SimularityBitMap & 0xF0) && pHalData->rf_type == RF_2T2R) {
-               /* path B OK */
-               for (i = 4; i < 8; i++)
-                       result[3][i] = result[c1][i];
-               return false;
-       } else {
-               return false;
-       }
-}
-
-static void _PHY_IQCalibrate(struct rtw_adapter *pAdapter, int result[][8], u8 t, bool is2T)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       u32 i;
-       u8 PathAOK, PathBOK;
-       u32 ADDA_REG[IQK_ADDA_REG_NUM] = {
-               rFPGA0_XCD_SwitchControl, rBlue_Tooth,
-               rRx_Wait_CCA, rTx_CCK_RFON,
-               rTx_CCK_BBON, rTx_OFDM_RFON,
-               rTx_OFDM_BBON, rTx_To_Rx,
-               rTx_To_Tx, rRx_CCK,
-               rRx_OFDM, rRx_Wait_RIFS,
-               rRx_TO_Rx, rStandby,
-               rSleep, rPMPD_ANAEN
-       };
-
-       u32 IQK_MAC_REG[IQK_MAC_REG_NUM] = {
-               REG_TXPAUSE, REG_BCN_CTRL,
-               REG_BCN_CTRL_1, REG_GPIO_MUXCFG
-       };
-
-       u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
-               rOFDM0_TRxPathEnable, rOFDM0_TRMuxPar,
-               rFPGA0_XCD_RFInterfaceSW, rConfig_AntA, rConfig_AntB,
-               rFPGA0_XAB_RFInterfaceSW, rFPGA0_XA_RFInterfaceOE,
-               rFPGA0_XB_RFInterfaceOE, rFPGA0_RFMOD
-       };
-
-       const u32 retryCount = 2;
-
-       /*  Note: IQ calibration must be performed after loading  */
-       /*              PHY_REG.txt , and radio_a, radio_b.txt   */
-
-       u32 bbvalue;
-
-       if (t == 0) {
-               bbvalue = rtl8723au_read32(pAdapter, rFPGA0_RFMOD);
-
-               /*  Save ADDA parameters, turn Path A ADDA on */
-               _PHY_SaveADDARegisters(pAdapter, ADDA_REG, pdmpriv->ADDA_backup, IQK_ADDA_REG_NUM);
-               _PHY_SaveMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
-               _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
-       }
-       _PHY_PathADDAOn(pAdapter, ADDA_REG, true, is2T);
-
-       if (t == 0)
-               pdmpriv->bRfPiEnable = (u8)
-                       PHY_QueryBBReg(pAdapter, rFPGA0_XA_HSSIParameter1,
-                                      BIT(8));
-
-       if (!pdmpriv->bRfPiEnable) {
-               /*  Switch BB to PI mode to do IQ Calibration. */
-               _PHY_PIModeSwitch(pAdapter, true);
-       }
-
-       PHY_SetBBReg(pAdapter, rFPGA0_RFMOD, BIT(24), 0x00);
-       rtl8723au_write32(pAdapter, rOFDM0_TRxPathEnable, 0x03a05600);
-       rtl8723au_write32(pAdapter, rOFDM0_TRMuxPar, 0x000800e4);
-       rtl8723au_write32(pAdapter, rFPGA0_XCD_RFInterfaceSW, 0x22204000);
-       PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT(10), 0x01);
-       PHY_SetBBReg(pAdapter, rFPGA0_XAB_RFInterfaceSW, BIT(26), 0x01);
-       PHY_SetBBReg(pAdapter, rFPGA0_XA_RFInterfaceOE, BIT(10), 0x00);
-       PHY_SetBBReg(pAdapter, rFPGA0_XB_RFInterfaceOE, BIT(10), 0x00);
-
-       if (is2T) {
-               rtl8723au_write32(pAdapter,
-                                 rFPGA0_XA_LSSIParameter, 0x00010000);
-               rtl8723au_write32(pAdapter,
-                                 rFPGA0_XB_LSSIParameter, 0x00010000);
-       }
-
-       /* MAC settings */
-       _PHY_MACSettingCalibration(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
-
-       /* Page B init */
-       rtl8723au_write32(pAdapter, rConfig_AntA, 0x00080000);
-
-       if (is2T)
-               rtl8723au_write32(pAdapter, rConfig_AntB, 0x00080000);
-
-       /*  IQ calibration setting */
-       rtl8723au_write32(pAdapter, rFPGA0_IQK, 0x80800000);
-       rtl8723au_write32(pAdapter, rTx_IQK, 0x01007c00);
-       rtl8723au_write32(pAdapter, rRx_IQK, 0x01004800);
-
-       for (i = 0 ; i < retryCount ; i++) {
-               PathAOK = _PHY_PathA_IQK(pAdapter, is2T);
-               if (PathAOK == 0x03) {
-                               DBG_8723A("Path A IQK Success!!\n");
-                               result[t][0] = (rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_A)&0x3FF0000)>>16;
-                               result[t][1] = (rtl8723au_read32(pAdapter, rTx_Power_After_IQK_A)&0x3FF0000)>>16;
-                               result[t][2] = (rtl8723au_read32(pAdapter, rRx_Power_Before_IQK_A_2)&0x3FF0000)>>16;
-                               result[t][3] = (rtl8723au_read32(pAdapter, rRx_Power_After_IQK_A_2)&0x3FF0000)>>16;
-                       break;
-               } else if (i == (retryCount-1) && PathAOK == 0x01) {
-                       /* Tx IQK OK */
-                       DBG_8723A("Path A IQK Only  Tx Success!!\n");
-
-                       result[t][0] = (rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_A)&0x3FF0000)>>16;
-                       result[t][1] = (rtl8723au_read32(pAdapter, rTx_Power_After_IQK_A)&0x3FF0000)>>16;
-               }
-       }
-
-       if (0x00 == PathAOK) {
-               DBG_8723A("Path A IQK failed!!\n");
-       }
-
-       if (is2T) {
-               _PHY_PathAStandBy(pAdapter);
-
-               /*  Turn Path B ADDA on */
-               _PHY_PathADDAOn(pAdapter, ADDA_REG, false, is2T);
-
-               for (i = 0 ; i < retryCount ; i++) {
-                       PathBOK = _PHY_PathB_IQK(pAdapter);
-                       if (PathBOK == 0x03) {
-                               DBG_8723A("Path B IQK Success!!\n");
-                               result[t][4] = (rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_B)&0x3FF0000)>>16;
-                               result[t][5] = (rtl8723au_read32(pAdapter, rTx_Power_After_IQK_B)&0x3FF0000)>>16;
-                               result[t][6] = (rtl8723au_read32(pAdapter, rRx_Power_Before_IQK_B_2)&0x3FF0000)>>16;
-                               result[t][7] = (rtl8723au_read32(pAdapter, rRx_Power_After_IQK_B_2)&0x3FF0000)>>16;
-                               break;
-                       } else if (i == (retryCount - 1) && PathBOK == 0x01) {
-                               /* Tx IQK OK */
-                               DBG_8723A("Path B Only Tx IQK Success!!\n");
-                               result[t][4] = (rtl8723au_read32(pAdapter, rTx_Power_Before_IQK_B)&0x3FF0000)>>16;
-                               result[t][5] = (rtl8723au_read32(pAdapter, rTx_Power_After_IQK_B)&0x3FF0000)>>16;
-                       }
-               }
-
-               if (0x00 == PathBOK) {
-                       DBG_8723A("Path B IQK failed!!\n");
-               }
-       }
-
-       /* Back to BB mode, load original value */
-       rtl8723au_write32(pAdapter, rFPGA0_IQK, 0);
-
-       if (t != 0) {
-               if (!pdmpriv->bRfPiEnable) {
-                       /*  Switch back BB to SI mode after finish IQ Calibration. */
-                       _PHY_PIModeSwitch(pAdapter, false);
-               }
-
-               /*  Reload ADDA power saving parameters */
-               _PHY_ReloadADDARegisters(pAdapter, ADDA_REG, pdmpriv->ADDA_backup, IQK_ADDA_REG_NUM);
-
-               /*  Reload MAC parameters */
-               _PHY_ReloadMACRegisters(pAdapter, IQK_MAC_REG, pdmpriv->IQK_MAC_backup);
-
-               /*  Reload BB parameters */
-               _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup, IQK_BB_REG_NUM);
-
-               /*  Restore RX initial gain */
-               rtl8723au_write32(pAdapter,
-                                 rFPGA0_XA_LSSIParameter, 0x00032ed3);
-               if (is2T) {
-                       rtl8723au_write32(pAdapter,
-                                         rFPGA0_XB_LSSIParameter, 0x00032ed3);
-               }
-
-               /* load 0xe30 IQC default value */
-               rtl8723au_write32(pAdapter, rTx_IQK_Tone_A, 0x01008c00);
-               rtl8723au_write32(pAdapter, rRx_IQK_Tone_A, 0x01008c00);
-
-       }
-}
-
-static void _PHY_LCCalibrate(struct rtw_adapter *pAdapter, bool is2T)
-{
-       u8 tmpReg;
-       u32 RF_Amode = 0, RF_Bmode = 0, LC_Cal;
-
-       /* Check continuous TX and Packet TX */
-       tmpReg = rtl8723au_read8(pAdapter, 0xd03);
-
-       if ((tmpReg&0x70) != 0) {
-               /* Deal with contisuous TX case */
-               /* disable all continuous TX */
-               rtl8723au_write8(pAdapter, 0xd03, tmpReg&0x8F);
-       } else {
-               /*  Deal with Packet TX case */
-               /*  block all queues */
-               rtl8723au_write8(pAdapter, REG_TXPAUSE, 0xFF);
-       }
-
-       if ((tmpReg&0x70) != 0) {
-               /* 1. Read original RF mode */
-               /* Path-A */
-               RF_Amode = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits);
-
-               /* Path-B */
-               if (is2T)
-                       RF_Bmode = PHY_QueryRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits);
-
-               /* 2. Set RF mode = standby mode */
-               /* Path-A */
-               PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, (RF_Amode&0x8FFFF)|0x10000);
-
-               /* Path-B */
-               if (is2T)
-                       PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, (RF_Bmode&0x8FFFF)|0x10000);
-       }
-
-       /* 3. Read RF reg18 */
-       LC_Cal = PHY_QueryRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits);
-
-       /* 4. Set LC calibration begin */
-       PHY_SetRFReg(pAdapter, RF_PATH_A, RF_CHNLBW, bMask12Bits, LC_Cal|0x08000);
-
-       msleep(100);
-
-       /* Restore original situation */
-       if ((tmpReg&0x70) != 0) {       /* Deal with contuous TX case  */
-               /* Path-A */
-               rtl8723au_write8(pAdapter, 0xd03, tmpReg);
-               PHY_SetRFReg(pAdapter, RF_PATH_A, RF_AC, bMask12Bits, RF_Amode);
-
-               /* Path-B */
-               if (is2T)
-                       PHY_SetRFReg(pAdapter, RF_PATH_B, RF_AC, bMask12Bits, RF_Bmode);
-       } else /*  Deal with Packet TX case */
-               rtl8723au_write8(pAdapter, REG_TXPAUSE, 0x00);
-}
-
-/* Analog Pre-distortion calibration */
-#define                APK_BB_REG_NUM  8
-#define                APK_CURVE_REG_NUM 4
-#define                PATH_NUM                2
-
-void rtl8723a_phy_iq_calibrate(struct rtw_adapter *pAdapter, bool bReCovery)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       s32 result[4][8];       /* last is final result */
-       u8 i, final_candidate;
-       bool bPathAOK, bPathBOK;
-       s32 RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4;
-       s32 RegECC, RegTmp = 0;
-       bool is12simular, is13simular, is23simular;
-       bool bStartContTx = false, bSingleTone = false;
-       bool bCarrierSuppression = false;
-       u32 IQK_BB_REG_92C[IQK_BB_REG_NUM] = {
-               rOFDM0_XARxIQImbalance, rOFDM0_XBRxIQImbalance,
-               rOFDM0_ECCAThreshold, rOFDM0_AGCRSSITable,
-               rOFDM0_XATxIQImbalance, rOFDM0_XBTxIQImbalance,
-               rOFDM0_XCTxAFE, rOFDM0_XDTxAFE,
-               rOFDM0_RxIQExtAnta
-       };
-
-       /* ignore IQK when continuous Tx */
-       if (bStartContTx || bSingleTone || bCarrierSuppression)
-               return;
-
-       if (bReCovery) {
-               _PHY_ReloadADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
-               return;
-       }
-       DBG_8723A("IQK:Start!!!\n");
-
-       for (i = 0; i < 8; i++) {
-               result[0][i] = 0;
-               result[1][i] = 0;
-               result[2][i] = 0;
-               result[3][i] = 0;
-       }
-       final_candidate = 0xff;
-       bPathAOK = false;
-       bPathBOK = false;
-       is12simular = false;
-       is23simular = false;
-       is13simular = false;
-
-       for (i = 0; i < 3; i++) {
-               if (pHalData->rf_type == RF_2T2R)
-                       _PHY_IQCalibrate(pAdapter, result, i, true);
-               else /*  For 88C 1T1R */
-                       _PHY_IQCalibrate(pAdapter, result, i, false);
-
-               if (i == 1) {
-                       is12simular = _PHY_SimularityCompare(pAdapter, result, 0, 1);
-                       if (is12simular) {
-                               final_candidate = 0;
-                               break;
-                       }
-               }
-
-               if (i == 2) {
-                       is13simular = _PHY_SimularityCompare(pAdapter, result, 0, 2);
-                       if (is13simular) {
-                               final_candidate = 0;
-                               break;
-                       }
-
-                       is23simular = _PHY_SimularityCompare(pAdapter, result, 1, 2);
-                       if (is23simular) {
-                               final_candidate = 1;
-                       } else {
-                               for (i = 0; i < 8; i++)
-                                       RegTmp += result[3][i];
-
-                               if (RegTmp != 0)
-                                       final_candidate = 3;
-                               else
-                                       final_candidate = 0xFF;
-                       }
-               }
-       }
-
-       for (i = 0; i < 4; i++) {
-               RegE94 = result[i][0];
-               RegE9C = result[i][1];
-               RegEA4 = result[i][2];
-               RegEAC = result[i][3];
-               RegEB4 = result[i][4];
-               RegEBC = result[i][5];
-               RegEC4 = result[i][6];
-               RegECC = result[i][7];
-       }
-
-       if (final_candidate != 0xff) {
-               RegE94 = result[final_candidate][0];
-               pdmpriv->RegE94 =  RegE94;
-               RegE9C = result[final_candidate][1];
-               pdmpriv->RegE9C = RegE9C;
-               RegEA4 = result[final_candidate][2];
-               RegEAC = result[final_candidate][3];
-               RegEB4 = result[final_candidate][4];
-               pdmpriv->RegEB4 = RegEB4;
-               RegEBC = result[final_candidate][5];
-               pdmpriv->RegEBC = RegEBC;
-               RegEC4 = result[final_candidate][6];
-               RegECC = result[final_candidate][7];
-               DBG_8723A("IQK: final_candidate is %x\n", final_candidate);
-               DBG_8723A("IQK: RegE94 =%x RegE9C =%x RegEA4 =%x RegEAC =%x RegEB4 =%x RegEBC =%x RegEC4 =%x RegECC =%x\n ",
-                         RegE94, RegE9C, RegEA4, RegEAC, RegEB4, RegEBC, RegEC4, RegECC);
-               bPathAOK = bPathBOK = true;
-       } else {
-               RegE94 = RegEB4 = pdmpriv->RegE94 = pdmpriv->RegEB4 = 0x100;    /* X default value */
-               RegE9C = RegEBC = pdmpriv->RegE9C = pdmpriv->RegEBC = 0x0;              /* Y default value */
-       }
-
-       if ((RegE94 != 0)/*&&(RegEA4 != 0)*/)
-               _PHY_PathAFillIQKMatrix(pAdapter, bPathAOK, result, final_candidate, (RegEA4 == 0));
-
-       if (pHalData->rf_type == RF_2T2R) {
-               if ((RegEB4 != 0)/*&&(RegEC4 != 0)*/)
-                       _PHY_PathBFillIQKMatrix(pAdapter, bPathBOK, result,
-                                               final_candidate, (RegEC4 == 0));
-       }
-
-       _PHY_SaveADDARegisters(pAdapter, IQK_BB_REG_92C, pdmpriv->IQK_BB_backup_recover, 9);
-}
-
-void rtl8723a_phy_lc_calibrate(struct rtw_adapter *pAdapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       struct mlme_ext_priv *pmlmeext = &pAdapter->mlmeextpriv;
-       bool bStartContTx = false, bSingleTone = false, bCarrierSuppression = false;
-
-       /* ignore IQK when continuous Tx */
-       if (bStartContTx || bSingleTone || bCarrierSuppression)
-               return;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
-               return;
-
-       if (pHalData->rf_type == RF_2T2R)
-               _PHY_LCCalibrate(pAdapter, true);
-       else    /*  For 88C 1T1R */
-               _PHY_LCCalibrate(pAdapter, false);
-}
-
-void
-rtl8723a_phy_ap_calibrate(struct rtw_adapter *pAdapter, char delta)
-{
-}
diff --git a/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c b/drivers/staging/rtl8723au/hal/HalHWImg8723A_BB.c
deleted file mode 100644 (file)
index 8d3ea6c..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-******************************************************************************/
-
-#include "odm_precomp.h"
-
-static bool CheckCondition(const u32  Condition, const u32  Hex)
-{
-       u32 _board     = (Hex & 0x000000FF);
-       u32 _interface = (Hex & 0x0000FF00) >> 8;
-       u32 _platform  = (Hex & 0x00FF0000) >> 16;
-       u32 cond = Condition;
-
-       if (Condition == 0xCDCDCDCD)
-               return true;
-
-       cond = Condition & 0x000000FF;
-       if ((_board == cond) && cond != 0x00)
-               return false;
-
-       cond = Condition & 0x0000FF00;
-       cond >>= 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = Condition & 0x00FF0000;
-       cond >>= 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           AGC_TAB_1T.TXT
-******************************************************************************/
-
-static u32 Array_AGC_TAB_1T_8723A[] = {
-       0xC78, 0x7B000001,
-       0xC78, 0x7B010001,
-       0xC78, 0x7B020001,
-       0xC78, 0x7B030001,
-       0xC78, 0x7B040001,
-       0xC78, 0x7B050001,
-       0xC78, 0x7A060001,
-       0xC78, 0x79070001,
-       0xC78, 0x78080001,
-       0xC78, 0x77090001,
-       0xC78, 0x760A0001,
-       0xC78, 0x750B0001,
-       0xC78, 0x740C0001,
-       0xC78, 0x730D0001,
-       0xC78, 0x720E0001,
-       0xC78, 0x710F0001,
-       0xC78, 0x70100001,
-       0xC78, 0x6F110001,
-       0xC78, 0x6E120001,
-       0xC78, 0x6D130001,
-       0xC78, 0x6C140001,
-       0xC78, 0x6B150001,
-       0xC78, 0x6A160001,
-       0xC78, 0x69170001,
-       0xC78, 0x68180001,
-       0xC78, 0x67190001,
-       0xC78, 0x661A0001,
-       0xC78, 0x651B0001,
-       0xC78, 0x641C0001,
-       0xC78, 0x631D0001,
-       0xC78, 0x621E0001,
-       0xC78, 0x611F0001,
-       0xC78, 0x60200001,
-       0xC78, 0x49210001,
-       0xC78, 0x48220001,
-       0xC78, 0x47230001,
-       0xC78, 0x46240001,
-       0xC78, 0x45250001,
-       0xC78, 0x44260001,
-       0xC78, 0x43270001,
-       0xC78, 0x42280001,
-       0xC78, 0x41290001,
-       0xC78, 0x402A0001,
-       0xC78, 0x262B0001,
-       0xC78, 0x252C0001,
-       0xC78, 0x242D0001,
-       0xC78, 0x232E0001,
-       0xC78, 0x222F0001,
-       0xC78, 0x21300001,
-       0xC78, 0x20310001,
-       0xC78, 0x06320001,
-       0xC78, 0x05330001,
-       0xC78, 0x04340001,
-       0xC78, 0x03350001,
-       0xC78, 0x02360001,
-       0xC78, 0x01370001,
-       0xC78, 0x00380001,
-       0xC78, 0x00390001,
-       0xC78, 0x003A0001,
-       0xC78, 0x003B0001,
-       0xC78, 0x003C0001,
-       0xC78, 0x003D0001,
-       0xC78, 0x003E0001,
-       0xC78, 0x003F0001,
-       0xC78, 0x7B400001,
-       0xC78, 0x7B410001,
-       0xC78, 0x7B420001,
-       0xC78, 0x7B430001,
-       0xC78, 0x7B440001,
-       0xC78, 0x7B450001,
-       0xC78, 0x7A460001,
-       0xC78, 0x79470001,
-       0xC78, 0x78480001,
-       0xC78, 0x77490001,
-       0xC78, 0x764A0001,
-       0xC78, 0x754B0001,
-       0xC78, 0x744C0001,
-       0xC78, 0x734D0001,
-       0xC78, 0x724E0001,
-       0xC78, 0x714F0001,
-       0xC78, 0x70500001,
-       0xC78, 0x6F510001,
-       0xC78, 0x6E520001,
-       0xC78, 0x6D530001,
-       0xC78, 0x6C540001,
-       0xC78, 0x6B550001,
-       0xC78, 0x6A560001,
-       0xC78, 0x69570001,
-       0xC78, 0x68580001,
-       0xC78, 0x67590001,
-       0xC78, 0x665A0001,
-       0xC78, 0x655B0001,
-       0xC78, 0x645C0001,
-       0xC78, 0x635D0001,
-       0xC78, 0x625E0001,
-       0xC78, 0x615F0001,
-       0xC78, 0x60600001,
-       0xC78, 0x49610001,
-       0xC78, 0x48620001,
-       0xC78, 0x47630001,
-       0xC78, 0x46640001,
-       0xC78, 0x45650001,
-       0xC78, 0x44660001,
-       0xC78, 0x43670001,
-       0xC78, 0x42680001,
-       0xC78, 0x41690001,
-       0xC78, 0x406A0001,
-       0xC78, 0x266B0001,
-       0xC78, 0x256C0001,
-       0xC78, 0x246D0001,
-       0xC78, 0x236E0001,
-       0xC78, 0x226F0001,
-       0xC78, 0x21700001,
-       0xC78, 0x20710001,
-       0xC78, 0x06720001,
-       0xC78, 0x05730001,
-       0xC78, 0x04740001,
-       0xC78, 0x03750001,
-       0xC78, 0x02760001,
-       0xC78, 0x01770001,
-       0xC78, 0x00780001,
-       0xC78, 0x00790001,
-       0xC78, 0x007A0001,
-       0xC78, 0x007B0001,
-       0xC78, 0x007C0001,
-       0xC78, 0x007D0001,
-       0xC78, 0x007E0001,
-       0xC78, 0x007F0001,
-       0xC78, 0x3800001E,
-       0xC78, 0x3801001E,
-       0xC78, 0x3802001E,
-       0xC78, 0x3803001E,
-       0xC78, 0x3804001E,
-       0xC78, 0x3805001E,
-       0xC78, 0x3806001E,
-       0xC78, 0x3807001E,
-       0xC78, 0x3808001E,
-       0xC78, 0x3C09001E,
-       0xC78, 0x3E0A001E,
-       0xC78, 0x400B001E,
-       0xC78, 0x440C001E,
-       0xC78, 0x480D001E,
-       0xC78, 0x4C0E001E,
-       0xC78, 0x500F001E,
-       0xC78, 0x5210001E,
-       0xC78, 0x5611001E,
-       0xC78, 0x5A12001E,
-       0xC78, 0x5E13001E,
-       0xC78, 0x6014001E,
-       0xC78, 0x6015001E,
-       0xC78, 0x6016001E,
-       0xC78, 0x6217001E,
-       0xC78, 0x6218001E,
-       0xC78, 0x6219001E,
-       0xC78, 0x621A001E,
-       0xC78, 0x621B001E,
-       0xC78, 0x621C001E,
-       0xC78, 0x621D001E,
-       0xC78, 0x621E001E,
-       0xC78, 0x621F001E,
-};
-
-#define READ_NEXT_PAIR(v1, v2, i)                      \
-       do {                                            \
-               i += 2; v1 = Array[i]; v2 = Array[i+1]; \
-       } while (0)
-
-void ODM_ReadAndConfig_AGC_TAB_1T_8723A(struct dm_odm_t *pDM_Odm)
-{
-       u32 hex;
-       u32 i;
-       u8 platform = 0x04;
-       u8 board = pDM_Odm->BoardType;
-       u32 ArrayLen = ARRAY_SIZE(Array_AGC_TAB_1T_8723A);
-       u32 *Array = Array_AGC_TAB_1T_8723A;
-
-       hex = board;
-       hex += ODM_ITRF_USB << 8;
-       hex += platform << 16;
-       hex += 0xFF000000;
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i+1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
-                       continue;
-               } else {
-                       if (!CheckCondition(Array[i], hex)) {
-                               /* Discard the following (offset, data) pairs */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else {
-                               /*  Configure matched pairs and skip to
-                                   end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       odm_ConfigBB_AGC_8723A(pDM_Odm, v1, v2);
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-}
-
-/******************************************************************************
-*                           PHY_REG_1T.TXT
-******************************************************************************/
-
-static u32 Array_PHY_REG_1T_8723A[] = {
-       0x800, 0x80040000,
-       0x804, 0x00000003,
-       0x808, 0x0000FC00,
-       0x80C, 0x0000000A,
-       0x810, 0x10001331,
-       0x814, 0x020C3D10,
-       0x818, 0x02200385,
-       0x81C, 0x00000000,
-       0x820, 0x01000100,
-       0x824, 0x00390004,
-       0x828, 0x00000000,
-       0x82C, 0x00000000,
-       0x830, 0x00000000,
-       0x834, 0x00000000,
-       0x838, 0x00000000,
-       0x83C, 0x00000000,
-       0x840, 0x00010000,
-       0x844, 0x00000000,
-       0x848, 0x00000000,
-       0x84C, 0x00000000,
-       0x850, 0x00000000,
-       0x854, 0x00000000,
-       0x858, 0x569A569A,
-       0x85C, 0x001B25A4,
-       0x860, 0x66F60110,
-       0x864, 0x061F0130,
-       0x868, 0x00000000,
-       0x86C, 0x32323200,
-       0x870, 0x07000760,
-       0x874, 0x22004000,
-       0x878, 0x00000808,
-       0x87C, 0x00000000,
-       0x880, 0xC0083070,
-       0x884, 0x000004D5,
-       0x888, 0x00000000,
-       0x88C, 0xCCC000C0,
-       0x890, 0x00000800,
-       0x894, 0xFFFFFFFE,
-       0x898, 0x40302010,
-       0x89C, 0x00706050,
-       0x900, 0x00000000,
-       0x904, 0x00000023,
-       0x908, 0x00000000,
-       0x90C, 0x81121111,
-       0xA00, 0x00D047C8,
-       0xA04, 0x80FF000C,
-       0xA08, 0x8C838300,
-       0xA0C, 0x2E68120F,
-       0xA10, 0x9500BB78,
-       0xA14, 0x11144028,
-       0xA18, 0x00881117,
-       0xA1C, 0x89140F00,
-       0xA20, 0x1A1B0000,
-       0xA24, 0x090E1317,
-       0xA28, 0x00000204,
-       0xA2C, 0x00D30000,
-       0xA70, 0x101FBF00,
-       0xA74, 0x00000007,
-       0xA78, 0x00000900,
-       0xC00, 0x48071D40,
-       0xC04, 0x03A05611,
-       0xC08, 0x000000E4,
-       0xC0C, 0x6C6C6C6C,
-       0xC10, 0x08800000,
-       0xC14, 0x40000100,
-       0xC18, 0x08800000,
-       0xC1C, 0x40000100,
-       0xC20, 0x00000000,
-       0xC24, 0x00000000,
-       0xC28, 0x00000000,
-       0xC2C, 0x00000000,
-       0xC30, 0x69E9AC44,
-       0xFF0F011F, 0xABCD,
-       0xC34, 0x469652CF,
-       0xCDCDCDCD, 0xCDCD,
-       0xC34, 0x469652AF,
-       0xFF0F011F, 0xDEAD,
-       0xC38, 0x49795994,
-       0xC3C, 0x0A97971C,
-       0xC40, 0x1F7C403F,
-       0xC44, 0x000100B7,
-       0xC48, 0xEC020107,
-       0xC4C, 0x007F037F,
-       0xC50, 0x69543420,
-       0xC54, 0x43BC0094,
-       0xC58, 0x69543420,
-       0xC5C, 0x433C0094,
-       0xC60, 0x00000000,
-       0xFF0F011F, 0xABCD,
-       0xC64, 0x7116848B,
-       0xCDCDCDCD, 0xCDCD,
-       0xC64, 0x7112848B,
-       0xFF0F011F, 0xDEAD,
-       0xC68, 0x47C00BFF,
-       0xC6C, 0x00000036,
-       0xC70, 0x2C7F000D,
-       0xC74, 0x018610DB,
-       0xC78, 0x0000001F,
-       0xC7C, 0x00B91612,
-       0xC80, 0x40000100,
-       0xC84, 0x20F60000,
-       0xC88, 0x40000100,
-       0xC8C, 0x20200000,
-       0xC90, 0x00121820,
-       0xC94, 0x00000000,
-       0xC98, 0x00121820,
-       0xC9C, 0x00007F7F,
-       0xCA0, 0x00000000,
-       0xCA4, 0x00000080,
-       0xCA8, 0x00000000,
-       0xCAC, 0x00000000,
-       0xCB0, 0x00000000,
-       0xCB4, 0x00000000,
-       0xCB8, 0x00000000,
-       0xCBC, 0x28000000,
-       0xCC0, 0x00000000,
-       0xCC4, 0x00000000,
-       0xCC8, 0x00000000,
-       0xCCC, 0x00000000,
-       0xCD0, 0x00000000,
-       0xCD4, 0x00000000,
-       0xCD8, 0x64B22427,
-       0xCDC, 0x00766932,
-       0xCE0, 0x00222222,
-       0xCE4, 0x00000000,
-       0xCE8, 0x37644302,
-       0xCEC, 0x2F97D40C,
-       0xD00, 0x00080740,
-       0xD04, 0x00020401,
-       0xD08, 0x0000907F,
-       0xD0C, 0x20010201,
-       0xD10, 0xA0633333,
-       0xD14, 0x3333BC43,
-       0xD18, 0x7A8F5B6B,
-       0xD2C, 0xCC979975,
-       0xD30, 0x00000000,
-       0xD34, 0x80608000,
-       0xD38, 0x00000000,
-       0xD3C, 0x00027293,
-       0xD40, 0x00000000,
-       0xD44, 0x00000000,
-       0xD48, 0x00000000,
-       0xD4C, 0x00000000,
-       0xD50, 0x6437140A,
-       0xD54, 0x00000000,
-       0xD58, 0x00000000,
-       0xD5C, 0x30032064,
-       0xD60, 0x4653DE68,
-       0xD64, 0x04518A3C,
-       0xD68, 0x00002101,
-       0xD6C, 0x2A201C16,
-       0xD70, 0x1812362E,
-       0xD74, 0x322C2220,
-       0xD78, 0x000E3C24,
-       0xE00, 0x2A2A2A2A,
-       0xE04, 0x2A2A2A2A,
-       0xE08, 0x03902A2A,
-       0xE10, 0x2A2A2A2A,
-       0xE14, 0x2A2A2A2A,
-       0xE18, 0x2A2A2A2A,
-       0xE1C, 0x2A2A2A2A,
-       0xE28, 0x00000000,
-       0xE30, 0x1000DC1F,
-       0xE34, 0x10008C1F,
-       0xE38, 0x02140102,
-       0xE3C, 0x681604C2,
-       0xE40, 0x01007C00,
-       0xE44, 0x01004800,
-       0xE48, 0xFB000000,
-       0xE4C, 0x000028D1,
-       0xE50, 0x1000DC1F,
-       0xE54, 0x10008C1F,
-       0xE58, 0x02140102,
-       0xE5C, 0x28160D05,
-       0xE60, 0x00000008,
-       0xE68, 0x001B25A4,
-       0xE6C, 0x631B25A0,
-       0xE70, 0x631B25A0,
-       0xE74, 0x081B25A0,
-       0xE78, 0x081B25A0,
-       0xE7C, 0x081B25A0,
-       0xE80, 0x081B25A0,
-       0xE84, 0x631B25A0,
-       0xE88, 0x081B25A0,
-       0xE8C, 0x631B25A0,
-       0xED0, 0x631B25A0,
-       0xED4, 0x631B25A0,
-       0xED8, 0x631B25A0,
-       0xEDC, 0x001B25A0,
-       0xEE0, 0x001B25A0,
-       0xEEC, 0x6B1B25A0,
-       0xF14, 0x00000003,
-       0xF4C, 0x00000000,
-       0xF00, 0x00000300,
-};
-
-void ODM_ReadAndConfig_PHY_REG_1T_8723A(struct dm_odm_t *pDM_Odm)
-{
-       u32 hex = 0;
-       u32 i = 0;
-       u8  platform = 0x04;
-       u8  board = pDM_Odm->BoardType;
-       u32 ArrayLen = ARRAY_SIZE(Array_PHY_REG_1T_8723A);
-       u32 *Array = Array_PHY_REG_1T_8723A;
-
-       hex += board;
-       hex += ODM_ITRF_USB << 8;
-       hex += platform << 16;
-       hex += 0xFF000000;
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i+1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
-                       continue;
-               } else {
-                       if (!CheckCondition(Array[i], hex)) {
-                               /* Discard the following (offset, data) pairs */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else {
-                               /*  Configure matched pairs and skip to
-                                   end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-}
-
-/******************************************************************************
-*                           PHY_REG_MP.TXT
-******************************************************************************/
-
-static u32 Array_PHY_REG_MP_8723A[] = {
-       0xC30, 0x69E9AC4A,
-       0xC3C, 0x0A979718,
-};
-
-void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm)
-{
-       u32 hex = 0;
-       u32 i;
-       u8 platform = 0x04;
-       u8 board = pDM_Odm->BoardType;
-       u32 ArrayLen = ARRAY_SIZE(Array_PHY_REG_MP_8723A);
-       u32 *Array = Array_PHY_REG_MP_8723A;
-
-       hex += board;
-       hex += ODM_ITRF_USB << 8;
-       hex += platform << 16;
-       hex += 0xFF000000;
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i+1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
-                       continue;
-               } else {
-                       if (!CheckCondition(Array[i], hex)) {
-                               /* Discard the following (offset, data) pairs */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else {
-                               /* Configure matched pairs and skip to
-                                  end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       odm_ConfigBB_PHY_8723A(pDM_Odm, v1, v2);
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/HalHWImg8723A_MAC.c b/drivers/staging/rtl8723au/hal/HalHWImg8723A_MAC.c
deleted file mode 100644 (file)
index 9bf6859..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-******************************************************************************/
-
-#include "odm_precomp.h"
-
-static bool CheckCondition(const u32  Condition, const u32  Hex)
-{
-       u32 _board     = (Hex & 0x000000FF);
-       u32 _interface = (Hex & 0x0000FF00) >> 8;
-       u32 _platform  = (Hex & 0x00FF0000) >> 16;
-       u32 cond = Condition;
-
-       if (Condition == 0xCDCDCDCD)
-               return true;
-
-       cond = Condition & 0x000000FF;
-       if ((_board == cond) && cond != 0x00)
-               return false;
-
-       cond = Condition & 0x0000FF00;
-       cond >>= 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = Condition & 0x00FF0000;
-       cond >>= 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           MAC_REG.TXT
-******************************************************************************/
-
-static u32 Array_MAC_REG_8723A[] = {
-               0x420, 0x00000080,
-               0x423, 0x00000000,
-               0x430, 0x00000000,
-               0x431, 0x00000000,
-               0x432, 0x00000000,
-               0x433, 0x00000001,
-               0x434, 0x00000004,
-               0x435, 0x00000005,
-               0x436, 0x00000006,
-               0x437, 0x00000007,
-               0x438, 0x00000000,
-               0x439, 0x00000000,
-               0x43A, 0x00000000,
-               0x43B, 0x00000001,
-               0x43C, 0x00000004,
-               0x43D, 0x00000005,
-               0x43E, 0x00000006,
-               0x43F, 0x00000007,
-               0x440, 0x0000005D,
-               0x441, 0x00000001,
-               0x442, 0x00000000,
-               0x444, 0x00000015,
-               0x445, 0x000000F0,
-               0x446, 0x0000000F,
-               0x447, 0x00000000,
-               0x458, 0x00000041,
-               0x459, 0x000000A8,
-               0x45A, 0x00000072,
-               0x45B, 0x000000B9,
-               0x460, 0x00000066,
-               0x461, 0x00000066,
-               0x462, 0x00000008,
-               0x463, 0x00000003,
-               0x4C8, 0x000000FF,
-               0x4C9, 0x00000008,
-               0x4CC, 0x000000FF,
-               0x4CD, 0x000000FF,
-               0x4CE, 0x00000001,
-               0x500, 0x00000026,
-               0x501, 0x000000A2,
-               0x502, 0x0000002F,
-               0x503, 0x00000000,
-               0x504, 0x00000028,
-               0x505, 0x000000A3,
-               0x506, 0x0000005E,
-               0x507, 0x00000000,
-               0x508, 0x0000002B,
-               0x509, 0x000000A4,
-               0x50A, 0x0000005E,
-               0x50B, 0x00000000,
-               0x50C, 0x0000004F,
-               0x50D, 0x000000A4,
-               0x50E, 0x00000000,
-               0x50F, 0x00000000,
-               0x512, 0x0000001C,
-               0x514, 0x0000000A,
-               0x515, 0x00000010,
-               0x516, 0x0000000A,
-               0x517, 0x00000010,
-               0x51A, 0x00000016,
-               0x524, 0x0000000F,
-               0x525, 0x0000004F,
-               0x546, 0x00000040,
-               0x547, 0x00000000,
-               0x550, 0x00000010,
-               0x551, 0x00000010,
-               0x559, 0x00000002,
-               0x55A, 0x00000002,
-               0x55D, 0x000000FF,
-               0x605, 0x00000030,
-               0x608, 0x0000000E,
-               0x609, 0x0000002A,
-               0x652, 0x00000020,
-               0x63C, 0x0000000A,
-               0x63D, 0x0000000A,
-               0x63E, 0x0000000E,
-               0x63F, 0x0000000E,
-               0x66E, 0x00000005,
-               0x700, 0x00000021,
-               0x701, 0x00000043,
-               0x702, 0x00000065,
-               0x703, 0x00000087,
-               0x708, 0x00000021,
-               0x709, 0x00000043,
-               0x70A, 0x00000065,
-               0x70B, 0x00000087,
-};
-
-void ODM_ReadAndConfig_MAC_REG_8723A(struct dm_odm_t *pDM_Odm)
-{
-       #define READ_NEXT_PAIR(v1, v2, i)                       \
-                do {                                           \
-                       i += 2; v1 = Array[i]; v2 = Array[i+1]; \
-                } while (0)
-
-       u32     hex         = 0;
-       u32     i           = 0;
-       u8     platform    = 0x04;
-       u8     board       = pDM_Odm->BoardType;
-       u32     ArrayLen    = ARRAY_SIZE(Array_MAC_REG_8723A);
-       u32 *Array       = Array_MAC_REG_8723A;
-
-       hex += board;
-       hex += ODM_ITRF_USB << 8;
-       hex += platform << 16;
-       hex += 0xFF000000;
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i+1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigMAC_8723A(pDM_Odm, v1, (u8)v2);
-                       continue;
-               } else {
-                       if (!CheckCondition(Array[i], hex)) {
-                               /* Discard the following (offset, data) pairs. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else {
-                               /*  Configure matched pairs and skip to end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       odm_ConfigMAC_8723A(pDM_Odm, v1, (u8)v2);
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c b/drivers/staging/rtl8723au/hal/HalHWImg8723A_RF.c
deleted file mode 100644 (file)
index 286f3ea..0000000
+++ /dev/null
@@ -1,259 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-******************************************************************************/
-
-#include "odm_precomp.h"
-
-static bool CheckCondition(const u32  Condition, const u32  Hex)
-{
-       u32 _board     = (Hex & 0x000000FF);
-       u32 _interface = (Hex & 0x0000FF00) >> 8;
-       u32 _platform  = (Hex & 0x00FF0000) >> 16;
-       u32 cond = Condition;
-
-       if (Condition == 0xCDCDCDCD)
-               return true;
-
-       cond = Condition & 0x000000FF;
-       if ((_board == cond) && cond != 0x00)
-               return false;
-
-       cond = Condition & 0x0000FF00;
-       cond >>= 8;
-       if ((_interface & cond) == 0 && cond != 0x07)
-               return false;
-
-       cond = Condition & 0x00FF0000;
-       cond >>= 16;
-       if ((_platform & cond) == 0 && cond != 0x0F)
-               return false;
-       return true;
-}
-
-/******************************************************************************
-*                           RadioA_1T.TXT
-******************************************************************************/
-
-static u32 Array_RadioA_1T_8723A[] = {
-       0x000, 0x00030159,
-       0x001, 0x00031284,
-       0x002, 0x00098000,
-       0xFF0F011F, 0xABCD,
-       0x003, 0x00018C63,
-       0xCDCDCDCD, 0xCDCD,
-       0x003, 0x00039C63,
-       0xFF0F011F, 0xDEAD,
-       0x004, 0x000210E7,
-       0x009, 0x0002044F,
-       0x00A, 0x0001A3F1,
-       0x00B, 0x00014787,
-       0x00C, 0x000896FE,
-       0x00D, 0x0000E02C,
-       0x00E, 0x00039CE7,
-       0x00F, 0x00000451,
-       0x019, 0x00000000,
-       0x01A, 0x00030355,
-       0x01B, 0x00060A00,
-       0x01C, 0x000FC378,
-       0x01D, 0x000A1250,
-       0x01E, 0x0000024F,
-       0x01F, 0x00000000,
-       0x020, 0x0000B614,
-       0x021, 0x0006C000,
-       0x022, 0x00000000,
-       0x023, 0x00001558,
-       0x024, 0x00000060,
-       0x025, 0x00000483,
-       0x026, 0x0004F000,
-       0x027, 0x000EC7D9,
-       0x028, 0x00057730,
-       0x029, 0x00004783,
-       0x02A, 0x00000001,
-       0x02B, 0x00021334,
-       0x02A, 0x00000000,
-       0x02B, 0x00000054,
-       0x02A, 0x00000001,
-       0x02B, 0x00000808,
-       0x02B, 0x00053333,
-       0x02C, 0x0000000C,
-       0x02A, 0x00000002,
-       0x02B, 0x00000808,
-       0x02B, 0x0005B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000003,
-       0x02B, 0x00000808,
-       0x02B, 0x00063333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000004,
-       0x02B, 0x00000808,
-       0x02B, 0x0006B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000005,
-       0x02B, 0x00000808,
-       0x02B, 0x00073333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000006,
-       0x02B, 0x00000709,
-       0x02B, 0x0005B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000007,
-       0x02B, 0x00000709,
-       0x02B, 0x00063333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000008,
-       0x02B, 0x0000060A,
-       0x02B, 0x0004B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x00000009,
-       0x02B, 0x0000060A,
-       0x02B, 0x00053333,
-       0x02C, 0x0000000D,
-       0x02A, 0x0000000A,
-       0x02B, 0x0000060A,
-       0x02B, 0x0005B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x0000000B,
-       0x02B, 0x0000060A,
-       0x02B, 0x00063333,
-       0x02C, 0x0000000D,
-       0x02A, 0x0000000C,
-       0x02B, 0x0000060A,
-       0x02B, 0x0006B333,
-       0x02C, 0x0000000D,
-       0x02A, 0x0000000D,
-       0x02B, 0x0000060A,
-       0x02B, 0x00073333,
-       0x02C, 0x0000000D,
-       0x02A, 0x0000000E,
-       0x02B, 0x0000050B,
-       0x02B, 0x00066666,
-       0x02C, 0x0000001A,
-       0x02A, 0x000E0000,
-       0x010, 0x0004000F,
-       0x011, 0x000E31FC,
-       0x010, 0x0006000F,
-       0x011, 0x000FF9F8,
-       0x010, 0x0002000F,
-       0x011, 0x000203F9,
-       0x010, 0x0003000F,
-       0x011, 0x000FF500,
-       0x010, 0x00000000,
-       0x011, 0x00000000,
-       0x010, 0x0008000F,
-       0x011, 0x0003F100,
-       0x010, 0x0009000F,
-       0x011, 0x00023100,
-       0x012, 0x00032000,
-       0x012, 0x00071000,
-       0x012, 0x000B0000,
-       0x012, 0x000FC000,
-       0x013, 0x000287B3,
-       0x013, 0x000244B7,
-       0x013, 0x000204AB,
-       0x013, 0x0001C49F,
-       0x013, 0x00018493,
-       0x013, 0x0001429B,
-       0x013, 0x00010299,
-       0x013, 0x0000C29C,
-       0x013, 0x000081A0,
-       0x013, 0x000040AC,
-       0x013, 0x00000020,
-       0x014, 0x0001944C,
-       0x014, 0x00059444,
-       0x014, 0x0009944C,
-       0x014, 0x000D9444,
-       0xFF0F011F, 0xABCD,
-       0x015, 0x0000F424,
-       0x015, 0x0004F424,
-       0x015, 0x0008F424,
-       0x015, 0x000CF424,
-       0xCDCDCDCD, 0xCDCD,
-       0x015, 0x0000F474,
-       0x015, 0x0004F477,
-       0x015, 0x0008F455,
-       0x015, 0x000CF455,
-       0xFF0F011F, 0xDEAD,
-       0x016, 0x00000339,
-       0x016, 0x00040339,
-       0x016, 0x00080339,
-       0xFF0F011F, 0xABCD,
-       0x016, 0x000C0356,
-       0xCDCDCDCD, 0xCDCD,
-       0x016, 0x000C0366,
-       0xFF0F011F, 0xDEAD,
-       0x000, 0x00010159,
-       0x018, 0x0000F401,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x01F, 0x00000003,
-       0x0FE, 0x00000000,
-       0x0FE, 0x00000000,
-       0x01E, 0x00000247,
-       0x01F, 0x00000000,
-       0x000, 0x00030159,
-};
-
-void ODM_ReadAndConfig_RadioA_1T_8723A(struct dm_odm_t *pDM_Odm)
-{
-       #define READ_NEXT_PAIR(v1, v2, i)                       \
-                do {                                           \
-                        i += 2; v1 = Array[i]; v2 = Array[i+1];\
-                } while (0)
-
-       u32     hex         = 0;
-       u32     i           = 0;
-       u8     platform    = 0x04;
-       u8     board       = pDM_Odm->BoardType;
-       u32     ArrayLen    = ARRAY_SIZE(Array_RadioA_1T_8723A);
-       u32 *Array = Array_RadioA_1T_8723A;
-
-       hex += board;
-       hex += ODM_ITRF_USB << 8;
-       hex += platform << 16;
-       hex += 0xFF000000;
-
-       for (i = 0; i < ArrayLen; i += 2) {
-               u32 v1 = Array[i];
-               u32 v2 = Array[i+1];
-
-               /*  This (offset, data) pair meets the condition. */
-               if (v1 < 0xCDCDCDCD) {
-                       odm_ConfigRFReg_8723A(pDM_Odm, v1, v2, RF_PATH_A, v1);
-                       continue;
-               } else {
-                       if (!CheckCondition(Array[i], hex)) {
-                               /*  Discard the following (offset, data) pairs. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               i -= 2; /*  prevent from for-loop += 2 */
-                       } else {
-                               /*  Configure matched pairs and skip to end of if-else. */
-                               READ_NEXT_PAIR(v1, v2, i);
-                               while (v2 != 0xDEAD &&
-                                      v2 != 0xCDEF &&
-                                      v2 != 0xCDCD && i < ArrayLen - 2) {
-                                       odm_ConfigRFReg_8723A(pDM_Odm, v1, v2,
-                                                             RF_PATH_A, v1);
-                                       READ_NEXT_PAIR(v1, v2, i);
-                               }
-
-                               while (v2 != 0xDEAD && i < ArrayLen - 2)
-                                       READ_NEXT_PAIR(v1, v2, i);
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c b/drivers/staging/rtl8723au/hal/HalPwrSeqCmd.c
deleted file mode 100644 (file)
index 0a3d96e..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/*++
-Copyright (c) Realtek Semiconductor Corp. All rights reserved.
-
-Module Name:
-       HalPwrSeqCmd.c
-
-Abstract:
-       Implement HW Power sequence configuration CMD handling routine for
-       Realtek devices.
-
-Major Change History:
-       When       Who               What
-       ---------- ---------------   -------------------------------
-       2011-10-26 Lucas            Modify to be compatible with SD4-CE driver.
-       2011-07-07 Roger            Create.
-
---*/
-#include <HalPwrSeqCmd.h>
-#include <usb_ops_linux.h>
-
-/*  */
-/*     Description: */
-/*             This routine deal with the Power Configuration CMDs parsing
-               for RTL8723/RTL8188E Series IC. */
-/*  */
-/*     Assumption: */
-/*             We should follow specific format which was released from
-               HW SD. */
-/*  */
-/*     2011.07.07, added by Roger. */
-/*  */
-u8 HalPwrSeqCmdParsing23a(struct rtw_adapter *padapter, u8 CutVersion,
-                      u8 FabVersion, u8 InterfaceType,
-                      struct wlan_pwr_cfg PwrSeqCmd[])
-{
-       struct wlan_pwr_cfg PwrCfgCmd;
-       u8 bPollingBit;
-       u32 AryIdx = 0;
-       u8 value;
-       u32 offset;
-       u32 pollingCount = 0;   /*  polling autoload done. */
-       u32 maxPollingCnt = 5000;
-
-       do {
-               PwrCfgCmd = PwrSeqCmd[AryIdx];
-
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "HalPwrSeqCmdParsing23a: offset(%#x) cut_msk(%#x) fab_msk(%#x) interface_msk(%#x) base(%#x) cmd(%#x) msk(%#x) value(%#x)\n",
-                        GET_PWR_CFG_OFFSET(PwrCfgCmd),
-                        GET_PWR_CFG_CUT_MASK(PwrCfgCmd),
-                        GET_PWR_CFG_FAB_MASK(PwrCfgCmd),
-                        GET_PWR_CFG_INTF_MASK(PwrCfgCmd),
-                        GET_PWR_CFG_BASE(PwrCfgCmd),
-                        GET_PWR_CFG_CMD(PwrCfgCmd),
-                        GET_PWR_CFG_MASK(PwrCfgCmd),
-                        GET_PWR_CFG_VALUE(PwrCfgCmd));
-
-               /* 2 Only Handle the command whose FAB, CUT, and Interface are
-                  matched */
-               if ((GET_PWR_CFG_FAB_MASK(PwrCfgCmd) & FabVersion) &&
-                   (GET_PWR_CFG_CUT_MASK(PwrCfgCmd) & CutVersion) &&
-                   (GET_PWR_CFG_INTF_MASK(PwrCfgCmd) & InterfaceType)) {
-                       switch (GET_PWR_CFG_CMD(PwrCfgCmd)) {
-                       case PWR_CMD_READ:
-                               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                        "HalPwrSeqCmdParsing23a: PWR_CMD_READ\n");
-                               break;
-
-                       case PWR_CMD_WRITE:
-                               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                        "HalPwrSeqCmdParsing23a: PWR_CMD_WRITE\n");
-                               offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-
-                               /*  Read the value from system register */
-                               value = rtl8723au_read8(padapter, offset);
-
-                               value &= ~(GET_PWR_CFG_MASK(PwrCfgCmd));
-                               value |= (GET_PWR_CFG_VALUE(PwrCfgCmd) &
-                                         GET_PWR_CFG_MASK(PwrCfgCmd));
-
-                               /*  Write the value back to system register */
-                               rtl8723au_write8(padapter, offset, value);
-                               break;
-
-                       case PWR_CMD_POLLING:
-                               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                        "HalPwrSeqCmdParsing23a: PWR_CMD_POLLING\n");
-
-                               bPollingBit = false;
-                               offset = GET_PWR_CFG_OFFSET(PwrCfgCmd);
-                               do {
-                                       value = rtl8723au_read8(padapter,
-                                                               offset);
-
-                                       value &= GET_PWR_CFG_MASK(PwrCfgCmd);
-                                       if (value ==
-                                           (GET_PWR_CFG_VALUE(PwrCfgCmd) &
-                                            GET_PWR_CFG_MASK(PwrCfgCmd)))
-                                               bPollingBit = true;
-                                       else
-                                               udelay(10);
-
-                                       if (pollingCount++ > maxPollingCnt) {
-                                               DBG_8723A("Fail to polling "
-                                                         "Offset[%#x]\n",
-                                                         offset);
-                                               return false;
-                                       }
-                               } while (!bPollingBit);
-
-                               break;
-
-                       case PWR_CMD_DELAY:
-                               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                        "HalPwrSeqCmdParsing23a: PWR_CMD_DELAY\n");
-                               if (GET_PWR_CFG_VALUE(PwrCfgCmd) ==
-                                   PWRSEQ_DELAY_US)
-                                       udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd));
-                               else
-                                       udelay(GET_PWR_CFG_OFFSET(PwrCfgCmd) *
-                                              1000);
-                               break;
-
-                       case PWR_CMD_END:
-                               /*  When this command is parsed, end
-                                   the process */
-                               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                        "HalPwrSeqCmdParsing23a: PWR_CMD_END\n");
-                               return true;
-
-                       default:
-                               RT_TRACE(_module_hal_init_c_, _drv_err_,
-                                        "HalPwrSeqCmdParsing23a: Unknown CMD!!\n");
-                               break;
-                       }
-               }
-
-               AryIdx++;       /* Add Array Index */
-       } while (1);
-
-       return true;
-}
diff --git a/drivers/staging/rtl8723au/hal/hal_com.c b/drivers/staging/rtl8723au/hal/hal_com.c
deleted file mode 100644 (file)
index 9d7b11b..0000000
+++ /dev/null
@@ -1,853 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <hal_intf.h>
-#include <hal_com.h>
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-#define _HAL_INIT_C_
-
-#define        EEPROM_CHANNEL_PLAN_BY_HW_MASK  0x80
-
-/* return the final channel plan decision */
-/* hw_channel_plan:  channel plan from HW (efuse/eeprom) */
-/* sw_channel_plan:  channel plan from SW (registry/module param) */
-/* def_channel_plan: channel plan used when the former two is invalid */
-u8 hal_com_get_channel_plan23a(struct rtw_adapter *padapter, u8 hw_channel_plan,
-                           u8 sw_channel_plan, u8 def_channel_plan,
-                           bool AutoLoadFail)
-{
-       u8 swConfig;
-       u8 chnlPlan;
-
-       swConfig = true;
-       if (!AutoLoadFail) {
-               if (!rtw_is_channel_plan_valid(sw_channel_plan))
-                       swConfig = false;
-               if (hw_channel_plan & EEPROM_CHANNEL_PLAN_BY_HW_MASK)
-                       swConfig = false;
-       }
-
-       if (swConfig == true)
-               chnlPlan = sw_channel_plan;
-       else
-               chnlPlan = hw_channel_plan & (~EEPROM_CHANNEL_PLAN_BY_HW_MASK);
-
-       if (!rtw_is_channel_plan_valid(chnlPlan))
-               chnlPlan = def_channel_plan;
-
-       return chnlPlan;
-}
-
-u8 MRateToHwRate23a(u8 rate)
-{
-       u8 ret = DESC_RATE1M;
-
-       switch (rate) {
-               /*  CCK and OFDM non-HT rates */
-       case IEEE80211_CCK_RATE_1MB:
-               ret = DESC_RATE1M;
-               break;
-       case IEEE80211_CCK_RATE_2MB:
-               ret = DESC_RATE2M;
-               break;
-       case IEEE80211_CCK_RATE_5MB:
-               ret = DESC_RATE5_5M;
-               break;
-       case IEEE80211_CCK_RATE_11MB:
-               ret = DESC_RATE11M;
-               break;
-       case IEEE80211_OFDM_RATE_6MB:
-               ret = DESC_RATE6M;
-               break;
-       case IEEE80211_OFDM_RATE_9MB:
-               ret = DESC_RATE9M;
-               break;
-       case IEEE80211_OFDM_RATE_12MB:
-               ret = DESC_RATE12M;
-               break;
-       case IEEE80211_OFDM_RATE_18MB:
-               ret = DESC_RATE18M;
-               break;
-       case IEEE80211_OFDM_RATE_24MB:
-               ret = DESC_RATE24M;
-               break;
-       case IEEE80211_OFDM_RATE_36MB:
-               ret = DESC_RATE36M;
-               break;
-       case IEEE80211_OFDM_RATE_48MB:
-               ret = DESC_RATE48M;
-               break;
-       case IEEE80211_OFDM_RATE_54MB:
-               ret = DESC_RATE54M;
-               break;
-
-               /*  HT rates since here */
-               /* case MGN_MCS0:       ret = DESC_RATEMCS0;    break; */
-               /* case MGN_MCS1:       ret = DESC_RATEMCS1;    break; */
-               /* case MGN_MCS2:       ret = DESC_RATEMCS2;    break; */
-               /* case MGN_MCS3:       ret = DESC_RATEMCS3;    break; */
-               /* case MGN_MCS4:       ret = DESC_RATEMCS4;    break; */
-               /* case MGN_MCS5:       ret = DESC_RATEMCS5;    break; */
-               /* case MGN_MCS6:       ret = DESC_RATEMCS6;    break; */
-               /* case MGN_MCS7:       ret = DESC_RATEMCS7;    break; */
-
-       default:
-               break;
-       }
-       return ret;
-}
-
-void HalSetBrateCfg23a(struct rtw_adapter *padapter, u8 *mBratesOS)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 i, is_brate, brate;
-       u16 brate_cfg = 0;
-       u8 rate_index;
-
-       for (i = 0; i < NDIS_802_11_LENGTH_RATES_EX; i++) {
-               is_brate = mBratesOS[i] & IEEE80211_BASIC_RATE_MASK;
-               brate = mBratesOS[i] & 0x7f;
-
-               if (is_brate) {
-                       switch (brate) {
-                       case IEEE80211_CCK_RATE_1MB:
-                               brate_cfg |= RATE_1M;
-                               break;
-                       case IEEE80211_CCK_RATE_2MB:
-                               brate_cfg |= RATE_2M;
-                               break;
-                       case IEEE80211_CCK_RATE_5MB:
-                               brate_cfg |= RATE_5_5M;
-                               break;
-                       case IEEE80211_CCK_RATE_11MB:
-                               brate_cfg |= RATE_11M;
-                               break;
-                       case IEEE80211_OFDM_RATE_6MB:
-                               brate_cfg |= RATE_6M;
-                               break;
-                       case IEEE80211_OFDM_RATE_9MB:
-                               brate_cfg |= RATE_9M;
-                               break;
-                       case IEEE80211_OFDM_RATE_12MB:
-                               brate_cfg |= RATE_12M;
-                               break;
-                       case IEEE80211_OFDM_RATE_18MB:
-                               brate_cfg |= RATE_18M;
-                               break;
-                       case IEEE80211_OFDM_RATE_24MB:
-                               brate_cfg |= RATE_24M;
-                               break;
-                       case IEEE80211_OFDM_RATE_36MB:
-                               brate_cfg |= RATE_36M;
-                               break;
-                       case IEEE80211_OFDM_RATE_48MB:
-                               brate_cfg |= RATE_48M;
-                               break;
-                       case IEEE80211_OFDM_RATE_54MB:
-                               brate_cfg |= RATE_54M;
-                               break;
-                       }
-               }
-       }
-
-       /*  2007.01.16, by Emily */
-       /*  Select RRSR (in Legacy-OFDM and CCK) */
-       /*  For 8190, we select only 24M, 12M, 6M, 11M, 5.5M, 2M,
-           and 1M from the Basic rate. */
-       /*  We do not use other rates. */
-       /* 2011.03.30 add by Luke Lee */
-       /* CCK 2M ACK should be disabled for some BCM and Atheros AP IOT */
-       /* because CCK 2M has poor TXEVM */
-       /* CCK 5.5M & 11M ACK should be enabled for better
-          performance */
-
-       brate_cfg = (brate_cfg | 0xd) & 0x15d;
-       pHalData->BasicRateSet = brate_cfg;
-       brate_cfg |= 0x01;      /*  default enable 1M ACK rate */
-       DBG_8723A("HW_VAR_BASIC_RATE: BrateCfg(%#x)\n", brate_cfg);
-
-       /*  Set RRSR rate table. */
-       rtl8723au_write8(padapter, REG_RRSR, brate_cfg & 0xff);
-       rtl8723au_write8(padapter, REG_RRSR + 1, (brate_cfg >> 8) & 0xff);
-       rtl8723au_write8(padapter, REG_RRSR + 2,
-                        rtl8723au_read8(padapter, REG_RRSR + 2) & 0xf0);
-
-       rate_index = 0;
-       /*  Set RTS initial rate */
-       while (brate_cfg > 0x1) {
-               brate_cfg >>= 1;
-               rate_index++;
-       }
-               /*  Ziv - Check */
-       rtl8723au_write8(padapter, REG_INIRTS_RATE_SEL, rate_index);
-}
-
-static void _OneOutPipeMapping(struct rtw_adapter *pAdapter)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(pAdapter);
-
-       pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0];   /* VO */
-       pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0];   /* VI */
-       pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[0];   /* BE */
-       pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0];   /* BK */
-
-       pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0];   /* BCN */
-       pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0];   /* MGT */
-       pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0];   /* HIGH */
-       pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0];   /* TXCMD */
-}
-
-static void _TwoOutPipeMapping(struct rtw_adapter *pAdapter, bool bWIFICfg)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(pAdapter);
-
-       if (bWIFICfg) {         /* WMM */
-               /*    BK,   BE,   VI,   VO,   BCN,  CMD,  MGT, HIGH, HCCA */
-               /*     0,    1,    0,    1,     0,    0,    0,    0,    0 }; */
-               /* 0:H, 1:L */
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[1]; /* VO */
-               pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0]; /* VI */
-               pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1]; /* BE */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[0]; /* BK */
-
-               pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0]; /* BCN */
-               pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0]; /* MGT */
-               pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0]; /* HIGH */
-               pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0]; /* TXCMD*/
-       } else {                /* typical setting */
-               /*    BK,   BE,   VI,   VO,   BCN,  CMD,  MGT, HIGH, HCCA */
-               /*     1,    1,    0,    0,     0,    0,    0,    0,    0 }; */
-               /* 0:H, 1:L */
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0]; /* VO */
-               pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[0]; /* VI */
-               pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[1]; /* BE */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1]; /* BK */
-
-               pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0]; /* BCN */
-               pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0]; /* MGT */
-               pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0]; /* HIGH */
-               pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0]; /* TXCMD*/
-       }
-}
-
-static void _ThreeOutPipeMapping(struct rtw_adapter *pAdapter, bool bWIFICfg)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(pAdapter);
-
-       if (bWIFICfg) {         /* for WMM */
-               /*    BK,   BE,   VI,   VO,   BCN,  CMD,  MGT, HIGH, HCCA */
-               /*     1,    2,    1,    0,     0,    0,    0,    0,    0 }; */
-               /* 0:H, 1:N, 2:L */
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0]; /* VO */
-               pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1]; /* VI */
-               pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2]; /* BE */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[1]; /* BK */
-
-               pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0]; /* BCN */
-               pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0]; /* MGT */
-               pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0]; /* HIGH */
-               pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0]; /* TXCMD*/
-       } else {                /* typical setting */
-               /*    BK,   BE,   VI,   VO,   BCN,  CMD,  MGT, HIGH, HCCA */
-               /*     2,    2,    1,    0,     0,    0,    0,    0,    0 }; */
-               /* 0:H, 1:N, 2:L */
-               pdvobjpriv->Queue2Pipe[0] = pdvobjpriv->RtOutPipe[0]; /* VO */
-               pdvobjpriv->Queue2Pipe[1] = pdvobjpriv->RtOutPipe[1]; /* VI */
-               pdvobjpriv->Queue2Pipe[2] = pdvobjpriv->RtOutPipe[2]; /* BE */
-               pdvobjpriv->Queue2Pipe[3] = pdvobjpriv->RtOutPipe[2]; /* BK */
-
-               pdvobjpriv->Queue2Pipe[4] = pdvobjpriv->RtOutPipe[0]; /* BCN */
-               pdvobjpriv->Queue2Pipe[5] = pdvobjpriv->RtOutPipe[0]; /* MGT */
-               pdvobjpriv->Queue2Pipe[6] = pdvobjpriv->RtOutPipe[0]; /* HIGH */
-               pdvobjpriv->Queue2Pipe[7] = pdvobjpriv->RtOutPipe[0]; /* TXCMD*/
-       }
-}
-
-bool Hal_MappingOutPipe23a(struct rtw_adapter *pAdapter, u8 NumOutPipe)
-{
-       struct registry_priv *pregistrypriv = &pAdapter->registrypriv;
-       bool bWIFICfg = (pregistrypriv->wifi_spec) ? true : false;
-       bool result = true;
-
-       switch (NumOutPipe) {
-       case 2:
-               _TwoOutPipeMapping(pAdapter, bWIFICfg);
-               break;
-       case 3:
-               _ThreeOutPipeMapping(pAdapter, bWIFICfg);
-               break;
-       case 1:
-               _OneOutPipeMapping(pAdapter);
-               break;
-       default:
-               result = false;
-               break;
-       }
-
-       return result;
-}
-
-/*
-* C2H event format:
-* Field         TRIGGER                CONTENT    CMD_SEQ      CMD_LEN          CMD_ID
-* BITS  [127:120]      [119:16]      [15:8]              [7:4]            [3:0]
-*/
-
-void c2h_evt_clear23a(struct rtw_adapter *adapter)
-{
-       rtl8723au_write8(adapter, REG_C2HEVT_CLEAR, C2H_EVT_HOST_CLOSE);
-}
-
-int c2h_evt_read23a(struct rtw_adapter *adapter, u8 *buf)
-{
-       int ret = _FAIL;
-       struct c2h_evt_hdr *c2h_evt;
-       int i;
-       u8 trigger;
-
-       if (buf == NULL)
-               goto exit;
-
-       trigger = rtl8723au_read8(adapter, REG_C2HEVT_CLEAR);
-
-       if (trigger == C2H_EVT_HOST_CLOSE)
-               goto exit;      /* Not ready */
-       if (trigger != C2H_EVT_FW_CLOSE)
-               goto clear_evt; /* Not a valid value */
-
-       c2h_evt = (struct c2h_evt_hdr *)buf;
-
-       memset(c2h_evt, 0, 16);
-
-       *buf = rtl8723au_read8(adapter, REG_C2HEVT_MSG_NORMAL);
-       *(buf + 1) = rtl8723au_read8(adapter, REG_C2HEVT_MSG_NORMAL + 1);
-
-       RT_PRINT_DATA(_module_hal_init_c_, _drv_info_, "c2h_evt_read23a(): ",
-                     &c2h_evt, sizeof(c2h_evt));
-
-       if (0) {
-               DBG_8723A("%s id:%u, len:%u, seq:%u, trigger:0x%02x\n",
-                         __func__, c2h_evt->id, c2h_evt->plen, c2h_evt->seq,
-                         trigger);
-       }
-
-       /* Read the content */
-       for (i = 0; i < c2h_evt->plen; i++)
-               c2h_evt->payload[i] = rtl8723au_read8(adapter,
-                                               REG_C2HEVT_MSG_NORMAL +
-                                               sizeof(*c2h_evt) + i);
-
-       RT_PRINT_DATA(_module_hal_init_c_, _drv_info_,
-                     "c2h_evt_read23a(): Command Content:\n", c2h_evt->payload,
-                     c2h_evt->plen);
-
-       ret = _SUCCESS;
-
-clear_evt:
-       /*
-        * Clear event to notify FW we have read the command.
-        * If this field isn't clear, the FW won't update the
-        * next command message.
-        */
-       c2h_evt_clear23a(adapter);
-exit:
-       return ret;
-}
-
-void
-rtl8723a_set_ampdu_min_space(struct rtw_adapter *padapter, u8 MinSpacingToSet)
-{
-       u8 SecMinSpace;
-
-       if (MinSpacingToSet <= 7) {
-               switch (padapter->securitypriv.dot11PrivacyAlgrthm) {
-               case 0:
-               case WLAN_CIPHER_SUITE_CCMP:
-                       SecMinSpace = 0;
-                       break;
-
-               case WLAN_CIPHER_SUITE_WEP40:
-               case WLAN_CIPHER_SUITE_WEP104:
-               case WLAN_CIPHER_SUITE_TKIP:
-                       SecMinSpace = 6;
-                       break;
-               default:
-                       SecMinSpace = 7;
-                       break;
-               }
-
-               if (MinSpacingToSet < SecMinSpace)
-                       MinSpacingToSet = SecMinSpace;
-
-               MinSpacingToSet |=
-                       rtl8723au_read8(padapter, REG_AMPDU_MIN_SPACE) & 0xf8;
-               rtl8723au_write8(padapter, REG_AMPDU_MIN_SPACE,
-                                MinSpacingToSet);
-       }
-}
-
-void rtl8723a_set_ampdu_factor(struct rtw_adapter *padapter, u8 FactorToSet)
-{
-       u8 RegToSet_Normal[4] = { 0x41, 0xa8, 0x72, 0xb9 };
-       u8 MaxAggNum;
-       u8 *pRegToSet;
-       u8 index = 0;
-
-       pRegToSet = RegToSet_Normal;    /*  0xb972a841; */
-
-       if (rtl8723a_BT_enabled(padapter) &&
-           rtl8723a_BT_using_antenna_1(padapter))
-               MaxAggNum = 0x8;
-       else
-               MaxAggNum = 0xF;
-
-       if (FactorToSet <= 3) {
-               FactorToSet = 1 << (FactorToSet + 2);
-               if (FactorToSet > MaxAggNum)
-                       FactorToSet = MaxAggNum;
-
-               for (index = 0; index < 4; index++) {
-                       if ((pRegToSet[index] & 0xf0) > (FactorToSet << 4))
-                               pRegToSet[index] = (pRegToSet[index] & 0x0f) |
-                                       (FactorToSet << 4);
-
-                       if ((pRegToSet[index] & 0x0f) > FactorToSet)
-                               pRegToSet[index] = (pRegToSet[index] & 0xf0) |
-                                       FactorToSet;
-
-                       rtl8723au_write8(padapter, REG_AGGLEN_LMT + index,
-                                        pRegToSet[index]);
-               }
-       }
-}
-
-void rtl8723a_set_acm_ctrl(struct rtw_adapter *padapter, u8 ctrl)
-{
-       u8 hwctrl = 0;
-
-       if (ctrl != 0) {
-               hwctrl |= AcmHw_HwEn;
-
-               if (ctrl & BIT(1))      /*  BE */
-                       hwctrl |= AcmHw_BeqEn;
-
-               if (ctrl & BIT(2))      /*  VI */
-                       hwctrl |= AcmHw_ViqEn;
-
-               if (ctrl & BIT(3))      /*  VO */
-                       hwctrl |= AcmHw_VoqEn;
-       }
-
-       DBG_8723A("[HW_VAR_ACM_CTRL] Write 0x%02X\n", hwctrl);
-       rtl8723au_write8(padapter, REG_ACMHWCTRL, hwctrl);
-}
-
-void rtl8723a_set_media_status(struct rtw_adapter *padapter, u8 status)
-{
-       u8 val8;
-
-       val8 = rtl8723au_read8(padapter, MSR) & 0x0c;
-       val8 |= status;
-       rtl8723au_write8(padapter, MSR, val8);
-}
-
-void rtl8723a_set_media_status1(struct rtw_adapter *padapter, u8 status)
-{
-       u8 val8;
-
-       val8 = rtl8723au_read8(padapter, MSR) & 0x03;
-       val8 |= status << 2;
-       rtl8723au_write8(padapter, MSR, val8);
-}
-
-void rtl8723a_set_bcn_func(struct rtw_adapter *padapter, u8 val)
-{
-       if (val)
-               SetBcnCtrlReg23a(padapter, EN_BCN_FUNCTION | EN_TXBCN_RPT, 0);
-       else
-               SetBcnCtrlReg23a(padapter, 0, EN_BCN_FUNCTION | EN_TXBCN_RPT);
-}
-
-void rtl8723a_check_bssid(struct rtw_adapter *padapter, u8 val)
-{
-       u32 val32;
-
-       val32 = rtl8723au_read32(padapter, REG_RCR);
-       if (val)
-               val32 |= RCR_CBSSID_DATA | RCR_CBSSID_BCN;
-       else
-               val32 &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN);
-       rtl8723au_write32(padapter, REG_RCR, val32);
-}
-
-void rtl8723a_mlme_sitesurvey(struct rtw_adapter *padapter, u8 flag)
-{
-       if (flag) {     /* under sitesurvey */
-               u32 v32;
-
-               /*  config RCR to receive different BSSID & not
-                   to receive data frame */
-               v32 = rtl8723au_read32(padapter, REG_RCR);
-               v32 &= ~(RCR_CBSSID_BCN);
-               rtl8723au_write32(padapter, REG_RCR, v32);
-               /*  reject all data frame */
-               rtl8723au_write16(padapter, REG_RXFLTMAP2, 0);
-
-               /*  disable update TSF */
-               SetBcnCtrlReg23a(padapter, DIS_TSF_UDT, 0);
-       } else {        /* sitesurvey done */
-
-               struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-               struct mlme_ext_info *pmlmeinfo;
-               u32 v32;
-
-               pmlmeinfo = &pmlmeext->mlmext_info;
-
-               if ((is_client_associated_to_ap23a(padapter) == true) ||
-                   ((pmlmeinfo->state & 0x03) == MSR_ADHOC) ||
-                   ((pmlmeinfo->state & 0x03) == MSR_AP)) {
-                       /*  enable to rx data frame */
-                       rtl8723au_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
-
-                       /*  enable update TSF */
-                       SetBcnCtrlReg23a(padapter, 0, DIS_TSF_UDT);
-               }
-
-               v32 = rtl8723au_read32(padapter, REG_RCR);
-               v32 |= RCR_CBSSID_BCN;
-               rtl8723au_write32(padapter, REG_RCR, v32);
-       }
-
-       rtl8723a_BT_wifiscan_notify(padapter, flag ? true : false);
-}
-
-void rtl8723a_on_rcr_am(struct rtw_adapter *padapter)
-{
-       rtl8723au_write32(padapter, REG_RCR,
-                   rtl8723au_read32(padapter, REG_RCR) | RCR_AM);
-       DBG_8723A("%s, %d, RCR = %x\n", __func__, __LINE__,
-                 rtl8723au_read32(padapter, REG_RCR));
-}
-
-void rtl8723a_off_rcr_am(struct rtw_adapter *padapter)
-{
-       rtl8723au_write32(padapter, REG_RCR,
-                   rtl8723au_read32(padapter, REG_RCR) & (~RCR_AM));
-       DBG_8723A("%s, %d, RCR = %x\n", __func__, __LINE__,
-                 rtl8723au_read32(padapter, REG_RCR));
-}
-
-void rtl8723a_set_slot_time(struct rtw_adapter *padapter, u8 slottime)
-{
-       u8 u1bAIFS, aSifsTime;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       rtl8723au_write8(padapter, REG_SLOT, slottime);
-
-       if (pmlmeinfo->WMM_enable == 0) {
-               if (pmlmeext->cur_wireless_mode == WIRELESS_11B)
-                       aSifsTime = 10;
-               else
-                       aSifsTime = 16;
-
-               u1bAIFS = aSifsTime + (2 * pmlmeinfo->slotTime);
-
-               /*  <Roger_EXP> Temporary removed, 2008.06.20. */
-               rtl8723au_write8(padapter, REG_EDCA_VO_PARAM, u1bAIFS);
-               rtl8723au_write8(padapter, REG_EDCA_VI_PARAM, u1bAIFS);
-               rtl8723au_write8(padapter, REG_EDCA_BE_PARAM, u1bAIFS);
-               rtl8723au_write8(padapter, REG_EDCA_BK_PARAM, u1bAIFS);
-       }
-}
-
-void rtl8723a_ack_preamble(struct rtw_adapter *padapter, u8 bShortPreamble)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 regTmp;
-
-       /*  Joseph marked out for Netgear 3500 TKIP
-           channel 7 issue.(Temporarily) */
-       regTmp = (pHalData->nCur40MhzPrimeSC) << 5;
-       /* regTmp = 0; */
-       if (bShortPreamble)
-               regTmp |= 0x80;
-       rtl8723au_write8(padapter, REG_RRSR + 2, regTmp);
-}
-
-void rtl8723a_set_sec_cfg(struct rtw_adapter *padapter, u8 sec)
-{
-       rtl8723au_write8(padapter, REG_SECCFG, sec);
-}
-
-void rtl8723a_cam_empty_entry(struct rtw_adapter *padapter, u8 ucIndex)
-{
-       u8 i;
-       u32 ulCommand = 0;
-       u32 ulContent = 0;
-       u32 ulEncAlgo = CAM_AES;
-
-       for (i = 0; i < CAM_CONTENT_COUNT; i++) {
-               /*  filled id in CAM config 2 byte */
-               if (i == 0) {
-                       ulContent |= (ucIndex & 0x03) |
-                               ((u16) (ulEncAlgo) << 2);
-                       /* ulContent |= CAM_VALID; */
-               } else {
-                       ulContent = 0;
-               }
-               /*  polling bit, and No Write enable, and address */
-               ulCommand = CAM_CONTENT_COUNT * ucIndex + i;
-               ulCommand = ulCommand | CAM_POLLINIG | CAM_WRITE;
-               /*  write content 0 is equall to mark invalid */
-               /* delay_ms(40); */
-               rtl8723au_write32(padapter, WCAMI, ulContent);
-               /* delay_ms(40); */
-               rtl8723au_write32(padapter, REG_CAMCMD, ulCommand);
-       }
-}
-
-void rtl8723a_cam_invalidate_all(struct rtw_adapter *padapter)
-{
-       rtl8723au_write32(padapter, REG_CAMCMD, CAM_POLLINIG | BIT(30));
-}
-
-void rtl8723a_cam_write(struct rtw_adapter *padapter,
-                       u8 entry, u16 ctrl, const u8 *mac, const u8 *key)
-{
-       u32 cmd;
-       unsigned int i, val, addr;
-       int j;
-
-       addr = entry << 3;
-
-       for (j = 5; j >= 0; j--) {
-               switch (j) {
-               case 0:
-                       val = ctrl | (mac[0] << 16) | (mac[1] << 24);
-                       break;
-               case 1:
-                       val = mac[2] | (mac[3] << 8) |
-                               (mac[4] << 16) | (mac[5] << 24);
-                       break;
-               default:
-                       i = (j - 2) << 2;
-                       val = key[i] | (key[i+1] << 8) |
-                               (key[i+2] << 16) | (key[i+3] << 24);
-                       break;
-               }
-
-               rtl8723au_write32(padapter, WCAMI, val);
-               cmd = CAM_POLLINIG | CAM_WRITE | (addr + j);
-               rtl8723au_write32(padapter, REG_CAMCMD, cmd);
-
-               /* DBG_8723A("%s => cam write: %x, %x\n", __func__, cmd, val);*/
-       }
-}
-
-void rtl8723a_fifo_cleanup(struct rtw_adapter *padapter)
-{
-#define RW_RELEASE_EN          BIT(18)
-#define RXDMA_IDLE             BIT(17)
-
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       u8 trycnt = 100;
-
-       /*  pause tx */
-       rtl8723au_write8(padapter, REG_TXPAUSE, 0xff);
-
-       /*  keep sn */
-       padapter->xmitpriv.nqos_ssn = rtl8723au_read8(padapter, REG_NQOS_SEQ);
-
-       if (pwrpriv->bkeepfwalive != true) {
-               u32 v32;
-
-               /*  RX DMA stop */
-               v32 = rtl8723au_read32(padapter, REG_RXPKT_NUM);
-               v32 |= RW_RELEASE_EN;
-               rtl8723au_write32(padapter, REG_RXPKT_NUM, v32);
-               do {
-                       v32 = rtl8723au_read32(padapter,
-                                              REG_RXPKT_NUM) & RXDMA_IDLE;
-                       if (!v32)
-                               break;
-               } while (trycnt--);
-               if (trycnt == 0)
-                       DBG_8723A("Stop RX DMA failed......\n");
-
-               /*  RQPN Load 0 */
-               rtl8723au_write16(padapter, REG_RQPN_NPQ, 0);
-               rtl8723au_write32(padapter, REG_RQPN, 0x80000000);
-               mdelay(10);
-       }
-}
-
-void rtl8723a_bcn_valid(struct rtw_adapter *padapter)
-{
-       /* BCN_VALID, BIT16 of REG_TDECTRL = BIT0 of REG_TDECTRL+2,
-          write 1 to clear, Clear by sw */
-       rtl8723au_write8(padapter, REG_TDECTRL + 2,
-                        rtl8723au_read8(padapter, REG_TDECTRL + 2) | BIT(0));
-}
-
-bool rtl8723a_get_bcn_valid(struct rtw_adapter *padapter)
-{
-       bool retval;
-
-       retval = (rtl8723au_read8(padapter, REG_TDECTRL + 2) & BIT(0)) ? true : false;
-
-       return retval;
-}
-
-void rtl8723a_set_beacon_interval(struct rtw_adapter *padapter, u16 interval)
-{
-       rtl8723au_write16(padapter, REG_BCN_INTERVAL, interval);
-}
-
-void rtl8723a_set_resp_sifs(struct rtw_adapter *padapter,
-                           u8 r2t1, u8 r2t2, u8 t2t1, u8 t2t2)
-{
-       /* SIFS_Timer = 0x0a0a0808; */
-       /* RESP_SIFS for CCK */
-       /*  SIFS_T2T_CCK (0x08) */
-       rtl8723au_write8(padapter, REG_R2T_SIFS, r2t1);
-       /* SIFS_R2T_CCK(0x08) */
-       rtl8723au_write8(padapter, REG_R2T_SIFS + 1, r2t2);
-       /* RESP_SIFS for OFDM */
-       /* SIFS_T2T_OFDM (0x0a) */
-       rtl8723au_write8(padapter, REG_T2T_SIFS, t2t1);
-       /* SIFS_R2T_OFDM(0x0a) */
-       rtl8723au_write8(padapter, REG_T2T_SIFS + 1, t2t2);
-}
-
-void rtl8723a_set_ac_param_vo(struct rtw_adapter *padapter, u32 vo)
-{
-       rtl8723au_write32(padapter, REG_EDCA_VO_PARAM, vo);
-}
-
-void rtl8723a_set_ac_param_vi(struct rtw_adapter *padapter, u32 vi)
-{
-       rtl8723au_write32(padapter, REG_EDCA_VI_PARAM, vi);
-}
-
-void rtl8723a_set_ac_param_be(struct rtw_adapter *padapter, u32 be)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->AcParam_BE = be;
-       rtl8723au_write32(padapter, REG_EDCA_BE_PARAM, be);
-}
-
-void rtl8723a_set_ac_param_bk(struct rtw_adapter *padapter, u32 bk)
-{
-       rtl8723au_write32(padapter, REG_EDCA_BK_PARAM, bk);
-}
-
-void rtl8723a_set_rxdma_agg_pg_th(struct rtw_adapter *padapter, u8 val)
-{
-       rtl8723au_write8(padapter, REG_RXDMA_AGG_PG_TH, val);
-}
-
-void rtl8723a_set_initial_gain(struct rtw_adapter *padapter, u32 rx_gain)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct dig_t *pDigTable = &pHalData->odmpriv.DM_DigTable;
-
-       if (rx_gain == 0xff)    /* restore rx gain */
-               ODM_Write_DIG23a(&pHalData->odmpriv, pDigTable->BackupIGValue);
-       else {
-               pDigTable->BackupIGValue = pDigTable->CurIGValue;
-               ODM_Write_DIG23a(&pHalData->odmpriv, rx_gain);
-       }
-}
-
-void rtl8723a_odm_support_ability_restore(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->odmpriv.SupportAbility = pHalData->odmpriv.BK_SupportAbility;
-}
-
-void rtl8723a_odm_support_ability_backup(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->odmpriv.BK_SupportAbility = pHalData->odmpriv.SupportAbility;
-}
-
-void rtl8723a_odm_support_ability_set(struct rtw_adapter *padapter, u32 val)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (val == DYNAMIC_ALL_FUNC_ENABLE)
-               pHalData->odmpriv.SupportAbility = pHalData->dmpriv.InitODMFlag;
-       else
-               pHalData->odmpriv.SupportAbility |= val;
-}
-
-void rtl8723a_odm_support_ability_clr(struct rtw_adapter *padapter, u32 val)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->odmpriv.SupportAbility &= val;
-}
-
-void rtl8723a_set_rpwm(struct rtw_adapter *padapter, u8 val)
-{
-       rtl8723au_write8(padapter, REG_USB_HRPWM, val);
-}
-
-u8 rtl8723a_get_rf_type(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       return pHalData->rf_type;
-}
-
-bool rtl8723a_get_fwlps_rf_on(struct rtw_adapter *padapter)
-{
-       bool retval;
-       u32 valRCR;
-
-       /*  When we halt NIC, we should check if FW LPS is leave. */
-
-       if ((padapter->bSurpriseRemoved == true) ||
-           (padapter->pwrctrlpriv.rf_pwrstate == rf_off)) {
-               /*  If it is in HW/SW Radio OFF or IPS state, we do
-                   not check Fw LPS Leave, because Fw is unload. */
-               retval = true;
-       } else {
-               valRCR = rtl8723au_read32(padapter, REG_RCR);
-               if (valRCR & 0x00070000)
-                       retval = false;
-               else
-                       retval = true;
-       }
-
-       return retval;
-}
-
-bool rtl8723a_chk_hi_queue_empty(struct rtw_adapter *padapter)
-{
-       u32 hgq;
-
-       hgq = rtl8723au_read32(padapter, REG_HGQ_INFORMATION);
-
-       return ((hgq & 0x0000ff00) == 0) ? true : false;
-}
diff --git a/drivers/staging/rtl8723au/hal/hal_intf.c b/drivers/staging/rtl8723au/hal/hal_intf.c
deleted file mode 100644 (file)
index 5383e69..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#define _HAL_INTF_C_
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <hal_intf.h>
-
-#include <rtl8723a_hal.h>
-
-void rtw_hal_update_ra_mask23a(struct sta_info *psta, u8 rssi_level)
-{
-       struct rtw_adapter *padapter;
-       struct mlme_priv *pmlmepriv;
-
-       if (!psta)
-               return;
-
-       padapter = psta->padapter;
-
-       pmlmepriv = &padapter->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-#ifdef CONFIG_8723AU_AP_MODE
-               add_RATid23a(padapter, psta, rssi_level);
-#endif
-       } else
-               rtl8723a_update_ramask(padapter, psta->mac_id, rssi_level);
-}
diff --git a/drivers/staging/rtl8723au/hal/odm.c b/drivers/staging/rtl8723au/hal/odm.c
deleted file mode 100644 (file)
index e279c34..0000000
+++ /dev/null
@@ -1,1732 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-#include "usb_ops_linux.h"
-
-static const u16 dB_Invert_Table[8][12] = {
-       {1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4},
-       {4, 5, 6, 6, 7, 8, 9, 10, 11, 13, 14, 16},
-       {18, 20, 22, 25, 28, 32, 35, 40, 45, 50, 56, 63},
-       {71, 79, 89, 100, 112, 126, 141, 158, 178, 200, 224, 251},
-       {282, 316, 355, 398, 447, 501, 562, 631, 708, 794, 891, 1000},
-       {1122, 1259, 1413, 1585, 1778, 1995, 2239, 2512, 2818, 3162, 3548, 3981},
-       {4467, 5012, 5623, 6310, 7079, 7943, 8913, 10000, 11220, 12589, 14125, 15849},
-       {17783, 19953, 22387, 25119, 28184, 31623, 35481, 39811, 44668, 50119, 56234, 65535}
-};
-
-static u32 EDCAParam[HT_IOT_PEER_MAX][3] = {          /*  UL                   DL */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /* 0:unknown AP */
-       {0xa44f, 0x5ea44f, 0x5e431c}, /*  1:realtek AP */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /*  2:unknown AP => realtek_92SE */
-       {0x5ea32b, 0x5ea42b, 0x5e4322}, /*  3:broadcom AP */
-       {0x5ea422, 0x00a44f, 0x00a44f}, /*  4:ralink AP */
-       {0x5ea322, 0x00a630, 0x00a44f}, /*  5:atheros AP */
-       {0x5e4322, 0x5e4322, 0x5e4322},/*  6:cisco AP */
-       {0x5ea44f, 0x00a44f, 0x5ea42b}, /*  8:marvell AP */
-       {0x5ea42b, 0x5ea42b, 0x5ea42b}, /*  10:unknown AP => 92U AP */
-       {0x5ea42b, 0xa630, 0x5e431c}, /*  11:airgocap AP */
-};
-
-/*  EDCA Parameter for AP/ADSL   by Mingzhi 2011-11-22 */
-
-/*  Global var */
-u32 OFDMSwingTable23A[OFDM_TABLE_SIZE_92D] = {
-       0x7f8001fe, /*  0, +6.0dB */
-       0x788001e2, /*  1, +5.5dB */
-       0x71c001c7, /*  2, +5.0dB */
-       0x6b8001ae, /*  3, +4.5dB */
-       0x65400195, /*  4, +4.0dB */
-       0x5fc0017f, /*  5, +3.5dB */
-       0x5a400169, /*  6, +3.0dB */
-       0x55400155, /*  7, +2.5dB */
-       0x50800142, /*  8, +2.0dB */
-       0x4c000130, /*  9, +1.5dB */
-       0x47c0011f, /*  10, +1.0dB */
-       0x43c0010f, /*  11, +0.5dB */
-       0x40000100, /*  12, +0dB */
-       0x3c8000f2, /*  13, -0.5dB */
-       0x390000e4, /*  14, -1.0dB */
-       0x35c000d7, /*  15, -1.5dB */
-       0x32c000cb, /*  16, -2.0dB */
-       0x300000c0, /*  17, -2.5dB */
-       0x2d4000b5, /*  18, -3.0dB */
-       0x2ac000ab, /*  19, -3.5dB */
-       0x288000a2, /*  20, -4.0dB */
-       0x26000098, /*  21, -4.5dB */
-       0x24000090, /*  22, -5.0dB */
-       0x22000088, /*  23, -5.5dB */
-       0x20000080, /*  24, -6.0dB */
-       0x1e400079, /*  25, -6.5dB */
-       0x1c800072, /*  26, -7.0dB */
-       0x1b00006c, /*  27. -7.5dB */
-       0x19800066, /*  28, -8.0dB */
-       0x18000060, /*  29, -8.5dB */
-       0x16c0005b, /*  30, -9.0dB */
-       0x15800056, /*  31, -9.5dB */
-       0x14400051, /*  32, -10.0dB */
-       0x1300004c, /*  33, -10.5dB */
-       0x12000048, /*  34, -11.0dB */
-       0x11000044, /*  35, -11.5dB */
-       0x10000040, /*  36, -12.0dB */
-       0x0f00003c,/*  37, -12.5dB */
-       0x0e400039,/*  38, -13.0dB */
-       0x0d800036,/*  39, -13.5dB */
-       0x0cc00033,/*  40, -14.0dB */
-       0x0c000030,/*  41, -14.5dB */
-       0x0b40002d,/*  42, -15.0dB */
-};
-
-u8 CCKSwingTable_Ch1_Ch1323A[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04}, /*  0, +0dB */
-       {0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04}, /*  1, -0.5dB */
-       {0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x03}, /*  2, -1.0dB */
-       {0x2d, 0x2d, 0x27, 0x1f, 0x18, 0x0f, 0x08, 0x03}, /*  3, -1.5dB */
-       {0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03}, /*  4, -2.0dB */
-       {0x28, 0x28, 0x22, 0x1c, 0x15, 0x0d, 0x07, 0x03}, /*  5, -2.5dB */
-       {0x26, 0x25, 0x21, 0x1b, 0x14, 0x0d, 0x06, 0x03}, /*  6, -3.0dB */
-       {0x24, 0x23, 0x1f, 0x19, 0x13, 0x0c, 0x06, 0x03}, /*  7, -3.5dB */
-       {0x22, 0x21, 0x1d, 0x18, 0x11, 0x0b, 0x06, 0x02}, /*  8, -4.0dB */
-       {0x20, 0x20, 0x1b, 0x16, 0x11, 0x08, 0x05, 0x02}, /*  9, -4.5dB */
-       {0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02}, /*  10, -5.0dB */
-       {0x1d, 0x1c, 0x18, 0x14, 0x0f, 0x0a, 0x05, 0x02}, /*  11, -5.5dB */
-       {0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02}, /*  12, -6.0dB */
-       {0x1a, 0x19, 0x16, 0x12, 0x0d, 0x09, 0x04, 0x02}, /*  13, -6.5dB */
-       {0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02}, /*  14, -7.0dB */
-       {0x17, 0x16, 0x13, 0x10, 0x0c, 0x08, 0x04, 0x02}, /*  15, -7.5dB */
-       {0x16, 0x15, 0x12, 0x0f, 0x0b, 0x07, 0x04, 0x01}, /*  16, -8.0dB */
-       {0x14, 0x14, 0x11, 0x0e, 0x0b, 0x07, 0x03, 0x02}, /*  17, -8.5dB */
-       {0x13, 0x13, 0x10, 0x0d, 0x0a, 0x06, 0x03, 0x01}, /*  18, -9.0dB */
-       {0x12, 0x12, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  19, -9.5dB */
-       {0x11, 0x11, 0x0f, 0x0c, 0x09, 0x06, 0x03, 0x01}, /*  20, -10.0dB */
-       {0x10, 0x10, 0x0e, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  21, -10.5dB */
-       {0x0f, 0x0f, 0x0d, 0x0b, 0x08, 0x05, 0x03, 0x01}, /*  22, -11.0dB */
-       {0x0e, 0x0e, 0x0c, 0x0a, 0x08, 0x05, 0x02, 0x01}, /*  23, -11.5dB */
-       {0x0d, 0x0d, 0x0c, 0x0a, 0x07, 0x05, 0x02, 0x01}, /*  24, -12.0dB */
-       {0x0d, 0x0c, 0x0b, 0x09, 0x07, 0x04, 0x02, 0x01}, /*  25, -12.5dB */
-       {0x0c, 0x0c, 0x0a, 0x09, 0x06, 0x04, 0x02, 0x01}, /*  26, -13.0dB */
-       {0x0b, 0x0b, 0x0a, 0x08, 0x06, 0x04, 0x02, 0x01}, /*  27, -13.5dB */
-       {0x0b, 0x0a, 0x09, 0x08, 0x06, 0x04, 0x02, 0x01}, /*  28, -14.0dB */
-       {0x0a, 0x0a, 0x09, 0x07, 0x05, 0x03, 0x02, 0x01}, /*  29, -14.5dB */
-       {0x0a, 0x09, 0x08, 0x07, 0x05, 0x03, 0x02, 0x01}, /*  30, -15.0dB */
-       {0x09, 0x09, 0x08, 0x06, 0x05, 0x03, 0x01, 0x01}, /*  31, -15.5dB */
-       {0x09, 0x08, 0x07, 0x06, 0x04, 0x03, 0x01, 0x01}        /*  32, -16.0dB */
-};
-
-u8 CCKSwingTable_Ch1423A[CCK_TABLE_SIZE][8] = {
-       {0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00}, /*  0, +0dB */
-       {0x33, 0x32, 0x2b, 0x19, 0x00, 0x00, 0x00, 0x00}, /*  1, -0.5dB */
-       {0x30, 0x2f, 0x29, 0x18, 0x00, 0x00, 0x00, 0x00}, /*  2, -1.0dB */
-       {0x2d, 0x2d, 0x17, 0x17, 0x00, 0x00, 0x00, 0x00}, /*  3, -1.5dB */
-       {0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00}, /*  4, -2.0dB */
-       {0x28, 0x28, 0x24, 0x14, 0x00, 0x00, 0x00, 0x00}, /*  5, -2.5dB */
-       {0x26, 0x25, 0x21, 0x13, 0x00, 0x00, 0x00, 0x00}, /*  6, -3.0dB */
-       {0x24, 0x23, 0x1f, 0x12, 0x00, 0x00, 0x00, 0x00}, /*  7, -3.5dB */
-       {0x22, 0x21, 0x1d, 0x11, 0x00, 0x00, 0x00, 0x00}, /*  8, -4.0dB */
-       {0x20, 0x20, 0x1b, 0x10, 0x00, 0x00, 0x00, 0x00}, /*  9, -4.5dB */
-       {0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00}, /*  10, -5.0dB */
-       {0x1d, 0x1c, 0x18, 0x0e, 0x00, 0x00, 0x00, 0x00}, /*  11, -5.5dB */
-       {0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00}, /*  12, -6.0dB */
-       {0x1a, 0x19, 0x16, 0x0d, 0x00, 0x00, 0x00, 0x00}, /*  13, -6.5dB */
-       {0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00}, /*  14, -7.0dB */
-       {0x17, 0x16, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00}, /*  15, -7.5dB */
-       {0x16, 0x15, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00}, /*  16, -8.0dB */
-       {0x14, 0x14, 0x11, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*  17, -8.5dB */
-       {0x13, 0x13, 0x10, 0x0a, 0x00, 0x00, 0x00, 0x00}, /*  18, -9.0dB */
-       {0x12, 0x12, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /*  19, -9.5dB */
-       {0x11, 0x11, 0x0f, 0x09, 0x00, 0x00, 0x00, 0x00}, /*  20, -10.0dB */
-       {0x10, 0x10, 0x0e, 0x08, 0x00, 0x00, 0x00, 0x00}, /*  21, -10.5dB */
-       {0x0f, 0x0f, 0x0d, 0x08, 0x00, 0x00, 0x00, 0x00}, /*  22, -11.0dB */
-       {0x0e, 0x0e, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /*  23, -11.5dB */
-       {0x0d, 0x0d, 0x0c, 0x07, 0x00, 0x00, 0x00, 0x00}, /*  24, -12.0dB */
-       {0x0d, 0x0c, 0x0b, 0x06, 0x00, 0x00, 0x00, 0x00}, /*  25, -12.5dB */
-       {0x0c, 0x0c, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*  26, -13.0dB */
-       {0x0b, 0x0b, 0x0a, 0x06, 0x00, 0x00, 0x00, 0x00}, /*  27, -13.5dB */
-       {0x0b, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  28, -14.0dB */
-       {0x0a, 0x0a, 0x09, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  29, -14.5dB */
-       {0x0a, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  30, -15.0dB */
-       {0x09, 0x09, 0x08, 0x05, 0x00, 0x00, 0x00, 0x00}, /*  31, -15.5dB */
-       {0x09, 0x08, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00}        /*  32, -16.0dB */
-};
-
-/*  Local Function predefine. */
-
-/* START------------COMMON INFO RELATED--------------- */
-void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm);
-
-static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData);
-
-void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm);
-
-void odm_CmnInfoUpdate_Debug23a(struct dm_odm_t *pDM_Odm);
-
-/* START---------------DIG--------------------------- */
-void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm);
-
-void odm_DIG23aInit(struct dm_odm_t *pDM_Odm);
-
-void odm_DIG23a(struct rtw_adapter *adapter);
-
-void odm_CCKPacketDetectionThresh23a(struct dm_odm_t *pDM_Odm);
-/* END---------------DIG--------------------------- */
-
-/* START-------BB POWER SAVE----------------------- */
-void odm23a_DynBBPSInit(struct dm_odm_t *pDM_Odm);
-
-
-/* END---------BB POWER SAVE----------------------- */
-
-void odm_DynamicTxPower23aInit(struct dm_odm_t *pDM_Odm);
-
-static void odm_RSSIMonitorCheck(struct dm_odm_t *pDM_Odm);
-void odm_DynamicTxPower23a(struct dm_odm_t *pDM_Odm);
-
-static void odm_RefreshRateAdaptiveMask(struct dm_odm_t *pDM_Odm);
-
-void odm_RateAdaptiveMaskInit23a(struct dm_odm_t *pDM_Odm);
-
-static void odm_TXPowerTrackingInit(struct dm_odm_t *pDM_Odm);
-
-static void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm);
-static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm);
-
-#define                RxDefaultAnt1           0x65a9
-#define        RxDefaultAnt2           0x569a
-
-bool odm_StaDefAntSel(struct dm_odm_t *pDM_Odm,
-       u32 OFDM_Ant1_Cnt,
-       u32 OFDM_Ant2_Cnt,
-       u32 CCK_Ant1_Cnt,
-       u32 CCK_Ant2_Cnt,
-       u8 *pDefAnt
-       );
-
-void odm_SetRxIdleAnt(struct dm_odm_t *pDM_Odm,
-       u8 Ant,
-       bool   bDualPath
-);
-
-/* 3 Export Interface */
-
-/*  2011/09/21 MH Add to describe different team necessary resource allocate?? */
-void ODM23a_DMInit(struct dm_odm_t *pDM_Odm)
-{
-       /* For all IC series */
-       odm_CommonInfoSelfInit23a(pDM_Odm);
-       odm_CmnInfoInit_Debug23a(pDM_Odm);
-       odm_DIG23aInit(pDM_Odm);
-       odm_RateAdaptiveMaskInit23a(pDM_Odm);
-
-       odm23a_DynBBPSInit(pDM_Odm);
-       odm_DynamicTxPower23aInit(pDM_Odm);
-       odm_TXPowerTrackingInit(pDM_Odm);
-       ODM_EdcaTurboInit23a(pDM_Odm);
-}
-
-/*  2011/09/20 MH This is the entry pointer for all team to execute HW out source DM. */
-/*  You can not add any dummy function here, be care, you can only use DM structure */
-/*  to perform any new ODM_DM. */
-void ODM_DMWatchdog23a(struct rtw_adapter *adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(adapter);
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       struct pwrctrl_priv *pwrctrlpriv = &adapter->pwrctrlpriv;
-
-       /* 2012.05.03 Luke: For all IC series */
-       odm_CmnInfoUpdate_Debug23a(pDM_Odm);
-       odm_CommonInfoSelfUpdate(pHalData);
-       odm_FalseAlarmCounterStatistics23a(pDM_Odm);
-       odm_RSSIMonitorCheck(pDM_Odm);
-
-       /* 8723A or 8189ES platform */
-       /* NeilChen--2012--08--24-- */
-       /* Fix Leave LPS issue */
-       if ((pDM_Odm->Adapter->pwrctrlpriv.pwr_mode != PS_MODE_ACTIVE) &&/*  in LPS mode */
-           (pDM_Odm->SupportICType & ODM_RTL8723A)) {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("----Step1: odm_DIG23a is in LPS mode\n"));
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("---Step2: 8723AS is in LPS mode\n"));
-                       odm_DIG23abyRSSI_LPS(pDM_Odm);
-       } else {
-               odm_DIG23a(adapter);
-       }
-
-       odm_CCKPacketDetectionThresh23a(pDM_Odm);
-
-       if (pwrctrlpriv->bpower_saving)
-               return;
-
-       odm_RefreshRateAdaptiveMask(pDM_Odm);
-
-
-       odm_EdcaTurboCheck23a(pDM_Odm);
-}
-
-/*  */
-/*  Init /.. Fixed HW value. Only init time. */
-/*  */
-void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm,
-               enum odm_cmninfo CmnInfo,
-               u32 Value
-       )
-{
-       /* ODM_RT_TRACE(pDM_Odm,); */
-
-       /*  */
-       /*  This section is used for init value */
-       /*  */
-       switch  (CmnInfo) {
-       /*  Fixed ODM value. */
-       case    ODM_CMNINFO_MP_TEST_CHIP:
-               pDM_Odm->bIsMPChip = (u8)Value;
-               break;
-       case    ODM_CMNINFO_IC_TYPE:
-               pDM_Odm->SupportICType = Value;
-               break;
-       case    ODM_CMNINFO_CUT_VER:
-               pDM_Odm->CutVersion = (u8)Value;
-               break;
-       case    ODM_CMNINFO_FAB_VER:
-               pDM_Odm->FabVersion = (u8)Value;
-               break;
-       case    ODM_CMNINFO_BOARD_TYPE:
-               pDM_Odm->BoardType = (u8)Value;
-               break;
-       case    ODM_CMNINFO_EXT_LNA:
-               pDM_Odm->ExtLNA = (u8)Value;
-               break;
-       case    ODM_CMNINFO_EXT_PA:
-               pDM_Odm->ExtPA = (u8)Value;
-               break;
-       case    ODM_CMNINFO_EXT_TRSW:
-               pDM_Odm->ExtTRSW = (u8)Value;
-               break;
-       case    ODM_CMNINFO_BINHCT_TEST:
-               pDM_Odm->bInHctTest = (bool)Value;
-               break;
-       case    ODM_CMNINFO_BWIFI_TEST:
-               pDM_Odm->bWIFITest = (bool)Value;
-               break;
-       case    ODM_CMNINFO_SMART_CONCURRENT:
-               pDM_Odm->bDualMacSmartConcurrent = (bool)Value;
-               break;
-       /* To remove the compiler warning, must add an empty default statement to handle the other values. */
-       default:
-               /* do nothing */
-               break;
-       }
-}
-
-void ODM_CmnInfoPtrArrayHook23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo CmnInfo,
-                               u16 Index, void *pValue)
-{
-       /*  Hook call by reference pointer. */
-       switch  (CmnInfo) {
-       /*  Dynamic call by reference pointer. */
-       case    ODM_CMNINFO_STA_STATUS:
-               pDM_Odm->pODM_StaInfo[Index] = (struct sta_info *)pValue;
-               break;
-       /* To remove the compiler warning, must add an empty default statement to handle the other values. */
-       default:
-               /* do nothing */
-               break;
-       }
-}
-
-/*  Update Band/CHannel/.. The values are dynamic but non-per-packet. */
-void ODM_CmnInfoUpdate23a(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value)
-{
-       /*  This init variable may be changed in run time. */
-       switch  (CmnInfo) {
-       case    ODM_CMNINFO_WIFI_DIRECT:
-               pDM_Odm->bWIFI_Direct = (bool)Value;
-               break;
-       case    ODM_CMNINFO_WIFI_DISPLAY:
-               pDM_Odm->bWIFI_Display = (bool)Value;
-               break;
-       case    ODM_CMNINFO_LINK:
-               pDM_Odm->bLinked = (bool)Value;
-               break;
-       case    ODM_CMNINFO_RSSI_MIN:
-               pDM_Odm->RSSI_Min = (u8)Value;
-               break;
-       case    ODM_CMNINFO_DBG_COMP:
-               pDM_Odm->DebugComponents = Value;
-               break;
-       case    ODM_CMNINFO_DBG_LEVEL:
-               pDM_Odm->DebugLevel = (u32)Value;
-               break;
-       case    ODM_CMNINFO_RA_THRESHOLD_HIGH:
-               pDM_Odm->RateAdaptive.HighRSSIThresh = (u8)Value;
-               break;
-       case    ODM_CMNINFO_RA_THRESHOLD_LOW:
-               pDM_Odm->RateAdaptive.LowRSSIThresh = (u8)Value;
-               break;
-       }
-
-}
-
-void odm_CommonInfoSelfInit23a(struct dm_odm_t *pDM_Odm)
-{
-       u32 val32;
-
-       val32 = rtl8723au_read32(pDM_Odm->Adapter, rFPGA0_XA_HSSIParameter2);
-       if (val32 & BIT(9))
-               pDM_Odm->bCckHighPower = true;
-       else
-               pDM_Odm->bCckHighPower = false;
-
-       pDM_Odm->RFPathRxEnable =
-               rtl8723au_read32(pDM_Odm->Adapter, rOFDM0_TRxPathEnable) & 0x0F;
-
-       ODM_InitDebugSetting23a(pDM_Odm);
-}
-
-static void odm_CommonInfoSelfUpdate(struct hal_data_8723a *pHalData)
-{
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       struct sta_info *pEntry;
-       u8 EntryCnt = 0;
-       u8 i;
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               pEntry = pDM_Odm->pODM_StaInfo[i];
-               if (pEntry)
-                       EntryCnt++;
-       }
-       if (EntryCnt == 1)
-               pDM_Odm->bOneEntryOnly = true;
-       else
-               pDM_Odm->bOneEntryOnly = false;
-}
-
-void odm_CmnInfoInit_Debug23a(struct dm_odm_t *pDM_Odm)
-{
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoInit_Debug23a ==>\n"));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportAbility = 0x%x\n", pDM_Odm->SupportAbility));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("SupportICType = 0x%x\n", pDM_Odm->SupportICType));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("CutVersion =%d\n", pDM_Odm->CutVersion));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("FabVersion =%d\n", pDM_Odm->FabVersion));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("BoardType =%d\n", pDM_Odm->BoardType));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtLNA =%d\n", pDM_Odm->ExtLNA));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtPA =%d\n", pDM_Odm->ExtPA));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("ExtTRSW =%d\n", pDM_Odm->ExtTRSW));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bInHctTest =%d\n", pDM_Odm->bInHctTest));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFITest =%d\n", pDM_Odm->bWIFITest));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bDualMacSmartConcurrent =%d\n", pDM_Odm->bDualMacSmartConcurrent));
-
-}
-
-void odm_CmnInfoUpdate_Debug23a(struct dm_odm_t *pDM_Odm)
-{
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("odm_CmnInfoUpdate_Debug23a ==>\n"));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFI_Direct =%d\n", pDM_Odm->bWIFI_Direct));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bWIFI_Display =%d\n", pDM_Odm->bWIFI_Display));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("bLinked =%d\n", pDM_Odm->bLinked));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_COMMON, ODM_DBG_LOUD, ("RSSI_Min =%d\n", pDM_Odm->RSSI_Min));
-}
-
-void ODM_Write_DIG23a(struct dm_odm_t *pDM_Odm,        u8 CurrentIGI)
-{
-       struct rtw_adapter *adapter = pDM_Odm->Adapter;
-       struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       u32 val32;
-
-       if (pDM_DigTable->CurIGValue != CurrentIGI) {
-               val32 = rtl8723au_read32(adapter, ODM_REG_IGI_A_11N);
-               val32 &= ~ODM_BIT_IGI_11N;
-               val32 |= CurrentIGI;
-               rtl8723au_write32(adapter, ODM_REG_IGI_A_11N, val32);
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                            ("CurrentIGI(0x%02x). \n", CurrentIGI));
-               pDM_DigTable->CurIGValue = CurrentIGI;
-       }
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                    ("ODM_Write_DIG23a():CurrentIGI = 0x%x \n", CurrentIGI));
-}
-
-/* Need LPS mode for CE platform --2012--08--24--- */
-/* 8723AS/8189ES */
-void odm_DIG23abyRSSI_LPS(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *pAdapter = pDM_Odm->Adapter;
-       struct false_alarm_stats *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u8 RSSI_Lower = DM_DIG_MIN_NIC;   /* 0x1E or 0x1C */
-       u8 bFwCurrentInPSMode = false;
-       u8 CurrentIGI = pDM_Odm->RSSI_Min;
-
-       if (!(pDM_Odm->SupportICType & ODM_RTL8723A))
-               return;
-
-       CurrentIGI = CurrentIGI+RSSI_OFFSET_DIG;
-       bFwCurrentInPSMode = pAdapter->pwrctrlpriv.bFwCurrentInPSMode;
-
-       /*  Using FW PS mode to make IGI */
-       if (bFwCurrentInPSMode) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                            ("---Neil---odm_DIG23a is in LPS mode\n"));
-               /* Adjust by  FA in LPS MODE */
-               if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2_LPS)
-                       CurrentIGI = CurrentIGI+2;
-               else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1_LPS)
-                       CurrentIGI = CurrentIGI+1;
-               else if (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0_LPS)
-                       CurrentIGI = CurrentIGI-1;
-       } else {
-               CurrentIGI = RSSI_Lower;
-       }
-
-       /* Lower bound checking */
-
-       /* RSSI Lower bound check */
-       if ((pDM_Odm->RSSI_Min-10) > DM_DIG_MIN_NIC)
-               RSSI_Lower = (pDM_Odm->RSSI_Min-10);
-       else
-               RSSI_Lower = DM_DIG_MIN_NIC;
-
-       /* Upper and Lower Bound checking */
-        if (CurrentIGI > DM_DIG_MAX_NIC)
-               CurrentIGI = DM_DIG_MAX_NIC;
-        else if (CurrentIGI < RSSI_Lower)
-               CurrentIGI = RSSI_Lower;
-
-       ODM_Write_DIG23a(pDM_Odm, CurrentIGI);
-}
-
-void odm_DIG23aInit(struct dm_odm_t *pDM_Odm)
-{
-       struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       u32 val32;
-
-       val32 = rtl8723au_read32(pDM_Odm->Adapter, ODM_REG_IGI_A_11N);
-       pDM_DigTable->CurIGValue = val32 & ODM_BIT_IGI_11N;
-
-       pDM_DigTable->RssiLowThresh     = DM_DIG_THRESH_LOW;
-       pDM_DigTable->RssiHighThresh    = DM_DIG_THRESH_HIGH;
-       pDM_DigTable->FALowThresh       = DM_FALSEALARM_THRESH_LOW;
-       pDM_DigTable->FAHighThresh      = DM_FALSEALARM_THRESH_HIGH;
-       if (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) {
-               pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-               pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-       } else {
-               pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-               pDM_DigTable->rx_gain_range_min = DM_DIG_MIN_NIC;
-       }
-       pDM_DigTable->BackoffVal = DM_DIG_BACKOFF_DEFAULT;
-       pDM_DigTable->BackoffVal_range_max = DM_DIG_BACKOFF_MAX;
-       pDM_DigTable->BackoffVal_range_min = DM_DIG_BACKOFF_MIN;
-       pDM_DigTable->PreCCK_CCAThres = 0xFF;
-       pDM_DigTable->CurCCK_CCAThres = 0x83;
-       pDM_DigTable->ForbiddenIGI = DM_DIG_MIN_NIC;
-       pDM_DigTable->LargeFAHit = 0;
-       pDM_DigTable->Recover_cnt = 0;
-       pDM_DigTable->DIG_Dynamic_MIN_0 = DM_DIG_MIN_NIC;
-       pDM_DigTable->DIG_Dynamic_MIN_1 = DM_DIG_MIN_NIC;
-       pDM_DigTable->bMediaConnect_0 = false;
-       pDM_DigTable->bMediaConnect_1 = false;
-}
-
-void odm_DIG23a(struct rtw_adapter *adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(adapter);
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-       struct false_alarm_stats *pFalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u8 DIG_Dynamic_MIN;
-       u8 DIG_MaxOfMin;
-       bool FirstConnect, FirstDisConnect;
-       u8 dm_dig_max, dm_dig_min;
-       u8 CurrentIGI = pDM_DigTable->CurIGValue;
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                    ("odm_DIG23a() ==>\n"));
-       if (adapter->mlmepriv.bScanInProcess) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                            ("odm_DIG23a() Return: In Scan Progress \n"));
-               return;
-       }
-
-       DIG_Dynamic_MIN = pDM_DigTable->DIG_Dynamic_MIN_0;
-       FirstConnect = (pDM_Odm->bLinked) && (!pDM_DigTable->bMediaConnect_0);
-       FirstDisConnect = (!pDM_Odm->bLinked) &&
-               (pDM_DigTable->bMediaConnect_0);
-
-       /* 1 Boundary Decision */
-       if ((pDM_Odm->SupportICType & ODM_RTL8723A) &&
-           (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR || pDM_Odm->ExtLNA)) {
-               dm_dig_max = DM_DIG_MAX_NIC_HP;
-               dm_dig_min = DM_DIG_MIN_NIC_HP;
-               DIG_MaxOfMin = DM_DIG_MAX_AP_HP;
-       } else {
-               dm_dig_max = DM_DIG_MAX_NIC;
-               dm_dig_min = DM_DIG_MIN_NIC;
-               DIG_MaxOfMin = DM_DIG_MAX_AP;
-       }
-
-       if (pDM_Odm->bLinked) {
-             /* 2 8723A Series, offset need to be 10 */
-               if (pDM_Odm->SupportICType == ODM_RTL8723A) {
-                       /* 2 Upper Bound */
-                       if ((pDM_Odm->RSSI_Min + 10) > DM_DIG_MAX_NIC)
-                               pDM_DigTable->rx_gain_range_max = DM_DIG_MAX_NIC;
-                       else if ((pDM_Odm->RSSI_Min + 10) < DM_DIG_MIN_NIC)
-                               pDM_DigTable->rx_gain_range_max = DM_DIG_MIN_NIC;
-                       else
-                               pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 10;
-
-                       /* 2 If BT is Concurrent, need to set Lower Bound */
-                       DIG_Dynamic_MIN = DM_DIG_MIN_NIC;
-               } else {
-                       /* 2 Modify DIG upper bound */
-                       if ((pDM_Odm->RSSI_Min + 20) > dm_dig_max)
-                               pDM_DigTable->rx_gain_range_max = dm_dig_max;
-                       else if ((pDM_Odm->RSSI_Min + 20) < dm_dig_min)
-                               pDM_DigTable->rx_gain_range_max = dm_dig_min;
-                       else
-                               pDM_DigTable->rx_gain_range_max = pDM_Odm->RSSI_Min + 20;
-
-                       /* 2 Modify DIG lower bound */
-                       if (pDM_Odm->bOneEntryOnly) {
-                               if (pDM_Odm->RSSI_Min < dm_dig_min)
-                                       DIG_Dynamic_MIN = dm_dig_min;
-                               else if (pDM_Odm->RSSI_Min > DIG_MaxOfMin)
-                                       DIG_Dynamic_MIN = DIG_MaxOfMin;
-                               else
-                                       DIG_Dynamic_MIN = pDM_Odm->RSSI_Min;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                                            ("odm_DIG23a() : bOneEntryOnly = true,  DIG_Dynamic_MIN = 0x%x\n",
-                                            DIG_Dynamic_MIN));
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                                            ("odm_DIG23a() : pDM_Odm->RSSI_Min =%d\n",
-                                            pDM_Odm->RSSI_Min));
-                       } else {
-                               DIG_Dynamic_MIN = dm_dig_min;
-                       }
-               }
-       } else {
-               pDM_DigTable->rx_gain_range_max = dm_dig_max;
-               DIG_Dynamic_MIN = dm_dig_min;
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a() : No Link\n"));
-       }
-
-       /* 1 Modify DIG lower bound, deal with abnormally large false alarm */
-       if (pFalseAlmCnt->Cnt_all > 10000) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                            ("dm_DIG(): Abnornally false alarm case. \n"));
-
-               if (pDM_DigTable->LargeFAHit != 3)
-                       pDM_DigTable->LargeFAHit++;
-               if (pDM_DigTable->ForbiddenIGI < CurrentIGI) {
-                       pDM_DigTable->ForbiddenIGI = CurrentIGI;
-                       pDM_DigTable->LargeFAHit = 1;
-               }
-
-               if (pDM_DigTable->LargeFAHit >= 3) {
-                       if ((pDM_DigTable->ForbiddenIGI+1) > pDM_DigTable->rx_gain_range_max)
-                               pDM_DigTable->rx_gain_range_min = pDM_DigTable->rx_gain_range_max;
-                       else
-                               pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
-                       pDM_DigTable->Recover_cnt = 3600; /* 3600 = 2hr */
-               }
-       } else {
-               /* Recovery mechanism for IGI lower bound */
-               if (pDM_DigTable->Recover_cnt != 0) {
-                       pDM_DigTable->Recover_cnt--;
-               } else {
-                       if (pDM_DigTable->LargeFAHit < 3) {
-                               if ((pDM_DigTable->ForbiddenIGI - 1) < DIG_Dynamic_MIN) {
-                                       pDM_DigTable->ForbiddenIGI = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
-                                       pDM_DigTable->rx_gain_range_min = DIG_Dynamic_MIN; /* DM_DIG_MIN; */
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                                                    ("odm_DIG23a(): Normal Case: At Lower Bound\n"));
-                               } else {
-                                       pDM_DigTable->ForbiddenIGI--;
-                                       pDM_DigTable->rx_gain_range_min = (pDM_DigTable->ForbiddenIGI + 1);
-                                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD,
-                                                    ("odm_DIG23a(): Normal Case: Approach Lower Bound\n"));
-                               }
-                       } else {
-                               pDM_DigTable->LargeFAHit = 0;
-                       }
-               }
-       }
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): pDM_DigTable->LargeFAHit =%d\n", pDM_DigTable->LargeFAHit));
-
-       /* 1 Adjust initial gain by false alarm */
-       if (pDM_Odm->bLinked) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): DIG AfterLink\n"));
-               if (FirstConnect) {
-                       CurrentIGI = pDM_Odm->RSSI_Min;
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("DIG: First Connect\n"));
-               } else {
-                       if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH2)
-                               CurrentIGI = CurrentIGI + 4;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2; */
-                       else if (pFalseAlmCnt->Cnt_all > DM_DIG_FA_TH1)
-                               CurrentIGI = CurrentIGI + 2;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1; */
-                       else if (pFalseAlmCnt->Cnt_all < DM_DIG_FA_TH0)
-                               CurrentIGI = CurrentIGI - 2;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue-1; */
-               }
-       } else {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): DIG BeforeLink\n"));
-               if (FirstDisConnect) {
-                       CurrentIGI = pDM_DigTable->rx_gain_range_min;
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): First DisConnect \n"));
-               } else {
-                       /* 2012.03.30 LukeLee: enable DIG before link but with very high thresholds */
-                       if (pFalseAlmCnt->Cnt_all > 10000)
-                               CurrentIGI = CurrentIGI + 2;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+2; */
-                       else if (pFalseAlmCnt->Cnt_all > 8000)
-                               CurrentIGI = CurrentIGI + 1;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue+1; */
-                       else if (pFalseAlmCnt->Cnt_all < 500)
-                               CurrentIGI = CurrentIGI - 1;/* pDM_DigTable->CurIGValue = pDM_DigTable->PreIGValue-1; */
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): England DIG \n"));
-               }
-       }
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): DIG End Adjust IGI\n"));
-       /* 1 Check initial gain by upper/lower bound */
-       if (CurrentIGI > pDM_DigTable->rx_gain_range_max)
-               CurrentIGI = pDM_DigTable->rx_gain_range_max;
-       if (CurrentIGI < pDM_DigTable->rx_gain_range_min)
-               CurrentIGI = pDM_DigTable->rx_gain_range_min;
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): rx_gain_range_max = 0x%x, rx_gain_range_min = 0x%x\n",
-               pDM_DigTable->rx_gain_range_max, pDM_DigTable->rx_gain_range_min));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): TotalFA =%d\n", pFalseAlmCnt->Cnt_all));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_DIG, ODM_DBG_LOUD, ("odm_DIG23a(): CurIGValue = 0x%x\n", CurrentIGI));
-
-       /* 2 High power RSSI threshold */
-
-       ODM_Write_DIG23a(pDM_Odm, CurrentIGI);/* ODM_Write_DIG23a(pDM_Odm, pDM_DigTable->CurIGValue); */
-       pDM_DigTable->bMediaConnect_0 = pDM_Odm->bLinked;
-       pDM_DigTable->DIG_Dynamic_MIN_0 = DIG_Dynamic_MIN;
-}
-
-/* 3 ============================================================ */
-/* 3 FASLE ALARM CHECK */
-/* 3 ============================================================ */
-
-void odm_FalseAlarmCounterStatistics23a(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *adapter = pDM_Odm->Adapter;
-       struct false_alarm_stats *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u32 ret_value, val32;
-
-       /* hold ofdm counter */
-       /* hold page C counter */
-       val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_HOLDC_11N);
-       val32 |= BIT(31);
-       rtl8723au_write32(adapter, ODM_REG_OFDM_FA_HOLDC_11N, val32);
-       /* hold page D counter */
-       val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTD_11N);
-       val32 |= BIT(31);
-       rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTD_11N, val32);
-       ret_value = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_TYPE1_11N);
-       FalseAlmCnt->Cnt_Fast_Fsync = (ret_value&0xffff);
-       FalseAlmCnt->Cnt_SB_Search_fail = (ret_value & 0xffff0000)>>16;
-       ret_value = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_TYPE2_11N);
-       FalseAlmCnt->Cnt_OFDM_CCA = (ret_value&0xffff);
-       FalseAlmCnt->Cnt_Parity_Fail = (ret_value & 0xffff0000)>>16;
-       ret_value = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_TYPE3_11N);
-       FalseAlmCnt->Cnt_Rate_Illegal = (ret_value&0xffff);
-       FalseAlmCnt->Cnt_Crc8_fail = (ret_value & 0xffff0000)>>16;
-       ret_value = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_TYPE4_11N);
-       FalseAlmCnt->Cnt_Mcs_fail = (ret_value&0xffff);
-
-       FalseAlmCnt->Cnt_Ofdm_fail = FalseAlmCnt->Cnt_Parity_Fail +
-               FalseAlmCnt->Cnt_Rate_Illegal +
-               FalseAlmCnt->Cnt_Crc8_fail +
-               FalseAlmCnt->Cnt_Mcs_fail +
-               FalseAlmCnt->Cnt_Fast_Fsync +
-               FalseAlmCnt->Cnt_SB_Search_fail;
-       /* hold cck counter */
-       val32 = rtl8723au_read32(adapter, ODM_REG_CCK_FA_RST_11N);
-       val32 |= (BIT(12) | BIT(14));
-       rtl8723au_write32(adapter, ODM_REG_CCK_FA_RST_11N, val32);
-
-       ret_value = rtl8723au_read32(adapter, ODM_REG_CCK_FA_LSB_11N) & 0xff;
-       FalseAlmCnt->Cnt_Cck_fail = ret_value;
-       ret_value = rtl8723au_read32(adapter, ODM_REG_CCK_FA_MSB_11N) >> 16;
-       FalseAlmCnt->Cnt_Cck_fail += (ret_value & 0xff00);
-
-       ret_value = rtl8723au_read32(adapter, ODM_REG_CCK_CCA_CNT_11N);
-       FalseAlmCnt->Cnt_CCK_CCA =
-               ((ret_value&0xFF)<<8) | ((ret_value&0xFF00)>>8);
-
-       FalseAlmCnt->Cnt_all = (FalseAlmCnt->Cnt_Fast_Fsync +
-                               FalseAlmCnt->Cnt_SB_Search_fail +
-                               FalseAlmCnt->Cnt_Parity_Fail +
-                               FalseAlmCnt->Cnt_Rate_Illegal +
-                               FalseAlmCnt->Cnt_Crc8_fail +
-                               FalseAlmCnt->Cnt_Mcs_fail +
-                               FalseAlmCnt->Cnt_Cck_fail);
-
-       FalseAlmCnt->Cnt_CCA_all =
-               FalseAlmCnt->Cnt_OFDM_CCA + FalseAlmCnt->Cnt_CCK_CCA;
-
-       if (pDM_Odm->SupportICType >= ODM_RTL8723A) {
-               /* reset false alarm counter registers */
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTC_11N);
-               val32 |= BIT(31);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTC_11N, val32);
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTC_11N);
-               val32 &= ~BIT(31);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTC_11N, val32);
-
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTD_11N);
-               val32 |= BIT(27);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTD_11N, val32);
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTD_11N);
-               val32 &= ~BIT(27);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTD_11N, val32);
-
-               /* update ofdm counter */
-                /* update page C counter */
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_HOLDC_11N);
-               val32 &= ~BIT(31);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_HOLDC_11N, val32);
-
-                /* update page D counter */
-               val32 = rtl8723au_read32(adapter, ODM_REG_OFDM_FA_RSTD_11N);
-               val32 &= ~BIT(31);
-               rtl8723au_write32(adapter, ODM_REG_OFDM_FA_RSTD_11N, val32);
-
-               /* reset CCK CCA counter */
-               val32 = rtl8723au_read32(adapter, ODM_REG_CCK_FA_RST_11N);
-               val32 &= ~(BIT(12) | BIT(13) | BIT(14) | BIT(15));
-               rtl8723au_write32(adapter, ODM_REG_CCK_FA_RST_11N, val32);
-
-               val32 = rtl8723au_read32(adapter, ODM_REG_CCK_FA_RST_11N);
-               val32 |= (BIT(13) | BIT(15));
-               rtl8723au_write32(adapter, ODM_REG_CCK_FA_RST_11N, val32);
-       }
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Enter odm_FalseAlarmCounterStatistics23a\n"));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Cnt_Fast_Fsync =%d, Cnt_SB_Search_fail =%d\n",
-                     FalseAlmCnt->Cnt_Fast_Fsync,
-                     FalseAlmCnt->Cnt_SB_Search_fail));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Cnt_Parity_Fail =%d, Cnt_Rate_Illegal =%d\n",
-                     FalseAlmCnt->Cnt_Parity_Fail,
-                     FalseAlmCnt->Cnt_Rate_Illegal));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Cnt_Crc8_fail =%d, Cnt_Mcs_fail =%d\n",
-                     FalseAlmCnt->Cnt_Crc8_fail, FalseAlmCnt->Cnt_Mcs_fail));
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Cnt_Cck_fail =%d\n", FalseAlmCnt->Cnt_Cck_fail));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Cnt_Ofdm_fail =%d\n", FalseAlmCnt->Cnt_Ofdm_fail));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_FA_CNT, ODM_DBG_LOUD,
-                    ("Total False Alarm =%d\n", FalseAlmCnt->Cnt_all));
-}
-
-/* 3 ============================================================ */
-/* 3 CCK Packet Detect Threshold */
-/* 3 ============================================================ */
-
-void odm_CCKPacketDetectionThresh23a(struct dm_odm_t *pDM_Odm)
-{
-       struct false_alarm_stats *FalseAlmCnt = &pDM_Odm->FalseAlmCnt;
-       u8 CurCCK_CCAThres;
-
-       if (pDM_Odm->ExtLNA)
-               return;
-
-       if (pDM_Odm->bLinked) {
-               if (pDM_Odm->RSSI_Min > 25) {
-                       CurCCK_CCAThres = 0xcd;
-               } else if (pDM_Odm->RSSI_Min <= 25 && pDM_Odm->RSSI_Min > 10) {
-                       CurCCK_CCAThres = 0x83;
-               } else {
-                       if (FalseAlmCnt->Cnt_Cck_fail > 1000)
-                               CurCCK_CCAThres = 0x83;
-                       else
-                               CurCCK_CCAThres = 0x40;
-               }
-       } else {
-               if (FalseAlmCnt->Cnt_Cck_fail > 1000)
-                       CurCCK_CCAThres = 0x83;
-               else
-                       CurCCK_CCAThres = 0x40;
-       }
-
-       ODM_Write_CCK_CCA_Thres23a(pDM_Odm, CurCCK_CCAThres);
-}
-
-void ODM_Write_CCK_CCA_Thres23a(struct dm_odm_t *pDM_Odm, u8 CurCCK_CCAThres)
-{
-       struct dig_t *pDM_DigTable = &pDM_Odm->DM_DigTable;
-
-       if (pDM_DigTable->CurCCK_CCAThres != CurCCK_CCAThres)
-               rtl8723au_write8(pDM_Odm->Adapter, ODM_REG(CCK_CCA, pDM_Odm),
-                                CurCCK_CCAThres);
-       pDM_DigTable->PreCCK_CCAThres = pDM_DigTable->CurCCK_CCAThres;
-       pDM_DigTable->CurCCK_CCAThres = CurCCK_CCAThres;
-}
-
-/* 3 ============================================================ */
-/* 3 BB Power Save */
-/* 3 ============================================================ */
-void odm23a_DynBBPSInit(struct dm_odm_t *pDM_Odm)
-{
-       struct dynamic_pwr_sav *pDM_PSTable = &pDM_Odm->DM_PSTable;
-
-       pDM_PSTable->PreCCAState = CCA_MAX;
-       pDM_PSTable->CurCCAState = CCA_MAX;
-       pDM_PSTable->PreRFState = RF_MAX;
-       pDM_PSTable->CurRFState = RF_MAX;
-       pDM_PSTable->Rssi_val_min = 0;
-       pDM_PSTable->initialize = 0;
-}
-
-
-void ODM_RF_Saving23a(struct dm_odm_t *pDM_Odm, u8 bForceInNormal)
-{
-       struct dynamic_pwr_sav *pDM_PSTable = &pDM_Odm->DM_PSTable;
-       struct rtw_adapter *adapter = pDM_Odm->Adapter;
-       u32 val32;
-       u8 Rssi_Up_bound = 30;
-       u8 Rssi_Low_bound = 25;
-       if (pDM_PSTable->initialize == 0) {
-
-               pDM_PSTable->Reg874 =
-                       rtl8723au_read32(adapter, 0x874) & 0x1CC000;
-               pDM_PSTable->RegC70 =
-                       rtl8723au_read32(adapter, 0xc70) & BIT(3);
-               pDM_PSTable->Reg85C =
-                       rtl8723au_read32(adapter, 0x85c) & 0xFF000000;
-               pDM_PSTable->RegA74 = rtl8723au_read32(adapter, 0xa74) & 0xF000;
-               pDM_PSTable->initialize = 1;
-       }
-
-       if (!bForceInNormal) {
-               if (pDM_Odm->RSSI_Min != 0xFF) {
-                       if (pDM_PSTable->PreRFState == RF_Normal) {
-                               if (pDM_Odm->RSSI_Min >= Rssi_Up_bound)
-                                       pDM_PSTable->CurRFState = RF_Save;
-                               else
-                                       pDM_PSTable->CurRFState = RF_Normal;
-                       } else {
-                               if (pDM_Odm->RSSI_Min <= Rssi_Low_bound)
-                                       pDM_PSTable->CurRFState = RF_Normal;
-                               else
-                                       pDM_PSTable->CurRFState = RF_Save;
-                       }
-               } else {
-                       pDM_PSTable->CurRFState = RF_MAX;
-               }
-       } else {
-               pDM_PSTable->CurRFState = RF_Normal;
-       }
-
-       if (pDM_PSTable->PreRFState != pDM_PSTable->CurRFState) {
-               if (pDM_PSTable->CurRFState == RF_Save) {
-                       /*  <tynli_note> 8723 RSSI report will be wrong.
-                        * Set 0x874[5]= 1 when enter BB power saving mode. */
-                       /*  Suggested by SD3 Yu-Nan. 2011.01.20. */
-                       /* Reg874[5]= 1b'1 */
-                       if (pDM_Odm->SupportICType == ODM_RTL8723A) {
-                               val32 = rtl8723au_read32(adapter, 0x874);
-                               val32 |= BIT(5);
-                               rtl8723au_write32(adapter, 0x874, val32);
-                       }
-                       /* Reg874[20:18]= 3'b010 */
-                       val32 = rtl8723au_read32(adapter, 0x874);
-                       val32 &= ~(BIT(18) | BIT(20));
-                       val32 |= BIT(19);
-                       rtl8723au_write32(adapter, 0x874, val32);
-                       /* RegC70[3]= 1'b0 */
-                       val32 = rtl8723au_read32(adapter, 0xc70);
-                       val32 &= ~BIT(3);
-                       rtl8723au_write32(adapter, 0xc70, val32);
-                       /* Reg85C[31:24]= 0x63 */
-                       val32 = rtl8723au_read32(adapter, 0x85c);
-                       val32 &= 0x00ffffff;
-                       val32 |= 0x63000000;
-                       rtl8723au_write32(adapter, 0x85c, val32);
-                       /* Reg874[15:14]= 2'b10 */
-                       val32 = rtl8723au_read32(adapter, 0x874);
-                       val32 &= ~BIT(14);
-                       val32 |= BIT(15);
-                       rtl8723au_write32(adapter, 0x874, val32);
-                       /* RegA75[7:4]= 0x3 */
-                       val32 = rtl8723au_read32(adapter, 0xa74);
-                       val32 &= ~(BIT(14) | BIT(15));
-                       val32 |= (BIT(12) | BIT(13));
-                       rtl8723au_write32(adapter, 0xa74, val32);
-                       /* Reg818[28]= 1'b0 */
-                       val32 = rtl8723au_read32(adapter, 0x818);
-                       val32 &= ~BIT(28);
-                       rtl8723au_write32(adapter, 0x818, val32);
-                       /* Reg818[28]= 1'b1 */
-                       val32 = rtl8723au_read32(adapter, 0x818);
-                       val32 |= BIT(28);
-                       rtl8723au_write32(adapter, 0x818, val32);
-               } else {
-                       val32 = rtl8723au_read32(adapter, 0x874);
-                       val32 |= pDM_PSTable->Reg874;
-                       rtl8723au_write32(adapter, 0x874, val32);
-
-                       val32 = rtl8723au_read32(adapter, 0xc70);
-                       val32 |= pDM_PSTable->RegC70;
-                       rtl8723au_write32(adapter, 0xc70, val32);
-
-                       val32 = rtl8723au_read32(adapter, 0x85c);
-                       val32 |= pDM_PSTable->Reg85C;
-                       rtl8723au_write32(adapter, 0x85c, val32);
-
-                       val32 = rtl8723au_read32(adapter, 0xa74);
-                       val32 |= pDM_PSTable->RegA74;
-                       rtl8723au_write32(adapter, 0xa74, val32);
-
-                       val32 = rtl8723au_read32(adapter, 0x818);
-                       val32 &= ~BIT(28);
-                       rtl8723au_write32(adapter, 0x818, val32);
-
-                       /* Reg874[5]= 1b'0 */
-                       if (pDM_Odm->SupportICType == ODM_RTL8723A) {
-                               val32 = rtl8723au_read32(adapter, 0x874);
-                               val32 &= ~BIT(5);
-                               rtl8723au_write32(adapter, 0x874, val32);
-                       }
-               }
-               pDM_PSTable->PreRFState = pDM_PSTable->CurRFState;
-       }
-}
-
-/* 3 ============================================================ */
-/* 3 RATR MASK */
-/* 3 ============================================================ */
-/* 3 ============================================================ */
-/* 3 Rate Adaptive */
-/* 3 ============================================================ */
-
-void odm_RateAdaptiveMaskInit23a(struct dm_odm_t *pDM_Odm)
-{
-       struct odm_rate_adapt *pOdmRA = &pDM_Odm->RateAdaptive;
-
-       pOdmRA->Type = DM_Type_ByDriver;
-
-       pOdmRA->RATRState = DM_RATR_STA_INIT;
-       pOdmRA->HighRSSIThresh = 50;
-       pOdmRA->LowRSSIThresh = 20;
-}
-
-u32 ODM_Get_Rate_Bitmap23a(struct hal_data_8723a *pHalData, u32 macid,
-                          u32 ra_mask, u8 rssi_level)
-{
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       struct sta_info *pEntry;
-       u32 rate_bitmap = 0x0fffffff;
-       u8 WirelessMode;
-
-       pEntry = pDM_Odm->pODM_StaInfo[macid];
-       if (!pEntry)
-               return ra_mask;
-
-       WirelessMode = pEntry->wireless_mode;
-
-       switch (WirelessMode) {
-       case ODM_WM_B:
-               if (ra_mask & 0x0000000c)               /* 11M or 5.5M enable */
-                       rate_bitmap = 0x0000000d;
-               else
-                       rate_bitmap = 0x0000000f;
-               break;
-       case (ODM_WM_A|ODM_WM_G):
-               if (rssi_level == DM_RATR_STA_HIGH)
-                       rate_bitmap = 0x00000f00;
-               else
-                       rate_bitmap = 0x00000ff0;
-               break;
-       case (ODM_WM_B|ODM_WM_G):
-               if (rssi_level == DM_RATR_STA_HIGH)
-                       rate_bitmap = 0x00000f00;
-               else if (rssi_level == DM_RATR_STA_MIDDLE)
-                       rate_bitmap = 0x00000ff0;
-               else
-                       rate_bitmap = 0x00000ff5;
-               break;
-       case (ODM_WM_B|ODM_WM_G|ODM_WM_N24G):
-       case (ODM_WM_A|ODM_WM_B|ODM_WM_G|ODM_WM_N24G):
-               if (pHalData->rf_type == RF_1T2R ||
-                   pHalData->rf_type == RF_1T1R) {
-                       if (rssi_level == DM_RATR_STA_HIGH) {
-                               rate_bitmap = 0x000f0000;
-                       } else if (rssi_level == DM_RATR_STA_MIDDLE) {
-                               rate_bitmap = 0x000ff000;
-                       } else {
-                               if (pHalData->CurrentChannelBW ==
-                                   HT_CHANNEL_WIDTH_40)
-                                       rate_bitmap = 0x000ff015;
-                               else
-                                       rate_bitmap = 0x000ff005;
-                       }
-               } else {
-                       if (rssi_level == DM_RATR_STA_HIGH) {
-                               rate_bitmap = 0x0f8f0000;
-                       } else if (rssi_level == DM_RATR_STA_MIDDLE) {
-                               rate_bitmap = 0x0f8ff000;
-                       } else {
-                               if (pHalData->CurrentChannelBW ==
-                                   HT_CHANNEL_WIDTH_40)
-                                       rate_bitmap = 0x0f8ff015;
-                               else
-                                       rate_bitmap = 0x0f8ff005;
-                       }
-               }
-               break;
-       default:
-               /* case WIRELESS_11_24N: */
-               /* case WIRELESS_11_5N: */
-               if (pHalData->rf_type == RF_1T2R)
-                       rate_bitmap = 0x000fffff;
-               else
-                       rate_bitmap = 0x0fffffff;
-               break;
-       }
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD,
-       (" ==> rssi_level:0x%02x, WirelessMode:0x%02x, rate_bitmap:0x%08x \n",
-        rssi_level, WirelessMode, rate_bitmap));
-
-       return rate_bitmap;
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   odm_RefreshRateAdaptiveMask()
- *
- * Overview:   Update rate table mask according to rssi
- *
- * Input:              NONE
- *
- * Output:             NONE
- *
- * Return:             NONE
- *
- * Revised History:
- *When         Who             Remark
- *05/27/2009   hpfan   Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-static void odm_RefreshRateAdaptiveMask(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *pAdapter = pDM_Odm->Adapter;
-       u32 smoothed;
-       u8 i;
-
-       if (pAdapter->bDriverStopped) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_TRACE,
-                            ("<---- %s: driver is going to unload\n",
-                             __func__));
-               return;
-       }
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               struct sta_info *pstat = pDM_Odm->pODM_StaInfo[i];
-               if (pstat) {
-                       smoothed = pstat->rssi_stat.UndecoratedSmoothedPWDB;
-                       if (ODM_RAStateCheck23a(pDM_Odm, smoothed, false,
-                                               &pstat->rssi_level)) {
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK,
-                                            ODM_DBG_LOUD,
-                                            ("RSSI:%d, RSSI_LEVEL:%d\n",
-                                             smoothed,
-                                             pstat->rssi_level));
-                               rtw_hal_update_ra_mask23a(pstat,
-                                                         pstat->rssi_level);
-                       }
-               }
-       }
-}
-
-/*  Return Value: bool */
-/*  - true: RATRState is changed. */
-bool ODM_RAStateCheck23a(struct dm_odm_t *pDM_Odm, s32 RSSI, bool bForceUpdate,
-                        u8 *pRATRState)
-{
-       struct odm_rate_adapt *pRA = &pDM_Odm->RateAdaptive;
-       const u8 GoUpGap = 5;
-       u8 HighRSSIThreshForRA = pRA->HighRSSIThresh;
-       u8 LowRSSIThreshForRA = pRA->LowRSSIThresh;
-       u8 RATRState;
-
-       /*  Threshold Adjustment: */
-       /*  when RSSI state trends to go up one or two levels, make sure RSSI is high enough. */
-       /*  Here GoUpGap is added to solve the boundary's level alternation issue. */
-       switch (*pRATRState) {
-       case DM_RATR_STA_INIT:
-       case DM_RATR_STA_HIGH:
-               break;
-       case DM_RATR_STA_MIDDLE:
-               HighRSSIThreshForRA += GoUpGap;
-               break;
-       case DM_RATR_STA_LOW:
-               HighRSSIThreshForRA += GoUpGap;
-               LowRSSIThreshForRA += GoUpGap;
-               break;
-       default:
-               ODM_RT_ASSERT(pDM_Odm, false, ("wrong rssi level setting %d !",
-                                              *pRATRState));
-               break;
-       }
-
-       /*  Decide RATRState by RSSI. */
-       if (RSSI > HighRSSIThreshForRA)
-               RATRState = DM_RATR_STA_HIGH;
-       else if (RSSI > LowRSSIThreshForRA)
-               RATRState = DM_RATR_STA_MIDDLE;
-       else
-               RATRState = DM_RATR_STA_LOW;
-
-       if (*pRATRState != RATRState || bForceUpdate) {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD,
-                            ("RSSI Level %d -> %d\n", *pRATRState, RATRState));
-               *pRATRState = RATRState;
-               return true;
-       }
-       return false;
-}
-
-/* 3 ============================================================ */
-/* 3 Dynamic Tx Power */
-/* 3 ============================================================ */
-
-void odm_DynamicTxPower23aInit(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-       /*
-        * This is never changed, so we should be able to clean up the
-        * code checking for different values in rtl8723a_rf6052.c
-        */
-       pdmpriv->DynamicTxHighPowerLvl = TxHighPwrLevel_Normal;
-}
-
-static void
-FindMinimumRSSI(struct rtw_adapter *pAdapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-
-       /* 1 1.Determine the minimum RSSI */
-
-       if (!pDM_Odm->bLinked && !pdmpriv->EntryMinUndecoratedSmoothedPWDB)
-               pdmpriv->MinUndecoratedPWDBForDM = 0;
-       else
-               pdmpriv->MinUndecoratedPWDBForDM =
-                       pdmpriv->EntryMinUndecoratedSmoothedPWDB;
-}
-
-static void odm_RSSIMonitorCheck(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       int i;
-       int MaxDB = 0, MinDB = 0xff;
-       u8 sta_cnt = 0;
-       u32 tmpdb;
-       u32 PWDB_rssi[NUM_STA] = {0};/* 0~15]:MACID, [16~31]:PWDB_rssi */
-       struct sta_info *psta;
-
-       if (!pDM_Odm->bLinked)
-               return;
-
-       for (i = 0; i < ODM_ASSOCIATE_ENTRY_NUM; i++) {
-               psta = pDM_Odm->pODM_StaInfo[i];
-               if (psta) {
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB < MinDB)
-                               MinDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
-
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB > MaxDB)
-                               MaxDB = psta->rssi_stat.UndecoratedSmoothedPWDB;
-
-                       if (psta->rssi_stat.UndecoratedSmoothedPWDB != -1) {
-                               tmpdb = psta->rssi_stat.UndecoratedSmoothedPWDB;
-                               PWDB_rssi[sta_cnt++] = psta->mac_id |
-                                       (tmpdb << 16);
-                       }
-               }
-       }
-
-       for (i = 0; i < sta_cnt; i++) {
-               if (PWDB_rssi[i] != (0))
-                       rtl8723a_set_rssi_cmd(Adapter, PWDB_rssi[i]);
-       }
-
-       pdmpriv->EntryMaxUndecoratedSmoothedPWDB = MaxDB;
-
-       if (MinDB != 0xff) /*  If associated entry is found */
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = MinDB;
-       else
-               pdmpriv->EntryMinUndecoratedSmoothedPWDB = 0;
-
-       FindMinimumRSSI(Adapter);/* get pdmpriv->MinUndecoratedPWDBForDM */
-
-       ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_RSSI_MIN,
-                            pdmpriv->MinUndecoratedPWDBForDM);
-}
-
-/* endif */
-/* 3 ============================================================ */
-/* 3 Tx Power Tracking */
-/* 3 ============================================================ */
-
-static void odm_TXPowerTrackingInit(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-
-       pdmpriv->bTXPowerTracking = true;
-       pdmpriv->TXPowercount = 0;
-       pdmpriv->bTXPowerTrackingInit = false;
-       pdmpriv->TxPowerTrackControl = true;
-       MSG_8723A("pdmpriv->TxPowerTrackControl = %d\n",
-                 pdmpriv->TxPowerTrackControl);
-
-       pDM_Odm->RFCalibrateInfo.TxPowerTrackControl = true;
-}
-
-/* EDCA Turbo */
-static void ODM_EdcaTurboInit23a(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-
-       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false;
-       Adapter->recvpriv.bIsAnyNonBEPkts = false;
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD,
-                    ("Orginial VO PARAM: 0x%x\n",
-                     rtl8723au_read32(Adapter, ODM_EDCA_VO_PARAM)));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD,
-                    ("Orginial VI PARAM: 0x%x\n",
-                     rtl8723au_read32(Adapter, ODM_EDCA_VI_PARAM)));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD,
-                    ("Orginial BE PARAM: 0x%x\n",
-                     rtl8723au_read32(Adapter, ODM_EDCA_BE_PARAM)));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_EDCA_TURBO, ODM_DBG_LOUD,
-                    ("Orginial BK PARAM: 0x%x\n",
-                     rtl8723au_read32(Adapter, ODM_EDCA_BK_PARAM)));
-}
-
-static void odm_EdcaTurboCheck23a(struct dm_odm_t *pDM_Odm)
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct xmit_priv *pxmitpriv = &Adapter->xmitpriv;
-       struct recv_priv *precvpriv = &Adapter->recvpriv;
-       struct registry_priv *pregpriv = &Adapter->registrypriv;
-       struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       u32 trafficIndex;
-       u32 edca_param;
-       u64 cur_tx_bytes;
-       u64 cur_rx_bytes;
-
-       /*  For AP/ADSL use struct rtl8723a_priv * */
-       /*  For CE/NIC use struct rtw_adapter * */
-
-       /*
-        * 2011/09/29 MH In HW integration first stage, we provide 4
-        * different handle to operate at the same time. In the stage2/3,
-        * we need to prive universal interface and merge all HW dynamic
-        * mechanism.
-        */
-
-       if ((pregpriv->wifi_spec == 1))/*  (pmlmeinfo->HT_enable == 0)) */
-               goto dm_CheckEdcaTurbo_EXIT;
-
-       if (pmlmeinfo->assoc_AP_vendor >=  HT_IOT_PEER_MAX)
-               goto dm_CheckEdcaTurbo_EXIT;
-
-       if (rtl8723a_BT_disable_EDCA_turbo(Adapter))
-               goto dm_CheckEdcaTurbo_EXIT;
-
-       /*  Check if the status needs to be changed. */
-       if (!precvpriv->bIsAnyNonBEPkts) {
-               cur_tx_bytes = pxmitpriv->tx_bytes - pxmitpriv->last_tx_bytes;
-               cur_rx_bytes = precvpriv->rx_bytes - precvpriv->last_rx_bytes;
-
-               /* traffic, TX or RX */
-               if ((pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_RALINK) ||
-                   (pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_ATHEROS)) {
-                       if (cur_tx_bytes > (cur_rx_bytes << 2)) {
-                               /*  Uplink TP is present. */
-                               trafficIndex = UP_LINK;
-                       } else { /*  Balance TP is present. */
-                               trafficIndex = DOWN_LINK;
-                       }
-               } else {
-                       if (cur_rx_bytes > (cur_tx_bytes << 2)) {
-                               /*  Downlink TP is present. */
-                               trafficIndex = DOWN_LINK;
-                       } else { /*  Balance TP is present. */
-                               trafficIndex = UP_LINK;
-                       }
-               }
-
-               if ((pDM_Odm->DM_EDCA_Table.prv_traffic_idx != trafficIndex) ||
-                   (!pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA)) {
-                       if ((pmlmeinfo->assoc_AP_vendor == HT_IOT_PEER_CISCO) &&
-                           (pmlmeext->cur_wireless_mode & WIRELESS_11_24N))
-                               edca_param = EDCAParam[pmlmeinfo->assoc_AP_vendor][trafficIndex];
-                       else
-                               edca_param = EDCAParam[HT_IOT_PEER_UNKNOWN][trafficIndex];
-                       rtl8723au_write32(Adapter, REG_EDCA_BE_PARAM,
-                                         edca_param);
-
-                       pDM_Odm->DM_EDCA_Table.prv_traffic_idx = trafficIndex;
-               }
-
-               pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = true;
-       } else {
-               /*  Turn Off EDCA turbo here. */
-               /*  Restore original EDCA according to the declaration of AP. */
-               if (pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA) {
-                       rtl8723au_write32(Adapter, REG_EDCA_BE_PARAM,
-                                         pHalData->AcParam_BE);
-                       pDM_Odm->DM_EDCA_Table.bCurrentTurboEDCA = false;
-               }
-       }
-
-dm_CheckEdcaTurbo_EXIT:
-       /*  Set variables for next time. */
-       precvpriv->bIsAnyNonBEPkts = false;
-       pxmitpriv->last_tx_bytes = pxmitpriv->tx_bytes;
-       precvpriv->last_rx_bytes = precvpriv->rx_bytes;
-}
-
-u32 GetPSDData(struct dm_odm_t *pDM_Odm, unsigned int point,
-              u8 initial_gain_psd)
-{
-       struct rtw_adapter *adapter = pDM_Odm->Adapter;
-       u32 psd_report, val32;
-
-       /* Set DCO frequency index, offset = (40MHz/SamplePts)*point */
-       val32 = rtl8723au_read32(adapter, 0x808);
-       val32 &= ~0x3ff;
-       val32 |= (point & 0x3ff);
-       rtl8723au_write32(adapter, 0x808, val32);
-
-       /* Start PSD calculation, Reg808[22]= 0->1 */
-       val32 = rtl8723au_read32(adapter, 0x808);
-       val32 |= BIT(22);
-       rtl8723au_write32(adapter, 0x808, val32);
-       /* Need to wait for HW PSD report */
-       udelay(30);
-       val32 = rtl8723au_read32(adapter, 0x808);
-       val32 &= ~BIT(22);
-       rtl8723au_write32(adapter, 0x808, val32);
-       /* Read PSD report, Reg8B4[15:0] */
-       psd_report = rtl8723au_read32(adapter, 0x8B4) & 0x0000FFFF;
-
-       psd_report = (u32)(ConvertTo_dB23a(psd_report)) +
-               (u32)(initial_gain_psd-0x1c);
-
-       return psd_report;
-}
-
-u32 ConvertTo_dB23a(u32 Value)
-{
-       u8 i;
-       u8 j;
-       u32 dB;
-
-       Value = Value & 0xFFFF;
-
-       for (i = 0; i < 8; i++) {
-               if (Value <= dB_Invert_Table[i][11])
-                       break;
-       }
-
-       if (i >= 8)
-               return 96;      /*  maximum 96 dB */
-
-       for (j = 0; j < 12; j++) {
-               if (Value <= dB_Invert_Table[i][j])
-                       break;
-       }
-
-       dB = i*12 + j + 1;
-
-       return dB;
-}
-
-/*  */
-/*  Description: */
-/* Set Single/Dual Antenna default setting for products that do not
- * do detection in advance. */
-/*  */
-/*  Added by Joseph, 2012.03.22 */
-/*  */
-void ODM_SingleDualAntennaDefaultSetting(struct dm_odm_t *pDM_Odm)
-{
-       struct sw_ant_sw *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       pDM_SWAT_Table->ANTA_ON = true;
-       pDM_SWAT_Table->ANTB_ON = true;
-}
-
-/* 2 8723A ANT DETECT */
-
-static void odm_PHY_SaveAFERegisters(struct dm_odm_t *pDM_Odm, u32 *AFEReg,
-                                    u32 *AFEBackup, u32 RegisterNum)
-{
-       u32 i;
-
-       for (i = 0 ; i < RegisterNum ; i++)
-               AFEBackup[i] = rtl8723au_read32(pDM_Odm->Adapter, AFEReg[i]);
-}
-
-static void odm_PHY_ReloadAFERegisters(struct dm_odm_t *pDM_Odm, u32 *AFEReg,
-                                      u32 *AFEBackup, u32 RegiesterNum)
-{
-       u32 i;
-
-       for (i = 0 ; i < RegiesterNum; i++)
-               rtl8723au_write32(pDM_Odm->Adapter, AFEReg[i], AFEBackup[i]);
-}
-
-/* 2 8723A ANT DETECT */
-/*  Description: */
-/* Implement IQK single tone for RF DPK loopback and BB PSD scanning. */
-/* This function is cooperated with BB team Neil. */
-bool ODM_SingleDualAntennaDetection(struct dm_odm_t *pDM_Odm, u8 mode)
-{
-       struct sw_ant_sw *pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-       struct rtw_adapter *adapter = pDM_Odm->Adapter;
-       u32 CurrentChannel, RfLoopReg;
-       u8 n;
-       u32 Reg88c, Regc08, Reg874, Regc50, val32;
-       u8 initial_gain = 0x5a;
-       u32 PSD_report_tmp;
-       u32 AntA_report = 0x0, AntB_report = 0x0, AntO_report = 0x0;
-       bool bResult = true;
-       u32 AFE_Backup[16];
-       u32 AFE_REG_8723A[16] = {
-               rRx_Wait_CCA, rTx_CCK_RFON,
-               rTx_CCK_BBON, rTx_OFDM_RFON,
-               rTx_OFDM_BBON, rTx_To_Rx,
-               rTx_To_Tx, rRx_CCK,
-               rRx_OFDM, rRx_Wait_RIFS,
-               rRx_TO_Rx, rStandby,
-               rSleep, rPMPD_ANAEN,
-               rFPGA0_XCD_SwitchControl, rBlue_Tooth};
-
-       if (!(pDM_Odm->SupportICType & ODM_RTL8723A))
-               return bResult;
-
-       if (!(pDM_Odm->SupportAbility&ODM_BB_ANT_DIV))
-               return bResult;
-       /* 1 Backup Current RF/BB Settings */
-
-       CurrentChannel = ODM_GetRFReg(pDM_Odm, RF_PATH_A, ODM_CHANNEL,
-                                     bRFRegOffsetMask);
-       RfLoopReg = ODM_GetRFReg(pDM_Odm, RF_PATH_A, 0x00, bRFRegOffsetMask);
-       /*  change to Antenna A */
-       val32 = rtl8723au_read32(adapter, rFPGA0_XA_RFInterfaceOE);
-       val32 &= ~0x300;
-       val32 |= 0x100;         /* Enable antenna A */
-       rtl8723au_write32(adapter, rFPGA0_XA_RFInterfaceOE, val32);
-
-       /*  Step 1: USE IQK to transmitter single tone */
-
-       udelay(10);
-
-       /* Store A Path Register 88c, c08, 874, c50 */
-       Reg88c = rtl8723au_read32(adapter, rFPGA0_AnalogParameter4);
-       Regc08 = rtl8723au_read32(adapter, rOFDM0_TRMuxPar);
-       Reg874 = rtl8723au_read32(adapter, rFPGA0_XCD_RFInterfaceSW);
-       Regc50 = rtl8723au_read32(adapter, rOFDM0_XAAGCCore1);
-
-       /*  Store AFE Registers */
-       odm_PHY_SaveAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);
-
-       /* Set PSD 128 pts */
-       val32 = rtl8723au_read32(adapter, rFPGA0_PSDFunction);
-       val32 &= ~(BIT(14) | BIT(15));
-       rtl8723au_write32(adapter, rFPGA0_PSDFunction, val32);
-
-       /*  To SET CH1 to do */
-       ODM_SetRFReg(pDM_Odm, RF_PATH_A, ODM_CHANNEL, bRFRegOffsetMask, 0x01);
-
-       /*  AFE all on step */
-       rtl8723au_write32(adapter, rRx_Wait_CCA, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_CCK_RFON, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_CCK_BBON, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_OFDM_RFON, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_OFDM_BBON, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_To_Rx, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rTx_To_Tx, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rRx_CCK, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rRx_OFDM, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rRx_Wait_RIFS, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rRx_TO_Rx, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rStandby, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rSleep, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rPMPD_ANAEN, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rFPGA0_XCD_SwitchControl, 0x6FDB25A4);
-       rtl8723au_write32(adapter, rBlue_Tooth, 0x6FDB25A4);
-
-       /*  3 wire Disable */
-       rtl8723au_write32(adapter, rFPGA0_AnalogParameter4, 0xCCF000C0);
-
-       /* BB IQK Setting */
-       rtl8723au_write32(adapter, rOFDM0_TRMuxPar, 0x000800E4);
-       rtl8723au_write32(adapter, rFPGA0_XCD_RFInterfaceSW, 0x22208000);
-
-       /* IQK setting tone@ 4.34Mhz */
-       rtl8723au_write32(adapter, rTx_IQK_Tone_A, 0x10008C1C);
-       rtl8723au_write32(adapter, rTx_IQK, 0x01007c00);
-
-       /* Page B init */
-       rtl8723au_write32(adapter, rConfig_AntA, 0x00080000);
-       rtl8723au_write32(adapter, rConfig_AntA, 0x0f600000);
-       rtl8723au_write32(adapter, rRx_IQK, 0x01004800);
-       rtl8723au_write32(adapter, rRx_IQK_Tone_A, 0x10008c1f);
-       rtl8723au_write32(adapter, rTx_IQK_PI_A, 0x82150008);
-       rtl8723au_write32(adapter, rRx_IQK_PI_A, 0x28150008);
-       rtl8723au_write32(adapter, rIQK_AGC_Rsp, 0x001028d0);
-
-       /* RF loop Setting */
-       ODM_SetRFReg(pDM_Odm, RF_PATH_A, 0x0, 0xFFFFF, 0x50008);
-
-       /* IQK Single tone start */
-       rtl8723au_write32(adapter, rFPGA0_IQK, 0x80800000);
-       rtl8723au_write32(adapter, rIQK_AGC_Pts, 0xf8000000);
-       udelay(1000);
-       PSD_report_tmp = 0x0;
-
-       for (n = 0; n < 2; n++) {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);
-               if (PSD_report_tmp > AntA_report)
-                       AntA_report = PSD_report_tmp;
-       }
-
-       PSD_report_tmp = 0x0;
-
-       val32 = rtl8723au_read32(adapter, rFPGA0_XA_RFInterfaceOE);
-       val32 &= ~0x300;
-       val32 |= 0x200;         /* Enable antenna B */
-       rtl8723au_write32(adapter, rFPGA0_XA_RFInterfaceOE, val32);
-       udelay(10);
-
-       for (n = 0; n < 2; n++) {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);
-               if (PSD_report_tmp > AntB_report)
-                       AntB_report = PSD_report_tmp;
-       }
-
-       /*  change to open case */
-       /*  change to Ant A and B all open case */
-       val32 = rtl8723au_read32(adapter, rFPGA0_XA_RFInterfaceOE);
-       val32 &= ~0x300;
-       rtl8723au_write32(adapter, rFPGA0_XA_RFInterfaceOE, val32);
-       udelay(10);
-
-       for (n = 0; n < 2; n++) {
-               PSD_report_tmp =  GetPSDData(pDM_Odm, 14, initial_gain);
-               if (PSD_report_tmp > AntO_report)
-                       AntO_report = PSD_report_tmp;
-       }
-
-       /* Close IQK Single Tone function */
-       rtl8723au_write32(adapter, rFPGA0_IQK, 0x00000000);
-       PSD_report_tmp = 0x0;
-
-       /* 1 Return to antanna A */
-       val32 = rtl8723au_read32(adapter, rFPGA0_XA_RFInterfaceOE);
-       val32 &= ~0x300;
-       val32 |= 0x100;         /* Enable antenna A */
-       rtl8723au_write32(adapter, rFPGA0_XA_RFInterfaceOE, val32);
-       rtl8723au_write32(adapter, rFPGA0_AnalogParameter4, Reg88c);
-       rtl8723au_write32(adapter, rOFDM0_TRMuxPar, Regc08);
-       rtl8723au_write32(adapter, rFPGA0_XCD_RFInterfaceSW, Reg874);
-       val32 = rtl8723au_read32(adapter, rOFDM0_XAAGCCore1);
-       val32 &= ~0x7f;
-       val32 |= 0x40;
-       rtl8723au_write32(adapter, rOFDM0_XAAGCCore1, val32);
-
-       rtl8723au_write32(adapter, rOFDM0_XAAGCCore1, Regc50);
-       ODM_SetRFReg(pDM_Odm, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,
-                    CurrentChannel);
-       ODM_SetRFReg(pDM_Odm, RF_PATH_A, 0x00, bRFRegOffsetMask, RfLoopReg);
-
-       /* Reload AFE Registers */
-       odm_PHY_ReloadAFERegisters(pDM_Odm, AFE_REG_8723A, AFE_Backup, 16);
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                    ("psd_report_A[%d]= %d \n", 2416, AntA_report));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                    ("psd_report_B[%d]= %d \n", 2416, AntB_report));
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-                    ("psd_report_O[%d]= %d \n", 2416, AntO_report));
-
-       /* 2 Test Ant B based on Ant A is ON */
-       if (mode == ANTTESTB) {
-               if (AntA_report >= 100) {
-                       if (AntB_report > (AntA_report+1)) {
-                               pDM_SWAT_Table->ANTB_ON = false;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Single Antenna A\n"));
-                       } else {
-                               pDM_SWAT_Table->ANTB_ON = true;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Dual Antenna is A and B\n"));
-                       }
-               } else {
-                       ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD, ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-                       pDM_SWAT_Table->ANTB_ON = false; /*  Set Antenna B off as default */
-                       bResult = false;
-               }
-       } else if (mode == ANTTESTALL) {
-               /* 2 Test Ant A and B based on DPDT Open */
-               if ((AntO_report >= 100) & (AntO_report < 118)) {
-                       if (AntA_report > (AntO_report+1)) {
-                               pDM_SWAT_Table->ANTA_ON = false;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,
-                                            ODM_DBG_LOUD, ("Ant A is OFF"));
-                       } else {
-                               pDM_SWAT_Table->ANTA_ON = true;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,
-                                            ODM_DBG_LOUD, ("Ant A is ON"));
-                       }
-
-                       if (AntB_report > (AntO_report+2)) {
-                               pDM_SWAT_Table->ANTB_ON = false;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,
-                                            ODM_DBG_LOUD, ("Ant B is OFF"));
-                       } else {
-                               pDM_SWAT_Table->ANTB_ON = true;
-                               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV,
-                                            ODM_DBG_LOUD, ("Ant B is ON"));
-                       }
-               }
-       } else {
-               ODM_RT_TRACE(pDM_Odm, ODM_COMP_ANT_DIV, ODM_DBG_LOUD,
-               ("ODM_SingleDualAntennaDetection(): Need to check again\n"));
-               /*  Set Antenna A on as default */
-               pDM_SWAT_Table->ANTA_ON = true;
-               /*  Set Antenna B off as default */
-               pDM_SWAT_Table->ANTB_ON = false;
-               bResult = false;
-       }
-
-       return bResult;
-}
diff --git a/drivers/staging/rtl8723au/hal/odm_HWConfig.c b/drivers/staging/rtl8723au/hal/odm_HWConfig.c
deleted file mode 100644 (file)
index 0562f61..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-/*  */
-/*  include files */
-/*  */
-
-#include "odm_precomp.h"
-
-static u8 odm_QueryRxPwrPercentage(s8 AntPower)
-{
-       if ((AntPower <= -100) || (AntPower >= 20))
-               return  0;
-       else if (AntPower >= 0)
-               return  100;
-       else
-               return  100 + AntPower;
-}
-
-static s32 odm_SignalScaleMapping_92CSeries(struct dm_odm_t *pDM_Odm, s32 CurrSig)
-{
-       s32 RetSig = 0;
-
-       if (CurrSig >= 51 && CurrSig <= 100)
-               RetSig = 100;
-       else if (CurrSig >= 41 && CurrSig <= 50)
-               RetSig = 80 + ((CurrSig - 40)*2);
-       else if (CurrSig >= 31 && CurrSig <= 40)
-               RetSig = 66 + (CurrSig - 30);
-       else if (CurrSig >= 21 && CurrSig <= 30)
-               RetSig = 54 + (CurrSig - 20);
-       else if (CurrSig >= 10 && CurrSig <= 20)
-               RetSig = 42 + (((CurrSig - 10) * 2) / 3);
-       else if (CurrSig >= 5 && CurrSig <= 9)
-               RetSig = 22 + (((CurrSig - 5) * 3) / 2);
-       else if (CurrSig >= 1 && CurrSig <= 4)
-               RetSig = 6 + (((CurrSig - 1) * 3) / 2);
-       else
-               RetSig = CurrSig;
-
-       return RetSig;
-}
-
-static s32 odm_SignalScaleMapping(struct dm_odm_t *pDM_Odm, s32 CurrSig)
-{
-       return odm_SignalScaleMapping_92CSeries(pDM_Odm, CurrSig);
-}
-
-static u8
-odm_EVMdbToPercentage(
-       s8 Value
-  )
-{
-       /*  */
-       /*  -33dB~0dB to 0%~99% */
-       /*  */
-       s8 ret_val;
-
-       ret_val = Value;
-
-       if (ret_val >= 0)
-               ret_val = 0;
-       if (ret_val <= -33)
-               ret_val = -33;
-
-       ret_val = 0 - ret_val;
-       ret_val *= 3;
-
-       if (ret_val == 99)
-               ret_val = 100;
-
-       return ret_val;
-}
-
-static void odm_RxPhyStatus92CSeries_Parsing(struct dm_odm_t *pDM_Odm,
-                                            struct phy_info *pPhyInfo,
-                                            u8 *pPhyStatus,
-                                            struct odm_packet_info *pPktinfo)
-{
-       struct phy_status_rpt *pPhyStaRpt = (struct phy_status_rpt *)pPhyStatus;
-       u8 i, Max_spatial_stream;
-       s8 rx_pwr[4], rx_pwr_all = 0;
-       u8 EVM, PWDB_ALL = 0, PWDB_ALL_BT;
-       u8 RSSI, total_rssi = 0;
-       u8 isCCKrate = 0;
-       u8 rf_rx_num = 0;
-       u8 cck_highpwr = 0;
-
-       isCCKrate = (pPktinfo->Rate <= DESC92C_RATE11M) ? true : false;
-       pPhyInfo->RxMIMOSignalQuality[RF_PATH_A] = -1;
-       pPhyInfo->RxMIMOSignalQuality[RF_PATH_B] = -1;
-
-       if (isCCKrate) {
-               u8 report;
-               u8 cck_agc_rpt;
-
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusCCK++;
-               /*  (1)Hardware does not provide RSSI for CCK */
-               /*  (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive) */
-
-               cck_highpwr = pDM_Odm->bCckHighPower;
-
-               cck_agc_rpt =  pPhyStaRpt->cck_agc_rpt_ofdm_cfosho_a;
-
-               /* The RSSI formula should be modified according to the gain table */
-               if (!cck_highpwr) {
-                       report = (cck_agc_rpt & 0xc0)>>6;
-                       switch (report) {
-                       /*  Modify the RF RNA gain value to -40, -20, -2, 14 by Jenyu's suggestion */
-                       /*  Note: different RF with the different RNA gain. */
-                       case 0x3:
-                               rx_pwr_all = -46 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x2:
-                               rx_pwr_all = -26 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x1:
-                               rx_pwr_all = -12 - (cck_agc_rpt & 0x3e);
-                               break;
-                       case 0x0:
-                               rx_pwr_all = 16 - (cck_agc_rpt & 0x3e);
-                               break;
-                       }
-               } else {
-                       report = (cck_agc_rpt & 0x60)>>5;
-                       switch (report) {
-                       case 0x3:
-                               rx_pwr_all = -46 - ((cck_agc_rpt & 0x1f)<<1);
-                               break;
-                       case 0x2:
-                               rx_pwr_all = -26 - ((cck_agc_rpt & 0x1f)<<1);
-                               break;
-                       case 0x1:
-                               rx_pwr_all = -12 - ((cck_agc_rpt & 0x1f)<<1);
-                               break;
-                       case 0x0:
-                               rx_pwr_all = 16 - ((cck_agc_rpt & 0x1f)<<1);
-                               break;
-                       }
-               }
-
-               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
-
-               /* Modification for ext-LNA board */
-               if (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) {
-                       if ((cck_agc_rpt>>7) == 0) {
-                               PWDB_ALL = (PWDB_ALL > 94) ? 100 : (PWDB_ALL+6);
-                       } else {
-                               if (PWDB_ALL > 38)
-                                       PWDB_ALL -= 16;
-                               else
-                                       PWDB_ALL = (PWDB_ALL <= 16) ? (PWDB_ALL>>2) : (PWDB_ALL-12);
-                       }
-
-                       /* CCK modification */
-                       if (PWDB_ALL > 25 && PWDB_ALL <= 60)
-                               PWDB_ALL += 6;
-               } else { /* Modification for int-LNA board */
-                       if (PWDB_ALL > 99)
-                               PWDB_ALL -= 8;
-                       else if (PWDB_ALL > 50 && PWDB_ALL <= 68)
-                               PWDB_ALL += 4;
-               }
-               pPhyInfo->RxPWDBAll = PWDB_ALL;
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL;
-               pPhyInfo->RecvSignalPower = rx_pwr_all;
-               /*  (3) Get Signal Quality (EVM) */
-               if (pPktinfo->bPacketMatchBSSID) {
-                       u8      SQ, SQ_rpt;
-
-                       SQ_rpt = pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all;
-
-                       if (SQ_rpt > 64)
-                               SQ = 0;
-                       else if (SQ_rpt < 20)
-                               SQ = 100;
-                       else
-                               SQ = ((64-SQ_rpt) * 100) / 44;
-
-                       pPhyInfo->SignalQuality = SQ;
-                       pPhyInfo->RxMIMOSignalQuality[RF_PATH_A] = SQ;
-                       pPhyInfo->RxMIMOSignalQuality[RF_PATH_B] = -1;
-               }
-       } else { /* is OFDM rate */
-               pDM_Odm->PhyDbgInfo.NumQryPhyStatusOFDM++;
-
-               /*  (1)Get RSSI for HT rate */
-
-               for (i = RF_PATH_A; i < RF_PATH_MAX; i++) {
-                       /*  2008/01/30 MH we will judge RF RX path now. */
-                       if (pDM_Odm->RFPathRxEnable & BIT(i))
-                               rf_rx_num++;
-
-                       rx_pwr[i] = ((pPhyStaRpt->path_agc[i].gain & 0x3F)*2) - 110;
-
-                       pPhyInfo->RxPwr[i] = rx_pwr[i];
-
-                       /* Translate DBM to percentage. */
-                       RSSI = odm_QueryRxPwrPercentage(rx_pwr[i]);
-                       total_rssi += RSSI;
-
-                       /* Modification for ext-LNA board */
-                       if (pDM_Odm->BoardType == ODM_BOARD_HIGHPWR) {
-                               if ((pPhyStaRpt->path_agc[i].trsw) == 1)
-                                       RSSI = (RSSI > 94) ? 100 : (RSSI+6);
-                               else
-                                       RSSI = (RSSI <= 16) ? (RSSI>>3) : (RSSI-16);
-
-                               if ((RSSI <= 34) && (RSSI >= 4))
-                                       RSSI -= 4;
-                       }
-
-                       pPhyInfo->RxMIMOSignalStrength[i] = (u8) RSSI;
-
-                       /* Get Rx snr value in DB */
-                       pPhyInfo->RxSNR[i] = pDM_Odm->PhyDbgInfo.RxSNRdB[i] = (s32)(pPhyStaRpt->path_rxsnr[i]/2);
-               }
-
-               /*  (2)PWDB, Average PWDB cacluated by hardware (for rate adaptive) */
-               rx_pwr_all = (((pPhyStaRpt->cck_sig_qual_ofdm_pwdb_all) >> 1) & 0x7f)-110;
-
-               PWDB_ALL = odm_QueryRxPwrPercentage(rx_pwr_all);
-               PWDB_ALL_BT = PWDB_ALL;
-
-               pPhyInfo->RxPWDBAll = PWDB_ALL;
-               pPhyInfo->BTRxRSSIPercentage = PWDB_ALL_BT;
-               pPhyInfo->RxPower = rx_pwr_all;
-               pPhyInfo->RecvSignalPower = rx_pwr_all;
-
-               /*  (3)EVM of HT rate */
-               if (pPktinfo->Rate >= DESC92C_RATEMCS8 && pPktinfo->Rate <= DESC92C_RATEMCS15)
-                       Max_spatial_stream = 2; /* both spatial stream make sense */
-               else
-                       Max_spatial_stream = 1; /* only spatial stream 1 makes sense */
-
-               for (i = 0; i < Max_spatial_stream; i++) {
-                       /*  Do not use shift operation like "rx_evmX >>= 1" because the compilor of free build environment */
-                       /*  fill most significant bit to "zero" when doing shifting operation which may change a negative */
-                       /*  value to positive one, then the dbm value (which is supposed to be negative)  is not correct anymore. */
-                       EVM = odm_EVMdbToPercentage((pPhyStaRpt->stream_rxevm[i]));     /* dbm */
-
-                       if (pPktinfo->bPacketMatchBSSID) {
-                               if (i == RF_PATH_A) {
-                                       /*  Fill value in RFD, Get the first spatial stream only */
-                                       pPhyInfo->SignalQuality = (u8)(EVM & 0xff);
-                               }
-                               pPhyInfo->RxMIMOSignalQuality[i] = (u8)(EVM & 0xff);
-                       }
-               }
-       }
-       /* UI BSS List signal strength(in percentage), make it good looking, from 0~100. */
-       /* It is assigned to the BSS List in GetValueFromBeaconOrProbeRsp(). */
-       if (isCCKrate) {
-               pPhyInfo->SignalStrength = (u8)(odm_SignalScaleMapping(pDM_Odm, PWDB_ALL));/* PWDB_ALL; */
-       } else {
-               if (rf_rx_num != 0)
-                       pPhyInfo->SignalStrength = (u8)(odm_SignalScaleMapping(pDM_Odm, total_rssi /= rf_rx_num));
-       }
-}
-
-static void odm_Process_RSSIForDM(struct dm_odm_t *pDM_Odm,
-                                 struct phy_info *pPhyInfo,
-                                 struct odm_packet_info *pPktinfo)
-{
-       s32 UndecoratedSmoothedPWDB, UndecoratedSmoothedCCK;
-       s32 UndecoratedSmoothedOFDM, RSSI_Ave;
-       u8 isCCKrate = 0;
-       u8 RSSI_max, RSSI_min, i;
-       u32 OFDM_pkt = 0;
-       u32 Weighting = 0;
-       struct sta_info *pEntry;
-
-       if (pPktinfo->StationID == 0xFF)
-               return;
-
-       pEntry = pDM_Odm->pODM_StaInfo[pPktinfo->StationID];
-       if (!pEntry)
-               return;
-       if ((!pPktinfo->bPacketMatchBSSID))
-               return;
-
-       isCCKrate = (pPktinfo->Rate <= DESC92C_RATE11M) ? true : false;
-
-       /* Smart Antenna Debug Message------------------*/
-
-       UndecoratedSmoothedCCK =  pEntry->rssi_stat.UndecoratedSmoothedCCK;
-       UndecoratedSmoothedOFDM = pEntry->rssi_stat.UndecoratedSmoothedOFDM;
-       UndecoratedSmoothedPWDB = pEntry->rssi_stat.UndecoratedSmoothedPWDB;
-
-       if (pPktinfo->bPacketToSelf || pPktinfo->bPacketBeacon) {
-               if (!isCCKrate) { /* ofdm rate */
-                       if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_B] == 0) {
-                               RSSI_Ave = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                       } else {
-                               if (pPhyInfo->RxMIMOSignalStrength[RF_PATH_A] > pPhyInfo->RxMIMOSignalStrength[RF_PATH_B]) {
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B];
-                               } else {
-                                       RSSI_max = pPhyInfo->RxMIMOSignalStrength[RF_PATH_B];
-                                       RSSI_min = pPhyInfo->RxMIMOSignalStrength[RF_PATH_A];
-                               }
-                               if ((RSSI_max - RSSI_min) < 3)
-                                       RSSI_Ave = RSSI_max;
-                               else if ((RSSI_max - RSSI_min) < 6)
-                                       RSSI_Ave = RSSI_max - 1;
-                               else if ((RSSI_max - RSSI_min) < 10)
-                                       RSSI_Ave = RSSI_max - 2;
-                               else
-                                       RSSI_Ave = RSSI_max - 3;
-                       }
-
-                       /* 1 Process OFDM RSSI */
-                       if (UndecoratedSmoothedOFDM <= 0) {
-                               /*  initialize */
-                               UndecoratedSmoothedOFDM = pPhyInfo->RxPWDBAll;
-                       } else {
-                               if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedOFDM) {
-                                       UndecoratedSmoothedOFDM =
-                                                       (((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
-                                                       (RSSI_Ave)) / (Rx_Smooth_Factor);
-                                       UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM + 1;
-                               } else {
-                                       UndecoratedSmoothedOFDM =
-                                                       (((UndecoratedSmoothedOFDM)*(Rx_Smooth_Factor-1)) +
-                                                       (RSSI_Ave)) / (Rx_Smooth_Factor);
-                               }
-                       }
-                       pEntry->rssi_stat.PacketMap =
-                               (pEntry->rssi_stat.PacketMap<<1) | BIT(0);
-               } else {
-                       RSSI_Ave = pPhyInfo->RxPWDBAll;
-
-                       /* 1 Process CCK RSSI */
-                       if (UndecoratedSmoothedCCK <= 0) {
-                               /*  initialize */
-                               UndecoratedSmoothedCCK = pPhyInfo->RxPWDBAll;
-                       } else {
-                               if (pPhyInfo->RxPWDBAll > (u32)UndecoratedSmoothedCCK) {
-                                       UndecoratedSmoothedCCK =
-                                                       (((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
-                                                       (pPhyInfo->RxPWDBAll)) / (Rx_Smooth_Factor);
-                                       UndecoratedSmoothedCCK = UndecoratedSmoothedCCK + 1;
-                               } else {
-                                       UndecoratedSmoothedCCK =
-                                                       (((UndecoratedSmoothedCCK)*(Rx_Smooth_Factor-1)) +
-                                                       (pPhyInfo->RxPWDBAll)) / (Rx_Smooth_Factor);
-                               }
-                       }
-                       pEntry->rssi_stat.PacketMap = pEntry->rssi_stat.PacketMap<<1;
-               }
-
-               /* 2011.07.28 LukeLee: modified to prevent unstable CCK RSSI */
-               if (pEntry->rssi_stat.ValidBit >= 64)
-                       pEntry->rssi_stat.ValidBit = 64;
-               else
-                       pEntry->rssi_stat.ValidBit++;
-
-               for (i = 0; i < pEntry->rssi_stat.ValidBit; i++)
-                       OFDM_pkt +=
-                               (u8)(pEntry->rssi_stat.PacketMap>>i) & BIT(0);
-
-               if (pEntry->rssi_stat.ValidBit == 64) {
-                       Weighting = ((OFDM_pkt<<4) > 64)?64:(OFDM_pkt<<4);
-                       UndecoratedSmoothedPWDB = (Weighting*UndecoratedSmoothedOFDM+(64-Weighting)*UndecoratedSmoothedCCK)>>6;
-               } else {
-                       if (pEntry->rssi_stat.ValidBit != 0)
-                               UndecoratedSmoothedPWDB = (OFDM_pkt*UndecoratedSmoothedOFDM+(pEntry->rssi_stat.ValidBit-OFDM_pkt)*UndecoratedSmoothedCCK)/pEntry->rssi_stat.ValidBit;
-                       else
-                               UndecoratedSmoothedPWDB = 0;
-               }
-               pEntry->rssi_stat.UndecoratedSmoothedCCK = UndecoratedSmoothedCCK;
-               pEntry->rssi_stat.UndecoratedSmoothedOFDM = UndecoratedSmoothedOFDM;
-               pEntry->rssi_stat.UndecoratedSmoothedPWDB = UndecoratedSmoothedPWDB;
-       }
-}
-
-void ODM_PhyStatusQuery23a(struct dm_odm_t *pDM_Odm, struct phy_info *pPhyInfo,
-                          u8 *pPhyStatus, struct odm_packet_info *pPktinfo)
-{
-       odm_RxPhyStatus92CSeries_Parsing(pDM_Odm, pPhyInfo,
-                                        pPhyStatus, pPktinfo);
-
-       odm_Process_RSSIForDM(pDM_Odm, pPhyInfo, pPktinfo);
-}
diff --git a/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c b/drivers/staging/rtl8723au/hal/odm_RegConfig8723A.c
deleted file mode 100644 (file)
index a63c6cb..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-#include "usb_ops_linux.h"
-
-void
-odm_ConfigRFReg_8723A(
-       struct dm_odm_t *pDM_Odm,
-       u32                                     Addr,
-       u32                                     Data,
-       enum RF_RADIO_PATH     RF_PATH,
-       u32                                 RegAddr
-       )
-{
-       if (Addr == 0xfe) {
-               msleep(50);
-       } else if (Addr == 0xfd) {
-               mdelay(5);
-       } else if (Addr == 0xfc) {
-               mdelay(1);
-       } else if (Addr == 0xfb) {
-               udelay(50);
-       } else if (Addr == 0xfa) {
-               udelay(5);
-       } else if (Addr == 0xf9) {
-               udelay(1);
-       } else {
-               ODM_SetRFReg(pDM_Odm, RF_PATH, RegAddr, bRFRegOffsetMask, Data);
-               /*  Add 1us delay between BB/RF register setting. */
-               udelay(1);
-       }
-}
-
-void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, u32 addr, u8        data)
-{
-       rtl8723au_write8(pDM_Odm->Adapter, addr, data);
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
-                    ("===> %s: [MAC_REG] %08X %08X\n", __func__, addr, data));
-}
-
-void odm_ConfigBB_AGC_8723A(struct dm_odm_t *pDM_Odm, u32 addr, u32 data)
-{
-       rtl8723au_write32(pDM_Odm->Adapter, addr, data);
-       /*  Add 1us delay between BB/RF register setting. */
-       udelay(1);
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
-                    ("===> %s: [AGC_TAB] %08X %08X\n", __func__, addr, data));
-}
-
-void
-odm_ConfigBB_PHY_8723A(struct dm_odm_t *pDM_Odm, u32 addr, u32 data)
-{
-       if (addr == 0xfe)
-               msleep(50);
-       else if (addr == 0xfd)
-               mdelay(5);
-       else if (addr == 0xfc)
-               mdelay(1);
-       else if (addr == 0xfb)
-               udelay(50);
-       else if (addr == 0xfa)
-               udelay(5);
-       else if (addr == 0xf9)
-               udelay(1);
-       else if (addr == 0xa24)
-               pDM_Odm->RFCalibrateInfo.RegA24 = data;
-       rtl8723au_write32(pDM_Odm->Adapter, addr, data);
-
-       /*  Add 1us delay between BB/RF register setting. */
-       udelay(1);
-
-       ODM_RT_TRACE(pDM_Odm, ODM_COMP_INIT, ODM_DBG_LOUD,
-                    ("===> %s: [PHY_REG] %08X %08X\n", __func__, addr, data));
-}
diff --git a/drivers/staging/rtl8723au/hal/odm_debug.c b/drivers/staging/rtl8723au/hal/odm_debug.c
deleted file mode 100644 (file)
index cb2bdda..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#include "odm_precomp.h"
-
-void ODM_InitDebugSetting23a(struct dm_odm_t *pDM_Odm)
-{
-       pDM_Odm->DebugLevel = ODM_DBG_TRACE;
-       pDM_Odm->DebugComponents = 0;
-}
-
-u32 GlobalDebugLevel23A;
-
-void rt_trace(int comp, int level, const char *fmt, ...)
-{
-       struct va_format vaf;
-       va_list args;
-
-       va_start(args, fmt);
-
-       vaf.fmt = fmt;
-       vaf.va = &args;
-
-       pr_info(DRIVER_PREFIX " [0x%08x,%d] %pV", comp, level, &vaf);
-
-       va_end(args);
-}
diff --git a/drivers/staging/rtl8723au/hal/odm_interface.c b/drivers/staging/rtl8723au/hal/odm_interface.c
deleted file mode 100644 (file)
index d8f6790..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-/*  */
-/*  include files */
-/*  */
-
-#include "odm_precomp.h"
-/*  */
-/*  ODM IO Relative API. */
-/*  */
-#include <usb_ops_linux.h>
-
-void ODM_SetRFReg(
-       struct dm_odm_t *pDM_Odm,
-       enum RF_RADIO_PATH      eRFPath,
-       u32                             RegAddr,
-       u32                             BitMask,
-       u32                             Data
-       )
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-
-       PHY_SetRFReg(Adapter, eRFPath, RegAddr, BitMask, Data);
-}
-
-u32 ODM_GetRFReg(
-       struct dm_odm_t *pDM_Odm,
-       enum RF_RADIO_PATH      eRFPath,
-       u32                             RegAddr,
-       u32                             BitMask
-       )
-{
-       struct rtw_adapter *Adapter = pDM_Odm->Adapter;
-
-       return PHY_QueryRFReg(Adapter, eRFPath, RegAddr, BitMask);
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
deleted file mode 100644 (file)
index bfcbd7a..0000000
+++ /dev/null
@@ -1,11265 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- *published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#include <drv_types.h>
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-#define DIS_PS_RX_BCN
-
-u32 BTCoexDbgLevel = _bt_dbg_off_;
-
-#define RTPRINT(_Comp, _Level, Fmt)\
-do {\
-       if ((BTCoexDbgLevel == _bt_dbg_on_)) {\
-               printk Fmt;\
-       }                                       \
-} while (0)
-
-#define RTPRINT_ADDR(dbgtype, dbgflag, printstr, _Ptr)\
-if ((BTCoexDbgLevel == _bt_dbg_on_)) {\
-       u32 __i;                                                \
-       u8 *ptr = (u8 *)_Ptr;   \
-       printk printstr;                                \
-       printk(" ");                                    \
-       for (__i = 0; __i < 6; __i++)           \
-               printk("%02X%s", ptr[__i], (__i == 5)?"":"-");          \
-       printk("\n");                                                   \
-}
-#define RTPRINT_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\
-if ((BTCoexDbgLevel == _bt_dbg_on_)) {\
-       u32 __i;                                                \
-       u8 *ptr = (u8 *)_HexData;                               \
-       printk(_TitleString);                                   \
-       for (__i = 0; __i < (u32)_HexDataLen; __i++) {          \
-               printk("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?"  ":" ");\
-               if (((__i + 1) % 16) == 0)                      \
-                       printk("\n");                           \
-       }                                                               \
-       printk("\n");                                                   \
-}
-/*  Added by Annie, 2005-11-22. */
-#define MAX_STR_LEN    64
-/*  I want to see ASCII 33 to 126 only. Otherwise, I print '?'. */
-#define PRINTABLE(_ch) (_ch >= ' ' && _ch <= '~')
-#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len)          \
-       {                                                               \
-               u32 __i;                                                \
-               u8 buffer[MAX_STR_LEN];                                 \
-               u32 length = (_Len < MAX_STR_LEN) ? _Len : (MAX_STR_LEN-1);\
-               memset(buffer, 0, MAX_STR_LEN);                         \
-               memcpy(buffer, (u8 *)_Ptr, length);                     \
-               for (__i = 0; __i < length; __i++) {                    \
-                       if (!PRINTABLE(buffer[__i]))                    \
-                               buffer[__i] = '?';                      \
-               }                                                       \
-               buffer[length] = '\0';                                  \
-               printk(_TitleString);                                   \
-               printk(": %d, <%s>\n", _Len, buffer);                   \
-       }
-
-#define DCMD_Printf(...)
-#define RT_ASSERT(...)
-
-
-#define GetDefaultAdapter(padapter)    padapter
-
-#define PlatformZeroMemory(ptr, sz)    memset(ptr, 0, sz)
-
-#define GET_UNDECORATED_AVERAGE_RSSI(padapter) \
-                       (GET_HAL_DATA(padapter)->dmpriv.EntryMinUndecoratedSmoothedPWDB)
-#define RT_RF_CHANGE_SOURCE u32
-
-enum {
-       RT_JOIN_INFRA   = 1,
-       RT_JOIN_IBSS  = 2,
-       RT_START_IBSS = 3,
-       RT_NO_ACTION  = 4,
-};
-
-/*  power saving */
-
-/*  ===== Below this line is sync from SD7 driver COMMOM/BT.c ===== */
-
-static u8 BT_Operation(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->BtOperationOn)
-               return true;
-       else
-               return false;
-}
-
-static u8 BT_IsLegalChannel(struct rtw_adapter *padapter, u8 channel)
-{
-       struct rt_channel_info *pChanneList = NULL;
-       u8 channelLen, i;
-
-       pChanneList = padapter->mlmeextpriv.channel_set;
-       channelLen = padapter->mlmeextpriv.max_chan_nums;
-
-       for (i = 0; i < channelLen; i++) {
-               RTPRINT(FIOCTL, IOCTL_STATE,
-                       ("Check if chnl(%d) in channel plan contains bt target chnl(%d) for BT connection\n",
-                        pChanneList[i].ChannelNum, channel));
-               if ((channel == pChanneList[i].ChannelNum) ||
-                   (channel == pChanneList[i].ChannelNum + 2))
-                       return channel;
-       }
-       return 0;
-}
-
-void BT_SignalCompensation(struct rtw_adapter *padapter, u8 *rssi_wifi, u8 *rssi_bt)
-{
-       BTDM_SignalCompensation(padapter, rssi_wifi, rssi_bt);
-}
-
-void rtl8723a_BT_wifiscan_notify(struct rtw_adapter *padapter, u8 scanType)
-{
-       BTHCI_WifiScanNotify(padapter, scanType);
-       BTDM_CheckAntSelMode(padapter);
-       BTDM_WifiScanNotify(padapter, scanType);
-}
-
-void rtl8723a_BT_wifiassociate_notify(struct rtw_adapter *padapter, u8 action)
-{
-       /*  action : */
-       /*  true = associate start */
-       /*  false = associate finished */
-       if (action)
-               BTDM_CheckAntSelMode(padapter);
-
-       BTDM_WifiAssociateNotify(padapter, action);
-}
-
-void BT_HaltProcess(struct rtw_adapter *padapter)
-{
-       BTDM_ForHalt(padapter);
-}
-
-/*  ===== End of sync from SD7 driver COMMOM/BT.c ===== */
-
-#define i64fmt         "ll"
-#define UINT64_C(v)  (v)
-
-#define FillOctetString(_os, _octet, _len)             \
-       (_os).Octet = (u8 *)(_octet);                   \
-       (_os).Length = (_len);
-
-static enum rt_status PlatformIndicateBTEvent(
-       struct rtw_adapter *padapter,
-       void                                            *pEvntData,
-       u32                                             dataLen
-       )
-{
-       enum rt_status  rt_status = RT_STATUS_FAILURE;
-
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT_DETAIL, ("BT event start, %d bytes data to Transferred!!\n", dataLen));
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_EVENT_DETAIL, "To transfer Hex Data :\n",
-               pEvntData, dataLen);
-
-       BT_EventParse(padapter, pEvntData, dataLen);
-
-       printk(KERN_WARNING "%s: Linux has no way to report BT event!!\n", __func__);
-
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT_DETAIL, ("BT event end, %s\n",
-               (rt_status == RT_STATUS_SUCCESS) ? "SUCCESS" : "FAIL"));
-
-       return rt_status;
-}
-
-/*  ===== Below this line is sync from SD7 driver COMMOM/bt_hci.c ===== */
-
-static u8 bthci_GetLocalChannel(struct rtw_adapter *padapter)
-{
-       return padapter->mlmeextpriv.cur_channel;
-}
-
-static u8 bthci_GetCurrentEntryNum(struct rtw_adapter *padapter, u8 PhyHandle)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       u8 i;
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-               if ((pBTInfo->BtAsocEntry[i].bUsed) &&
-                   (pBTInfo->BtAsocEntry[i].PhyLinkCmdData.BtPhyLinkhandle == PhyHandle))
-                       return i;
-       }
-
-       return 0xFF;
-}
-
-static void bthci_DecideBTChannel(struct rtw_adapter *padapter, u8 EntryNum)
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct mlme_priv *pmlmepriv;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_hci_info *pBtHciInfo;
-       struct chnl_txpower_triple *pTriple_subband = NULL;
-       struct common_triple *pTriple;
-       u8 i, j, localchnl, firstRemoteLegalChnlInTriplet = 0;
-       u8 regulatory_skipLen = 0;
-       u8 subbandTripletCnt = 0;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       pBtMgnt->CheckChnlIsSuit = true;
-       localchnl = bthci_GetLocalChannel(padapter);
-
-       pTriple = (struct common_triple *)
-               &pBtHciInfo->BTPreChnllist[COUNTRY_STR_LEN];
-
-       /*  contains country string, len is 3 */
-       for (i = 0; i < (pBtHciInfo->BtPreChnlListLen-COUNTRY_STR_LEN); i += 3, pTriple++) {
-               /*  */
-               /*  check every triplet, an triplet may be */
-               /*  regulatory extension identifier or sub-band triplet */
-               /*  */
-               if (pTriple->byte_1st == 0xc9) {
-                       /*  Regulatory Extension Identifier, skip it */
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO),
-                               ("Find Regulatory ID, regulatory class = %d\n", pTriple->byte_2nd));
-                       regulatory_skipLen += 3;
-                       pTriple_subband = NULL;
-                       continue;
-               } else {        /*  Sub-band triplet */
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Find Sub-band triplet \n"));
-                       subbandTripletCnt++;
-                       pTriple_subband = (struct chnl_txpower_triple *)pTriple;
-                       /*  if remote first legal channel not found, then find first remote channel */
-                       /*  and it's legal for our channel plan. */
-
-                       /*  search the sub-band triplet and find if remote channel is legal to our channel plan. */
-                       for (j = pTriple_subband->FirstChnl; j < (pTriple_subband->FirstChnl+pTriple_subband->NumChnls); j++) {
-                               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), (" Check if chnl(%d) is legal\n", j));
-                               if (BT_IsLegalChannel(padapter, j)) {
-                                       /*  remote channel is legal for our channel plan. */
-                                       firstRemoteLegalChnlInTriplet = j;
-                                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO),
-                                               ("Find first remote legal channel : %d\n",
-                                               firstRemoteLegalChnlInTriplet));
-
-                                       /*  If we find a remote legal channel in the sub-band triplet */
-                                       /*  and only BT connection is established(local not connect to any AP or IBSS), */
-                                       /*  then we just switch channel to remote channel. */
-                                       if (!(check_fwstate(pmlmepriv, WIFI_ASOC_STATE|WIFI_ADHOC_STATE|WIFI_AP_STATE) ||
-                                           BTHCI_HsConnectionEstablished(padapter))) {
-                                               pBtMgnt->BTChannel = firstRemoteLegalChnlInTriplet;
-                                               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Remote legal channel (%d) is selected, Local not connect to any!!\n", pBtMgnt->BTChannel));
-                                               return;
-                                       } else {
-                                               if ((localchnl >= firstRemoteLegalChnlInTriplet) &&
-                                                   (localchnl < (pTriple_subband->FirstChnl+pTriple_subband->NumChnls))) {
-                                                       pBtMgnt->BTChannel = localchnl;
-                                                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Local channel (%d) is selected, wifi or BT connection exists\n", pBtMgnt->BTChannel));
-                                                       return;
-                                               }
-                                       }
-                                       break;
-                               }
-                       }
-               }
-       }
-
-       if (subbandTripletCnt) {
-               /* if any preferred channel triplet exists */
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("There are %d sub band triplet exists, ", subbandTripletCnt));
-               if (firstRemoteLegalChnlInTriplet == 0) {
-                       /* no legal channel is found, reject the connection. */
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("no legal channel is found!!\n"));
-               } else {
-                       /*  Remote Legal channel is found but not match to local */
-                       /* wifi connection exists), so reject the connection. */
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO),
-                               ("Remote Legal channel is found but not match to local(wifi connection exists)!!\n"));
-               }
-               pBtMgnt->CheckChnlIsSuit = false;
-       } else {
-               /*  There are not any preferred channel triplet exists */
-               /*  Use current legal channel as the bt channel. */
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("No sub band triplet exists!!\n"));
-       }
-       pBtMgnt->BTChannel = localchnl;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Local channel (%d) is selected!!\n", pBtMgnt->BTChannel));
-}
-
-/* Success:return true */
-/* Fail:return false */
-static u8 bthci_GetAssocInfo(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo;
-       struct bt_hci_info *pBtHciInfo;
-       u8 tempBuf[256];
-       u8 i = 0;
-       u8 BaseMemoryShift = 0;
-       u16     TotalLen = 0;
-       struct amp_assoc_structure *pAmpAsoc;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("GetAssocInfo start\n"));
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar == 0) {
-               if (pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocRemLen < (MAX_AMP_ASSOC_FRAG_LEN))
-                       TotalLen = pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocRemLen;
-               else if (pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocRemLen == (MAX_AMP_ASSOC_FRAG_LEN))
-                       TotalLen = MAX_AMP_ASSOC_FRAG_LEN;
-       } else if (pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar > 0)
-               TotalLen = pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar;
-
-       while ((pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar >= BaseMemoryShift) || TotalLen > BaseMemoryShift) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("GetAssocInfo, TotalLen =%d, BaseMemoryShift =%d\n", TotalLen, BaseMemoryShift));
-               memcpy(tempBuf,
-                       (u8 *)pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocfragment+BaseMemoryShift,
-                       TotalLen-BaseMemoryShift);
-               RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_DETAIL, "GetAssocInfo :\n",
-                       tempBuf, TotalLen-BaseMemoryShift);
-
-               pAmpAsoc = (struct amp_assoc_structure *)tempBuf;
-               le16_to_cpus(&pAmpAsoc->Length);
-               BaseMemoryShift += 3 + pAmpAsoc->Length;
-
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("TypeID = 0x%x, ", pAmpAsoc->TypeID));
-               RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD, "Hex Data: \n", pAmpAsoc->Data, pAmpAsoc->Length);
-               switch (pAmpAsoc->TypeID) {
-               case AMP_MAC_ADDR:
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("==> AMP_MAC_ADDR\n"));
-                       if (pAmpAsoc->Length > 6)
-                               return false;
-                       memcpy(pBTInfo->BtAsocEntry[EntryNum].BTRemoteMACAddr, pAmpAsoc->Data, 6);
-                       RTPRINT_ADDR(FIOCTL, IOCTL_BT_HCICMD, ("Remote Mac address \n"), pBTInfo->BtAsocEntry[EntryNum].BTRemoteMACAddr);
-                       break;
-               case AMP_PREFERRED_CHANNEL_LIST:
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("==> AMP_PREFERRED_CHANNEL_LIST\n"));
-                       pBtHciInfo->BtPreChnlListLen = pAmpAsoc->Length;
-                       memcpy(pBtHciInfo->BTPreChnllist,
-                               pAmpAsoc->Data,
-                               pBtHciInfo->BtPreChnlListLen);
-                       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD, "Preferred channel list : \n", pBtHciInfo->BTPreChnllist, pBtHciInfo->BtPreChnlListLen);
-                       bthci_DecideBTChannel(padapter, EntryNum);
-                       break;
-               case AMP_CONNECTED_CHANNEL:
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("==> AMP_CONNECTED_CHANNEL\n"));
-                       pBtHciInfo->BTConnectChnlListLen = pAmpAsoc->Length;
-                       memcpy(pBtHciInfo->BTConnectChnllist,
-                               pAmpAsoc->Data,
-                               pBtHciInfo->BTConnectChnlListLen);
-                       break;
-               case AMP_80211_PAL_CAP_LIST:
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("==> AMP_80211_PAL_CAP_LIST\n"));
-                       pBTInfo->BtAsocEntry[EntryNum].BTCapability = *(u32 *)(pAmpAsoc->Data);
-                       if (pBTInfo->BtAsocEntry[EntryNum].BTCapability & 0x00000001) {
-                               /*  TODO: */
-
-                               /* Signifies PAL capable of utilizing received activity reports. */
-                       }
-                       if (pBTInfo->BtAsocEntry[EntryNum].BTCapability & 0x00000002) {
-                               /*  TODO: */
-                               /* Signifies PAL is capable of utilizing scheduling information received in an activity reports. */
-                       }
-                       break;
-               case AMP_80211_PAL_VISION:
-                       pBtHciInfo->BTPalVersion = *(u8 *)(pAmpAsoc->Data);
-                       pBtHciInfo->BTPalCompanyID = *(u16 *)(((u8 *)(pAmpAsoc->Data))+1);
-                       pBtHciInfo->BTPalsubversion = *(u16 *)(((u8 *)(pAmpAsoc->Data))+3);
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("==> AMP_80211_PAL_VISION PalVersion  0x%x, PalCompanyID  0x%x, Palsubversion 0x%x\n",
-                               pBtHciInfo->BTPalVersion,
-                               pBtHciInfo->BTPalCompanyID,
-                               pBtHciInfo->BTPalsubversion));
-                       break;
-               default:
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("==> Unsupport TypeID !!\n"));
-                       break;
-               }
-               i++;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("GetAssocInfo end\n"));
-
-       return true;
-}
-
-static u8 bthci_AddEntry(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       u8 i;
-
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-               if (pBTInfo->BtAsocEntry[i].bUsed == false) {
-                       pBTInfo->BtAsocEntry[i].bUsed = true;
-                       pBtMgnt->CurrentConnectEntryNum = i;
-                       break;
-               }
-       }
-
-       if (i == MAX_BT_ASOC_ENTRY_NUM) {
-               RTPRINT(FIOCTL, IOCTL_STATE, ("bthci_AddEntry(), Add entry fail!!\n"));
-               return false;
-       }
-       return true;
-}
-
-static u8 bthci_DiscardTxPackets(struct rtw_adapter *padapter, u16 LLH)
-{
-       return false;
-}
-
-static u8
-bthci_CheckLogLinkBehavior(
-       struct rtw_adapter *padapter,
-       struct hci_flow_spec                    TxFlowSpec
-       )
-{
-       u8 ID = TxFlowSpec.Identifier;
-       u8 ServiceType = TxFlowSpec.ServiceType;
-       u16     MaxSDUSize = TxFlowSpec.MaximumSDUSize;
-       u32     SDUInterArrivatime = TxFlowSpec.SDUInterArrivalTime;
-       u8 match = false;
-
-       switch (ID) {
-       case 1:
-               if (ServiceType == BT_LL_BE) {
-                       match = true;
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  TX best effort flowspec\n"));
-               } else if ((ServiceType == BT_LL_GU) && (MaxSDUSize == 0xffff)) {
-                       match = true;
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  RX guaranteed latency flowspec\n"));
-               } else if ((ServiceType == BT_LL_GU) && (MaxSDUSize == 2500)) {
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  RX guaranteed Large latency flowspec\n"));
-               }
-               break;
-       case 2:
-               if (ServiceType == BT_LL_BE) {
-                       match = true;
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  RX best effort flowspec\n"));
-
-               }
-               break;
-       case 3:
-               if ((ServiceType == BT_LL_GU) && (MaxSDUSize == 1492)) {
-                       match = true;
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  TX guaranteed latency flowspec\n"));
-               } else if ((ServiceType == BT_LL_GU) && (MaxSDUSize == 2500)) {
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  TX guaranteed Large latency flowspec\n"));
-               }
-               break;
-       case 4:
-               if (ServiceType == BT_LL_BE) {
-                       if ((SDUInterArrivatime == 0xffffffff) && (ServiceType == BT_LL_BE) && (MaxSDUSize == 1492)) {
-                               match = true;
-                               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  TX/RX aggregated best effort flowspec\n"));
-                       }
-               } else if (ServiceType == BT_LL_GU) {
-                       if (SDUInterArrivatime == 100) {
-                               match = true;
-                               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  TX/RX guaranteed bandwidth flowspec\n"));
-                       }
-               }
-               break;
-       default:
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Logical Link Type =  Unknow Type !!!!!!!!\n"));
-               break;
-       }
-
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO),
-               ("ID = 0x%x, ServiceType = 0x%x, MaximumSDUSize = 0x%x, SDUInterArrivalTime = 0x%x, AccessLatency = 0x%x, FlushTimeout = 0x%x\n",
-               TxFlowSpec.Identifier, TxFlowSpec.ServiceType, MaxSDUSize,
-               SDUInterArrivatime, TxFlowSpec.AccessLatency, TxFlowSpec.FlushTimeout));
-       return match;
-}
-
-static u16 bthci_AssocMACAddr(struct rtw_adapter *padapter, void       *pbuf)
-{
-       struct amp_assoc_structure *pAssoStrc = (struct amp_assoc_structure *)pbuf;
-       pAssoStrc->TypeID = AMP_MAC_ADDR;
-       pAssoStrc->Length = 0x06;
-       memcpy(&pAssoStrc->Data[0], padapter->eeprompriv.mac_addr, 6);
-       RTPRINT_DATA(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO),
-                    ("AssocMACAddr : \n"), pAssoStrc, pAssoStrc->Length+3);
-
-       return pAssoStrc->Length + 3;
-}
-
-static u16
-bthci_PALCapabilities(
-       struct rtw_adapter *padapter,
-       void    *pbuf
-       )
-{
-       struct amp_assoc_structure *pAssoStrc = (struct amp_assoc_structure *)pbuf;
-
-       pAssoStrc->TypeID = AMP_80211_PAL_CAP_LIST;
-       pAssoStrc->Length = 0x04;
-
-       pAssoStrc->Data[0] = 0x00;
-       pAssoStrc->Data[1] = 0x00;
-
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("PALCapabilities:\n"), pAssoStrc, pAssoStrc->Length+3);
-       RTPRINT(FIOCTL, IOCTL_BT_LOGO, ("PALCapabilities \n"));
-
-       RTPRINT(FIOCTL, IOCTL_BT_LOGO, (" TypeID = 0x%x,\n Length = 0x%x,\n Content = 0x0000\n",
-               pAssoStrc->TypeID,
-               pAssoStrc->Length));
-
-       return pAssoStrc->Length + 3;
-}
-
-static u16 bthci_AssocPreferredChannelList(struct rtw_adapter *padapter,
-                                          void *pbuf, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo;
-       struct amp_assoc_structure *pAssoStrc;
-       struct amp_pref_chnl_regulatory *pReg;
-       struct chnl_txpower_triple *pTriple;
-       char ctrString[3] = {'X', 'X', 'X'};
-       u32 len = 0;
-       u8 preferredChnl;
-
-       pBTInfo = GET_BT_INFO(padapter);
-       pAssoStrc = (struct amp_assoc_structure *)pbuf;
-       pReg = (struct amp_pref_chnl_regulatory *)&pAssoStrc->Data[3];
-
-       preferredChnl = bthci_GetLocalChannel(padapter);
-       pAssoStrc->TypeID = AMP_PREFERRED_CHANNEL_LIST;
-
-       /*  locale unknown */
-       memcpy(&pAssoStrc->Data[0], &ctrString[0], 3);
-       pReg->reXId = 201;
-       pReg->regulatoryClass = 254;
-       pReg->coverageClass = 0;
-       len += 6;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD | IOCTL_BT_LOGO), ("PREFERRED_CHNL_LIST\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD | IOCTL_BT_LOGO), ("XXX, 201, 254, 0\n"));
-       /*  at the following, chnl 1~11 should be contained */
-       pTriple = (struct chnl_txpower_triple *)&pAssoStrc->Data[len];
-
-       /*  (1) if any wifi or bt HS connection exists */
-       if ((pBTInfo->BtAsocEntry[EntryNum].AMPRole == AMP_BTAP_CREATOR) ||
-           (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE |
-                          WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE |
-                          WIFI_AP_STATE)) ||
-           BTHCI_HsConnectionEstablished(padapter)) {
-               pTriple->FirstChnl = preferredChnl;
-               pTriple->NumChnls = 1;
-               pTriple->MaxTxPowerInDbm = 20;
-               len += 3;
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD | IOCTL_BT_LOGO), ("First Channel = %d, Channel Num = %d, MaxDbm = %d\n",
-                       pTriple->FirstChnl,
-                       pTriple->NumChnls,
-                       pTriple->MaxTxPowerInDbm));
-       }
-
-       pAssoStrc->Length = (u16)len;
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD, ("AssocPreferredChannelList : \n"), pAssoStrc, pAssoStrc->Length+3);
-
-       return pAssoStrc->Length + 3;
-}
-
-static u16 bthci_AssocPALVer(struct rtw_adapter *padapter, void *pbuf)
-{
-       struct amp_assoc_structure *pAssoStrc = (struct amp_assoc_structure *)pbuf;
-       u8 *pu1Tmp;
-       u16     *pu2Tmp;
-
-       pAssoStrc->TypeID = AMP_80211_PAL_VISION;
-       pAssoStrc->Length = 0x5;
-       pu1Tmp = &pAssoStrc->Data[0];
-       *pu1Tmp = 0x1;  /*  PAL Version */
-       pu2Tmp = (u16 *)&pAssoStrc->Data[1];
-       *pu2Tmp = 0x5D; /*  SIG Company identifier of 802.11 PAL vendor */
-       pu2Tmp = (u16 *)&pAssoStrc->Data[3];
-       *pu2Tmp = 0x1;  /*  PAL Sub-version specifier */
-
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("AssocPALVer : \n"), pAssoStrc, pAssoStrc->Length+3);
-       RTPRINT(FIOCTL, IOCTL_BT_LOGO, ("AssocPALVer \n"));
-
-       RTPRINT(FIOCTL, IOCTL_BT_LOGO, (" TypeID = 0x%x,\n Length = 0x%x,\n PAL Version = 0x01,\n PAL vendor = 0x01,\n PAL Sub-version specifier = 0x01\n",
-               pAssoStrc->TypeID,
-               pAssoStrc->Length));
-       return pAssoStrc->Length + 3;
-}
-
-static u8 bthci_CheckRfStateBeforeConnect(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo;
-       enum rt_rf_power_state          RfState;
-
-       pBTInfo = GET_BT_INFO(padapter);
-
-       RfState = padapter->pwrctrlpriv.rf_pwrstate;
-
-       if (RfState != rf_on) {
-               mod_timer(&pBTInfo->BTPsDisableTimer,
-                         jiffies + msecs_to_jiffies(50));
-               return false;
-       }
-       return true;
-}
-
-static void bthci_ResponderStartToScan(struct rtw_adapter *padapter)
-{
-}
-
-static u8 bthci_PhyLinkConnectionInProgress(struct rtw_adapter *padapter, u8 PhyLinkHandle)
-{
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->bPhyLinkInProgress &&
-               (pBtMgnt->BtCurrentPhyLinkhandle == PhyLinkHandle))
-               return true;
-       return false;
-}
-
-static void bthci_ResetFlowSpec(struct rtw_adapter *padapter, u8 EntryNum, u8 index)
-{
-       struct bt_30info *pBTinfo;
-
-       pBTinfo = GET_BT_INFO(padapter);
-
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].BtLogLinkhandle = 0;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].BtPhyLinkhandle = 0;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].bLLCompleteEventIsSet = false;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].bLLCancelCMDIsSetandComplete = false;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].BtTxFlowSpecID = 0;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].TxPacketCount = 0;
-
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.Identifier = 0x01;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.ServiceType = SERVICE_BEST_EFFORT;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.MaximumSDUSize = 0xffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.SDUInterArrivalTime = 0xffffffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.AccessLatency = 0xffffffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Tx_Flow_Spec.FlushTimeout = 0xffffffff;
-
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.Identifier = 0x01;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.ServiceType = SERVICE_BEST_EFFORT;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.MaximumSDUSize = 0xffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.SDUInterArrivalTime = 0xffffffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.AccessLatency = 0xffffffff;
-       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[index].Rx_Flow_Spec.FlushTimeout = 0xffffffff;
-}
-
-static void bthci_ResetEntry(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTinfo;
-       struct bt_mgnt *pBtMgnt;
-       u8 j;
-
-       pBTinfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTinfo->BtMgnt;
-
-       pBTinfo->BtAsocEntry[EntryNum].bUsed = false;
-       pBTinfo->BtAsocEntry[EntryNum].BtCurrentState = HCI_STATE_DISCONNECTED;
-       pBTinfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_DISCONNECTED;
-
-       pBTinfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocRemLen = 0;
-       pBTinfo->BtAsocEntry[EntryNum].AmpAsocCmdData.BtPhyLinkhandle = 0;
-       if (pBTinfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocfragment != NULL)
-               memset(pBTinfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocfragment, 0, TOTAL_ALLOCIATE_ASSOC_LEN);
-       pBTinfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar = 0;
-
-       pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyType = 0;
-       pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle = 0;
-       memset(pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKey, 0,
-              pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen);
-       pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen = 0;
-
-       /* 0x640; 0.625ms*1600 = 1000ms, 0.625ms*16000 = 10000ms */
-       pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.LinkSuperversionTimeout = 0x3e80;
-
-       pBTinfo->BtAsocEntry[EntryNum].AMPRole = AMP_BTAP_NONE;
-
-       pBTinfo->BtAsocEntry[EntryNum].mAssoc = false;
-       pBTinfo->BtAsocEntry[EntryNum].b4waySuccess = false;
-
-       /*  Reset BT WPA */
-       pBTinfo->BtAsocEntry[EntryNum].KeyReplayCounter = 0;
-       pBTinfo->BtAsocEntry[EntryNum].BTWPAAuthState = STATE_WPA_AUTH_UNINITIALIZED;
-
-       pBTinfo->BtAsocEntry[EntryNum].bSendSupervisionPacket = false;
-       pBTinfo->BtAsocEntry[EntryNum].NoRxPktCnt = 0;
-       pBTinfo->BtAsocEntry[EntryNum].ShortRangeMode = 0;
-       pBTinfo->BtAsocEntry[EntryNum].rxSuvpPktCnt = 0;
-
-       for (j = 0; j < MAX_LOGICAL_LINK_NUM; j++)
-               bthci_ResetFlowSpec(padapter, EntryNum, j);
-
-       pBtMgnt->BTAuthCount = 0;
-       pBtMgnt->BTAsocCount = 0;
-       pBtMgnt->BTCurrentConnectType = BT_DISCONNECT;
-       pBtMgnt->BTReceiveConnectPkt = BT_DISCONNECT;
-
-       HALBT_RemoveKey(padapter, EntryNum);
-}
-
-static void bthci_RemoveEntryByEntryNum(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       bthci_ResetEntry(padapter, EntryNum);
-
-       if (pBtMgnt->CurrentBTConnectionCnt > 0)
-               pBtMgnt->CurrentBTConnectionCnt--;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], CurrentBTConnectionCnt = %d!!\n",
-               pBtMgnt->CurrentBTConnectionCnt));
-
-       if (pBtMgnt->CurrentBTConnectionCnt > 0) {
-               pBtMgnt->BtOperationOn = true;
-       } else {
-               pBtMgnt->BtOperationOn = false;
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], Bt Operation OFF!!\n"));
-       }
-
-       if (!pBtMgnt->BtOperationOn) {
-               del_timer_sync(&pBTInfo->BTHCIDiscardAclDataTimer);
-               del_timer_sync(&pBTInfo->BTBeaconTimer);
-               pBtMgnt->bStartSendSupervisionPkt = false;
-       }
-}
-
-static u8
-bthci_CommandCompleteHeader(
-       u8 *pbuf,
-       u16             OGF,
-       u16             OCF,
-       enum hci_status status
-       )
-{
-       struct packet_irp_hcievent_data *PPacketIrpEvent = (struct packet_irp_hcievent_data *)pbuf;
-       u8 NumHCI_Comm = 0x1;
-
-       PPacketIrpEvent->EventCode = HCI_EVENT_COMMAND_COMPLETE;
-       PPacketIrpEvent->Data[0] = NumHCI_Comm; /* packet # */
-       PPacketIrpEvent->Data[1] = HCIOPCODELOW(OCF, OGF);
-       PPacketIrpEvent->Data[2] = HCIOPCODEHIGHT(OCF, OGF);
-
-       if (OGF == OGF_EXTENSION) {
-               if (OCF == HCI_SET_RSSI_VALUE) {
-                       RTPRINT(FIOCTL, (IOCTL_BT_EVENT_PERIODICAL),
-                               ("[BT event], CommandComplete, Num_HCI_Comm = 0x%x, Opcode = 0x%02x%02x, status = 0x%x, OGF = 0x%x, OCF = 0x%x\n",
-                               NumHCI_Comm, (HCIOPCODEHIGHT(OCF, OGF)), (HCIOPCODELOW(OCF, OGF)), status, OGF, OCF));
-               } else {
-                       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_EXT),
-                               ("[BT event], CommandComplete, Num_HCI_Comm = 0x%x, Opcode = 0x%02x%02x, status = 0x%x, OGF = 0x%x, OCF = 0x%x\n",
-                               NumHCI_Comm, (HCIOPCODEHIGHT(OCF, OGF)), (HCIOPCODELOW(OCF, OGF)), status, OGF, OCF));
-               }
-       } else {
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO),
-                       ("[BT event], CommandComplete, Num_HCI_Comm = 0x%x, Opcode = 0x%02x%02x, status = 0x%x, OGF = 0x%x, OCF = 0x%x\n",
-                       NumHCI_Comm, (HCIOPCODEHIGHT(OCF, OGF)), (HCIOPCODELOW(OCF, OGF)), status, OGF, OCF));
-       }
-       return 3;
-}
-
-static u8 bthci_ExtensionEventHeaderRtk(u8 *pbuf, u8 extensionEvent)
-{
-       struct packet_irp_hcievent_data *PPacketIrpEvent = (struct packet_irp_hcievent_data *)pbuf;
-       PPacketIrpEvent->EventCode = HCI_EVENT_EXTENSION_RTK;
-       PPacketIrpEvent->Data[0] = extensionEvent;      /* extension event code */
-
-       return 1;
-}
-
-static enum rt_status
-bthci_IndicateEvent(
-       struct rtw_adapter *padapter,
-       void            *pEvntData,
-       u32             dataLen
-       )
-{
-       return PlatformIndicateBTEvent(padapter, pEvntData, dataLen);
-}
-
-static void
-bthci_EventWriteRemoteAmpAssoc(
-       struct rtw_adapter *padapter,
-       enum hci_status status,
-       u8 PLHandle
-       )
-{
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_STATUS_PARAMETERS,
-               HCI_WRITE_REMOTE_AMP_ASSOC,
-               status);
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("PhyLinkHandle = 0x%x, status = %d\n", PLHandle, status));
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pRetPar[1] = PLHandle;
-       len += 2;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-}
-
-static void
-bthci_EventEnhancedFlushComplete(
-       struct rtw_adapter *padapter,
-       u16                                     LLH
-       )
-{
-       u8 localBuf[4] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("EventEnhancedFlushComplete, LLH = 0x%x\n", LLH));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_ENHANCED_FLUSH_COMPLETE;
-       PPacketIrpEvent->Length = 2;
-       /* Logical link handle */
-       PPacketIrpEvent->Data[0] = TWOBYTE_LOWBYTE(LLH);
-       PPacketIrpEvent->Data[1] = TWOBYTE_HIGHTBYTE(LLH);
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-}
-
-static void
-bthci_EventShortRangeModeChangeComplete(
-       struct rtw_adapter *padapter,
-       enum hci_status                         HciStatus,
-       u8              ShortRangeState,
-       u8              EntryNum
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[5] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-                       ("[BT event], Short Range Mode Change Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Short Range Mode Change Complete, Status = %d\n , PLH = 0x%x\n, Short_Range_Mode_State = 0x%x\n",
-               HciStatus, pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle, ShortRangeState));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE;
-       PPacketIrpEvent->Length = 3;
-       PPacketIrpEvent->Data[0] = HciStatus;
-       PPacketIrpEvent->Data[1] = pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-       PPacketIrpEvent->Data[2] = ShortRangeState;
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 5);
-}
-
-static void bthci_EventSendFlowSpecModifyComplete(struct rtw_adapter *padapter,
-                                                 enum hci_status HciStatus,
-                                                 u16 logicHandle)
-{
-       u8 localBuf[5] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE)) {
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO),
-                       ("[BT event], Flow Spec Modify Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-       RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO),
-               ("[BT event], Flow Spec Modify Complete, status = 0x%x, LLH = 0x%x\n", HciStatus, logicHandle));
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE;
-       PPacketIrpEvent->Length = 3;
-
-       PPacketIrpEvent->Data[0] = HciStatus;
-       /* Logical link handle */
-       PPacketIrpEvent->Data[1] = TWOBYTE_LOWBYTE(logicHandle);
-       PPacketIrpEvent->Data[2] = TWOBYTE_HIGHTBYTE(logicHandle);
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 5);
-}
-
-static void
-bthci_EventExtWifiScanNotify(
-       struct rtw_adapter *padapter,
-       u8                      scanType
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 len = 0;
-       u8 localBuf[7] = "";
-       u8 *pRetPar;
-       u8 *pu1Temp;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!pBtMgnt->BtOperationOn)
-               return;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_ExtensionEventHeaderRtk(&localBuf[0], HCI_EVENT_EXT_WIFI_SCAN_NOTIFY);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pu1Temp = (u8 *)&pRetPar[0];
-       *pu1Temp = scanType;
-       len += 1;
-
-       PPacketIrpEvent->Length = len;
-
-       if (bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2) == RT_STATUS_SUCCESS) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Wifi scan notify, scan type = %d\n",
-                       scanType));
-       }
-}
-
-static void
-bthci_EventAMPReceiverReport(
-       struct rtw_adapter *padapter,
-       u8 Reason
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (pBtHciInfo->bTestNeedReport) {
-               u8 localBuf[20] = "";
-               u32     *pu4Temp;
-               u16     *pu2Temp;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), (" HCI_EVENT_AMP_RECEIVER_REPORT\n"));
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-               PPacketIrpEvent->EventCode = HCI_EVENT_AMP_RECEIVER_REPORT;
-               PPacketIrpEvent->Length = 2;
-
-               PPacketIrpEvent->Data[0] = pBtHciInfo->TestCtrType;
-
-               PPacketIrpEvent->Data[1] = Reason;
-
-               pu4Temp = (u32 *)&PPacketIrpEvent->Data[2];
-               *pu4Temp = pBtHciInfo->TestEventType;
-
-               pu2Temp = (u16 *)&PPacketIrpEvent->Data[6];
-               *pu2Temp = pBtHciInfo->TestNumOfFrame;
-
-               pu2Temp = (u16 *)&PPacketIrpEvent->Data[8];
-               *pu2Temp = pBtHciInfo->TestNumOfErrFrame;
-
-               pu4Temp = (u32 *)&PPacketIrpEvent->Data[10];
-               *pu4Temp = pBtHciInfo->TestNumOfBits;
-
-               pu4Temp = (u32 *)&PPacketIrpEvent->Data[14];
-               *pu4Temp = pBtHciInfo->TestNumOfErrBits;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, 20);
-
-               /* Return to Idel state with RX and TX off. */
-
-       }
-
-       pBtHciInfo->TestNumOfFrame = 0x00;
-}
-
-static void
-bthci_EventChannelSelected(
-       struct rtw_adapter *padapter,
-       u8      EntryNum
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[3] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_CHANNEL_SELECT)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-                       ("[BT event], Channel Selected, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT|IOCTL_STATE,
-               ("[BT event], Channel Selected, PhyLinkHandle %d\n",
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_CHANNEL_SELECT;
-       PPacketIrpEvent->Length = 1;
-       PPacketIrpEvent->Data[0] = pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 3);
-}
-
-static void
-bthci_EventDisconnectPhyLinkComplete(
-       struct rtw_adapter *padapter,
-       enum hci_status                         HciStatus,
-       enum hci_status                         Reason,
-       u8              EntryNum
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[5] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-                       ("[BT event], Disconnect Physical Link Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-               ("[BT event], Disconnect Physical Link Complete, Status = 0x%x, PLH = 0x%x Reason = 0x%x\n",
-               HciStatus, pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle, Reason));
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE;
-       PPacketIrpEvent->Length = 3;
-       PPacketIrpEvent->Data[0] = HciStatus;
-       PPacketIrpEvent->Data[1] = pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-       PPacketIrpEvent->Data[2] = Reason;
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 5);
-}
-
-static void
-bthci_EventPhysicalLinkComplete(
-       struct rtw_adapter *padapter,
-       enum hci_status                         HciStatus,
-       u8              EntryNum,
-       u8              PLHandle
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 localBuf[4] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u8 PL_handle;
-
-       pBtMgnt->bPhyLinkInProgress = false;
-       pBtDbg->dbgHciInfo.hciCmdPhyLinkStatus = HciStatus;
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_PHY_LINK_COMPLETE)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-                       ("[BT event], Physical Link Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-
-       if (EntryNum == 0xff) {
-               /*  connection not started yet, just use the input physical link handle to response. */
-               PL_handle = PLHandle;
-       } else {
-               /*  connection is under progress, use the phy link handle we recorded. */
-               PL_handle  = pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-               pBTInfo->BtAsocEntry[EntryNum].bNeedPhysLinkCompleteEvent = false;
-       }
-
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Physical Link Complete, Status = 0x%x PhyLinkHandle = 0x%x\n", HciStatus,
-               PL_handle));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_PHY_LINK_COMPLETE;
-       PPacketIrpEvent->Length = 2;
-
-       PPacketIrpEvent->Data[0] = HciStatus;
-       PPacketIrpEvent->Data[1] = PL_handle;
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-
-}
-
-static void
-bthci_EventCommandStatus(
-       struct rtw_adapter *padapter,
-       u8              OGF,
-       u16                                     OCF,
-       enum hci_status                         HciStatus
-       )
-{
-
-       u8 localBuf[6] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u8 Num_Hci_Comm = 0x1;
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-               ("[BT event], CommandStatus, Opcode = 0x%02x%02x, OGF = 0x%x,  OCF = 0x%x, Status = 0x%x, Num_HCI_COMM = 0x%x\n",
-               (HCIOPCODEHIGHT(OCF, OGF)), (HCIOPCODELOW(OCF, OGF)), OGF, OCF, HciStatus, Num_Hci_Comm));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_COMMAND_STATUS;
-       PPacketIrpEvent->Length = 4;
-       PPacketIrpEvent->Data[0] = HciStatus;   /* current pending */
-       PPacketIrpEvent->Data[1] = Num_Hci_Comm;        /* packet # */
-       PPacketIrpEvent->Data[2] = HCIOPCODELOW(OCF, OGF);
-       PPacketIrpEvent->Data[3] = HCIOPCODEHIGHT(OCF, OGF);
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 6);
-
-}
-
-static void
-bthci_EventLogicalLinkComplete(
-       struct rtw_adapter *padapter,
-       enum hci_status                         HciStatus,
-       u8              PhyLinkHandle,
-       u16                                     LogLinkHandle,
-       u8              LogLinkIndex,
-       u8              EntryNum
-       )
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[7] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_LOGICAL_LINK_COMPLETE)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT,
-                       ("[BT event], Logical Link Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Logical Link Complete, PhyLinkHandle = 0x%x,  LogLinkHandle = 0x%x, Status = 0x%x\n",
-               PhyLinkHandle, LogLinkHandle, HciStatus));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_LOGICAL_LINK_COMPLETE;
-       PPacketIrpEvent->Length = 5;
-
-       PPacketIrpEvent->Data[0] = HciStatus;/* status code */
-       /* Logical link handle */
-       PPacketIrpEvent->Data[1] = TWOBYTE_LOWBYTE(LogLinkHandle);
-       PPacketIrpEvent->Data[2] = TWOBYTE_HIGHTBYTE(LogLinkHandle);
-       /* Physical link handle */
-       PPacketIrpEvent->Data[3] = TWOBYTE_LOWBYTE(PhyLinkHandle);
-       /* corresponding Tx flow spec ID */
-       if (HciStatus == HCI_STATUS_SUCCESS) {
-               PPacketIrpEvent->Data[4] =
-                       pBTInfo->BtAsocEntry[EntryNum].LogLinkCmdData[LogLinkIndex].Tx_Flow_Spec.Identifier;
-       } else {
-               PPacketIrpEvent->Data[4] = 0x0;
-       }
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 7);
-}
-
-static void
-bthci_EventDisconnectLogicalLinkComplete(
-       struct rtw_adapter *padapter,
-       enum hci_status                         HciStatus,
-       u16                                     LogLinkHandle,
-       enum hci_status                         Reason
-       )
-{
-       u8 localBuf[6] = "";
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Disconnect Logical Link Complete, Ignore to send this event due to event mask page 2\n"));
-               return;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Disconnect Logical Link Complete, Status = 0x%x, LLH = 0x%x Reason = 0x%x\n", HciStatus, LogLinkHandle, Reason));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE;
-       PPacketIrpEvent->Length = 4;
-
-       PPacketIrpEvent->Data[0] = HciStatus;
-       /* Logical link handle */
-       PPacketIrpEvent->Data[1] = TWOBYTE_LOWBYTE(LogLinkHandle);
-       PPacketIrpEvent->Data[2] = TWOBYTE_HIGHTBYTE(LogLinkHandle);
-       /* Disconnect reason */
-       PPacketIrpEvent->Data[3] = Reason;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 6);
-}
-
-static void
-bthci_EventFlushOccurred(
-       struct rtw_adapter *padapter,
-       u16                                     LogLinkHandle
-       )
-{
-       u8 localBuf[4] = "";
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("bthci_EventFlushOccurred(), LLH = 0x%x\n", LogLinkHandle));
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       PPacketIrpEvent->EventCode = HCI_EVENT_FLUSH_OCCRUED;
-       PPacketIrpEvent->Length = 2;
-       /* Logical link handle */
-       PPacketIrpEvent->Data[0] = TWOBYTE_LOWBYTE(LogLinkHandle);
-       PPacketIrpEvent->Data[1] = TWOBYTE_HIGHTBYTE(LogLinkHandle);
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-}
-
-static enum hci_status
-bthci_BuildPhysicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd,
-       u16     OCF
-)
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 EntryNum, PLH;
-
-       /* Send HCI Command status event to AMP. */
-       bthci_EventCommandStatus(padapter,
-                       LINK_CONTROL_COMMANDS,
-                       OCF,
-                       HCI_STATUS_SUCCESS);
-
-       PLH = *((u8 *)pHciCmd->Data);
-
-       /*  Check if resource or bt connection is under progress, if yes, reject the link creation. */
-       if (!bthci_AddEntry(padapter)) {
-               status = HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE;
-               bthci_EventPhysicalLinkComplete(padapter, status, INVALID_ENTRY_NUM, PLH);
-               return status;
-       }
-
-       EntryNum = pBtMgnt->CurrentConnectEntryNum;
-       pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle = PLH;
-       pBtMgnt->BtCurrentPhyLinkhandle = PLH;
-
-       if (pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.AMPAssocfragment == NULL) {
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Create/Accept PhysicalLink, AMP controller is busy\n"));
-               status = HCI_STATUS_CONTROLLER_BUSY;
-               bthci_EventPhysicalLinkComplete(padapter, status, INVALID_ENTRY_NUM, PLH);
-               return status;
-       }
-
-       /*  Record Key and the info */
-       pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen = (*((u8 *)pHciCmd->Data+1));
-       pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyType = (*((u8 *)pHciCmd->Data+2));
-       memcpy(pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKey,
-               (((u8 *)pHciCmd->Data+3)), pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen);
-       memcpy(pBTInfo->BtAsocEntry[EntryNum].PMK, pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKey, PMK_LEN);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("BuildPhysicalLink, EntryNum = %d, PLH = 0x%x  KeyLen = 0x%x, KeyType = 0x%x\n",
-               EntryNum, pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyType));
-       RTPRINT_DATA(FIOCTL, (IOCTL_BT_LOGO|IOCTL_BT_HCICMD), ("BtAMPKey\n"), pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKey,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtAMPKeyLen);
-       RTPRINT_DATA(FIOCTL, (IOCTL_BT_LOGO|IOCTL_BT_HCICMD), ("PMK\n"), pBTInfo->BtAsocEntry[EntryNum].PMK,
-               PMK_LEN);
-
-       if (OCF == HCI_CREATE_PHYSICAL_LINK) {
-               /* These macros require braces */
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTED, STATE_CMD_CREATE_PHY_LINK, EntryNum);
-       } else if (OCF == HCI_ACCEPT_PHYSICAL_LINK) {
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTED, STATE_CMD_ACCEPT_PHY_LINK, EntryNum);
-       }
-
-       return status;
-}
-
-static void
-bthci_BuildLogicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd,
-       u16 OCF
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTinfo->BtMgnt;
-       u8 PhyLinkHandle, EntryNum;
-       static u16 AssignLogHandle = 1;
-
-       struct hci_flow_spec    TxFlowSpec;
-       struct hci_flow_spec    RxFlowSpec;
-       u32     MaxSDUSize, ArriveTime, Bandwidth;
-
-       PhyLinkHandle = *((u8 *)pHciCmd->Data);
-
-       EntryNum = bthci_GetCurrentEntryNum(padapter, PhyLinkHandle);
-
-       memcpy(&TxFlowSpec,
-               &pHciCmd->Data[1], sizeof(struct hci_flow_spec));
-       memcpy(&RxFlowSpec,
-               &pHciCmd->Data[17], sizeof(struct hci_flow_spec));
-
-       MaxSDUSize = TxFlowSpec.MaximumSDUSize;
-       ArriveTime = TxFlowSpec.SDUInterArrivalTime;
-
-       if (bthci_CheckLogLinkBehavior(padapter, TxFlowSpec) && bthci_CheckLogLinkBehavior(padapter, RxFlowSpec))
-               Bandwidth = BTTOTALBANDWIDTH;
-       else if (MaxSDUSize == 0xffff && ArriveTime == 0xffffffff)
-               Bandwidth = BTTOTALBANDWIDTH;
-       else
-               Bandwidth = MaxSDUSize*8*1000/(ArriveTime+244);
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD,
-               ("BuildLogicalLink, PhyLinkHandle = 0x%x, MaximumSDUSize = 0x%x, SDUInterArrivalTime = 0x%x, Bandwidth = 0x%x\n",
-               PhyLinkHandle, MaxSDUSize, ArriveTime, Bandwidth));
-
-       if (EntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Invalid Physical Link handle = 0x%x, status = HCI_STATUS_UNKNOW_CONNECT_ID, return\n", PhyLinkHandle));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-               /* When we receive Create/Accept logical link command, we should send command status event first. */
-               bthci_EventCommandStatus(padapter,
-                       LINK_CONTROL_COMMANDS,
-                       OCF,
-                       status);
-               return;
-       }
-
-       if (!pBtMgnt->bLogLinkInProgress) {
-               if (bthci_PhyLinkConnectionInProgress(padapter, PhyLinkHandle)) {
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Physical link connection in progress, status = HCI_STATUS_CMD_DISALLOW, return\n"));
-                       status = HCI_STATUS_CMD_DISALLOW;
-
-                       pBtMgnt->bPhyLinkInProgressStartLL = true;
-                       /* When we receive Create/Accept logical link command, we should send command status event first. */
-                       bthci_EventCommandStatus(padapter,
-                               LINK_CONTROL_COMMANDS,
-                               OCF,
-                               status);
-
-                       return;
-               }
-
-               if (Bandwidth > BTTOTALBANDWIDTH) {
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("status = HCI_STATUS_QOS_REJECT, Bandwidth = 0x%x, return\n", Bandwidth));
-                       status = HCI_STATUS_QOS_REJECT;
-
-                       /* When we receive Create/Accept logical link command, we should send command status event first. */
-                       bthci_EventCommandStatus(padapter,
-                               LINK_CONTROL_COMMANDS,
-                               OCF,
-                               status);
-               } else {
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("status = HCI_STATUS_SUCCESS\n"));
-                       status = HCI_STATUS_SUCCESS;
-
-                       /* When we receive Create/Accept logical link command, we should send command status event first. */
-                       bthci_EventCommandStatus(padapter,
-                               LINK_CONTROL_COMMANDS,
-                               OCF,
-                               status);
-
-               }
-
-               if (pBTinfo->BtAsocEntry[EntryNum].BtCurrentState != HCI_STATE_CONNECTED) {
-                       bthci_EventLogicalLinkComplete(padapter,
-                               HCI_STATUS_CMD_DISALLOW, 0, 0, 0, EntryNum);
-               } else {
-                       u8 i, find = 0;
-
-                       pBtMgnt->bLogLinkInProgress = true;
-
-                       /*  find an unused logical link index and copy the data */
-                       for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                               if (pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtLogLinkhandle == 0) {
-                                       enum hci_status LogCompEventstatus = HCI_STATUS_SUCCESS;
-
-                                       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtPhyLinkhandle = *((u8 *)pHciCmd->Data);
-                                       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtLogLinkhandle = AssignLogHandle;
-                                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("BuildLogicalLink, EntryNum = %d, physical link handle = 0x%x, logical link handle = 0x%x\n",
-                                               EntryNum, pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle,
-                                                                 pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtLogLinkhandle));
-                                       memcpy(&pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].Tx_Flow_Spec,
-                                               &TxFlowSpec, sizeof(struct hci_flow_spec));
-                                       memcpy(&pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].Rx_Flow_Spec,
-                                               &RxFlowSpec, sizeof(struct hci_flow_spec));
-
-                                       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].bLLCompleteEventIsSet = false;
-
-                                       if (pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].bLLCancelCMDIsSetandComplete)
-                                               LogCompEventstatus = HCI_STATUS_UNKNOW_CONNECT_ID;
-                                       bthci_EventLogicalLinkComplete(padapter,
-                                               LogCompEventstatus,
-                                               pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtPhyLinkhandle,
-                                               pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].BtLogLinkhandle, i, EntryNum);
-
-                                       pBTinfo->BtAsocEntry[EntryNum].LogLinkCmdData[i].bLLCompleteEventIsSet = true;
-
-                                       find = 1;
-                                       pBtMgnt->BtCurrentLogLinkhandle = AssignLogHandle;
-                                       AssignLogHandle++;
-                                       break;
-                               }
-                       }
-
-                       if (!find) {
-                               bthci_EventLogicalLinkComplete(padapter,
-                                       HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE, 0, 0, 0, EntryNum);
-                       }
-                       pBtMgnt->bLogLinkInProgress = false;
-               }
-       } else {
-               bthci_EventLogicalLinkComplete(padapter,
-                       HCI_STATUS_CONTROLLER_BUSY, 0, 0, 0, EntryNum);
-       }
-
-}
-
-static void
-bthci_StartBeaconAndConnect(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd,
-       u8 CurrentAssocNum
-       )
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("StartBeaconAndConnect, CurrentAssocNum =%d, AMPRole =%d\n",
-               CurrentAssocNum,
-               pBTInfo->BtAsocEntry[CurrentAssocNum].AMPRole));
-
-       if (!pBtMgnt->CheckChnlIsSuit) {
-               bthci_EventPhysicalLinkComplete(padapter, HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND, CurrentAssocNum, INVALID_PL_HANDLE);
-               bthci_RemoveEntryByEntryNum(padapter, CurrentAssocNum);
-               return;
-       }
-
-       if (pBTInfo->BtAsocEntry[CurrentAssocNum].AMPRole == AMP_BTAP_CREATOR) {
-               snprintf((char *)pBTInfo->BtAsocEntry[CurrentAssocNum].BTSsidBuf, 32,
-                        "AMP-%pMF", padapter->eeprompriv.mac_addr);
-       } else if (pBTInfo->BtAsocEntry[CurrentAssocNum].AMPRole == AMP_BTAP_JOINER) {
-               snprintf((char *)pBTInfo->BtAsocEntry[CurrentAssocNum].BTSsidBuf, 32,
-                        "AMP-%pMF", pBTInfo->BtAsocEntry[CurrentAssocNum].BTRemoteMACAddr);
-       }
-
-       FillOctetString(pBTInfo->BtAsocEntry[CurrentAssocNum].BTSsid, pBTInfo->BtAsocEntry[CurrentAssocNum].BTSsidBuf, 21);
-       pBTInfo->BtAsocEntry[CurrentAssocNum].BTSsid.Length = 21;
-
-       /* To avoid set the start ap or connect twice, or the original connection will be disconnected. */
-       if (!pBtMgnt->bBTConnectInProgress) {
-               pBtMgnt->bBTConnectInProgress = true;
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], BT Connect in progress ON!!\n"));
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_STARTING, STATE_CMD_MAC_START_COMPLETE, CurrentAssocNum);
-
-               /*  20100325 Joseph: Check RF ON/OFF. */
-               /*  If RF OFF, it reschedule connecting operation after 50ms. */
-               if (!bthci_CheckRfStateBeforeConnect(padapter))
-                       return;
-
-               if (pBTInfo->BtAsocEntry[CurrentAssocNum].AMPRole == AMP_BTAP_CREATOR) {
-                       /* These macros need braces */
-                       BTHCI_SM_WITH_INFO(padapter, HCI_STATE_CONNECTING, STATE_CMD_MAC_CONNECT_COMPLETE, CurrentAssocNum);
-               } else if (pBTInfo->BtAsocEntry[CurrentAssocNum].AMPRole == AMP_BTAP_JOINER) {
-                       bthci_ResponderStartToScan(padapter);
-               }
-       }
-       RT_PRINT_STR(_module_rtl871x_mlme_c_, _drv_notice_,
-                    "StartBeaconAndConnect, SSID:\n",
-                    pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].BTSsid.Octet,
-                    pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].BTSsid.Length);
-}
-
-static void bthci_ResetBtMgnt(struct bt_mgnt *pBtMgnt)
-{
-       pBtMgnt->BtOperationOn = false;
-       pBtMgnt->bBTConnectInProgress = false;
-       pBtMgnt->bLogLinkInProgress = false;
-       pBtMgnt->bPhyLinkInProgress = false;
-       pBtMgnt->bPhyLinkInProgressStartLL = false;
-       pBtMgnt->DisconnectEntryNum = 0xff;
-       pBtMgnt->bStartSendSupervisionPkt = false;
-       pBtMgnt->JoinerNeedSendAuth = false;
-       pBtMgnt->CurrentBTConnectionCnt = 0;
-       pBtMgnt->BTCurrentConnectType = BT_DISCONNECT;
-       pBtMgnt->BTReceiveConnectPkt = BT_DISCONNECT;
-       pBtMgnt->BTAuthCount = 0;
-       pBtMgnt->btLogoTest = 0;
-}
-
-static void bthci_ResetBtHciInfo(struct bt_hci_info *pBtHciInfo)
-{
-       pBtHciInfo->BTEventMask = 0;
-       pBtHciInfo->BTEventMaskPage2 = 0;
-       pBtHciInfo->ConnAcceptTimeout =  10000;
-       pBtHciInfo->PageTimeout  =  0x30;
-       pBtHciInfo->LocationDomainAware = 0x0;
-       pBtHciInfo->LocationDomain = 0x5858;
-       pBtHciInfo->LocationDomainOptions = 0x58;
-       pBtHciInfo->LocationOptions = 0x0;
-       pBtHciInfo->FlowControlMode = 0x1;      /*  0:Packet based data flow control mode(BR/EDR), 1: Data block based data flow control mode(AMP). */
-
-       pBtHciInfo->enFlush_LLH = 0;
-       pBtHciInfo->FLTO_LLH = 0;
-
-       /* Test command only */
-       pBtHciInfo->bTestIsEnd = true;
-       pBtHciInfo->bInTestMode = false;
-       pBtHciInfo->bTestNeedReport = false;
-       pBtHciInfo->TestScenario = 0xff;
-       pBtHciInfo->TestReportInterval = 0x01;
-       pBtHciInfo->TestCtrType = 0x5d;
-       pBtHciInfo->TestEventType = 0x00;
-       pBtHciInfo->TestNumOfFrame = 0;
-       pBtHciInfo->TestNumOfErrFrame = 0;
-       pBtHciInfo->TestNumOfBits = 0;
-       pBtHciInfo->TestNumOfErrBits = 0;
-}
-
-static void bthci_ResetBtSec(struct rtw_adapter *padapter, struct bt_security *pBtSec)
-{
-/*PMGNT_INFO   pMgntInfo = &padapter->MgntInfo; */
-
-       /*  Set BT used HW or SW encrypt !! */
-       if (GET_HAL_DATA(padapter)->bBTMode)
-               pBtSec->bUsedHwEncrypt = true;
-       else
-               pBtSec->bUsedHwEncrypt = false;
-       RT_TRACE(_module_rtl871x_security_c_, _drv_info_,
-                "%s: bUsedHwEncrypt =%d\n", __func__, pBtSec->bUsedHwEncrypt);
-
-       pBtSec->RSNIE.Octet = pBtSec->RSNIEBuf;
-}
-
-static void bthci_ResetBtExtInfo(struct bt_mgnt *pBtMgnt)
-{
-       u8 i;
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-               pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle = 0;
-               pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode = 0;
-               pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode = 0;
-               pBtMgnt->ExtConfig.linkInfo[i].BTProfile = BT_PROFILE_NONE;
-               pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec = BT_SPEC_2_1_EDR;
-               pBtMgnt->ExtConfig.linkInfo[i].BT_RSSI = 0;
-               pBtMgnt->ExtConfig.linkInfo[i].TrafficProfile = BT_PROFILE_NONE;
-               pBtMgnt->ExtConfig.linkInfo[i].linkRole = BT_LINK_MASTER;
-       }
-
-       pBtMgnt->ExtConfig.CurrentConnectHandle = 0;
-       pBtMgnt->ExtConfig.CurrentIncomingTrafficMode = 0;
-       pBtMgnt->ExtConfig.CurrentOutgoingTrafficMode = 0;
-       pBtMgnt->ExtConfig.MIN_BT_RSSI = 0;
-       pBtMgnt->ExtConfig.NumberOfHandle = 0;
-       pBtMgnt->ExtConfig.NumberOfSCO = 0;
-       pBtMgnt->ExtConfig.CurrentBTStatus = 0;
-       pBtMgnt->ExtConfig.HCIExtensionVer = 0;
-
-       pBtMgnt->ExtConfig.bManualControl = false;
-       pBtMgnt->ExtConfig.bBTBusy = false;
-       pBtMgnt->ExtConfig.bBTA2DPBusy = false;
-}
-
-static enum hci_status bthci_CmdReset(struct rtw_adapter *_padapter, u8 bNeedSendEvent)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct rtw_adapter *padapter;
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_hci_info *pBtHciInfo;
-       struct bt_security *pBtSec;
-       struct bt_dgb *pBtDbg;
-       u8 i;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("bthci_CmdReset()\n"));
-
-       padapter = GetDefaultAdapter(_padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtHciInfo = &pBTInfo->BtHciInfo;
-       pBtSec = &pBTInfo->BtSec;
-       pBtDbg = &pBTInfo->BtDbg;
-
-       pBTInfo->padapter = padapter;
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++)
-               bthci_ResetEntry(padapter, i);
-
-       bthci_ResetBtMgnt(pBtMgnt);
-       bthci_ResetBtHciInfo(pBtHciInfo);
-       bthci_ResetBtSec(padapter, pBtSec);
-
-       pBtMgnt->BTChannel = BT_Default_Chnl;
-       pBtMgnt->CheckChnlIsSuit = true;
-
-       pBTInfo->BTBeaconTmrOn = false;
-
-       pBtMgnt->bCreateSpportQos = true;
-
-       del_timer_sync(&pBTInfo->BTHCIDiscardAclDataTimer);
-       del_timer_sync(&pBTInfo->BTBeaconTimer);
-
-       HALBT_SetRtsCtsNoLenLimit(padapter);
-       /*  */
-       /*  Maybe we need to take care Group != AES case !! */
-       /*  now we Pairwise and Group all used AES !! */
-
-       bthci_ResetBtExtInfo(pBtMgnt);
-
-       /* send command complete event here when all data are received. */
-       if (bNeedSendEvent) {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_RESET,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteRemoteAMPAssoc(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 CurrentAssocNum;
-       u8 PhyLinkHandle;
-
-       pBtDbg->dbgHciInfo.hciCmdCntWriteRemoteAmpAssoc++;
-       PhyLinkHandle = *((u8 *)pHciCmd->Data);
-       CurrentAssocNum = bthci_GetCurrentEntryNum(padapter, PhyLinkHandle);
-
-       if (CurrentAssocNum == 0xff) {
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("WriteRemoteAMPAssoc, No such Handle in the Entry\n"));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-               bthci_EventWriteRemoteAmpAssoc(padapter, status, PhyLinkHandle);
-               return status;
-       }
-
-       if (pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocfragment == NULL) {
-               RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("WriteRemoteAMPAssoc, AMP controller is busy\n"));
-               status = HCI_STATUS_CONTROLLER_BUSY;
-               bthci_EventWriteRemoteAmpAssoc(padapter, status, PhyLinkHandle);
-               return status;
-       }
-
-       pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.BtPhyLinkhandle = PhyLinkHandle;/* u8 *)pHciCmd->Data); */
-       pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.LenSoFar = *((u16 *)((u8 *)pHciCmd->Data+1));
-       pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen = *((u16 *)((u8 *)pHciCmd->Data+3));
-
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("WriteRemoteAMPAssoc, LenSoFar = 0x%x, AssocRemLen = 0x%x\n",
-               pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.LenSoFar,
-               pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen));
-
-       RTPRINT_DATA(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO),
-                    ("WriteRemoteAMPAssoc fragment \n"),
-                    pHciCmd->Data,
-                    pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen+5);
-       if ((pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen) > MAX_AMP_ASSOC_FRAG_LEN) {
-               memcpy(((u8 *)pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocfragment+(pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.LenSoFar*(sizeof(u8)))),
-                       (u8 *)pHciCmd->Data+5,
-                       MAX_AMP_ASSOC_FRAG_LEN);
-       } else {
-               memcpy((u8 *)(pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocfragment)+(pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.LenSoFar*(sizeof(u8))),
-                       ((u8 *)pHciCmd->Data+5),
-                       (pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen));
-
-               RTPRINT_DATA(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), "WriteRemoteAMPAssoc :\n",
-                       pHciCmd->Data+5, pBTInfo->BtAsocEntry[CurrentAssocNum].AmpAsocCmdData.AMPAssocRemLen);
-
-               if (!bthci_GetAssocInfo(padapter, CurrentAssocNum))
-                       status = HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE;
-
-               bthci_EventWriteRemoteAmpAssoc(padapter, status, PhyLinkHandle);
-
-               bthci_StartBeaconAndConnect(padapter, pHciCmd, CurrentAssocNum);
-       }
-
-       return status;
-}
-
-/* 7.3.13 */
-static enum hci_status bthci_CmdReadConnectionAcceptTimeout(struct rtw_adapter *padapter)
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[8] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_READ_CONNECTION_ACCEPT_TIMEOUT,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pu2Temp = (u16 *)&pRetPar[1];           /*  Conn_Accept_Timeout */
-       *pu2Temp = pBtHciInfo->ConnAcceptTimeout;
-       len += 3;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-/* 7.3.14 */
-static enum hci_status
-bthci_CmdWriteConnectionAcceptTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u16     *pu2Temp;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pu2Temp = (u16 *)&pHciCmd->Data[0];
-       pBtHciInfo->ConnAcceptTimeout = *pu2Temp;
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("ConnAcceptTimeout = 0x%x",
-               pBtHciInfo->ConnAcceptTimeout));
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadPageTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[8] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_READ_PAGE_TIMEOUT,
-               status);
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Read PageTimeout = 0x%x\n", pBtHciInfo->PageTimeout));
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pu2Temp = (u16 *)&pRetPar[1];           /*  Page_Timeout */
-       *pu2Temp = pBtHciInfo->PageTimeout;
-       len += 3;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWritePageTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u16     *pu2Temp;
-
-       pu2Temp = (u16 *)&pHciCmd->Data[0];
-       pBtHciInfo->PageTimeout = *pu2Temp;
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Write PageTimeout = 0x%x\n",
-               pBtHciInfo->PageTimeout));
-
-       /* send command complete event here when all data are received. */
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_WRITE_PAGE_TIMEOUT,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadLinkSupervisionTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       u8 physicalLinkHandle, EntryNum;
-
-       physicalLinkHandle = *((u8 *)pHciCmd->Data);
-
-       EntryNum = bthci_GetCurrentEntryNum(padapter, physicalLinkHandle);
-
-       if (EntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("ReadLinkSupervisionTimeout, No such Handle in the Entry\n"));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-               return status;
-       }
-
-       if (pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle != physicalLinkHandle)
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-       {
-               u8 localBuf[10] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-               u16 *pu2Temp;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_READ_LINK_SUPERVISION_TIMEOUT,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;
-               pRetPar[1] = pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-               pRetPar[2] = 0;
-               pu2Temp = (u16 *)&pRetPar[3];           /*  Conn_Accept_Timeout */
-               *pu2Temp = pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.LinkSuperversionTimeout;
-               len += 5;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteLinkSupervisionTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       u8 physicalLinkHandle, EntryNum;
-
-       physicalLinkHandle = *((u8 *)pHciCmd->Data);
-
-       EntryNum = bthci_GetCurrentEntryNum(padapter, physicalLinkHandle);
-
-       if (EntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("WriteLinkSupervisionTimeout, No such Handle in the Entry\n"));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-       } else {
-               if (pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle != physicalLinkHandle) {
-                       status = HCI_STATUS_UNKNOW_CONNECT_ID;
-               } else {
-                       pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.LinkSuperversionTimeout = *((u16 *)(((u8 *)pHciCmd->Data)+2));
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("BT Write LinkSuperversionTimeout[%d] = 0x%x\n",
-                               EntryNum, pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.LinkSuperversionTimeout));
-               }
-       }
-
-       {
-               u8 localBuf[8] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_WRITE_LINK_SUPERVISION_TIMEOUT,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;
-               pRetPar[1] = pBTinfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;
-               pRetPar[2] = 0;
-               len += 3;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdEnhancedFlush(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTinfo->BtHciInfo;
-       u16             logicHandle;
-       u8 Packet_Type;
-
-       logicHandle = *((u16 *)&pHciCmd->Data[0]);
-       Packet_Type = pHciCmd->Data[2];
-
-       if (Packet_Type != 0)
-               status = HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE;
-       else
-               pBtHciInfo->enFlush_LLH = logicHandle;
-
-       if (bthci_DiscardTxPackets(padapter, pBtHciInfo->enFlush_LLH))
-               bthci_EventFlushOccurred(padapter, pBtHciInfo->enFlush_LLH);
-
-       /*  should send command status event */
-       bthci_EventCommandStatus(padapter,
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_ENHANCED_FLUSH,
-                       status);
-
-       if (pBtHciInfo->enFlush_LLH) {
-               bthci_EventEnhancedFlushComplete(padapter, pBtHciInfo->enFlush_LLH);
-               pBtHciInfo->enFlush_LLH = 0;
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadLogicalLinkAcceptTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[8] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;
-
-       pu2Temp = (u16 *)&pRetPar[1];           /*  Conn_Accept_Timeout */
-       *pu2Temp = pBtHciInfo->LogicalAcceptTimeout;
-       len += 3;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteLogicalLinkAcceptTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pBtHciInfo->LogicalAcceptTimeout = *((u16 *)pHciCmd->Data);
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;
-
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetEventMask(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 *pu8Temp;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pu8Temp = (u8 *)&pHciCmd->Data[0];
-       pBtHciInfo->BTEventMask = *pu8Temp;
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("BTEventMask = 0x%"i64fmt"x\n",
-               pBtHciInfo->BTEventMask));
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_SET_EVENT_MASK,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-/*  7.3.69 */
-static enum hci_status
-bthci_CmdSetEventMaskPage2(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 *pu8Temp;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pu8Temp = (u8 *)&pHciCmd->Data[0];
-       pBtHciInfo->BTEventMaskPage2 = *pu8Temp;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("BTEventMaskPage2 = 0x%"i64fmt"x\n",
-               pBtHciInfo->BTEventMaskPage2));
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_SET_EVENT_MASK_PAGE_2,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadLocationData(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[12] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_READ_LOCATION_DATA,
-               status);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DomainAware = 0x%x\n", pBtHciInfo->LocationDomainAware));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Domain = 0x%x\n", pBtHciInfo->LocationDomain));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DomainOptions = 0x%x\n", pBtHciInfo->LocationDomainOptions));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Options = 0x%x\n", pBtHciInfo->LocationOptions));
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;
-
-       pRetPar[1] = pBtHciInfo->LocationDomainAware;   /* 0x0;  Location_Domain_Aware */
-       pu2Temp = (u16 *)&pRetPar[2];                                   /*  Location_Domain */
-       *pu2Temp = pBtHciInfo->LocationDomain;          /* 0x5858; */
-       pRetPar[4] = pBtHciInfo->LocationDomainOptions; /* 0x58;        Location_Domain_Options */
-       pRetPar[5] = pBtHciInfo->LocationOptions;               /* 0x0; Location_Options */
-       len += 6;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteLocationData(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u16     *pu2Temp;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pBtHciInfo->LocationDomainAware = pHciCmd->Data[0];
-       pu2Temp = (u16 *)&pHciCmd->Data[1];
-       pBtHciInfo->LocationDomain = *pu2Temp;
-       pBtHciInfo->LocationDomainOptions = pHciCmd->Data[3];
-       pBtHciInfo->LocationOptions = pHciCmd->Data[4];
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DomainAware = 0x%x\n", pBtHciInfo->LocationDomainAware));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Domain = 0x%x\n", pBtHciInfo->LocationDomain));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DomainOptions = 0x%x\n", pBtHciInfo->LocationDomainOptions));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Options = 0x%x\n", pBtHciInfo->LocationOptions));
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_WRITE_LOCATION_DATA,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadFlowControlMode(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[7] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_READ_FLOW_CONTROL_MODE,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;
-       pRetPar[1] = pBtHciInfo->FlowControlMode;       /*  Flow Control Mode */
-       len += 2;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteFlowControlMode(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       pBtHciInfo->FlowControlMode = pHciCmd->Data[0];
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_WRITE_FLOW_CONTROL_MODE,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdReadBestEffortFlushTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       u16 i, j, logicHandle;
-       u32 BestEffortFlushTimeout = 0xffffffff;
-       u8 find = 0;
-
-       logicHandle = *((u16 *)pHciCmd->Data);
-       /*  find an matched logical link index and copy the data */
-       for (j = 0; j < MAX_BT_ASOC_ENTRY_NUM; j++) {
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle == logicHandle) {
-                               BestEffortFlushTimeout = pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BestEffortFlushTimeout;
-                               find = 1;
-                               break;
-                       }
-               }
-       }
-
-       if (!find)
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-       {
-               u8 localBuf[10] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-               u32 *pu4Temp;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;
-               pu4Temp = (u32 *)&pRetPar[1];   /*  Best_Effort_Flush_Timeout */
-               *pu4Temp = BestEffortFlushTimeout;
-               len += 5;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWriteBestEffortFlushTimeout(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       u16 i, j, logicHandle;
-       u32 BestEffortFlushTimeout = 0xffffffff;
-       u8 find = 0;
-
-       logicHandle = *((u16 *)pHciCmd->Data);
-       BestEffortFlushTimeout = *((u32 *)(pHciCmd->Data+1));
-
-       /*  find an matched logical link index and copy the data */
-       for (j = 0; j < MAX_BT_ASOC_ENTRY_NUM; j++) {
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle == logicHandle) {
-                               pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BestEffortFlushTimeout = BestEffortFlushTimeout;
-                               find = 1;
-                               break;
-                       }
-               }
-       }
-
-       if (!find)
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_CmdShortRangeMode(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       u8 PhyLinkHandle, EntryNum, ShortRangeMode;
-
-       PhyLinkHandle = pHciCmd->Data[0];
-       ShortRangeMode = pHciCmd->Data[1];
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("PLH = 0x%x, Short_Range_Mode = 0x%x\n", PhyLinkHandle, ShortRangeMode));
-
-       EntryNum = bthci_GetCurrentEntryNum(padapter, PhyLinkHandle);
-       if (EntryNum != 0xff) {
-               pBTInfo->BtAsocEntry[EntryNum].ShortRangeMode = ShortRangeMode;
-       } else {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("No such PLH(0x%x)\n", PhyLinkHandle));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-       }
-
-       bthci_EventCommandStatus(padapter,
-                       OGF_SET_EVENT_MASK_COMMAND,
-                       HCI_SHORT_RANGE_MODE,
-                       status);
-
-       bthci_EventShortRangeModeChangeComplete(padapter, status, ShortRangeMode, EntryNum);
-
-       return status;
-}
-
-static enum hci_status bthci_CmdReadLocalSupportedCommands(struct rtw_adapter *padapter)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar, *pSupportedCmds;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       /*  send command complete event here when all data are received. */
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_INFORMATIONAL_PARAMETERS,
-               HCI_READ_LOCAL_SUPPORTED_COMMANDS,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       pSupportedCmds = &pRetPar[1];
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[5]= 0xc0\nBit [6]= Set Event Mask, [7]= Reset\n"));
-       pSupportedCmds[5] = 0xc0;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[6]= 0x01\nBit [0]= Set Event Filter\n"));
-       pSupportedCmds[6] = 0x01;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[7]= 0x0c\nBit [2]= Read Connection Accept Timeout, [3]= Write Connection Accept Timeout\n"));
-       pSupportedCmds[7] = 0x0c;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[10]= 0x80\nBit [7]= Host Number Of Completed Packets\n"));
-       pSupportedCmds[10] = 0x80;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[11]= 0x03\nBit [0]= Read Link Supervision Timeout, [1]= Write Link Supervision Timeout\n"));
-       pSupportedCmds[11] = 0x03;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[14]= 0xa8\nBit [3]= Read Local Version Information, [5]= Read Local Supported Features, [7]= Read Buffer Size\n"));
-       pSupportedCmds[14] = 0xa8;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[15]= 0x1c\nBit [2]= Read Failed Contact Count, [3]= Reset Failed Contact Count, [4]= Get Link Quality\n"));
-       pSupportedCmds[15] = 0x1c;
-       /* pSupportedCmds[16] = 0x04; */
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[19]= 0x40\nBit [6]= Enhanced Flush\n"));
-       pSupportedCmds[19] = 0x40;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[21]= 0xff\nBit [0]= Create Physical Link, [1]= Accept Physical Link, [2]= Disconnect Physical Link, [3]= Create Logical Link\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("     [4]= Accept Logical Link, [5]= Disconnect Logical Link, [6]= Logical Link Cancel, [7]= Flow Spec Modify\n"));
-       pSupportedCmds[21] = 0xff;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[22]= 0xff\nBit [0]= Read Logical Link Accept Timeout, [1]= Write Logical Link Accept Timeout, [2]= Set Event Mask Page 2, [3]= Read Location Data\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("     [4]= Write Location Data, [5]= Read Local AMP Info, [6]= Read Local AMP_ASSOC, [7]= Write Remote AMP_ASSOC\n"));
-       pSupportedCmds[22] = 0xff;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[23]= 0x07\nBit [0]= Read Flow Control Mode, [1]= Write Flow Control Mode, [2]= Read Data Block Size\n"));
-       pSupportedCmds[23] = 0x07;
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD|IOCTL_BT_LOGO), ("Octet[24]= 0x1c\nBit [2]= Read Best Effort Flush Timeout, [3]= Write Best Effort Flush Timeout, [4]= Short Range Mode\n"));
-       pSupportedCmds[24] = 0x1c;
-       len += 64;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status bthci_CmdReadLocalSupportedFeatures(struct rtw_adapter *padapter)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       /* send command complete event here when all data are received. */
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_INFORMATIONAL_PARAMETERS,
-               HCI_READ_LOCAL_SUPPORTED_FEATURES,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 9;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status bthci_CmdReadLocalAMPAssoc(struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 PhyLinkHandle, EntryNum;
-
-       pBtDbg->dbgHciInfo.hciCmdCntReadLocalAmpAssoc++;
-       PhyLinkHandle = *((u8 *)pHciCmd->Data);
-       EntryNum = bthci_GetCurrentEntryNum(padapter, PhyLinkHandle);
-
-       if ((EntryNum == 0xff) && PhyLinkHandle != 0) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("ReadLocalAMPAssoc, EntryNum = %d  !!!!!, physical link handle = 0x%x\n",
-               EntryNum, PhyLinkHandle));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-       } else if (pBtMgnt->bPhyLinkInProgressStartLL) {
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-               pBtMgnt->bPhyLinkInProgressStartLL = false;
-       } else {
-               pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.BtPhyLinkhandle = *((u8 *)pHciCmd->Data);
-               pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar = *((u16 *)((u8 *)pHciCmd->Data+1));
-               pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.MaxRemoteASSOCLen = *((u16 *)((u8 *)pHciCmd->Data+3));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("ReadLocalAMPAssoc, LenSoFar =%d, MaxRemoteASSOCLen =%d\n",
-                       pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar,
-                       pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.MaxRemoteASSOCLen));
-       }
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("ReadLocalAMPAssoc, EntryNum = %d  !!!!!, physical link handle = 0x%x, LengthSoFar = %x  \n",
-               EntryNum, PhyLinkHandle, pBTInfo->BtAsocEntry[EntryNum].AmpAsocCmdData.LenSoFar));
-
-       /* send command complete event here when all data are received. */
-       {
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               /* PVOID buffer = padapter->IrpHCILocalbuf.Ptr; */
-               u8 localBuf[TmpLocalBufSize] = "";
-               u16     *pRemainLen;
-               u32     totalLen = 0;
-               u16     typeLen = 0, remainLen = 0, ret_index = 0;
-               u8 *pRetPar;
-
-               PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-               /* PPacketIrpEvent = (struct packet_irp_hcievent_data *)(buffer); */
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               totalLen += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_STATUS_PARAMETERS,
-                       HCI_READ_LOCAL_AMP_ASSOC,
-                       status);
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("ReadLocalAMPAssoc, Remaining_Len =%d  \n", remainLen));
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[totalLen];
-               pRetPar[0] = status;            /* status */
-               pRetPar[1] = *((u8 *)pHciCmd->Data);
-               pRemainLen = (u16 *)&pRetPar[2];        /* AMP_ASSOC_Remaining_Length */
-               totalLen += 4;  /* 0]~[3] */
-               ret_index = 4;
-
-               typeLen = bthci_AssocMACAddr(padapter, &pRetPar[ret_index]);
-               totalLen += typeLen;
-               remainLen += typeLen;
-               ret_index += typeLen;
-               typeLen = bthci_AssocPreferredChannelList(padapter, &pRetPar[ret_index], EntryNum);
-               totalLen += typeLen;
-               remainLen += typeLen;
-               ret_index += typeLen;
-               typeLen = bthci_PALCapabilities(padapter, &pRetPar[ret_index]);
-               totalLen += typeLen;
-               remainLen += typeLen;
-               ret_index += typeLen;
-               typeLen = bthci_AssocPALVer(padapter, &pRetPar[ret_index]);
-               totalLen += typeLen;
-               remainLen += typeLen;
-               PPacketIrpEvent->Length = (u8)totalLen;
-               *pRemainLen = remainLen;        /*  AMP_ASSOC_Remaining_Length */
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("ReadLocalAMPAssoc, Remaining_Len =%d  \n", remainLen));
-               RTPRINT_DATA(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("AMP_ASSOC_fragment : \n"), PPacketIrpEvent->Data, totalLen);
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, totalLen+2);
-       }
-
-       return status;
-}
-
-static enum hci_status bthci_CmdReadFailedContactCounter(struct rtw_adapter *padapter,
-                      struct packet_irp_hcicmd_data *pHciCmd)
-{
-
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 handle;
-
-       handle = *((u16 *)pHciCmd->Data);
-       /* send command complete event here when all data are received. */
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_STATUS_PARAMETERS,
-               HCI_READ_FAILED_CONTACT_COUNTER,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pRetPar[1] = TWOBYTE_LOWBYTE(handle);
-       pRetPar[2] = TWOBYTE_HIGHTBYTE(handle);
-       pRetPar[3] = TWOBYTE_LOWBYTE(pBtHciInfo->FailContactCount);
-       pRetPar[4] = TWOBYTE_HIGHTBYTE(pBtHciInfo->FailContactCount);
-       len += 5;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdResetFailedContactCounter(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status         status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u16             handle;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-       handle = *((u16 *)pHciCmd->Data);
-       pBtHciInfo->FailContactCount = 0;
-
-       /* send command complete event here when all data are received. */
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       /* PPacketIrpEvent = (struct packet_irp_hcievent_data *)(buffer); */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_STATUS_PARAMETERS,
-               HCI_RESET_FAILED_CONTACT_COUNTER,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pRetPar[1] = TWOBYTE_LOWBYTE(handle);
-       pRetPar[2] = TWOBYTE_HIGHTBYTE(handle);
-       len += 3;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-/*  */
-/*  BT 3.0+HS [Vol 2] 7.4.1 */
-/*  */
-static enum hci_status
-bthci_CmdReadLocalVersionInformation(
-       struct rtw_adapter *padapter
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       /* send command complete event here when all data are received. */
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_INFORMATIONAL_PARAMETERS,
-               HCI_READ_LOCAL_VERSION_INFORMATION,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pRetPar[1] = 0x05;                      /*  HCI_Version */
-       pu2Temp = (u16 *)&pRetPar[2];           /*  HCI_Revision */
-       *pu2Temp = 0x0001;
-       pRetPar[4] = 0x05;                      /*  LMP/PAL_Version */
-       pu2Temp = (u16 *)&pRetPar[5];           /*  Manufacturer_Name */
-       *pu2Temp = 0x005d;
-       pu2Temp = (u16 *)&pRetPar[7];           /*  LMP/PAL_Subversion */
-       *pu2Temp = 0x0001;
-       len += 9;
-       PPacketIrpEvent->Length = len;
-
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("LOCAL_VERSION_INFORMATION\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("Status  %x\n", status));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("HCI_Version = 0x05\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("HCI_Revision = 0x0001\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("LMP/PAL_Version = 0x05\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("Manufacturer_Name = 0x0001\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("LMP/PAL_Subversion = 0x0001\n"));
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-/* 7.4.7 */
-static enum hci_status bthci_CmdReadDataBlockSize(struct rtw_adapter *padapter)
-{
-       enum hci_status                 status = HCI_STATUS_SUCCESS;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_INFORMATIONAL_PARAMETERS,
-               HCI_READ_DATA_BLOCK_SIZE,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = HCI_STATUS_SUCCESS;        /* status */
-       pu2Temp = (u16 *)&pRetPar[1];           /*  Max_ACL_Data_Packet_Length */
-       *pu2Temp = Max80211PALPDUSize;
-
-       pu2Temp = (u16 *)&pRetPar[3];           /*  Data_Block_Length */
-       *pu2Temp = Max80211PALPDUSize;
-       pu2Temp = (u16 *)&pRetPar[5];           /*  Total_Num_Data_Blocks */
-       *pu2Temp = BTTotalDataBlockNum;
-       len += 7;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-/*  7.4.5 */
-static enum hci_status bthci_CmdReadBufferSize(struct rtw_adapter *padapter)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       /* PPacketIrpEvent = (struct packet_irp_hcievent_data *)(buffer); */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_INFORMATIONAL_PARAMETERS,
-               HCI_READ_BUFFER_SIZE,
-               status);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Synchronous_Data_Packet_Length = 0x%x\n", BTSynDataPacketLength));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Total_Num_ACL_Data_Packets = 0x%x\n", BTTotalDataBlockNum));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("Total_Num_Synchronous_Data_Packets = 0x%x\n", BTTotalDataBlockNum));
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       pu2Temp = (u16 *)&pRetPar[1];           /*  HC_ACL_Data_Packet_Length */
-       *pu2Temp = Max80211PALPDUSize;
-
-       pRetPar[3] = BTSynDataPacketLength;     /*  HC_Synchronous_Data_Packet_Length */
-       pu2Temp = (u16 *)&pRetPar[4];           /*  HC_Total_Num_ACL_Data_Packets */
-       *pu2Temp = BTTotalDataBlockNum;
-       pu2Temp = (u16 *)&pRetPar[6];           /*  HC_Total_Num_Synchronous_Data_Packets */
-       *pu2Temp = BTTotalDataBlockNum;
-       len += 8;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status bthci_CmdReadLocalAMPInfo(struct rtw_adapter *padapter)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-       u32 *pu4Temp;
-       u32     TotalBandwidth = BTTOTALBANDWIDTH, MaxBandGUBandwidth = BTMAXBANDGUBANDWIDTH;
-       u8 ControlType = 0x01, AmpStatus = 0x01;
-       u32     MaxFlushTimeout = 10000, BestEffortFlushTimeout = 5000;
-       u16 MaxPDUSize = Max80211PALPDUSize, PalCap = 0x1, AmpAssocLen = Max80211AMPASSOCLen, MinLatency = 20;
-
-       if ((ppwrctrl->rfoff_reason & RF_CHANGE_BY_HW) ||
-           (ppwrctrl->rfoff_reason & RF_CHANGE_BY_SW)) {
-               AmpStatus = AMP_STATUS_NO_CAPACITY_FOR_BT;
-       }
-
-       PlatformZeroMemory(&localBuf[0], TmpLocalBufSize);
-       /* PPacketIrpEvent = (struct packet_irp_hcievent_data *)(buffer); */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_STATUS_PARAMETERS,
-               HCI_READ_LOCAL_AMP_INFO,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;                    /* status */
-       pRetPar[1] = AmpStatus;                 /*  AMP_Status */
-       pu4Temp = (u32 *)&pRetPar[2];           /*  Total_Bandwidth */
-       *pu4Temp = TotalBandwidth;              /* 0x19bfcc00;0x7530; */
-       pu4Temp = (u32 *)&pRetPar[6];           /*  Max_Guaranteed_Bandwidth */
-       *pu4Temp = MaxBandGUBandwidth;          /* 0x19bfcc00;0x4e20; */
-       pu4Temp = (u32 *)&pRetPar[10];          /*  Min_Latency */
-       *pu4Temp = MinLatency;                  /* 150; */
-       pu4Temp = (u32 *)&pRetPar[14];          /*  Max_PDU_Size */
-       *pu4Temp = MaxPDUSize;
-       pRetPar[18] = ControlType;              /*  Controller_Type */
-       pu2Temp = (u16 *)&pRetPar[19];          /*  PAL_Capabilities */
-       *pu2Temp = PalCap;
-       pu2Temp = (u16 *)&pRetPar[21];          /*  AMP_ASSOC_Length */
-       *pu2Temp = AmpAssocLen;
-       pu4Temp = (u32 *)&pRetPar[23];          /*  Max_Flush_Timeout */
-       *pu4Temp = MaxFlushTimeout;
-       pu4Temp = (u32 *)&pRetPar[27];          /*  Best_Effort_Flush_Timeout */
-       *pu4Temp = BestEffortFlushTimeout;
-       len += 31;
-       PPacketIrpEvent->Length = len;
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("AmpStatus = 0x%x\n",
-               AmpStatus));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("TotalBandwidth = 0x%x, MaxBandGUBandwidth = 0x%x, MinLatency = 0x%x, \n MaxPDUSize = 0x%x, ControlType = 0x%x\n",
-               TotalBandwidth, MaxBandGUBandwidth, MinLatency, MaxPDUSize, ControlType));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("PalCap = 0x%x, AmpAssocLen = 0x%x, MaxFlushTimeout = 0x%x, BestEffortFlushTimeout = 0x%x\n",
-               PalCap, AmpAssocLen, MaxFlushTimeout, BestEffortFlushTimeout));
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status
-bthci_CmdCreatePhysicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntCreatePhyLink++;
-
-       return bthci_BuildPhysicalLink(padapter,
-               pHciCmd, HCI_CREATE_PHYSICAL_LINK);
-}
-
-static enum hci_status
-bthci_CmdReadLinkQuality(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status                 status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       u16                             PLH;
-       u8      EntryNum, LinkQuality = 0x55;
-
-       PLH = *((u16 *)&pHciCmd->Data[0]);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("PLH = 0x%x\n", PLH));
-
-       EntryNum = bthci_GetCurrentEntryNum(padapter, (u8)PLH);
-       if (EntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("No such PLH(0x%x)\n", PLH));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-       }
-
-       {
-               u8 localBuf[11] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_STATUS_PARAMETERS,
-                       HCI_READ_LINK_QUALITY,
-                       status);
-
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, (" PLH = 0x%x\n Link Quality = 0x%x\n", PLH, LinkQuality));
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;                    /* status */
-               *((u16 *)&pRetPar[1]) = pBTInfo->BtAsocEntry[EntryNum].PhyLinkCmdData.BtPhyLinkhandle;  /*  Handle */
-               pRetPar[3] = 0x55;      /* Link Quailty */
-               len += 4;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdCreateLogicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntCreateLogLink++;
-
-       bthci_BuildLogicalLink(padapter, pHciCmd,
-               HCI_CREATE_LOGICAL_LINK);
-
-       return HCI_STATUS_SUCCESS;
-}
-
-static enum hci_status
-bthci_CmdAcceptLogicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntAcceptLogLink++;
-
-       bthci_BuildLogicalLink(padapter, pHciCmd,
-               HCI_ACCEPT_LOGICAL_LINK);
-
-       return HCI_STATUS_SUCCESS;
-}
-
-static enum hci_status
-bthci_CmdDisconnectLogicalLink(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTinfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTinfo->BtDbg;
-       u16     logicHandle;
-       u8 i, j, find = 0, LogLinkCount = 0;
-
-       pBtDbg->dbgHciInfo.hciCmdCntDisconnectLogLink++;
-
-       logicHandle = *((u16 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DisconnectLogicalLink, logicHandle = 0x%x\n", logicHandle));
-
-       /*  find an created logical link index and clear the data */
-       for (j = 0; j < MAX_BT_ASOC_ENTRY_NUM; j++) {
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle == logicHandle) {
-                               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("DisconnectLogicalLink, logicHandle is matched  0x%x\n", logicHandle));
-                               bthci_ResetFlowSpec(padapter, j, i);
-                               find = 1;
-                               pBtMgnt->DisconnectEntryNum = j;
-                               break;
-                       }
-               }
-       }
-
-       if (!find)
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-       /*  To check each */
-       for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-               if (pBTinfo->BtAsocEntry[pBtMgnt->DisconnectEntryNum].LogLinkCmdData[i].BtLogLinkhandle != 0)
-                       LogLinkCount++;
-       }
-
-       /* When we receive Create logical link command, we should send command status event first. */
-       bthci_EventCommandStatus(padapter,
-                       LINK_CONTROL_COMMANDS,
-                       HCI_DISCONNECT_LOGICAL_LINK,
-                       status);
-       /*  */
-       /* When we determines the logical link is established, we should send command complete event. */
-       /*  */
-       if (status == HCI_STATUS_SUCCESS) {
-               bthci_EventDisconnectLogicalLinkComplete(padapter, status,
-                       logicHandle, HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST);
-       }
-
-       if (LogLinkCount == 0)
-               mod_timer(&pBTinfo->BTDisconnectPhyLinkTimer,
-                         jiffies + msecs_to_jiffies(100));
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdLogicalLinkCancel(struct rtw_adapter *padapter,
-                          struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTinfo->BtMgnt;
-       u8 CurrentEntryNum, CurrentLogEntryNum;
-
-       u8 physicalLinkHandle, TxFlowSpecID, i;
-       u16     CurrentLogicalHandle;
-
-       physicalLinkHandle = *((u8 *)pHciCmd->Data);
-       TxFlowSpecID = *(((u8 *)pHciCmd->Data)+1);
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("LogicalLinkCancel, physicalLinkHandle = 0x%x, TxFlowSpecID = 0x%x\n",
-               physicalLinkHandle, TxFlowSpecID));
-
-       CurrentEntryNum = pBtMgnt->CurrentConnectEntryNum;
-       CurrentLogicalHandle = pBtMgnt->BtCurrentLogLinkhandle;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("CurrentEntryNum = 0x%x, CurrentLogicalHandle = 0x%x\n",
-               CurrentEntryNum, CurrentLogicalHandle));
-
-       CurrentLogEntryNum = 0xff;
-       for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-               if ((CurrentLogicalHandle == pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[i].BtLogLinkhandle) &&
-                       (physicalLinkHandle == pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[i].BtPhyLinkhandle)) {
-                       CurrentLogEntryNum = i;
-                       break;
-               }
-       }
-
-       if (CurrentLogEntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("LogicalLinkCancel, CurrentLogEntryNum == 0xff !!!!\n"));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-               return status;
-       } else {
-               if (pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[CurrentLogEntryNum].bLLCompleteEventIsSet) {
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("LogicalLinkCancel, LLCompleteEventIsSet!!!!\n"));
-                       status = HCI_STATUS_ACL_CONNECT_EXISTS;
-               }
-       }
-
-       {
-               u8 localBuf[8] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       LINK_CONTROL_COMMANDS,
-                       HCI_LOGICAL_LINK_CANCEL,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               pRetPar[1] = pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[CurrentLogEntryNum].BtPhyLinkhandle;
-               pRetPar[2] = pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[CurrentLogEntryNum].BtTxFlowSpecID;
-               len += 3;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       pBTinfo->BtAsocEntry[CurrentEntryNum].LogLinkCmdData[CurrentLogEntryNum].bLLCancelCMDIsSetandComplete = true;
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdFlowSpecModify(struct rtw_adapter *padapter,
-                       struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTinfo = GET_BT_INFO(padapter);
-       u8 i, j, find = 0;
-       u16 logicHandle;
-
-       logicHandle = *((u16 *)pHciCmd->Data);
-       /*  find an matched logical link index and copy the data */
-       for (j = 0; j < MAX_BT_ASOC_ENTRY_NUM; j++) {
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle == logicHandle) {
-                               memcpy(&pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].Tx_Flow_Spec,
-                                       &pHciCmd->Data[2], sizeof(struct hci_flow_spec));
-                               memcpy(&pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].Rx_Flow_Spec,
-                                       &pHciCmd->Data[18], sizeof(struct hci_flow_spec));
-
-                               bthci_CheckLogLinkBehavior(padapter, pBTinfo->BtAsocEntry[j].LogLinkCmdData[i].Tx_Flow_Spec);
-                               find = 1;
-                               break;
-                       }
-               }
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_LOGO, ("FlowSpecModify, LLH = 0x%x, \n", logicHandle));
-
-       /* When we receive Flow Spec Modify command, we should send command status event first. */
-       bthci_EventCommandStatus(padapter,
-               LINK_CONTROL_COMMANDS,
-               HCI_FLOW_SPEC_MODIFY,
-               HCI_STATUS_SUCCESS);
-
-       if (!find)
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-       bthci_EventSendFlowSpecModifyComplete(padapter, status, logicHandle);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdAcceptPhysicalLink(struct rtw_adapter *padapter,
-                           struct packet_irp_hcicmd_data *pHciCmd)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntAcceptPhyLink++;
-
-       return bthci_BuildPhysicalLink(padapter,
-               pHciCmd, HCI_ACCEPT_PHYSICAL_LINK);
-}
-
-static enum hci_status
-bthci_CmdDisconnectPhysicalLink(struct rtw_adapter *padapter,
-                               struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 PLH, CurrentEntryNum, PhysLinkDisconnectReason;
-
-       pBtDbg->dbgHciInfo.hciCmdCntDisconnectPhyLink++;
-
-       PLH = *((u8 *)pHciCmd->Data);
-       PhysLinkDisconnectReason = *((u8 *)pHciCmd->Data+1);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_DISCONNECT_PHYSICAL_LINK  PhyHandle = 0x%x, Reason = 0x%x\n",
-               PLH, PhysLinkDisconnectReason));
-
-       CurrentEntryNum = bthci_GetCurrentEntryNum(padapter, PLH);
-
-       if (CurrentEntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD,
-                       ("DisconnectPhysicalLink, No such Handle in the Entry\n"));
-               status = HCI_STATUS_UNKNOW_CONNECT_ID;
-       } else {
-               pBTInfo->BtAsocEntry[CurrentEntryNum].PhyLinkDisconnectReason =
-                       (enum hci_status)PhysLinkDisconnectReason;
-       }
-       /* Send HCI Command status event to AMP. */
-       bthci_EventCommandStatus(padapter, LINK_CONTROL_COMMANDS,
-                                HCI_DISCONNECT_PHYSICAL_LINK, status);
-
-       if (status != HCI_STATUS_SUCCESS)
-               return status;
-
-       /* The macros below require { and } in the if statement */
-       if (pBTInfo->BtAsocEntry[CurrentEntryNum].BtCurrentState == HCI_STATE_DISCONNECTED) {
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTED, STATE_CMD_DISCONNECT_PHY_LINK, CurrentEntryNum);
-       } else {
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTING, STATE_CMD_DISCONNECT_PHY_LINK, CurrentEntryNum);
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetACLLinkDataFlowMode(struct rtw_adapter *padapter,
-                               struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 localBuf[8] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp;
-
-       pBtMgnt->ExtConfig.CurrentConnectHandle = *((u16 *)pHciCmd->Data);
-       pBtMgnt->ExtConfig.CurrentIncomingTrafficMode = *((u8 *)pHciCmd->Data)+2;
-       pBtMgnt->ExtConfig.CurrentOutgoingTrafficMode = *((u8 *)pHciCmd->Data)+3;
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("Connection Handle = 0x%x, Incoming Traffic mode = 0x%x, Outgoing Traffic mode = 0x%x",
-               pBtMgnt->ExtConfig.CurrentConnectHandle,
-               pBtMgnt->ExtConfig.CurrentIncomingTrafficMode,
-               pBtMgnt->ExtConfig.CurrentOutgoingTrafficMode));
-
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_EXTENSION,
-               HCI_SET_ACL_LINK_DATA_FLOW_MODE,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-
-       pu2Temp = (u16 *)&pRetPar[1];
-       *pu2Temp = pBtMgnt->ExtConfig.CurrentConnectHandle;
-       len += 3;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetACLLinkStatus(struct rtw_adapter *padapter,
-                         struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 i;
-       u8 *pTriple;
-
-       pBtDbg->dbgHciInfo.hciCmdCntSetAclLinkStatus++;
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "SetACLLinkStatus, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-
-       /*  Only Core Stack v251 and later version support this command. */
-       pBtMgnt->bSupportProfile = true;
-
-       pBtMgnt->ExtConfig.NumberOfHandle = *((u8 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("NumberOfHandle = 0x%x\n", pBtMgnt->ExtConfig.NumberOfHandle));
-
-       pTriple = &pHciCmd->Data[1];
-       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-               pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle = *((u16 *)&pTriple[0]);
-               pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode = pTriple[2];
-               pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode = pTriple[3];
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT,
-                       ("Connection_Handle = 0x%x, Incoming Traffic mode = 0x%x, Outgoing Traffic Mode = 0x%x\n",
-                       pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle,
-                       pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode,
-                       pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode));
-               pTriple += 4;
-       }
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_SET_ACL_LINK_STATUS,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetSCOLinkStatus(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntSetScoLinkStatus++;
-       pBtMgnt->ExtConfig.NumberOfSCO = *((u8 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("NumberOfSCO = 0x%x\n",
-               pBtMgnt->ExtConfig.NumberOfSCO));
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_SET_SCO_LINK_STATUS,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetRSSIValue(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       s8              min_bt_rssi = 0;
-       u8 i;
-       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-               if (pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle == *((u16 *)&pHciCmd->Data[0])) {
-                       pBtMgnt->ExtConfig.linkInfo[i].BT_RSSI = (s8)(pHciCmd->Data[2]);
-                       RTPRINT(FIOCTL, IOCTL_BT_EVENT_PERIODICAL,
-                       ("Connection_Handle = 0x%x, RSSI = %d \n",
-                       pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle,
-                       pBtMgnt->ExtConfig.linkInfo[i].BT_RSSI));
-               }
-               /*  get the minimum bt rssi value */
-               if (pBtMgnt->ExtConfig.linkInfo[i].BT_RSSI <= min_bt_rssi)
-                       min_bt_rssi = pBtMgnt->ExtConfig.linkInfo[i].BT_RSSI;
-       }
-
-       pBtMgnt->ExtConfig.MIN_BT_RSSI = min_bt_rssi;
-       RTPRINT(FBT, BT_TRACE, ("[bt rssi], the min rssi is %d\n", min_bt_rssi));
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_SET_RSSI_VALUE,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdSetCurrentBluetoothStatus(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-/*PMGNT_INFO   pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       pBtMgnt->ExtConfig.CurrentBTStatus = *((u8 *)&pHciCmd->Data[0]);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("SetCurrentBluetoothStatus, CurrentBTStatus = 0x%x\n",
-               pBtMgnt->ExtConfig.CurrentBTStatus));
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_SET_CURRENT_BLUETOOTH_STATUS,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               len += 1;
-
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdExtensionVersionNotify(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntExtensionVersionNotify++;
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "ExtensionVersionNotify, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-
-       pBtMgnt->ExtConfig.HCIExtensionVer = *((u16 *)&pHciCmd->Data[0]);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCIExtensionVer = 0x%x\n", pBtMgnt->ExtConfig.HCIExtensionVer));
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_EXTENSION_VERSION_NOTIFY,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdLinkStatusNotify(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 i;
-       u8 *pTriple;
-
-       pBtDbg->dbgHciInfo.hciCmdCntLinkStatusNotify++;
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "LinkStatusNotify, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-
-       /*  Current only RTL8723 support this command. */
-       pBtMgnt->bSupportProfile = true;
-
-       pBtMgnt->ExtConfig.NumberOfHandle = *((u8 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("NumberOfHandle = 0x%x\n", pBtMgnt->ExtConfig.NumberOfHandle));
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCIExtensionVer = %d\n", pBtMgnt->ExtConfig.HCIExtensionVer));
-
-       pTriple = &pHciCmd->Data[1];
-       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-               if (pBtMgnt->ExtConfig.HCIExtensionVer < 1) {
-                       pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle = *((u16 *)&pTriple[0]);
-                       pBtMgnt->ExtConfig.linkInfo[i].BTProfile = pTriple[2];
-                       pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec = pTriple[3];
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT,
-                               ("Connection_Handle = 0x%x, BTProfile =%d, BTSpec =%d\n",
-                               pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle,
-                               pBtMgnt->ExtConfig.linkInfo[i].BTProfile,
-                               pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec));
-                       pTriple += 4;
-               } else if (pBtMgnt->ExtConfig.HCIExtensionVer >= 1) {
-                       pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle = *((u16 *)&pTriple[0]);
-                       pBtMgnt->ExtConfig.linkInfo[i].BTProfile = pTriple[2];
-                       pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec = pTriple[3];
-                       pBtMgnt->ExtConfig.linkInfo[i].linkRole = pTriple[4];
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT,
-                               ("Connection_Handle = 0x%x, BTProfile =%d, BTSpec =%d, LinkRole =%d\n",
-                               pBtMgnt->ExtConfig.linkInfo[i].ConnectHandle,
-                               pBtMgnt->ExtConfig.linkInfo[i].BTProfile,
-                               pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec,
-                               pBtMgnt->ExtConfig.linkInfo[i].linkRole));
-                       pTriple += 5;
-               }
-
-       }
-       BTHCI_UpdateBTProfileRTKToMoto(padapter);
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_LINK_STATUS_NOTIFY,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdBtOperationNotify(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "Bt Operation notify, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-
-       pBtMgnt->ExtConfig.btOperationCode = *((u8 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("btOperationCode = 0x%x\n", pBtMgnt->ExtConfig.btOperationCode));
-       switch (pBtMgnt->ExtConfig.btOperationCode) {
-       case HCI_BT_OP_NONE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Operation None!!\n"));
-               break;
-       case HCI_BT_OP_INQUIRY_START:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Inquire start!!\n"));
-               break;
-       case HCI_BT_OP_INQUIRY_FINISH:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Inquire finished!!\n"));
-               break;
-       case HCI_BT_OP_PAGING_START:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Paging is started!!\n"));
-               break;
-       case HCI_BT_OP_PAGING_SUCCESS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Paging complete successfully!!\n"));
-               break;
-       case HCI_BT_OP_PAGING_UNSUCCESS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Paging complete unsuccessfully!!\n"));
-               break;
-       case HCI_BT_OP_PAIRING_START:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Pairing start!!\n"));
-               break;
-       case HCI_BT_OP_PAIRING_FINISH:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Pairing finished!!\n"));
-               break;
-       case HCI_BT_OP_BT_DEV_ENABLE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : BT Device is enabled!!\n"));
-               break;
-       case HCI_BT_OP_BT_DEV_DISABLE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : BT Device is disabled!!\n"));
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[bt operation] : Unknown, error!!\n"));
-               break;
-       }
-       BTDM_AdjustForBtOperation(padapter);
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_BT_OPERATION_NOTIFY,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdEnableWifiScanNotify(struct rtw_adapter *padapter,
-                             struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT_DATA(FIOCTL, IOCTL_BT_HCICMD_EXT, "Enable Wifi scan notify, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-
-       pBtMgnt->ExtConfig.bEnableWifiScanNotify = *((u8 *)pHciCmd->Data);
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("bEnableWifiScanNotify = %d\n", pBtMgnt->ExtConfig.bEnableWifiScanNotify));
-
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_ENABLE_WIFI_SCAN_NOTIFY,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWIFICurrentChannel(struct rtw_adapter *padapter,
-                           struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       u8 chnl = pmlmeext->cur_channel;
-
-       if (pmlmeext->cur_bwmode == HT_CHANNEL_WIDTH_40) {
-               if (pmlmeext->cur_ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                       chnl += 2;
-               else if (pmlmeext->cur_ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                       chnl -= 2;
-       }
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("Current Channel  = 0x%x\n", chnl));
-
-       {
-               u8 localBuf[8] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_WIFI_CURRENT_CHANNEL,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               pRetPar[1] = chnl;                      /* current channel */
-               len += 2;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWIFICurrentBandwidth(struct rtw_adapter *padapter,
-                             struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       enum ht_channel_width bw;
-       u8 CurrentBW = 0;
-
-       bw = padapter->mlmeextpriv.cur_bwmode;
-
-       if (bw == HT_CHANNEL_WIDTH_20)
-               CurrentBW = 0;
-       else if (bw == HT_CHANNEL_WIDTH_40)
-               CurrentBW = 1;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("Current BW = 0x%x\n",
-               CurrentBW));
-
-       {
-               u8 localBuf[8] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_WIFI_CURRENT_BANDWIDTH,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               pRetPar[1] = CurrentBW;         /* current BW */
-               len += 2;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdWIFIConnectionStatus(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       u8 connectStatus = HCI_WIFI_NOT_CONNECTED;
-
-       if (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE)) {
-               if (padapter->stapriv.asoc_sta_count >= 3)
-                       connectStatus = HCI_WIFI_CONNECTED;
-               else
-                       connectStatus = HCI_WIFI_NOT_CONNECTED;
-       } else if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE|WIFI_ASOC_STATE)) {
-               connectStatus = HCI_WIFI_CONNECTED;
-       } else if (check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING)) {
-               connectStatus = HCI_WIFI_CONNECT_IN_PROGRESS;
-       } else {
-               connectStatus = HCI_WIFI_NOT_CONNECTED;
-       }
-
-       {
-               u8 localBuf[8] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_EXTENSION,
-                       HCI_WIFI_CONNECTION_STATUS,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;                    /* status */
-               pRetPar[1] = connectStatus;     /* connect status */
-               len += 2;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdEnableDeviceUnderTestMode(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       pBtHciInfo->bInTestMode = true;
-       pBtHciInfo->bTestIsEnd = false;
-
-       /* send command complete event here when all data are received. */
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_TESTING_COMMANDS,
-                       HCI_ENABLE_DEVICE_UNDER_TEST_MODE,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdAMPTestEnd(struct rtw_adapter *padapter,
-                   struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (!pBtHciInfo->bInTestMode) {
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Not in Test mode, return status = HCI_STATUS_CMD_DISALLOW\n"));
-               status = HCI_STATUS_CMD_DISALLOW;
-               return status;
-       }
-
-       pBtHciInfo->bTestIsEnd = true;
-
-       del_timer_sync(&pBTInfo->BTTestSendPacketTimer);
-
-       rtl8723a_check_bssid(padapter, true);
-
-       /* send command complete event here when all data are received. */
-       {
-               u8 localBuf[4] = "";
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("AMP Test End Event \n"));
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-               PPacketIrpEvent->EventCode = HCI_EVENT_AMP_TEST_END;
-               PPacketIrpEvent->Length = 2;
-
-               PPacketIrpEvent->Data[0] = status;
-               PPacketIrpEvent->Data[1] = pBtHciInfo->TestScenario;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-       }
-
-       bthci_EventAMPReceiverReport(padapter, 0x01);
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdAMPTestCommand(struct rtw_adapter *padapter,
-                       struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (!pBtHciInfo->bInTestMode) {
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Not in Test mode, return status = HCI_STATUS_CMD_DISALLOW\n"));
-               status = HCI_STATUS_CMD_DISALLOW;
-               return status;
-       }
-
-       pBtHciInfo->TestScenario = *((u8 *)pHciCmd->Data);
-
-       if (pBtHciInfo->TestScenario == 0x01)
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("TX Single Test \n"));
-       else if (pBtHciInfo->TestScenario == 0x02)
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Receive Frame Test \n"));
-       else
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("No Such Test !!!!!!!!!!!!!!!!!! \n"));
-
-       if (pBtHciInfo->bTestIsEnd) {
-               u8 localBuf[5] = "";
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("AMP Test End Event \n"));
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-               PPacketIrpEvent->EventCode = HCI_EVENT_AMP_TEST_END;
-               PPacketIrpEvent->Length = 2;
-
-               PPacketIrpEvent->Data[0] = status;
-               PPacketIrpEvent->Data[1] = pBtHciInfo->TestScenario ;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-
-               /* Return to Idel state with RX and TX off. */
-
-               return status;
-       }
-
-       /*  should send command status event */
-       bthci_EventCommandStatus(padapter,
-                       OGF_TESTING_COMMANDS,
-                       HCI_AMP_TEST_COMMAND,
-                       status);
-
-       /* The HCI_AMP_Start Test Event shall be generated when the */
-       /* HCI_AMP_Test_Command has completed and the first data is ready to be sent */
-       /* or received. */
-
-       {
-               u8 localBuf[5] = "";
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), (" HCI_AMP_Start Test Event \n"));
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-               PPacketIrpEvent->EventCode = HCI_EVENT_AMP_START_TEST;
-               PPacketIrpEvent->Length = 2;
-
-               PPacketIrpEvent->Data[0] = status;
-               PPacketIrpEvent->Data[1] = pBtHciInfo->TestScenario ;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, 4);
-
-               /* Return to Idel state with RX and TX off. */
-       }
-
-       if (pBtHciInfo->TestScenario == 0x01) {
-               /*
-                       When in a transmitter test scenario and the frames/bursts count have been
-                       transmitted the HCI_AMP_Test_End event shall be sent.
-               */
-               mod_timer(&pBTInfo->BTTestSendPacketTimer,
-                         jiffies + msecs_to_jiffies(50));
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("TX Single Test \n"));
-       } else if (pBtHciInfo->TestScenario == 0x02) {
-               rtl8723a_check_bssid(padapter, false);
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_BT_LOGO), ("Receive Frame Test \n"));
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdEnableAMPReceiverReports(struct rtw_adapter *padapter,
-                                 struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-
-       if (!pBtHciInfo->bInTestMode) {
-               status = HCI_STATUS_CMD_DISALLOW;
-               /* send command complete event here when all data are received. */
-               {
-                       u8 localBuf[6] = "";
-                       u8 *pRetPar;
-                       u8 len = 0;
-                       struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-                       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-                       len += bthci_CommandCompleteHeader(&localBuf[0],
-                               OGF_TESTING_COMMANDS,
-                               HCI_ENABLE_AMP_RECEIVER_REPORTS,
-                               status);
-
-                       /*  Return parameters starts from here */
-                       pRetPar = &PPacketIrpEvent->Data[len];
-                       pRetPar[0] = status;            /* status */
-                       len += 1;
-                       PPacketIrpEvent->Length = len;
-
-                       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-               }
-               return status;
-       }
-
-       pBtHciInfo->bTestNeedReport = *((u8 *)pHciCmd->Data);
-       pBtHciInfo->TestReportInterval = (*((u8 *)pHciCmd->Data+2));
-
-       bthci_EventAMPReceiverReport(padapter, 0x00);
-
-       /* send command complete event here when all data are received. */
-       {
-               u8 localBuf[6] = "";
-               u8 *pRetPar;
-               u8 len = 0;
-               struct packet_irp_hcievent_data *PPacketIrpEvent;
-
-               PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-               len += bthci_CommandCompleteHeader(&localBuf[0],
-                       OGF_TESTING_COMMANDS,
-                       HCI_ENABLE_AMP_RECEIVER_REPORTS,
-                       status);
-
-               /*  Return parameters starts from here */
-               pRetPar = &PPacketIrpEvent->Data[len];
-               pRetPar[0] = status;            /* status */
-               len += 1;
-               PPacketIrpEvent->Length = len;
-
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-       }
-
-       return status;
-}
-
-static enum hci_status
-bthci_CmdHostBufferSize(struct rtw_adapter *padapter,
-                       struct packet_irp_hcicmd_data *pHciCmd)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       u8 localBuf[6] = "";
-       u8 *pRetPar;
-       u8 len = 0;
-
-       pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].ACLPacketsData.ACLDataPacketLen = *((u16 *)pHciCmd->Data);
-       pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].SyncDataPacketLen = *((u8 *)(pHciCmd->Data+2));
-       pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].TotalNumACLDataPackets = *((u16 *)(pHciCmd->Data+3));
-       pBTInfo->BtAsocEntry[pBtMgnt->CurrentConnectEntryNum].TotalSyncNumDataPackets = *((u16 *)(pHciCmd->Data+5));
-
-       /* send command complete event here when all data are received. */
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       len += bthci_CommandCompleteHeader(&localBuf[0],
-               OGF_SET_EVENT_MASK_COMMAND,
-               HCI_HOST_BUFFER_SIZE,
-               status);
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[len];
-       pRetPar[0] = status;            /* status */
-       len += 1;
-       PPacketIrpEvent->Length = len;
-
-       bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-
-       return status;
-}
-
-static enum hci_status
-bthci_UnknownCMD(struct rtw_adapter *padapter, struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_UNKNOW_HCI_CMD;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       pBtDbg->dbgHciInfo.hciCmdCntUnknown++;
-       bthci_EventCommandStatus(padapter,
-                       (u8)pHciCmd->OGF,
-                       pHciCmd->OCF,
-                       status);
-
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFInformationalParameters(struct rtw_adapter *padapter,
-                                      struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-
-       switch (pHciCmd->OCF) {
-       case HCI_READ_LOCAL_VERSION_INFORMATION:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCAL_VERSION_INFORMATION\n"));
-               status = bthci_CmdReadLocalVersionInformation(padapter);
-               break;
-       case HCI_READ_LOCAL_SUPPORTED_COMMANDS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCAL_SUPPORTED_COMMANDS\n"));
-               status = bthci_CmdReadLocalSupportedCommands(padapter);
-               break;
-       case HCI_READ_LOCAL_SUPPORTED_FEATURES:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCAL_SUPPORTED_FEATURES\n"));
-               status = bthci_CmdReadLocalSupportedFeatures(padapter);
-               break;
-       case HCI_READ_BUFFER_SIZE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_BUFFER_SIZE\n"));
-               status = bthci_CmdReadBufferSize(padapter);
-               break;
-       case HCI_READ_DATA_BLOCK_SIZE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_DATA_BLOCK_SIZE\n"));
-               status = bthci_CmdReadDataBlockSize(padapter);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("bthci_HandleOGFInformationalParameters(), Unknown case = 0x%x\n", pHciCmd->OCF));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFSetEventMaskCMD(struct rtw_adapter *padapter,
-                              struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-
-       switch (pHciCmd->OCF) {
-       case HCI_SET_EVENT_MASK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_SET_EVENT_MASK\n"));
-               status = bthci_CmdSetEventMask(padapter, pHciCmd);
-               break;
-       case HCI_RESET:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_RESET\n"));
-               status = bthci_CmdReset(padapter, true);
-               break;
-       case HCI_READ_CONNECTION_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_CONNECTION_ACCEPT_TIMEOUT\n"));
-               status = bthci_CmdReadConnectionAcceptTimeout(padapter);
-               break;
-       case HCI_SET_EVENT_FILTER:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_SET_EVENT_FILTER\n"));
-               break;
-       case HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT\n"));
-               status = bthci_CmdWriteConnectionAcceptTimeout(padapter, pHciCmd);
-               break;
-       case HCI_READ_PAGE_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_PAGE_TIMEOUT\n"));
-               status = bthci_CmdReadPageTimeout(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_PAGE_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_PAGE_TIMEOUT\n"));
-               status = bthci_CmdWritePageTimeout(padapter, pHciCmd);
-               break;
-       case HCI_HOST_NUMBER_OF_COMPLETED_PACKETS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_HOST_NUMBER_OF_COMPLETED_PACKETS\n"));
-               break;
-       case HCI_READ_LINK_SUPERVISION_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LINK_SUPERVISION_TIMEOUT\n"));
-               status = bthci_CmdReadLinkSupervisionTimeout(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_LINK_SUPERVISION_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_LINK_SUPERVISION_TIMEOUT\n"));
-               status = bthci_CmdWriteLinkSupervisionTimeout(padapter, pHciCmd);
-               break;
-       case HCI_ENHANCED_FLUSH:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_ENHANCED_FLUSH\n"));
-               status = bthci_CmdEnhancedFlush(padapter, pHciCmd);
-               break;
-       case HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT\n"));
-               status = bthci_CmdReadLogicalLinkAcceptTimeout(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT\n"));
-               status = bthci_CmdWriteLogicalLinkAcceptTimeout(padapter, pHciCmd);
-               break;
-       case HCI_SET_EVENT_MASK_PAGE_2:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_SET_EVENT_MASK_PAGE_2\n"));
-               status = bthci_CmdSetEventMaskPage2(padapter, pHciCmd);
-               break;
-       case HCI_READ_LOCATION_DATA:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCATION_DATA\n"));
-               status = bthci_CmdReadLocationData(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_LOCATION_DATA:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_LOCATION_DATA\n"));
-               status = bthci_CmdWriteLocationData(padapter, pHciCmd);
-               break;
-       case HCI_READ_FLOW_CONTROL_MODE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_FLOW_CONTROL_MODE\n"));
-               status = bthci_CmdReadFlowControlMode(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_FLOW_CONTROL_MODE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_FLOW_CONTROL_MODE\n"));
-               status = bthci_CmdWriteFlowControlMode(padapter, pHciCmd);
-               break;
-       case HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT\n"));
-               status = bthci_CmdReadBestEffortFlushTimeout(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT\n"));
-               status = bthci_CmdWriteBestEffortFlushTimeout(padapter, pHciCmd);
-               break;
-       case HCI_SHORT_RANGE_MODE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_SHORT_RANGE_MODE\n"));
-               status = bthci_CmdShortRangeMode(padapter, pHciCmd);
-               break;
-       case HCI_HOST_BUFFER_SIZE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_HOST_BUFFER_SIZE\n"));
-               status = bthci_CmdHostBufferSize(padapter, pHciCmd);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("bthci_HandleOGFSetEventMaskCMD(), Unknown case = 0x%x\n", pHciCmd->OCF));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFStatusParameters(struct rtw_adapter *padapter,
-                               struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-
-       switch (pHciCmd->OCF) {
-       case HCI_READ_FAILED_CONTACT_COUNTER:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_FAILED_CONTACT_COUNTER\n"));
-               status = bthci_CmdReadFailedContactCounter(padapter, pHciCmd);
-               break;
-       case HCI_RESET_FAILED_CONTACT_COUNTER:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_RESET_FAILED_CONTACT_COUNTER\n"));
-               status = bthci_CmdResetFailedContactCounter(padapter, pHciCmd);
-               break;
-       case HCI_READ_LINK_QUALITY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LINK_QUALITY\n"));
-               status = bthci_CmdReadLinkQuality(padapter, pHciCmd);
-               break;
-       case HCI_READ_RSSI:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_RSSI\n"));
-               break;
-       case HCI_READ_LOCAL_AMP_INFO:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCAL_AMP_INFO\n"));
-               status = bthci_CmdReadLocalAMPInfo(padapter);
-               break;
-       case HCI_READ_LOCAL_AMP_ASSOC:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_READ_LOCAL_AMP_ASSOC\n"));
-               status = bthci_CmdReadLocalAMPAssoc(padapter, pHciCmd);
-               break;
-       case HCI_WRITE_REMOTE_AMP_ASSOC:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_WRITE_REMOTE_AMP_ASSOC\n"));
-               status = bthci_CmdWriteRemoteAMPAssoc(padapter, pHciCmd);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("bthci_HandleOGFStatusParameters(), Unknown case = 0x%x\n", pHciCmd->OCF));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFLinkControlCMD(struct rtw_adapter *padapter,
-                             struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-
-       switch (pHciCmd->OCF) {
-       case HCI_CREATE_PHYSICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_CREATE_PHYSICAL_LINK\n"));
-               status = bthci_CmdCreatePhysicalLink(padapter, pHciCmd);
-               break;
-       case HCI_ACCEPT_PHYSICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_ACCEPT_PHYSICAL_LINK\n"));
-               status = bthci_CmdAcceptPhysicalLink(padapter, pHciCmd);
-               break;
-       case HCI_DISCONNECT_PHYSICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_DISCONNECT_PHYSICAL_LINK\n"));
-               status = bthci_CmdDisconnectPhysicalLink(padapter, pHciCmd);
-               break;
-       case HCI_CREATE_LOGICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_CREATE_LOGICAL_LINK\n"));
-               status = bthci_CmdCreateLogicalLink(padapter, pHciCmd);
-               break;
-       case HCI_ACCEPT_LOGICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_ACCEPT_LOGICAL_LINK\n"));
-               status = bthci_CmdAcceptLogicalLink(padapter, pHciCmd);
-               break;
-       case HCI_DISCONNECT_LOGICAL_LINK:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_DISCONNECT_LOGICAL_LINK\n"));
-               status = bthci_CmdDisconnectLogicalLink(padapter, pHciCmd);
-               break;
-       case HCI_LOGICAL_LINK_CANCEL:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_LOGICAL_LINK_CANCEL\n"));
-               status = bthci_CmdLogicalLinkCancel(padapter, pHciCmd);
-               break;
-       case HCI_FLOW_SPEC_MODIFY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_FLOW_SPEC_MODIFY\n"));
-               status = bthci_CmdFlowSpecModify(padapter, pHciCmd);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("bthci_HandleOGFLinkControlCMD(), Unknown case = 0x%x\n", pHciCmd->OCF));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFTestingCMD(struct rtw_adapter *padapter,
-                         struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       switch (pHciCmd->OCF) {
-       case HCI_ENABLE_DEVICE_UNDER_TEST_MODE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_ENABLE_DEVICE_UNDER_TEST_MODE\n"));
-               bthci_CmdEnableDeviceUnderTestMode(padapter, pHciCmd);
-               break;
-       case HCI_AMP_TEST_END:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_AMP_TEST_END\n"));
-               bthci_CmdAMPTestEnd(padapter, pHciCmd);
-               break;
-       case HCI_AMP_TEST_COMMAND:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_AMP_TEST_COMMAND\n"));
-               bthci_CmdAMPTestCommand(padapter, pHciCmd);
-               break;
-       case HCI_ENABLE_AMP_RECEIVER_REPORTS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_ENABLE_AMP_RECEIVER_REPORTS\n"));
-               bthci_CmdEnableAMPReceiverReports(padapter, pHciCmd);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static enum hci_status
-bthci_HandleOGFExtension(struct rtw_adapter *padapter,
-                        struct packet_irp_hcicmd_data *pHciCmd)
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       switch (pHciCmd->OCF) {
-       case HCI_SET_ACL_LINK_DATA_FLOW_MODE:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_SET_ACL_LINK_DATA_FLOW_MODE\n"));
-               status = bthci_CmdSetACLLinkDataFlowMode(padapter, pHciCmd);
-               break;
-       case HCI_SET_ACL_LINK_STATUS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_SET_ACL_LINK_STATUS\n"));
-               status = bthci_CmdSetACLLinkStatus(padapter, pHciCmd);
-               break;
-       case HCI_SET_SCO_LINK_STATUS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_SET_SCO_LINK_STATUS\n"));
-               status = bthci_CmdSetSCOLinkStatus(padapter, pHciCmd);
-               break;
-       case HCI_SET_RSSI_VALUE:
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT_PERIODICAL, ("HCI_SET_RSSI_VALUE\n"));
-               status = bthci_CmdSetRSSIValue(padapter, pHciCmd);
-               break;
-       case HCI_SET_CURRENT_BLUETOOTH_STATUS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_SET_CURRENT_BLUETOOTH_STATUS\n"));
-               status = bthci_CmdSetCurrentBluetoothStatus(padapter, pHciCmd);
-               break;
-       /* The following is for RTK8723 */
-
-       case HCI_EXTENSION_VERSION_NOTIFY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_EXTENSION_VERSION_NOTIFY\n"));
-               status = bthci_CmdExtensionVersionNotify(padapter, pHciCmd);
-               break;
-       case HCI_LINK_STATUS_NOTIFY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_LINK_STATUS_NOTIFY\n"));
-               status = bthci_CmdLinkStatusNotify(padapter, pHciCmd);
-               break;
-       case HCI_BT_OPERATION_NOTIFY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_BT_OPERATION_NOTIFY\n"));
-               status = bthci_CmdBtOperationNotify(padapter, pHciCmd);
-               break;
-       case HCI_ENABLE_WIFI_SCAN_NOTIFY:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_ENABLE_WIFI_SCAN_NOTIFY\n"));
-               status = bthci_CmdEnableWifiScanNotify(padapter, pHciCmd);
-               break;
-
-       /* The following is for IVT */
-       case HCI_WIFI_CURRENT_CHANNEL:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_WIFI_CURRENT_CHANNEL\n"));
-               status = bthci_CmdWIFICurrentChannel(padapter, pHciCmd);
-               break;
-       case HCI_WIFI_CURRENT_BANDWIDTH:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_WIFI_CURRENT_BANDWIDTH\n"));
-               status = bthci_CmdWIFICurrentBandwidth(padapter, pHciCmd);
-               break;
-       case HCI_WIFI_CONNECTION_STATUS:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_WIFI_CONNECTION_STATUS\n"));
-               status = bthci_CmdWIFIConnectionStatus(padapter, pHciCmd);
-               break;
-
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       return status;
-}
-
-static void
-bthci_StateStarting(struct rtw_adapter *padapter,
-                   enum hci_state_with_cmd StateCmd, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Starting], "));
-       switch (StateCmd) {
-       case STATE_CMD_CONNECT_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_CONNECT_ACCEPT_TIMEOUT\n"));
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_CONNECT_ACCEPT_TIMEOUT;
-               pBtMgnt->bNeedNotifyAMPNoCap = true;
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       case STATE_CMD_MAC_START_COMPLETE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_MAC_START_COMPLETE\n"));
-               if (pBTInfo->BtAsocEntry[EntryNum].AMPRole == AMP_BTAP_CREATOR)
-                       bthci_EventChannelSelected(padapter, EntryNum);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-static void
-bthci_StateConnecting(struct rtw_adapter *padapter,
-                     enum hci_state_with_cmd StateCmd, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Connecting], "));
-       switch (StateCmd) {
-       case STATE_CMD_CONNECT_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_CONNECT_ACCEPT_TIMEOUT\n"));
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_CONNECT_ACCEPT_TIMEOUT;
-               pBtMgnt->bNeedNotifyAMPNoCap = true;
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       case STATE_CMD_MAC_CONNECT_COMPLETE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_MAC_CONNECT_COMPLETE\n"));
-
-               if (pBTInfo->BtAsocEntry[EntryNum].AMPRole == AMP_BTAP_JOINER) {
-                       RT_TRACE(_module_rtl871x_security_c_, _drv_info_,
-                                "StateConnecting\n");
-               }
-               break;
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-
-               break;
-       case STATE_CMD_MAC_CONNECT_CANCEL_INDICATE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_MAC_CONNECT_CANCEL_INDICATE\n"));
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_CONTROLLER_BUSY;
-               /*  Because this state cmd is caused by the BTHCI_EventAMPStatusChange(), */
-               /*  we don't need to send event in the following BTHCI_DisconnectPeer() again. */
-               pBtMgnt->bNeedNotifyAMPNoCap = false;
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-static void
-bthci_StateConnected(struct rtw_adapter *padapter,
-                    enum hci_state_with_cmd StateCmd, u8 EntryNum)
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 i;
-       u16 logicHandle = 0;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Connected], "));
-       switch (StateCmd) {
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-
-               /* When we are trying to disconnect the phy link, we should disconnect log link first, */
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTInfo->BtAsocEntry[EntryNum].LogLinkCmdData->BtLogLinkhandle != 0) {
-                               logicHandle = pBTInfo->BtAsocEntry[EntryNum].LogLinkCmdData->BtLogLinkhandle;
-
-                               bthci_EventDisconnectLogicalLinkComplete(padapter, HCI_STATUS_SUCCESS,
-                                       logicHandle, pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason);
-
-                               pBTInfo->BtAsocEntry[EntryNum].LogLinkCmdData->BtLogLinkhandle = 0;
-                       }
-               }
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-
-       case STATE_CMD_MAC_DISCONNECT_INDICATE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_MAC_DISCONNECT_INDICATE\n"));
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               /*  TODO: Remote Host not local host */
-               HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST,
-               EntryNum);
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-
-               break;
-       case STATE_CMD_ENTER_STATE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_ENTER_STATE\n"));
-
-               if (pBtMgnt->bBTConnectInProgress) {
-                       pBtMgnt->bBTConnectInProgress = false;
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], BT Connect in progress OFF!!\n"));
-               }
-               pBTInfo->BtAsocEntry[EntryNum].BtCurrentState = HCI_STATE_CONNECTED;
-               pBTInfo->BtAsocEntry[EntryNum].b4waySuccess = true;
-               pBtMgnt->bStartSendSupervisionPkt = true;
-
-               /*  for rate adaptive */
-
-               rtl8723a_update_ramask(padapter,
-                                      MAX_FW_SUPPORT_MACID_NUM-1-EntryNum, 0);
-
-               HalSetBrateCfg23a(padapter, padapter->mlmepriv.cur_network.network.SupportedRates);
-               BTDM_SetFwChnlInfo(padapter, RT_MEDIA_CONNECT);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-static void
-bthci_StateAuth(struct rtw_adapter *padapter, enum hci_state_with_cmd StateCmd,
-               u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Authenticating], "));
-       switch (StateCmd) {
-       case STATE_CMD_CONNECT_ACCEPT_TIMEOUT:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_CONNECT_ACCEPT_TIMEOUT\n"));
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_CONNECT_ACCEPT_TIMEOUT;
-               pBtMgnt->bNeedNotifyAMPNoCap = true;
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_UNKNOW_CONNECT_ID;
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       case STATE_CMD_4WAY_FAILED:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_4WAY_FAILED\n"));
-
-               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus = HCI_STATUS_AUTH_FAIL;
-               pBtMgnt->bNeedNotifyAMPNoCap = true;
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-               break;
-       case STATE_CMD_4WAY_SUCCESSED:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_4WAY_SUCCESSED\n"));
-
-               bthci_EventPhysicalLinkComplete(padapter, HCI_STATUS_SUCCESS, EntryNum, INVALID_PL_HANDLE);
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_CONNECTED, STATE_CMD_ENTER_STATE, EntryNum);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-static void
-bthci_StateDisconnecting(struct rtw_adapter *padapter,
-                        enum hci_state_with_cmd StateCmd, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Disconnecting], "));
-       switch (StateCmd) {
-       case STATE_CMD_MAC_CONNECT_CANCEL_INDICATE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_MAC_CONNECT_CANCEL_INDICATE\n"));
-               if (pBTInfo->BtAsocEntry[EntryNum].bNeedPhysLinkCompleteEvent) {
-                       bthci_EventPhysicalLinkComplete(padapter,
-                               pBTInfo->BtAsocEntry[EntryNum].PhysLinkCompleteStatus,
-                               EntryNum, INVALID_PL_HANDLE);
-               }
-
-               if (pBtMgnt->bBTConnectInProgress) {
-                       pBtMgnt->bBTConnectInProgress = false;
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], BT Connect in progress OFF!!\n"));
-               }
-
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTED, STATE_CMD_ENTER_STATE, EntryNum);
-               break;
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               BTHCI_DisconnectPeer(padapter, EntryNum);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-static void
-bthci_StateDisconnected(struct rtw_adapter *padapter,
-                       enum hci_state_with_cmd StateCmd, u8 EntryNum)
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state], [Disconnected], "));
-       switch (StateCmd) {
-       case STATE_CMD_CREATE_PHY_LINK:
-       case STATE_CMD_ACCEPT_PHY_LINK:
-               if (StateCmd == STATE_CMD_CREATE_PHY_LINK)
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_CREATE_PHY_LINK\n"));
-               else
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_ACCEPT_PHY_LINK\n"));
-
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT PS], Disable IPS and LPS\n"));
-               ips_leave23a(padapter);
-               LPS_Leave23a(padapter);
-
-               pBtMgnt->bPhyLinkInProgress = true;
-               pBtMgnt->BTCurrentConnectType = BT_DISCONNECT;
-               pBtMgnt->CurrentBTConnectionCnt++;
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], CurrentBTConnectionCnt = %d\n",
-                       pBtMgnt->CurrentBTConnectionCnt));
-               pBtMgnt->BtOperationOn = true;
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], Bt Operation ON!! CurrentConnectEntryNum = %d\n",
-                       pBtMgnt->CurrentConnectEntryNum));
-
-               if (pBtMgnt->bBTConnectInProgress) {
-                       bthci_EventPhysicalLinkComplete(padapter, HCI_STATUS_CONTROLLER_BUSY, INVALID_ENTRY_NUM, pBtMgnt->BtCurrentPhyLinkhandle);
-                       bthci_RemoveEntryByEntryNum(padapter, EntryNum);
-                       return;
-               }
-
-               if (StateCmd == STATE_CMD_CREATE_PHY_LINK)
-                       pBTInfo->BtAsocEntry[EntryNum].AMPRole = AMP_BTAP_CREATOR;
-               else
-                       pBTInfo->BtAsocEntry[EntryNum].AMPRole = AMP_BTAP_JOINER;
-
-               /*  1. MAC not yet in selected channel */
-               while (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE|WIFI_SITE_MONITOR)) {
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("Scan/Roaming/Wifi Link is in Progress, wait 200 ms\n"));
-                       mdelay(200);
-               }
-               /*  2. MAC already in selected channel */
-               RTPRINT(FIOCTL, IOCTL_STATE, ("Channel is Ready\n"));
-               mod_timer(&pBTInfo->BTHCIJoinTimeoutTimer,
-                         jiffies + msecs_to_jiffies(pBtHciInfo->ConnAcceptTimeout));
-
-               pBTInfo->BtAsocEntry[EntryNum].bNeedPhysLinkCompleteEvent = true;
-               break;
-       case STATE_CMD_DISCONNECT_PHY_LINK:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_DISCONNECT_PHY_LINK\n"));
-
-               del_timer_sync(&pBTInfo->BTHCIJoinTimeoutTimer);
-
-               bthci_EventDisconnectPhyLinkComplete(padapter,
-               HCI_STATUS_SUCCESS,
-               pBTInfo->BtAsocEntry[EntryNum].PhyLinkDisconnectReason,
-               EntryNum);
-
-               if (pBTInfo->BtAsocEntry[EntryNum].bNeedPhysLinkCompleteEvent) {
-                       bthci_EventPhysicalLinkComplete(padapter,
-                               HCI_STATUS_UNKNOW_CONNECT_ID,
-                               EntryNum, INVALID_PL_HANDLE);
-               }
-
-               if (pBtMgnt->bBTConnectInProgress) {
-                       pBtMgnt->bBTConnectInProgress = false;
-                       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], BT Connect in progress OFF!!\n"));
-               }
-               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTED, STATE_CMD_ENTER_STATE, EntryNum);
-               bthci_RemoveEntryByEntryNum(padapter, EntryNum);
-               break;
-       case STATE_CMD_ENTER_STATE:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("STATE_CMD_ENTER_STATE\n"));
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_STATE, ("State command(%d) is Wrong !!!\n", StateCmd));
-               break;
-       }
-}
-
-void BTHCI_EventParse(struct rtw_adapter *padapter, void *pEvntData, u32 dataLen)
-{
-}
-
-u8 BTHCI_HsConnectionEstablished(struct rtw_adapter *padapter)
-{
-       u8 bBtConnectionExist = false;
-       struct bt_30info *pBtinfo = GET_BT_INFO(padapter);
-       u8 i;
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-               if (pBtinfo->BtAsocEntry[i].b4waySuccess) {
-                       bBtConnectionExist = true;
-                       break;
-               }
-       }
-
-/*RTPRINT(FIOCTL, IOCTL_STATE, (" BTHCI_HsConnectionEstablished(), connection exist = %d\n", bBtConnectionExist)); */
-
-       return bBtConnectionExist;
-}
-
-static u8
-BTHCI_CheckProfileExist(struct rtw_adapter *padapter,
-                       enum bt_traffic_mode_profile Profile)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 IsPRofile = false;
-       u8 i = 0;
-
-       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-               if (pBtMgnt->ExtConfig.linkInfo[i].TrafficProfile == Profile) {
-                       IsPRofile = true;
-                       break;
-               }
-       }
-
-       return IsPRofile;
-}
-
-void BTHCI_UpdateBTProfileRTKToMoto(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 i = 0;
-
-       pBtMgnt->ExtConfig.NumberOfSCO = 0;
-
-       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-               pBtMgnt->ExtConfig.linkInfo[i].TrafficProfile = BT_PROFILE_NONE;
-
-               if (pBtMgnt->ExtConfig.linkInfo[i].BTProfile == BT_PROFILE_SCO)
-                       pBtMgnt->ExtConfig.NumberOfSCO++;
-
-               pBtMgnt->ExtConfig.linkInfo[i].TrafficProfile = pBtMgnt->ExtConfig.linkInfo[i].BTProfile;
-               switch (pBtMgnt->ExtConfig.linkInfo[i].TrafficProfile) {
-               case BT_PROFILE_SCO:
-                       break;
-               case BT_PROFILE_PAN:
-                       pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode = BT_MOTOR_EXT_BE;
-                       pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode = BT_MOTOR_EXT_BE;
-                       break;
-               case BT_PROFILE_A2DP:
-                       pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode = BT_MOTOR_EXT_GULB;
-                       pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode = BT_MOTOR_EXT_GULB;
-                       break;
-               case BT_PROFILE_HID:
-                       pBtMgnt->ExtConfig.linkInfo[i].IncomingTrafficMode = BT_MOTOR_EXT_GUL;
-                       pBtMgnt->ExtConfig.linkInfo[i].OutgoingTrafficMode = BT_MOTOR_EXT_BE;
-                       break;
-               default:
-                       break;
-               }
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], RTK, NumberOfHandle = %d, NumberOfSCO = %d\n",
-               pBtMgnt->ExtConfig.NumberOfHandle, pBtMgnt->ExtConfig.NumberOfSCO));
-}
-
-void BTHCI_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bEnableWifiScanNotify)
-               bthci_EventExtWifiScanNotify(padapter, scanType);
-}
-
-void
-BTHCI_StateMachine(
-       struct rtw_adapter *padapter,
-       u8              StateToEnter,
-       enum hci_state_with_cmd         StateCmd,
-       u8              EntryNum
-       )
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (EntryNum == 0xff) {
-               RTPRINT(FIOCTL, IOCTL_STATE, (" StateMachine, error EntryNum = 0x%x \n", EntryNum));
-               return;
-       }
-       RTPRINT(FIOCTL, IOCTL_STATE, (" StateMachine, EntryNum = 0x%x, CurrentState = 0x%x, BtNextState = 0x%x,  StateCmd = 0x%x , StateToEnter = 0x%x\n",
-               EntryNum, pBTInfo->BtAsocEntry[EntryNum].BtCurrentState, pBTInfo->BtAsocEntry[EntryNum].BtNextState, StateCmd, StateToEnter));
-
-       if (pBTInfo->BtAsocEntry[EntryNum].BtNextState & StateToEnter) {
-               pBTInfo->BtAsocEntry[EntryNum].BtCurrentState = StateToEnter;
-
-               switch (StateToEnter) {
-               case HCI_STATE_STARTING:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_DISCONNECTING | HCI_STATE_CONNECTING;
-                       bthci_StateStarting(padapter, StateCmd, EntryNum);
-                       break;
-               case HCI_STATE_CONNECTING:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_CONNECTING | HCI_STATE_DISCONNECTING | HCI_STATE_AUTHENTICATING;
-                       bthci_StateConnecting(padapter, StateCmd, EntryNum);
-                       break;
-               case HCI_STATE_AUTHENTICATING:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_DISCONNECTING | HCI_STATE_CONNECTED;
-                       bthci_StateAuth(padapter, StateCmd, EntryNum);
-                       break;
-               case HCI_STATE_CONNECTED:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_CONNECTED | HCI_STATE_DISCONNECTING;
-                       bthci_StateConnected(padapter, StateCmd, EntryNum);
-                       break;
-               case HCI_STATE_DISCONNECTING:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_DISCONNECTED | HCI_STATE_DISCONNECTING;
-                       bthci_StateDisconnecting(padapter, StateCmd, EntryNum);
-                       break;
-               case HCI_STATE_DISCONNECTED:
-                       pBTInfo->BtAsocEntry[EntryNum].BtNextState = HCI_STATE_DISCONNECTED | HCI_STATE_STARTING | HCI_STATE_CONNECTING;
-                       bthci_StateDisconnected(padapter, StateCmd, EntryNum);
-                       break;
-               default:
-                       RTPRINT(FIOCTL, IOCTL_STATE, (" StateMachine, Unknown state to enter!!!\n"));
-                       break;
-               }
-       } else {
-               RTPRINT(FIOCTL, IOCTL_STATE, (" StateMachine, Wrong state to enter\n"));
-       }
-
-       /*  20100325 Joseph: Disable/Enable IPS/LPS according to BT status. */
-       if (!pBtMgnt->bBTConnectInProgress && !pBtMgnt->BtOperationOn) {
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT PS], ips_enter23a()\n"));
-               ips_enter23a(padapter);
-       }
-}
-
-void BTHCI_DisconnectPeer(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, (" BTHCI_DisconnectPeer()\n"));
-
-       BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTING, STATE_CMD_MAC_CONNECT_CANCEL_INDICATE, EntryNum);
-
-       if (pBTInfo->BtAsocEntry[EntryNum].bUsed) {
-/*BTPKT_SendDeauthentication(padapter, pBTInfo->BtAsocEntry[EntryNum].BTRemoteMACAddr, unspec_reason); not porting yet */
-       }
-
-       if (pBtMgnt->bBTConnectInProgress) {
-               pBtMgnt->bBTConnectInProgress = false;
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT Flag], BT Connect in progress OFF!!\n"));
-       }
-
-       bthci_RemoveEntryByEntryNum(padapter, EntryNum);
-
-       if (pBtMgnt->bNeedNotifyAMPNoCap) {
-               RTPRINT(FIOCTL, IOCTL_STATE, ("[BT AMPStatus], set to invalid in BTHCI_DisconnectPeer()\n"));
-               BTHCI_EventAMPStatusChange(padapter, AMP_STATUS_NO_CAPACITY_FOR_BT);
-       }
-}
-
-void BTHCI_EventNumOfCompletedDataBlocks(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO pMgntInfo = &padapter->MgntInfo; */
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_hci_info *pBtHciInfo = &pBTInfo->BtHciInfo;
-       u8 localBuf[TmpLocalBufSize] = "";
-       u8 *pRetPar, *pTriple;
-       u8 len = 0, i, j, handleNum = 0;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u16 *pu2Temp, *pPackets, *pHandle, *pDblocks;
-       u8 sent = 0;
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-
-       if (!(pBtHciInfo->BTEventMaskPage2 & EMP2_HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS)) {
-               RTPRINT(FIOCTL, IOCTL_BT_EVENT, ("[BT event], Num Of Completed DataBlocks, Ignore to send NumOfCompletedDataBlocksEvent due to event mask page 2\n"));
-               return;
-       }
-
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[0];
-       pTriple = &pRetPar[3];
-       for (j = 0; j < MAX_BT_ASOC_ENTRY_NUM; j++) {
-
-               for (i = 0; i < MAX_LOGICAL_LINK_NUM; i++) {
-                       if (pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle) {
-                               handleNum++;
-                               pHandle = (u16 *)&pTriple[0];   /*  Handle[i] */
-                               pPackets = (u16 *)&pTriple[2];  /*  Num_Of_Completed_Packets[i] */
-                               pDblocks = (u16 *)&pTriple[4];  /*  Num_Of_Completed_Blocks[i] */
-                               *pHandle = pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].BtLogLinkhandle;
-                               *pPackets = (u16)pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].TxPacketCount;
-                               *pDblocks = (u16)pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].TxPacketCount;
-                               if (pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].TxPacketCount) {
-                                       sent = 1;
-                                       RTPRINT(FIOCTL, IOCTL_BT_EVENT_DETAIL,
-                                               ("[BT event], Num Of Completed DataBlocks, Handle = 0x%x, Num_Of_Completed_Packets = 0x%x, Num_Of_Completed_Blocks = 0x%x\n",
-                                       *pHandle, *pPackets, *pDblocks));
-                               }
-                               pBTInfo->BtAsocEntry[j].LogLinkCmdData[i].TxPacketCount = 0;
-                               len += 6;
-                               pTriple += len;
-                       }
-               }
-       }
-
-       pRetPar[2] = handleNum;                         /*  Number_of_Handles */
-       len += 1;
-       pu2Temp = (u16 *)&pRetPar[0];
-       *pu2Temp = BTTotalDataBlockNum;
-       len += 2;
-
-       PPacketIrpEvent->EventCode = HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS;
-       PPacketIrpEvent->Length = len;
-       if (handleNum && sent)
-               bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2);
-}
-
-void BTHCI_EventAMPStatusChange(struct rtw_adapter *padapter, u8 AMP_Status)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct packet_irp_hcievent_data *PPacketIrpEvent;
-       u8 len = 0;
-       u8 localBuf[7] = "";
-       u8 *pRetPar;
-
-       if (AMP_Status == AMP_STATUS_NO_CAPACITY_FOR_BT) {
-               pBtMgnt->BTNeedAMPStatusChg = true;
-               pBtMgnt->bNeedNotifyAMPNoCap = false;
-
-               BTHCI_DisconnectAll(padapter);
-       } else if (AMP_Status == AMP_STATUS_FULL_CAPACITY_FOR_BT) {
-               pBtMgnt->BTNeedAMPStatusChg = false;
-       }
-
-       PPacketIrpEvent = (struct packet_irp_hcievent_data *)(&localBuf[0]);
-       /*  Return parameters starts from here */
-       pRetPar = &PPacketIrpEvent->Data[0];
-
-       pRetPar[0] = 0; /*  Status */
-       len += 1;
-       pRetPar[1] = AMP_Status;        /*  AMP_Status */
-       len += 1;
-
-       PPacketIrpEvent->EventCode = HCI_EVENT_AMP_STATUS_CHANGE;
-       PPacketIrpEvent->Length = len;
-       if (bthci_IndicateEvent(padapter, PPacketIrpEvent, len+2) == RT_STATUS_SUCCESS)
-               RTPRINT(FIOCTL, (IOCTL_BT_EVENT|IOCTL_STATE), ("[BT event], AMP Status Change, AMP_Status = %d\n", AMP_Status));
-}
-
-void BTHCI_DisconnectAll(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       u8 i;
-
-       RTPRINT(FIOCTL, IOCTL_STATE, (" DisconnectALL()\n"));
-
-       for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-               if (pBTInfo->BtAsocEntry[i].b4waySuccess) {
-                       BTHCI_SM_WITH_INFO(padapter, HCI_STATE_CONNECTED, STATE_CMD_DISCONNECT_PHY_LINK, i);
-               } else if (pBTInfo->BtAsocEntry[i].bUsed) {
-                       if (pBTInfo->BtAsocEntry[i].BtCurrentState == HCI_STATE_CONNECTING) {
-                               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_CONNECTING, STATE_CMD_MAC_CONNECT_CANCEL_INDICATE, i);
-                       } else if (pBTInfo->BtAsocEntry[i].BtCurrentState == HCI_STATE_DISCONNECTING) {
-                               BTHCI_SM_WITH_INFO(padapter, HCI_STATE_DISCONNECTING, STATE_CMD_MAC_CONNECT_CANCEL_INDICATE, i);
-                       }
-               }
-       }
-}
-
-enum hci_status
-BTHCI_HandleHCICMD(
-       struct rtw_adapter *padapter,
-       struct packet_irp_hcicmd_data *pHciCmd
-       )
-{
-       enum hci_status status = HCI_STATUS_SUCCESS;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("\n"));
-       RTPRINT(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), ("HCI Command start, OGF = 0x%x, OCF = 0x%x, Length = 0x%x\n",
-               pHciCmd->OGF, pHciCmd->OCF, pHciCmd->Length));
-       if (pHciCmd->Length) {
-               RTPRINT_DATA(FIOCTL, (IOCTL_BT_HCICMD_DETAIL|IOCTL_BT_LOGO), "HCI Command, Hex Data :\n",
-                       &pHciCmd->Data[0], pHciCmd->Length);
-       }
-       if (pHciCmd->OGF == OGF_EXTENSION) {
-               if (pHciCmd->OCF == HCI_SET_RSSI_VALUE)
-                       RTPRINT(FIOCTL, IOCTL_BT_EVENT_PERIODICAL, ("[BT cmd], "));
-               else
-                       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_EXT, ("[BT cmd], "));
-       } else {
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("[BT cmd], "));
-       }
-
-       pBtDbg->dbgHciInfo.hciCmdCnt++;
-
-       switch (pHciCmd->OGF) {
-       case LINK_CONTROL_COMMANDS:
-               status = bthci_HandleOGFLinkControlCMD(padapter, pHciCmd);
-               break;
-       case HOLD_MODE_COMMAND:
-               break;
-       case OGF_SET_EVENT_MASK_COMMAND:
-               status = bthci_HandleOGFSetEventMaskCMD(padapter, pHciCmd);
-               break;
-       case OGF_INFORMATIONAL_PARAMETERS:
-               status = bthci_HandleOGFInformationalParameters(padapter, pHciCmd);
-               break;
-       case OGF_STATUS_PARAMETERS:
-               status = bthci_HandleOGFStatusParameters(padapter, pHciCmd);
-               break;
-       case OGF_TESTING_COMMANDS:
-               status = bthci_HandleOGFTestingCMD(padapter, pHciCmd);
-               break;
-       case OGF_EXTENSION:
-               status = bthci_HandleOGFExtension(padapter, pHciCmd);
-               break;
-       default:
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI Command(), Unknown OGF = 0x%x\n", pHciCmd->OGF));
-               RTPRINT(FIOCTL, IOCTL_BT_HCICMD, ("HCI_UNKNOWN_COMMAND\n"));
-               status = bthci_UnknownCMD(padapter, pHciCmd);
-               break;
-       }
-       RTPRINT(FIOCTL, IOCTL_BT_HCICMD_DETAIL, ("HCI Command execution end!!\n"));
-
-       return status;
-}
-
-/*  ===== End of sync from SD7 driver COMMOM/bt_hci.c ===== */
-
-static const char *const BtStateString[] = {
-       "BT_DISABLED",
-       "BT_NO_CONNECTION",
-       "BT_CONNECT_IDLE",
-       "BT_INQ_OR_PAG",
-       "BT_ACL_ONLY_BUSY",
-       "BT_SCO_ONLY_BUSY",
-       "BT_ACL_SCO_BUSY",
-       "BT_ACL_INQ_OR_PAG",
-       "BT_STATE_NOT_DEFINED"
-};
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.c ===== */
-
-static void btdm_SetFwIgnoreWlanAct(struct rtw_adapter *padapter, u8 bEnable)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[1] = {0};
-
-       if (bEnable) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT Ignore Wlan_Act !!\n"));
-               H2C_Parameter[0] |= BIT(0);             /*  function enable */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT don't ignore Wlan_Act !!\n"));
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], set FW for BT Ignore Wlan_Act, write 0x25 = 0x%02x\n",
-               H2C_Parameter[0]));
-
-       FillH2CCmd(padapter, BT_IGNORE_WLAN_ACT_EID, 1, H2C_Parameter);
-}
-
-static void btdm_NotifyFwScan(struct rtw_adapter *padapter, u8 scanType)
-{
-       u8 H2C_Parameter[1] = {0};
-
-       if (scanType == true)
-               H2C_Parameter[0] = 0x1;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Notify FW for wifi scan, write 0x3b = 0x%02x\n",
-               H2C_Parameter[0]));
-
-       FillH2CCmd(padapter, 0x3b, 1, H2C_Parameter);
-}
-
-static void btdm_1AntSetPSMode(struct rtw_adapter *padapter,
-                              u8 enable, u8 smartps, u8 mode)
-{
-       struct pwrctrl_priv *pwrctrl;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Current LPS(%s, %d), smartps =%d\n", enable == true?"ON":"OFF", mode, smartps));
-
-       pwrctrl = &padapter->pwrctrlpriv;
-
-       if (enable == true) {
-               rtw_set_ps_mode23a(padapter, PS_MODE_MIN, smartps, mode);
-       } else {
-               rtw_set_ps_mode23a(padapter, PS_MODE_ACTIVE, 0, 0);
-               LPS_RF_ON_check23a(padapter, 100);
-       }
-}
-
-static void btdm_1AntTSFSwitch(struct rtw_adapter *padapter, u8 enable)
-{
-       u8 oldVal, newVal;
-
-       oldVal = rtl8723au_read8(padapter, 0x550);
-
-       if (enable)
-               newVal = oldVal | EN_BCN_FUNCTION;
-       else
-               newVal = oldVal & ~EN_BCN_FUNCTION;
-
-       if (oldVal != newVal)
-               rtl8723au_write8(padapter, 0x550, newVal);
-}
-
-static u8 btdm_Is1AntPsTdmaStateChange(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_1ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-
-       if ((pBtdm8723->bPrePsTdmaOn != pBtdm8723->bCurPsTdmaOn) ||
-               (pBtdm8723->prePsTdma != pBtdm8723->curPsTdma))
-               return true;
-       else
-               return false;
-}
-
-/*  Before enter TDMA, make sure Power Saving is enable! */
-static void
-btdm_1AntPsTdma(
-       struct rtw_adapter *padapter,
-       u8 bTurnOn,
-       u8 type
-       )
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_1ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-
-       pBtdm8723->bCurPsTdmaOn = bTurnOn;
-       pBtdm8723->curPsTdma = type;
-       if (bTurnOn) {
-               switch (type) {
-               case 1: /*  A2DP Level-1 or FTP/OPP */
-               default:
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  wide duration for WiFi */
-                               BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x0, 0x58);
-                       }
-                       break;
-               case 2: /*  A2DP Level-2 */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  normal duration for WiFi */
-                               BTDM_SetFw3a(padapter, 0xd3, 0x12, 0x12, 0x0, 0x58);
-                       }
-                       break;
-               case 3: /*  BT FTP/OPP */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  normal duration for WiFi */
-                               BTDM_SetFw3a(padapter, 0xd3, 0x30, 0x03, 0x10, 0x58);
-
-                       }
-                       break;
-               case 4: /*  for wifi scan & BT is connected */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  protect 3 beacons in 3-beacon period & no Tx pause at BT slot */
-                               BTDM_SetFw3a(padapter, 0x93, 0x15, 0x03, 0x14, 0x0);
-                       }
-                       break;
-               case 5: /*  for WiFi connected-busy & BT is Non-Connected-Idle */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  SCO mode, Ant fixed at WiFi, WLAN_Act toggle */
-                               BTDM_SetFw3a(padapter, 0x61, 0x15, 0x03, 0x31, 0x00);
-                       }
-                       break;
-               case 9: /*  ACL high-retry type - 2 */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  narrow duration for WiFi */
-                               BTDM_SetFw3a(padapter, 0xd3, 0xa, 0xa, 0x0, 0x58); /* narrow duration for WiFi */
-                       }
-                       break;
-               case 10: /*  for WiFi connect idle & BT ACL busy or WiFi Connected-Busy & BT is Inquiry */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0x13, 0xa, 0xa, 0x0, 0x40);
-                       break;
-               case 11: /*  ACL high-retry type - 3 */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  narrow duration for WiFi */
-                               BTDM_SetFw3a(padapter, 0xd3, 0x05, 0x05, 0x00, 0x58);
-                       }
-                       break;
-               case 12: /*  for WiFi Connected-Busy & BT is Connected-Idle */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  Allow High-Pri BT */
-                               BTDM_SetFw3a(padapter, 0xeb, 0x0a, 0x03, 0x31, 0x18);
-                       }
-                       break;
-               case 20: /*  WiFi only busy , TDMA mode for power saving */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0x13, 0x25, 0x25, 0x00, 0x00);
-                       break;
-               case 27: /*  WiFi DHCP/Site Survey & BT SCO busy */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xa3, 0x25, 0x03, 0x31, 0x98);
-                       break;
-               case 28: /*  WiFi DHCP/Site Survey & BT idle */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0x69, 0x25, 0x03, 0x31, 0x00);
-                       break;
-               case 29: /*  WiFi DHCP/Site Survey & BT ACL busy */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               BTDM_SetFw3a(padapter, 0xeb, 0x1a, 0x1a, 0x01, 0x18);
-                               rtl8723au_write32(padapter, 0x6c0, 0x5afa5afa);
-                               rtl8723au_write32(padapter, 0x6c4, 0x5afa5afa);
-                       }
-                       break;
-               case 30: /*  WiFi idle & BT Inquiry */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0x93, 0x15, 0x03, 0x14, 0x00);
-                       break;
-               case 31:  /*  BT HID */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x00, 0x58);
-                       break;
-               case 32:  /*  BT SCO & Inquiry */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xab, 0x0a, 0x03, 0x11, 0x98);
-                       break;
-               case 33:  /*  BT SCO & WiFi site survey */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xa3, 0x25, 0x03, 0x30, 0x98);
-                       break;
-               case 34:  /*  BT HID & WiFi site survey */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xd3, 0x1a, 0x1a, 0x00, 0x18);
-                       break;
-               case 35:  /*  BT HID & WiFi Connecting */
-                       if (btdm_Is1AntPsTdmaStateChange(padapter))
-                               BTDM_SetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x00, 0x18);
-                       break;
-               }
-       } else {
-               /*  disable PS-TDMA */
-               switch (type) {
-               case 8:
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  Antenna control by PTA, 0x870 = 0x310 */
-                               BTDM_SetFw3a(padapter, 0x8, 0x0, 0x0, 0x0, 0x0);
-                       }
-                       break;
-               case 0:
-               default:
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  Antenna control by PTA, 0x870 = 0x310 */
-                               BTDM_SetFw3a(padapter, 0x0, 0x0, 0x0, 0x8, 0x0);
-                       }
-                       /*  Switch Antenna to BT */
-                       rtl8723au_write16(padapter, 0x860, 0x210);
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 0x860 = 0x210, Switch Antenna to BT\n"));
-                       break;
-               case 9:
-                       if (btdm_Is1AntPsTdmaStateChange(padapter)) {
-                               /*  Antenna control by PTA, 0x870 = 0x310 */
-                               BTDM_SetFw3a(padapter, 0x0, 0x0, 0x0, 0x8, 0x0);
-                       }
-                       /*  Switch Antenna to WiFi */
-                       rtl8723au_write16(padapter, 0x860, 0x110);
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 0x860 = 0x110, Switch Antenna to WiFi\n"));
-                       break;
-               }
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Current TDMA(%s, %d)\n",
-               pBtdm8723->bCurPsTdmaOn?"ON":"OFF", pBtdm8723->curPsTdma));
-
-       /*  update pre state */
-       pBtdm8723->bPrePsTdmaOn = pBtdm8723->bCurPsTdmaOn;
-       pBtdm8723->prePsTdma = pBtdm8723->curPsTdma;
-}
-
-static void
-_btdm_1AntSetPSTDMA(struct rtw_adapter *padapter, u8 bPSEn, u8 smartps,
-                   u8 psOption, u8 bTDMAOn, u8 tdmaType)
-{
-       struct pwrctrl_priv *pwrctrl;
-       struct hal_data_8723a *pHalData;
-       struct btdm_8723a_1ant *pBtdm8723;
-       u8 psMode;
-       u8 bSwitchPS;
-
-       if (!check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) &&
-           (get_fwstate(&padapter->mlmepriv) != WIFI_NULL_STATE)) {
-               btdm_1AntPsTdma(padapter, bTDMAOn, tdmaType);
-               return;
-       }
-       psOption &= ~BIT(0);
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], Set LPS(%s, %d) TDMA(%s, %d)\n",
-               bPSEn == true?"ON":"OFF", psOption,
-               bTDMAOn == true?"ON":"OFF", tdmaType));
-
-       pwrctrl = &padapter->pwrctrlpriv;
-       pHalData = GET_HAL_DATA(padapter);
-       pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-
-       if (bPSEn) {
-               if (pBtdm8723->bWiFiHalt) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Enable PS Fail, WiFi in Halt!!\n"));
-                       return;
-               }
-
-               if (pwrctrl->bInSuspend) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Enable PS Fail, WiFi in Suspend!!\n"));
-                       return;
-               }
-
-               if (padapter->bDriverStopped) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Enable PS Fail, WiFi driver stopped!!\n"));
-                       return;
-               }
-
-               if (padapter->bSurpriseRemoved) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Enable PS Fail, WiFi Surprise Removed!!\n"));
-                       return;
-               }
-
-               psMode = PS_MODE_MIN;
-       } else {
-               psMode = PS_MODE_ACTIVE;
-               psOption = 0;
-       }
-
-       if (psMode != pwrctrl->pwr_mode) {
-               bSwitchPS = true;
-       } else if (psMode != PS_MODE_ACTIVE) {
-               if (psOption != pwrctrl->bcn_ant_mode)
-                       bSwitchPS = true;
-               else if (smartps != pwrctrl->smart_ps)
-                       bSwitchPS = true;
-               else
-                       bSwitchPS = false;
-       } else {
-               bSwitchPS = false;
-       }
-
-       if (bSwitchPS) {
-               /*  disable TDMA */
-               if (pBtdm8723->bCurPsTdmaOn) {
-                       if (!bTDMAOn) {
-                               btdm_1AntPsTdma(padapter, false, tdmaType);
-                       } else {
-                               if (!rtl8723a_BT_enabled(padapter) ||
-                                   (pHalData->bt_coexist.halCoex8723.c2hBtInfo == BT_INFO_STATE_NO_CONNECTION) ||
-                                   (pHalData->bt_coexist.halCoex8723.c2hBtInfo == BT_INFO_STATE_CONNECT_IDLE) ||
-                                   (tdmaType == 29))
-                                       btdm_1AntPsTdma(padapter, false, 9);
-                               else
-                                       btdm_1AntPsTdma(padapter, false, 0);
-                       }
-               }
-
-               /*  change Power Save State */
-               btdm_1AntSetPSMode(padapter, bPSEn, smartps, psOption);
-       }
-
-       btdm_1AntPsTdma(padapter, bTDMAOn, tdmaType);
-}
-
-static void
-btdm_1AntSetPSTDMA(struct rtw_adapter *padapter, u8 bPSEn,
-                  u8 psOption, u8 bTDMAOn, u8 tdmaType)
-{
-       _btdm_1AntSetPSTDMA(padapter, bPSEn, 0, psOption, bTDMAOn, tdmaType);
-}
-
-static void btdm_1AntWifiParaAdjust(struct rtw_adapter *padapter, u8 bEnable)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_1ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-
-       if (bEnable) {
-               pBtdm8723->curWifiPara = 1;
-               if (pBtdm8723->preWifiPara != pBtdm8723->curWifiPara)
-                       BTDM_SetSwPenaltyTxRateAdaptive(padapter, BT_TX_RATE_ADAPTIVE_LOW_PENALTY);
-       } else {
-               pBtdm8723->curWifiPara = 2;
-               if (pBtdm8723->preWifiPara != pBtdm8723->curWifiPara)
-                       BTDM_SetSwPenaltyTxRateAdaptive(padapter, BT_TX_RATE_ADAPTIVE_NORMAL);
-       }
-
-}
-
-static void btdm_1AntPtaParaReload(struct rtw_adapter *padapter)
-{
-       /*  PTA parameter */
-       rtl8723au_write8(padapter, 0x6cc, 0x0);         /*  1-Ant coex */
-       rtl8723au_write32(padapter, 0x6c8, 0xffff);     /*  wifi break table */
-       rtl8723au_write32(padapter, 0x6c4, 0x55555555); /*  coex table */
-
-       /*  Antenna switch control parameter */
-       rtl8723au_write32(padapter, 0x858, 0xaaaaaaaa);
-       if (IS_8723A_A_CUT(GET_HAL_DATA(padapter)->VersionID)) {
-               /*  SPDT(connected with TRSW) control by hardware PTA */
-               rtl8723au_write32(padapter, 0x870, 0x0);
-               rtl8723au_write8(padapter, 0x40, 0x24);
-       } else {
-               rtl8723au_write8(padapter, 0x40, 0x20);
-               /*  set antenna at bt side if ANTSW is software control */
-               rtl8723au_write16(padapter, 0x860, 0x210);
-               /*  SPDT(connected with TRSW) control by hardware PTA */
-               rtl8723au_write32(padapter, 0x870, 0x300);
-               /*  ANTSW keep by GNT_BT */
-               rtl8723au_write32(padapter, 0x874, 0x22804000);
-       }
-
-       /*  coexistence parameters */
-       rtl8723au_write8(padapter, 0x778, 0x1); /*  enable RTK mode PTA */
-
-       /*  BT don't ignore WLAN_Act */
-       btdm_SetFwIgnoreWlanAct(padapter, false);
-}
-
-/*
- * Return
- *1: upgrade (add WiFi duration time)
- *0: keep
- *-1: downgrade (add BT duration time)
- */
-static s8 btdm_1AntTdmaJudgement(struct rtw_adapter *padapter, u8 retry)
-{
-       struct hal_data_8723a *pHalData;
-       struct btdm_8723a_1ant *pBtdm8723;
-       static s8 up, dn, m = 1, WaitCount;
-       s8 ret;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-       ret = 0;
-
-       if (pBtdm8723->psTdmaMonitorCnt == 0) {
-               up = 0;
-               dn = 0;
-               m = 1;
-               WaitCount = 0;
-       } else {
-               WaitCount++;
-       }
-
-       if (retry == 0) {
-       /*  no retry in the last 2-second duration */
-               up++;
-               dn--;
-               if (dn < 0)
-                       dn = 0;
-               if (up >= 3*m) {
-                       /*  retry = 0 in consecutive 3m*(2s), add WiFi duration */
-                       ret = 1;
-                       up = 0;
-                       dn = 0;
-                       WaitCount = 0;
-               }
-       } else if (retry <= 3) {
-               /*  retry<= 3 in the last 2-second duration */
-               up--;
-               dn++;
-               if (up < 0)
-                       up = 0;
-
-               if (dn == 2) {
-                       /*  retry<= 3 in consecutive 2*(2s), minus WiFi duration (add BT duration) */
-                       ret = -1;
-
-                       /*  record how many time downgrad WiFi duration */
-                       if (WaitCount <= 2)
-                               m++;
-                       else
-                               m = 1;
-                       /*  the max number of m is 20 */
-                       /*  the longest time of upgrade WiFi duration is 20*3*2s = 120s */
-                       if (m >= 20)
-                               m = 20;
-                       up = 0;
-                       dn = 0;
-                       WaitCount = 0;
-               }
-       } else {
-               /*  retry count > 3 */
-               /*  retry>3, minus WiFi duration (add BT duration) */
-               ret = -1;
-
-               /*  record how many time downgrad WiFi duration */
-               if (WaitCount == 1)
-                       m++;
-               else
-                       m = 1;
-               if (m >= 20)
-                       m = 20;
-
-               up = 0;
-               dn = 0;
-               WaitCount = 0;
-       }
-       return ret;
-}
-
-static void btdm_1AntTdmaDurationAdjustForACL(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_1ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-
-       if (pBtdm8723->psTdmaGlobalCnt != pBtdm8723->psTdmaMonitorCnt) {
-               pBtdm8723->psTdmaMonitorCnt = 0;
-               pBtdm8723->psTdmaGlobalCnt = 0;
-       }
-       if (pBtdm8723->psTdmaMonitorCnt == 0) {
-               btdm_1AntSetPSTDMA(padapter, true, 0, true, 2);
-               pBtdm8723->psTdmaDuAdjType = 2;
-       } else {
-               /*  Now we only have 4 level Ps Tdma, */
-               /*  if that's not the following 4 level(will changed by wifi scan, dhcp...), */
-               /*  then we have to adjust it back to the previous record one. */
-               if ((pBtdm8723->curPsTdma != 1) &&
-                   (pBtdm8723->curPsTdma != 2) &&
-                   (pBtdm8723->curPsTdma != 9) &&
-                   (pBtdm8723->curPsTdma != 11)) {
-                       btdm_1AntSetPSTDMA(padapter, true, 0, true, pBtdm8723->psTdmaDuAdjType);
-               } else {
-                       s32 judge;
-
-                       judge = btdm_1AntTdmaJudgement(padapter, pHalData->bt_coexist.halCoex8723.btRetryCnt);
-                       if (judge == -1) {
-                               if (pBtdm8723->curPsTdma == 1) {
-                                       /*  Decrease WiFi duration for high BT retry */
-                                       if (pHalData->bt_coexist.halCoex8723.btInfoExt)
-                                               pBtdm8723->psTdmaDuAdjType = 9;
-                                       else
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, pBtdm8723->psTdmaDuAdjType);
-                               } else if (pBtdm8723->curPsTdma == 2) {
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, 9);
-                                       pBtdm8723->psTdmaDuAdjType = 9;
-                               } else if (pBtdm8723->curPsTdma == 9) {
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               }
-                       } else if (judge == 1) {
-                               if (pBtdm8723->curPsTdma == 11) {
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, 9);
-                                       pBtdm8723->psTdmaDuAdjType = 9;
-                               } else if (pBtdm8723->curPsTdma == 9) {
-                                       if (pHalData->bt_coexist.halCoex8723.btInfoExt)
-                                               pBtdm8723->psTdmaDuAdjType = 9;
-                                       else
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, pBtdm8723->psTdmaDuAdjType);
-                               } else if (pBtdm8723->curPsTdma == 2) {
-                                       if (pHalData->bt_coexist.halCoex8723.btInfoExt)
-                                               pBtdm8723->psTdmaDuAdjType = 9;
-                                       else
-                                               pBtdm8723->psTdmaDuAdjType = 1;
-                                       btdm_1AntSetPSTDMA(padapter, true, 0, true, pBtdm8723->psTdmaDuAdjType);
-                               }
-                       }
-               }
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], ACL current TDMA(%s, %d)\n",
-                       (pBtdm8723->bCurPsTdmaOn ? "ON" : "OFF"), pBtdm8723->curPsTdma));
-       }
-       pBtdm8723->psTdmaMonitorCnt++;
-}
-
-static void btdm_1AntCoexProcessForWifiConnect(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv;
-       struct hal_data_8723a *pHalData;
-       struct bt_coexist_8723a *pBtCoex;
-       struct btdm_8723a_1ant *pBtdm8723;
-       u8 BtState;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pHalData = GET_HAL_DATA(padapter);
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-       pBtdm8723 = &pBtCoex->btdm1Ant;
-       BtState = pBtCoex->c2hBtInfo;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], WiFi is %s\n",
-                               BTDM_IsWifiBusy(padapter)?"Busy":"IDLE"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT is %s\n",
-                               BtStateString[BtState]));
-
-       padapter->pwrctrlpriv.btcoex_rfon = false;
-
-       if (!BTDM_IsWifiBusy(padapter) &&
-           !check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) &&
-           (BtState == BT_INFO_STATE_NO_CONNECTION ||
-            BtState == BT_INFO_STATE_CONNECT_IDLE)) {
-               switch (BtState) {
-               case BT_INFO_STATE_NO_CONNECTION:
-                       _btdm_1AntSetPSTDMA(padapter, true, 2, 0x26, false, 9);
-                       break;
-               case BT_INFO_STATE_CONNECT_IDLE:
-                       _btdm_1AntSetPSTDMA(padapter, true, 2, 0x26, false, 0);
-                       break;
-               }
-       } else {
-               switch (BtState) {
-               case BT_INFO_STATE_NO_CONNECTION:
-               case BT_INFO_STATE_CONNECT_IDLE:
-                       /*  WiFi is Busy */
-                       btdm_1AntSetPSTDMA(padapter, false, 0, true, 5);
-                       rtl8723au_write32(padapter, 0x6c0, 0x5a5a5a5a);
-                       rtl8723au_write32(padapter, 0x6c4, 0x5a5a5a5a);
-                       break;
-               case BT_INFO_STATE_ACL_INQ_OR_PAG:
-                       RTPRINT(FBT, BT_TRACE,
-                               ("[BTCoex], BT PROFILE is "
-                                "BT_INFO_STATE_ACL_INQ_OR_PAG\n"));
-               case BT_INFO_STATE_INQ_OR_PAG:
-                       padapter->pwrctrlpriv.btcoex_rfon = true;
-                       btdm_1AntSetPSTDMA(padapter, true, 0, true, 30);
-                       break;
-               case BT_INFO_STATE_SCO_ONLY_BUSY:
-               case BT_INFO_STATE_ACL_SCO_BUSY:
-                       if (true == pBtCoex->bC2hBtInquiryPage)
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  true, 32);
-                       else {
-#ifdef BTCOEX_CMCC_TEST
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  true, 23);
-#else /*  !BTCOEX_CMCC_TEST */
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  false, 8);
-                               rtl8723au_write32(padapter, 0x6c0, 0x5a5a5a5a);
-                               rtl8723au_write32(padapter, 0x6c4, 0x5a5a5a5a);
-#endif /*  !BTCOEX_CMCC_TEST */
-                       }
-                       break;
-               case BT_INFO_STATE_ACL_ONLY_BUSY:
-                       padapter->pwrctrlpriv.btcoex_rfon = true;
-                       if (pBtCoex->c2hBtProfile == BT_INFO_HID) {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], BT PROFILE is HID\n"));
-                               btdm_1AntSetPSTDMA(padapter, true, 0, true, 31);
-                       } else if (pBtCoex->c2hBtProfile == BT_INFO_FTP) {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], BT PROFILE is FTP/OPP\n"));
-                               btdm_1AntSetPSTDMA(padapter, true, 0, true, 3);
-                       } else if (pBtCoex->c2hBtProfile == (BT_INFO_A2DP|BT_INFO_FTP)) {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], BT PROFILE is A2DP_FTP\n"));
-                               btdm_1AntSetPSTDMA(padapter, true, 0, true, 11);
-                       } else {
-                               if (pBtCoex->c2hBtProfile == BT_INFO_A2DP)
-                                       RTPRINT(FBT, BT_TRACE,
-                                               ("[BTCoex], BT PROFILE is "
-                                                "A2DP\n"));
-                               else
-                                       RTPRINT(FBT, BT_TRACE,
-                                               ("[BTCoex], BT PROFILE is "
-                                                "UNKNOWN(0x%02X)! Use A2DP "
-                                                "Profile\n",
-                                                pBtCoex->c2hBtProfile));
-                               btdm_1AntTdmaDurationAdjustForACL(padapter);
-                       }
-                       break;
-               }
-       }
-
-       pBtdm8723->psTdmaGlobalCnt++;
-}
-
-static void
-btdm_1AntUpdateHalRAMask(struct rtw_adapter *padapter, u32 mac_id, u32 filter)
-{
-       u8 init_rate = 0;
-       u8 raid, arg;
-       u32 mask;
-       u8 shortGIrate = false;
-       int supportRateNum = 0;
-       struct sta_info *psta;
-       struct hal_data_8723a *pHalData;
-       struct dm_priv *pdmpriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info *pmlmeinfo;
-       struct wlan_bssid_ex *cur_network;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], %s, MACID =%d, filter = 0x%08x!!\n",
-                               __func__, mac_id, filter));
-
-       pHalData = GET_HAL_DATA(padapter);
-       pdmpriv = &pHalData->dmpriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-       cur_network = &pmlmeinfo->network;
-
-       if (mac_id >= NUM_STA) { /* CAM_SIZE */
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], %s, MACID =%d illegal!!\n",
-                                       __func__, mac_id));
-               return;
-       }
-
-       psta = pmlmeinfo->FW_sta_info[mac_id].psta;
-       if (!psta) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], %s, Can't find station!!\n",
-                                       __func__));
-               return;
-       }
-
-       raid = psta->raid;
-
-       switch (mac_id) {
-       case 0:/*  for infra mode */
-               supportRateNum =
-                       rtw_get_rateset_len23a(cur_network->SupportedRates);
-               mask = update_supported_rate23a(cur_network->SupportedRates,
-                                               supportRateNum);
-               mask |= (pmlmeinfo->HT_enable) ?
-                       update_MSC_rate23a(&pmlmeinfo->ht_cap):0;
-               if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
-                       shortGIrate = true;
-               break;
-       case 1:/* for broadcast/multicast */
-               supportRateNum = rtw_get_rateset_len23a(
-                       pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
-               mask = update_basic_rate23a(cur_network->SupportedRates,
-                                           supportRateNum);
-               break;
-       default: /* for each sta in IBSS */
-               supportRateNum = rtw_get_rateset_len23a(
-                       pmlmeinfo->FW_sta_info[mac_id].SupportedRates);
-               mask = update_supported_rate23a(cur_network->SupportedRates,
-                                               supportRateNum);
-               break;
-       }
-       mask |= ((raid<<28)&0xf0000000);
-       mask &= 0xffffffff;
-       mask &= ~filter;
-       init_rate = get_highest_rate_idx23a(mask)&0x3f;
-
-       arg = mac_id&0x1f;/* MACID */
-       arg |= BIT(7);
-       if (true == shortGIrate)
-               arg |= BIT(5);
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], Update FW RAID entry, MASK = 0x%08x, "
-                "arg = 0x%02x\n", mask, arg));
-
-       rtl8723a_set_raid_cmd(padapter, mask, arg);
-
-       psta->init_rate = init_rate;
-       pdmpriv->INIDATA_RATE[mac_id] = init_rate;
-}
-
-static void
-btdm_1AntUpdateHalRAMaskForSCO(struct rtw_adapter *padapter, u8 forceUpdate)
-{
-       struct btdm_8723a_1ant *pBtdm8723;
-       struct sta_priv *pstapriv;
-       struct wlan_bssid_ex *cur_network;
-       struct sta_info *psta;
-       u32 macid;
-       u32 filter = 0;
-
-       pBtdm8723 = &GET_HAL_DATA(padapter)->bt_coexist.halCoex8723.btdm1Ant;
-
-       if (pBtdm8723->bRAChanged == true && forceUpdate == false)
-               return;
-
-       pstapriv = &padapter->stapriv;
-       cur_network = &padapter->mlmeextpriv.mlmext_info.network;
-       psta = rtw_get_stainfo23a(pstapriv, cur_network->MacAddress);
-       macid = psta->mac_id;
-
-       filter |= BIT(_1M_RATE_);
-       filter |= BIT(_2M_RATE_);
-       filter |= BIT(_5M_RATE_);
-       filter |= BIT(_11M_RATE_);
-       filter |= BIT(_6M_RATE_);
-       filter |= BIT(_9M_RATE_);
-
-       btdm_1AntUpdateHalRAMask(padapter, macid, filter);
-
-       pBtdm8723->bRAChanged = true;
-}
-
-static void btdm_1AntRecoverHalRAMask(struct rtw_adapter *padapter)
-{
-       struct btdm_8723a_1ant *pBtdm8723;
-       struct sta_priv *pstapriv;
-       struct wlan_bssid_ex *cur_network;
-       struct sta_info *psta;
-
-       pBtdm8723 = &GET_HAL_DATA(padapter)->bt_coexist.halCoex8723.btdm1Ant;
-
-       if (pBtdm8723->bRAChanged == false)
-               return;
-
-       pstapriv = &padapter->stapriv;
-       cur_network = &padapter->mlmeextpriv.mlmext_info.network;
-       psta = rtw_get_stainfo23a(pstapriv, cur_network->MacAddress);
-
-       Update_RA_Entry23a(padapter, psta);
-
-       pBtdm8723->bRAChanged = false;
-}
-
-static void
-btdm_1AntBTStateChangeHandler(struct rtw_adapter *padapter,
-                             enum bt_state_1ant oldState,
-                             enum bt_state_1ant newState)
-{
-       struct hal_data_8723a *phaldata;
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT state change, %s => %s\n",
-                               BtStateString[oldState],
-                               BtStateString[newState]));
-
-       /*  BT default ignore wlan active, */
-       /*  WiFi MUST disable this when BT is enable */
-       if (newState > BT_INFO_STATE_DISABLED)
-               btdm_SetFwIgnoreWlanAct(padapter, false);
-
-       if ((check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE)) &&
-           (BTDM_IsWifiConnectionExist(padapter))) {
-               if ((newState == BT_INFO_STATE_SCO_ONLY_BUSY) ||
-                   (newState == BT_INFO_STATE_ACL_SCO_BUSY)) {
-                       btdm_1AntUpdateHalRAMaskForSCO(padapter, false);
-               } else {
-                       /*  Recover original RA setting */
-                       btdm_1AntRecoverHalRAMask(padapter);
-               }
-       } else {
-               phaldata = GET_HAL_DATA(padapter);
-               phaldata->bt_coexist.halCoex8723.btdm1Ant.bRAChanged = false;
-       }
-
-       if (oldState == newState)
-               return;
-
-       if (oldState == BT_INFO_STATE_ACL_ONLY_BUSY) {
-               struct hal_data_8723a *Hal = GET_HAL_DATA(padapter);
-               Hal->bt_coexist.halCoex8723.btdm1Ant.psTdmaMonitorCnt = 0;
-               Hal->bt_coexist.halCoex8723.btdm1Ant.psTdmaMonitorCntForSCO = 0;
-       }
-
-       if ((oldState == BT_INFO_STATE_SCO_ONLY_BUSY) ||
-           (oldState == BT_INFO_STATE_ACL_SCO_BUSY)) {
-               struct hal_data_8723a *Hal = GET_HAL_DATA(padapter);
-               Hal->bt_coexist.halCoex8723.btdm1Ant.psTdmaMonitorCntForSCO = 0;
-       }
-
-       /*  Active 2Ant mechanism when BT Connected */
-       if ((oldState == BT_INFO_STATE_DISABLED) ||
-           (oldState == BT_INFO_STATE_NO_CONNECTION)) {
-               if ((newState != BT_INFO_STATE_DISABLED) &&
-                   (newState != BT_INFO_STATE_NO_CONNECTION)) {
-                       BTDM_SetSwRfRxLpfCorner(padapter,
-                                               BT_RF_RX_LPF_CORNER_SHRINK);
-                       BTDM_AGCTable(padapter, BT_AGCTABLE_ON);
-                       BTDM_BBBackOffLevel(padapter, BT_BB_BACKOFF_ON);
-               }
-       } else {
-               if ((newState == BT_INFO_STATE_DISABLED) ||
-                   (newState == BT_INFO_STATE_NO_CONNECTION)) {
-                       BTDM_SetSwRfRxLpfCorner(padapter,
-                                               BT_RF_RX_LPF_CORNER_RESUME);
-                       BTDM_AGCTable(padapter, BT_AGCTABLE_OFF);
-                       BTDM_BBBackOffLevel(padapter, BT_BB_BACKOFF_OFF);
-               }
-       }
-}
-
-static void btdm_1AntBtCoexistHandler(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_coexist_8723a *pBtCoex8723;
-       struct btdm_8723a_1ant *pBtdm8723;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtCoex8723 = &pHalData->bt_coexist.halCoex8723;
-       pBtdm8723 = &pBtCoex8723->btdm1Ant;
-       padapter->pwrctrlpriv.btcoex_rfon = false;
-       if (!rtl8723a_BT_enabled(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT is disabled\n"));
-
-               if (BTDM_IsWifiConnectionExist(padapter)) {
-                       RTPRINT(FBT, BT_TRACE,
-                               ("[BTCoex], wifi is connected\n"));
-
-                       if (BTDM_IsWifiBusy(padapter)) {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], Wifi is busy\n"));
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  false, 9);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], Wifi is idle\n"));
-                               _btdm_1AntSetPSTDMA(padapter, true, 2, 1,
-                                                   false, 9);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE,
-                               ("[BTCoex], wifi is disconnected\n"));
-
-                       btdm_1AntSetPSTDMA(padapter, false, 0, false, 9);
-               }
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT is enabled\n"));
-
-               if (BTDM_IsWifiConnectionExist(padapter)) {
-                       RTPRINT(FBT, BT_TRACE,
-                               ("[BTCoex], wifi is connected\n"));
-
-                       btdm_1AntWifiParaAdjust(padapter, true);
-                       btdm_1AntCoexProcessForWifiConnect(padapter);
-               } else {
-                       RTPRINT(FBT, BT_TRACE,
-                               ("[BTCoex], wifi is disconnected\n"));
-
-                       /*  Antenna switch at BT side(0x870 = 0x300,
-                           0x860 = 0x210) after PSTDMA off */
-                       btdm_1AntWifiParaAdjust(padapter, false);
-                       btdm_1AntSetPSTDMA(padapter, false, 0, false, 0);
-               }
-       }
-
-       btdm_1AntBTStateChangeHandler(padapter, pBtCoex8723->prec2hBtInfo,
-                                     pBtCoex8723->c2hBtInfo);
-       pBtCoex8723->prec2hBtInfo = pBtCoex8723->c2hBtInfo;
-}
-
-void BTDM_1AntSignalCompensation(struct rtw_adapter *padapter,
-                                u8 *rssi_wifi, u8 *rssi_bt)
-{
-       struct hal_data_8723a *pHalData;
-       struct btdm_8723a_1ant *pBtdm8723;
-       u8 RSSI_WiFi_Cmpnstn, RSSI_BT_Cmpnstn;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm1Ant;
-       RSSI_WiFi_Cmpnstn = 0;
-       RSSI_BT_Cmpnstn = 0;
-
-       switch (pBtdm8723->curPsTdma) {
-       case 1: /*  WiFi 52ms */
-               RSSI_WiFi_Cmpnstn = 11; /*  22*0.48 */
-               break;
-       case 2: /*  WiFi 36ms */
-               RSSI_WiFi_Cmpnstn = 14; /*  22*0.64 */
-               break;
-       case 9: /*  WiFi 20ms */
-               RSSI_WiFi_Cmpnstn = 18; /*  22*0.80 */
-               break;
-       case 11: /*  WiFi 10ms */
-               RSSI_WiFi_Cmpnstn = 20; /*  22*0.90 */
-               break;
-       case 4: /*  WiFi 21ms */
-               RSSI_WiFi_Cmpnstn = 17; /*  22*0.79 */
-               break;
-       case 16: /*  WiFi 24ms */
-               RSSI_WiFi_Cmpnstn = 18; /*  22*0.76 */
-               break;
-       case 18: /*  WiFi 37ms */
-               RSSI_WiFi_Cmpnstn = 14; /*  22*0.64 */
-               break;
-       case 23: /* Level-1, Antenna switch to BT at all time */
-       case 24: /* Level-2, Antenna switch to BT at all time */
-       case 25: /* Level-3a, Antenna switch to BT at all time */
-       case 26: /* Level-3b, Antenna switch to BT at all time */
-       case 27: /* Level-3b, Antenna switch to BT at all time */
-       case 33: /* BT SCO & WiFi site survey */
-               RSSI_WiFi_Cmpnstn = 22;
-               break;
-       default:
-               break;
-       }
-
-       if (rssi_wifi && RSSI_WiFi_Cmpnstn) {
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], 1AntSgnlCmpnstn, case %d, WiFiCmpnstn "
-                        "=%d(%d => %d)\n", pBtdm8723->curPsTdma,
-                        RSSI_WiFi_Cmpnstn, *rssi_wifi,
-                        *rssi_wifi+RSSI_WiFi_Cmpnstn));
-               *rssi_wifi += RSSI_WiFi_Cmpnstn;
-       }
-
-       if (rssi_bt && RSSI_BT_Cmpnstn) {
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], 1AntSgnlCmpnstn, case %d, BTCmpnstn "
-                        "=%d(%d => %d)\n", pBtdm8723->curPsTdma,
-                        RSSI_BT_Cmpnstn, *rssi_bt, *rssi_bt+RSSI_BT_Cmpnstn));
-               *rssi_bt += RSSI_BT_Cmpnstn;
-       }
-}
-
-static void BTDM_1AntParaInit(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_coexist_8723a *pBtCoex;
-       struct btdm_8723a_1ant *pBtdm8723;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-       pBtdm8723 = &pBtCoex->btdm1Ant;
-
-       /*  Enable counter statistics */
-       rtl8723au_write8(padapter, 0x76e, 0x4);
-       btdm_1AntPtaParaReload(padapter);
-
-       pBtdm8723->wifiRssiThresh = 48;
-
-       pBtdm8723->bWiFiHalt = false;
-       pBtdm8723->bRAChanged = false;
-
-       if ((pBtCoex->c2hBtInfo != BT_INFO_STATE_DISABLED) &&
-           (pBtCoex->c2hBtInfo != BT_INFO_STATE_NO_CONNECTION)) {
-               BTDM_SetSwRfRxLpfCorner(padapter, BT_RF_RX_LPF_CORNER_SHRINK);
-               BTDM_AGCTable(padapter, BT_AGCTABLE_ON);
-               BTDM_BBBackOffLevel(padapter, BT_BB_BACKOFF_ON);
-       }
-}
-
-static void BTDM_1AntForHalt(struct rtw_adapter *padapter)
-{
-       RTPRINT(FBT, BT_TRACE, ("\n[BTCoex], 1Ant for halt\n"));
-
-       GET_HAL_DATA(padapter)->bt_coexist.halCoex8723.btdm1Ant.bWiFiHalt =
-               true;
-
-       btdm_1AntWifiParaAdjust(padapter, false);
-
-       /*  don't use btdm_1AntSetPSTDMA() here */
-       /*  it will call rtw_set_ps_mode23a() and request pwrpriv->lock. */
-       /*  This will lead to deadlock, if this function is called in IPS */
-       /*  Lucas@20130205 */
-       btdm_1AntPsTdma(padapter, false, 0);
-
-       btdm_SetFwIgnoreWlanAct(padapter, true);
-}
-
-static void BTDM_1AntLpsLeave(struct rtw_adapter *padapter)
-{
-       RTPRINT(FBT, BT_TRACE, ("\n[BTCoex], 1Ant for LPS Leave\n"));
-
-       /*  Prevent from entering LPS again */
-       GET_HAL_DATA(padapter)->bt_coexist.halCoex8723.btdm1Ant.bWiFiHalt =
-               true;
-
-       btdm_1AntSetPSTDMA(padapter, false, 0, false, 8);
-/*btdm_1AntPsTdma(padapter, false, 8); */
-}
-
-static void BTDM_1AntWifiAssociateNotify(struct rtw_adapter *padapter, u8 type)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       RTPRINT(FBT, BT_TRACE,
-               ("\n[BTCoex], 1Ant for associate, type =%d\n", type));
-
-       if (type) {
-               rtl8723a_CheckAntenna_Selection(padapter);
-               if (!rtl8723a_BT_enabled(padapter))
-                       btdm_1AntSetPSTDMA(padapter, false, 0, false, 9);
-               else {
-                       struct bt_coexist_8723a *pBtCoex;
-                       u8 BtState;
-
-                       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-                       BtState = pBtCoex->c2hBtInfo;
-
-                       btdm_1AntTSFSwitch(padapter, true);
-
-                       if (BtState == BT_INFO_STATE_NO_CONNECTION ||
-                           BtState == BT_INFO_STATE_CONNECT_IDLE) {
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  true, 28);
-                       } else if (BtState == BT_INFO_STATE_SCO_ONLY_BUSY ||
-                                  BtState == BT_INFO_STATE_ACL_SCO_BUSY) {
-                               btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                  false, 8);
-                               rtl8723au_write32(padapter, 0x6c0, 0x5a5a5a5a);
-                               rtl8723au_write32(padapter, 0x6c4, 0x5a5a5a5a);
-                       } else if (BtState == BT_INFO_STATE_ACL_ONLY_BUSY ||
-                                  BtState == BT_INFO_STATE_ACL_INQ_OR_PAG) {
-                               if (pBtCoex->c2hBtProfile == BT_INFO_HID)
-                                       btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                          true, 35);
-                               else
-                                       btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                          true, 29);
-                       }
-               }
-       } else {
-               if (!rtl8723a_BT_enabled(padapter)) {
-                       if (!BTDM_IsWifiConnectionExist(padapter)) {
-                               btdm_1AntPsTdma(padapter, false, 0);
-                               btdm_1AntTSFSwitch(padapter, false);
-                       }
-               }
-
-               btdm_1AntBtCoexistHandler(padapter);
-       }
-}
-
-static void
-BTDM_1AntMediaStatusNotify(struct rtw_adapter *padapter,
-                          enum rt_media_status mstatus)
-{
-       struct bt_coexist_8723a *pBtCoex;
-
-       pBtCoex = &GET_HAL_DATA(padapter)->bt_coexist.halCoex8723;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("\n\n[BTCoex]******************************\n"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], MediaStatus, WiFi %s !!\n",
-                       mstatus == RT_MEDIA_CONNECT?"CONNECT":"DISCONNECT"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex]******************************\n"));
-
-       if (RT_MEDIA_CONNECT == mstatus) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE)) {
-                       if (pBtCoex->c2hBtInfo == BT_INFO_STATE_SCO_ONLY_BUSY ||
-                           pBtCoex->c2hBtInfo == BT_INFO_STATE_ACL_SCO_BUSY)
-                               btdm_1AntUpdateHalRAMaskForSCO(padapter, true);
-               }
-
-               padapter->pwrctrlpriv.DelayLPSLastTimeStamp = jiffies;
-               BTDM_1AntForDhcp(padapter);
-       } else {
-               /* DBG_8723A("%s rtl8723a_DeinitAntenna_Selection\n",
-                  __func__); */
-               rtl8723a_DeinitAntenna_Selection(padapter);
-               btdm_1AntBtCoexistHandler(padapter);
-               pBtCoex->btdm1Ant.bRAChanged = false;
-       }
-}
-
-void BTDM_1AntForDhcp(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       u8 BtState;
-       struct bt_coexist_8723a *pBtCoex;
-       struct btdm_8723a_1ant *pBtdm8723;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-       BtState = pBtCoex->c2hBtInfo;
-       pBtdm8723 = &pBtCoex->btdm1Ant;
-
-       RTPRINT(FBT, BT_TRACE, ("\n[BTCoex], 1Ant for DHCP\n"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1Ant for DHCP, WiFi is %s\n",
-                               BTDM_IsWifiBusy(padapter)?"Busy":"IDLE"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1Ant for DHCP, %s\n",
-                               BtStateString[BtState]));
-
-       BTDM_1AntWifiAssociateNotify(padapter, true);
-}
-
-static void BTDM_1AntWifiScanNotify(struct rtw_adapter *padapter, u8 scanType)
-{
-       struct hal_data_8723a *pHalData;
-       u8 BtState;
-       struct bt_coexist_8723a *pBtCoex;
-       struct btdm_8723a_1ant *pBtdm8723;
-
-       pHalData = GET_HAL_DATA(padapter);
-       BtState = pHalData->bt_coexist.halCoex8723.c2hBtInfo;
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-       pBtdm8723 = &pBtCoex->btdm1Ant;
-
-       RTPRINT(FBT, BT_TRACE, ("\n[BTCoex], 1Ant for wifi scan =%d!!\n",
-                               scanType));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1Ant for wifi scan, WiFi is %s\n",
-                               BTDM_IsWifiBusy(padapter)?"Busy":"IDLE"));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1Ant for wifi scan, %s\n",
-                               BtStateString[BtState]));
-
-       if (scanType) {
-               rtl8723a_CheckAntenna_Selection(padapter);
-               if (!rtl8723a_BT_enabled(padapter)) {
-                       btdm_1AntSetPSTDMA(padapter, false, 0, false, 9);
-               } else if (BTDM_IsWifiConnectionExist(padapter) == false) {
-                       BTDM_1AntWifiAssociateNotify(padapter, true);
-               } else {
-                       if ((BtState == BT_INFO_STATE_SCO_ONLY_BUSY) ||
-                           (BtState == BT_INFO_STATE_ACL_SCO_BUSY)) {
-                               if (pBtCoex->bC2hBtInquiryPage) {
-                                       btdm_1AntSetPSTDMA(padapter, false, 0,
-                                                          true, 32);
-                               } else {
-                                       padapter->pwrctrlpriv.btcoex_rfon =
-                                               true;
-                                       btdm_1AntSetPSTDMA(padapter, true, 0,
-                                                          true, 33);
-                               }
-                       } else if (true == pBtCoex->bC2hBtInquiryPage) {
-                               padapter->pwrctrlpriv.btcoex_rfon = true;
-                               btdm_1AntSetPSTDMA(padapter, true, 0, true, 30);
-                       } else if (BtState == BT_INFO_STATE_ACL_ONLY_BUSY) {
-                               padapter->pwrctrlpriv.btcoex_rfon = true;
-                               if (pBtCoex->c2hBtProfile == BT_INFO_HID)
-                                       btdm_1AntSetPSTDMA(padapter, true, 0,
-                                                          true, 34);
-                               else
-                                       btdm_1AntSetPSTDMA(padapter, true, 0,
-                                                          true, 4);
-                       } else {
-                               padapter->pwrctrlpriv.btcoex_rfon = true;
-                               btdm_1AntSetPSTDMA(padapter, true, 0, true, 5);
-                       }
-               }
-
-               btdm_NotifyFwScan(padapter, 1);
-       } else {
-               /*  WiFi_Finish_Scan */
-               btdm_NotifyFwScan(padapter, 0);
-               btdm_1AntBtCoexistHandler(padapter);
-       }
-}
-
-static void BTDM_1AntFwC2hBtInfo8723A(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_coexist_8723a *pBtCoex;
-       u8 u1tmp, btState;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       u1tmp = pBtCoex->c2hBtInfoOriginal;
-       /*  sco BUSY bit is not used on voice over PCM platform */
-       btState = u1tmp & 0xF;
-       pBtCoex->c2hBtProfile = u1tmp & 0xE0;
-
-       /*  default set bt to idle state. */
-       pBtMgnt->ExtConfig.bBTBusy = false;
-       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_IDLE;
-
-       /*  check BIT2 first ==> check if bt is under inquiry or page scan */
-       if (btState & BIT(2))
-               pBtCoex->bC2hBtInquiryPage = true;
-       else
-               pBtCoex->bC2hBtInquiryPage = false;
-       btState &= ~BIT(2);
-
-       if (!(btState & BIT(0)))
-               pBtCoex->c2hBtInfo = BT_INFO_STATE_NO_CONNECTION;
-       else {
-               if (btState == 0x1)
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_CONNECT_IDLE;
-               else if (btState == 0x9) {
-                       if (pBtCoex->bC2hBtInquiryPage == true)
-                               pBtCoex->c2hBtInfo =
-                                       BT_INFO_STATE_ACL_INQ_OR_PAG;
-                       else
-                               pBtCoex->c2hBtInfo =
-                                       BT_INFO_STATE_ACL_ONLY_BUSY;
-                       pBtMgnt->ExtConfig.bBTBusy = true;
-               } else if (btState == 0x3) {
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_SCO_ONLY_BUSY;
-                       pBtMgnt->ExtConfig.bBTBusy = true;
-               } else if (btState == 0xb) {
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_ACL_SCO_BUSY;
-                       pBtMgnt->ExtConfig.bBTBusy = true;
-               } else
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_MAX;
-               if (pBtMgnt->ExtConfig.bBTBusy)
-                       pHalData->bt_coexist.CurrentState &=
-                               ~BT_COEX_STATE_BT_IDLE;
-       }
-
-       if (BT_INFO_STATE_NO_CONNECTION == pBtCoex->c2hBtInfo ||
-           BT_INFO_STATE_CONNECT_IDLE == pBtCoex->c2hBtInfo) {
-               if (pBtCoex->bC2hBtInquiryPage)
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_INQ_OR_PAG;
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[BTC2H], %s(%d)\n",
-                       BtStateString[pBtCoex->c2hBtInfo], pBtCoex->c2hBtInfo));
-
-       if (pBtCoex->c2hBtProfile != BT_INFO_HID)
-               pBtCoex->c2hBtProfile &= ~BT_INFO_HID;
-}
-
-void BTDM_1AntBtCoexist8723A(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv;
-       struct hal_data_8723a *pHalData;
-       unsigned long delta_time;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pHalData = GET_HAL_DATA(padapter);
-
-       if (check_fwstate(pmlmepriv, WIFI_SITE_MONITOR)) {
-               /*  already done in BTDM_1AntForScan() */
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], wifi is under scan progress!!\n"));
-               return;
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_UNDER_LINKING)) {
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], wifi is under link progress!!\n"));
-               return;
-       }
-
-       /*  under DHCP(Special packet) */
-       delta_time = jiffies - padapter->pwrctrlpriv.DelayLPSLastTimeStamp;
-       delta_time = jiffies_to_msecs(delta_time);
-       if (delta_time < 500) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], wifi is under DHCP "
-                                       "progress(%li ms)!!\n", delta_time));
-               return;
-       }
-
-       BTDM_CheckWiFiState(padapter);
-
-       btdm_1AntBtCoexistHandler(padapter);
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.c ===== */
-
-/*  local function start with btdm_ */
-static u8 btdm_ActionAlgorithm(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-       u8 bScoExist = false, bBtLinkExist = false, bBtHsModeExist = false;
-       u8 algorithm = BT_2ANT_COEX_ALGO_UNDEFINED;
-
-       if (pBtMgnt->ExtConfig.NumberOfHandle)
-               bBtLinkExist = true;
-       if (pBtMgnt->ExtConfig.NumberOfSCO)
-               bScoExist = true;
-       if (BT_HsConnectionEstablished(padapter))
-               bBtHsModeExist = true;
-
-       /*  here we get BT status first */
-       /*  1) initialize */
-       pBtdm8723->btStatus = BT_2ANT_BT_STATUS_IDLE;
-
-       if ((bScoExist) || (bBtHsModeExist) ||
-           (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID))) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO or HID or HS exists, set BT non-idle !!!\n"));
-               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_NON_IDLE;
-       } else {
-               /*  A2dp profile */
-               if ((pBtMgnt->ExtConfig.NumberOfHandle == 1) &&
-                   (BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP))) {
-                       if (BTDM_BtTxRxCounterL(padapter) < 100) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP, low priority tx+rx < 100, set BT connected-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP, low priority tx+rx >= 100, set BT non-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_NON_IDLE;
-                       }
-               }
-               /*  Pan profile */
-               if ((pBtMgnt->ExtConfig.NumberOfHandle == 1) &&
-                   (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN))) {
-                       if (BTDM_BtTxRxCounterL(padapter) < 600) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN, low priority tx+rx < 600, set BT connected-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-                       } else {
-                               if (pHalData->bt_coexist.halCoex8723.lowPriorityTx) {
-                                       if ((pHalData->bt_coexist.halCoex8723.lowPriorityRx /
-                                           pHalData->bt_coexist.halCoex8723.lowPriorityTx) > 9) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN, low priority rx/tx > 9, set BT connected-idle!!!\n"));
-                                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-                                       }
-                               }
-                       }
-                       if (BT_2ANT_BT_STATUS_CONNECTED_IDLE != pBtdm8723->btStatus) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN, set BT non-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_NON_IDLE;
-                       }
-               }
-               /*  Pan+A2dp profile */
-               if ((pBtMgnt->ExtConfig.NumberOfHandle == 2) &&
-                   (BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) &&
-                   (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN))) {
-                       if (BTDM_BtTxRxCounterL(padapter) < 600) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN+A2DP, low priority tx+rx < 600, set BT connected-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-                       } else {
-                               if (pHalData->bt_coexist.halCoex8723.lowPriorityTx) {
-                                       if ((pHalData->bt_coexist.halCoex8723.lowPriorityRx /
-                                           pHalData->bt_coexist.halCoex8723.lowPriorityTx) > 9) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN+A2DP, low priority rx/tx > 9, set BT connected-idle!!!\n"));
-                                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-                                       }
-                               }
-                       }
-                       if (BT_2ANT_BT_STATUS_CONNECTED_IDLE != pBtdm8723->btStatus) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN+A2DP, set BT non-idle!!!\n"));
-                               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_NON_IDLE;
-                       }
-               }
-       }
-       if (BT_2ANT_BT_STATUS_IDLE != pBtdm8723->btStatus)
-               pBtMgnt->ExtConfig.bBTBusy = true;
-       else
-               pBtMgnt->ExtConfig.bBTBusy = false;
-
-       if (!bBtLinkExist) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], No profile exists!!!\n"));
-               return algorithm;
-       }
-
-       if (pBtMgnt->ExtConfig.NumberOfHandle == 1) {
-               if (bScoExist) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO only\n"));
-                       algorithm = BT_2ANT_COEX_ALGO_SCO;
-               } else {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID only\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_HID;
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP only\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_A2DP;
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN(HS) only\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANHS;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN(EDR) only\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR;
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! NO matched profile for NumberOfHandle =%d \n",
-                               pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               }
-       } else if (pBtMgnt->ExtConfig.NumberOfHandle == 2) {
-               if (bScoExist) {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + HID\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_HID;
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + A2DP\n"));
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_SCO;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO exists but why NO matched ACL profile for NumberOfHandle =%d\n",
-                               pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               } else {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-               } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                          BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                               }
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) &&
-                                  BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_A2DP;
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! NO matched profile for NumberOfHandle =%d\n",
-                                       pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               }
-       } else if (pBtMgnt->ExtConfig.NumberOfHandle == 3) {
-               if (bScoExist) {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP\n"));
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                                  BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + HID + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + HID + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                               }
-                       } else if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) &&
-                                  BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + A2DP + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_SCO;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + A2DP + PAN(EDR)\n"));
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO exists but why NO matched profile for NumberOfHandle =%d\n",
-                                       pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               } else {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP_PANHS;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! NO matched profile for NumberOfHandle =%d\n",
-                                       pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               }
-       } else if (pBtMgnt->ExtConfig.NumberOfHandle >= 3) {
-               if (bScoExist) {
-                       if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) &&
-                           BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                               if (bBtHsModeExist)
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(HS)\n"));
-                               else
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + HID + A2DP + PAN(EDR)\n"));
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO exists but why NO matched profile for NumberOfHandle =%d\n",
-                                       pBtMgnt->ExtConfig.NumberOfHandle));
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! NO matched profile for NumberOfHandle =%d\n",
-                               pBtMgnt->ExtConfig.NumberOfHandle));
-               }
-       }
-       return algorithm;
-}
-
-static u8 btdm_NeedToDecBtPwr(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 bRet = false;
-
-       if (BT_Operation(padapter)) {
-               if (pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB > 47) {
-                       RTPRINT(FBT, BT_TRACE, ("Need to decrease bt power for HS mode!!\n"));
-                       bRet = true;
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("NO Need to decrease bt power for HS mode!!\n"));
-               }
-       } else {
-               if (BTDM_IsWifiConnectionExist(padapter)) {
-                       RTPRINT(FBT, BT_TRACE, ("Need to decrease bt power for Wifi is connected!!\n"));
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-static void
-btdm_SetCoexTable(struct rtw_adapter *padapter, u32 val0x6c0,
-                 u32 val0x6c8, u8 val0x6cc)
-{
-       RTPRINT(FBT, BT_TRACE, ("set coex table, set 0x6c0 = 0x%x\n", val0x6c0));
-       rtl8723au_write32(padapter, 0x6c0, val0x6c0);
-
-       RTPRINT(FBT, BT_TRACE, ("set coex table, set 0x6c8 = 0x%x\n", val0x6c8));
-       rtl8723au_write32(padapter, 0x6c8, val0x6c8);
-
-       RTPRINT(FBT, BT_TRACE, ("set coex table, set 0x6cc = 0x%x\n", val0x6cc));
-       rtl8723au_write8(padapter, 0x6cc, val0x6cc);
-}
-
-static void
-btdm_SetSwFullTimeDacSwing(struct rtw_adapter *padapter, u8 bSwDacSwingOn,
-                          u32 swDacSwingLvl)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (bSwDacSwingOn) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SwDacSwing = 0x%x\n", swDacSwingLvl));
-               PHY_SetBBReg(padapter, 0x880, 0xff000000, swDacSwingLvl);
-               pHalData->bt_coexist.bSWCoexistAllOff = false;
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SwDacSwing Off!\n"));
-               PHY_SetBBReg(padapter, 0x880, 0xff000000, 0xc0);
-       }
-}
-
-static void
-btdm_SetFwDacSwingLevel(struct rtw_adapter *padapter, u8 dacSwingLvl)
-{
-       u8 H2C_Parameter[1] = {0};
-
-       H2C_Parameter[0] = dacSwingLvl;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Set Dac Swing Level = 0x%x\n", dacSwingLvl));
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], write 0x29 = 0x%x\n", H2C_Parameter[0]));
-
-       FillH2CCmd(padapter, 0x29, 1, H2C_Parameter);
-}
-
-static void btdm_2AntDecBtPwr(struct rtw_adapter *padapter, u8 bDecBtPwr)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], Dec BT power = %s\n",
-               ((bDecBtPwr) ? "ON" : "OFF")));
-       pBtdm8723->bCurDecBtPwr = bDecBtPwr;
-
-       if (pBtdm8723->bPreDecBtPwr == pBtdm8723->bCurDecBtPwr)
-               return;
-
-       BTDM_SetFwDecBtPwr(padapter, pBtdm8723->bCurDecBtPwr);
-
-       pBtdm8723->bPreDecBtPwr = pBtdm8723->bCurDecBtPwr;
-}
-
-static void
-btdm_2AntFwDacSwingLvl(struct rtw_adapter *padapter, u8 fwDacSwingLvl)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], set FW Dac Swing level = %d\n",  fwDacSwingLvl));
-       pBtdm8723->curFwDacSwingLvl = fwDacSwingLvl;
-
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], preFwDacSwingLvl =%d, curFwDacSwingLvl =%d\n", */
-       /*pBtdm8723->preFwDacSwingLvl, pBtdm8723->curFwDacSwingLvl)); */
-
-       if (pBtdm8723->preFwDacSwingLvl == pBtdm8723->curFwDacSwingLvl)
-               return;
-
-       btdm_SetFwDacSwingLevel(padapter, pBtdm8723->curFwDacSwingLvl);
-
-       pBtdm8723->preFwDacSwingLvl = pBtdm8723->curFwDacSwingLvl;
-}
-
-static void
-btdm_2AntRfShrink(struct rtw_adapter *padapter, u8 bRxRfShrinkOn)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], turn Rx RF Shrink = %s\n",
-               ((bRxRfShrinkOn) ? "ON" : "OFF")));
-       pBtdm8723->bCurRfRxLpfShrink = bRxRfShrinkOn;
-
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], bPreRfRxLpfShrink =%d, bCurRfRxLpfShrink =%d\n", */
-       /*pBtdm8723->bPreRfRxLpfShrink, pBtdm8723->bCurRfRxLpfShrink)); */
-
-       if (pBtdm8723->bPreRfRxLpfShrink == pBtdm8723->bCurRfRxLpfShrink)
-               return;
-
-       BTDM_SetSwRfRxLpfCorner(padapter, (u8)pBtdm8723->bCurRfRxLpfShrink);
-
-       pBtdm8723->bPreRfRxLpfShrink = pBtdm8723->bCurRfRxLpfShrink;
-}
-
-static void
-btdm_2AntLowPenaltyRa(struct rtw_adapter *padapter, u8 bLowPenaltyRa)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], turn LowPenaltyRA = %s\n",
-               ((bLowPenaltyRa) ? "ON" : "OFF")));
-       pBtdm8723->bCurLowPenaltyRa = bLowPenaltyRa;
-
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], bPreLowPenaltyRa =%d, bCurLowPenaltyRa =%d\n", */
-       /*pBtdm8723->bPreLowPenaltyRa, pBtdm8723->bCurLowPenaltyRa)); */
-
-       if (pBtdm8723->bPreLowPenaltyRa == pBtdm8723->bCurLowPenaltyRa)
-               return;
-
-       BTDM_SetSwPenaltyTxRateAdaptive(padapter, (u8)pBtdm8723->bCurLowPenaltyRa);
-
-       pBtdm8723->bPreLowPenaltyRa = pBtdm8723->bCurLowPenaltyRa;
-}
-
-static void
-btdm_2AntDacSwing(struct rtw_adapter *padapter,
-                 u8 bDacSwingOn, u32 dacSwingLvl)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], turn DacSwing =%s, dacSwingLvl = 0x%x\n",
-               (bDacSwingOn ? "ON" : "OFF"), dacSwingLvl));
-       pBtdm8723->bCurDacSwingOn = bDacSwingOn;
-       pBtdm8723->curDacSwingLvl = dacSwingLvl;
-
-       if ((pBtdm8723->bPreDacSwingOn == pBtdm8723->bCurDacSwingOn) &&
-           (pBtdm8723->preDacSwingLvl == pBtdm8723->curDacSwingLvl))
-               return;
-
-       mdelay(30);
-       btdm_SetSwFullTimeDacSwing(padapter, bDacSwingOn, dacSwingLvl);
-
-       pBtdm8723->bPreDacSwingOn = pBtdm8723->bCurDacSwingOn;
-       pBtdm8723->preDacSwingLvl = pBtdm8723->curDacSwingLvl;
-}
-
-static void btdm_2AntAdcBackOff(struct rtw_adapter *padapter, u8 bAdcBackOff)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], turn AdcBackOff = %s\n",
-               ((bAdcBackOff) ? "ON" : "OFF")));
-       pBtdm8723->bCurAdcBackOff = bAdcBackOff;
-
-       if (pBtdm8723->bPreAdcBackOff == pBtdm8723->bCurAdcBackOff)
-               return;
-
-       BTDM_BBBackOffLevel(padapter, (u8)pBtdm8723->bCurAdcBackOff);
-
-       pBtdm8723->bPreAdcBackOff = pBtdm8723->bCurAdcBackOff;
-}
-
-static void btdm_2AntAgcTable(struct rtw_adapter *padapter, u8 bAgcTableEn)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], %s Agc Table\n", ((bAgcTableEn) ? "Enable" : "Disable")));
-       pBtdm8723->bCurAgcTableEn = bAgcTableEn;
-
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], bPreAgcTableEn =%d, bCurAgcTableEn =%d\n", */
-       /*pBtdm8723->bPreAgcTableEn, pBtdm8723->bCurAgcTableEn)); */
-
-       if (pBtdm8723->bPreAgcTableEn == pBtdm8723->bCurAgcTableEn)
-               return;
-
-       BTDM_AGCTable(padapter, (u8)bAgcTableEn);
-
-       pBtdm8723->bPreAgcTableEn = pBtdm8723->bCurAgcTableEn;
-}
-
-static void
-btdm_2AntCoexTable(struct rtw_adapter *padapter,
-                  u32 val0x6c0, u32 val0x6c8, u8 val0x6cc)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], write Coex Table 0x6c0 = 0x%x, 0x6c8 = 0x%x, 0x6cc = 0x%x\n",
-               val0x6c0, val0x6c8, val0x6cc));
-       pBtdm8723->curVal0x6c0 = val0x6c0;
-       pBtdm8723->curVal0x6c8 = val0x6c8;
-       pBtdm8723->curVal0x6cc = val0x6cc;
-
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], preVal0x6c0 = 0x%x, preVal0x6c8 = 0x%x, preVal0x6cc = 0x%x !!\n", */
-       /*pBtdm8723->preVal0x6c0, pBtdm8723->preVal0x6c8, pBtdm8723->preVal0x6cc)); */
-       /* RTPRINT(FBT, BT_TRACE, ("[BTCoex], curVal0x6c0 = 0x%x, curVal0x6c8 = 0x%x, curVal0x6cc = 0x%x !!\n", */
-       /*pBtdm8723->curVal0x6c0, pBtdm8723->curVal0x6c8, pBtdm8723->curVal0x6cc)); */
-
-       if ((pBtdm8723->preVal0x6c0 == pBtdm8723->curVal0x6c0) &&
-           (pBtdm8723->preVal0x6c8 == pBtdm8723->curVal0x6c8) &&
-           (pBtdm8723->preVal0x6cc == pBtdm8723->curVal0x6cc))
-               return;
-
-       btdm_SetCoexTable(padapter, val0x6c0, val0x6c8, val0x6cc);
-
-       pBtdm8723->preVal0x6c0 = pBtdm8723->curVal0x6c0;
-       pBtdm8723->preVal0x6c8 = pBtdm8723->curVal0x6c8;
-       pBtdm8723->preVal0x6cc = pBtdm8723->curVal0x6cc;
-}
-
-static void btdm_2AntIgnoreWlanAct(struct rtw_adapter *padapter, u8 bEnable)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTCoex], turn Ignore WlanAct %s\n", (bEnable ? "ON" : "OFF")));
-       pBtdm8723->bCurIgnoreWlanAct = bEnable;
-
-
-       if (pBtdm8723->bPreIgnoreWlanAct == pBtdm8723->bCurIgnoreWlanAct)
-               return;
-
-       btdm_SetFwIgnoreWlanAct(padapter, bEnable);
-       pBtdm8723->bPreIgnoreWlanAct = pBtdm8723->bCurIgnoreWlanAct;
-}
-
-static void
-btdm_2AntSetFw3a(struct rtw_adapter *padapter, u8 byte1, u8 byte2,
-                u8 byte3, u8 byte4, u8 byte5)
-{
-       u8 H2C_Parameter[5] = {0};
-
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  byte1[1:0] != 0 means enable pstdma */
-       /*  for 2Ant bt coexist, if byte1 != 0 means enable pstdma */
-       if (byte1)
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       H2C_Parameter[0] = byte1;
-       H2C_Parameter[1] = byte2;
-       H2C_Parameter[2] = byte3;
-       H2C_Parameter[3] = byte4;
-       H2C_Parameter[4] = byte5;
-
-       pHalData->bt_coexist.fw3aVal[0] = byte1;
-       pHalData->bt_coexist.fw3aVal[1] = byte2;
-       pHalData->bt_coexist.fw3aVal[2] = byte3;
-       pHalData->bt_coexist.fw3aVal[3] = byte4;
-       pHalData->bt_coexist.fw3aVal[4] = byte5;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], FW write 0x3a(5bytes) = 0x%x%08x\n",
-               H2C_Parameter[0],
-               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));
-
-       FillH2CCmd(padapter, 0x3a, 5, H2C_Parameter);
-       }
-
-static void btdm_2AntPsTdma(struct rtw_adapter *padapter, u8 bTurnOn, u8 type)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-       u32                     btTxRxCnt = 0;
-       u8 bTurnOnByCnt = false;
-       u8 psTdmaTypeByCnt = 0;
-
-       btTxRxCnt = BTDM_BtTxRxCounterH(padapter)+BTDM_BtTxRxCounterL(padapter);
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT TxRx Counters = %d\n", btTxRxCnt));
-       if (btTxRxCnt > 3000) {
-               bTurnOnByCnt = true;
-               psTdmaTypeByCnt = 8;
-
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], For BTTxRxCounters, turn %s PS TDMA, type =%d\n",
-                       (bTurnOnByCnt ? "ON" : "OFF"), psTdmaTypeByCnt));
-               pBtdm8723->bCurPsTdmaOn = bTurnOnByCnt;
-               pBtdm8723->curPsTdma = psTdmaTypeByCnt;
-       } else {
-               RTPRINT(FBT, BT_TRACE,
-                       ("[BTCoex], turn %s PS TDMA, type =%d\n",
-                       (bTurnOn ? "ON" : "OFF"), type));
-               pBtdm8723->bCurPsTdmaOn = bTurnOn;
-               pBtdm8723->curPsTdma = type;
-       }
-
-       if ((pBtdm8723->bPrePsTdmaOn == pBtdm8723->bCurPsTdmaOn) &&
-           (pBtdm8723->prePsTdma == pBtdm8723->curPsTdma))
-               return;
-
-       if (bTurnOn) {
-               switch (type) {
-               case 1:
-               default:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xa1, 0x98);
-                       break;
-               case 2:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xa1, 0x98);
-                       break;
-               case 3:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xa1, 0x98);
-                       break;
-               case 4:
-                       btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0xa1, 0x80);
-                       break;
-               case 5:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x20, 0x98);
-                       break;
-               case 6:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x20, 0x98);
-                       break;
-               case 7:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x20, 0x98);
-                       break;
-               case 8:
-                       btdm_2AntSetFw3a(padapter, 0xa3, 0x5, 0x5, 0x20, 0x80);
-                       break;
-               case 9:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0xa1, 0x98);
-                       break;
-               case 10:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0xa1, 0x98);
-                       break;
-               case 11:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0xa1, 0x98);
-                       break;
-               case 12:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xa1, 0x98);
-                       break;
-               case 13:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x1a, 0x1a, 0x20, 0x98);
-                       break;
-               case 14:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x12, 0x12, 0x20, 0x98);
-                       break;
-               case 15:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0xa, 0xa, 0x20, 0x98);
-                       break;
-               case 16:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0x20, 0x98);
-                       break;
-               case 17:
-                       btdm_2AntSetFw3a(padapter, 0xa3, 0x2f, 0x2f, 0x20, 0x80);
-                       break;
-               case 18:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x5, 0x5, 0xa1, 0x98);
-                       break;
-               case 19:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0xa1, 0x98);
-                       break;
-               case 20:
-                       btdm_2AntSetFw3a(padapter, 0xe3, 0x25, 0x25, 0x20, 0x98);
-                       break;
-               }
-       } else {
-               /*  disable PS tdma */
-               switch (type) {
-               case 0:
-                       btdm_2AntSetFw3a(padapter, 0x0, 0x0, 0x0, 0x8, 0x0);
-                       break;
-               case 1:
-                       btdm_2AntSetFw3a(padapter, 0x0, 0x0, 0x0, 0x0, 0x0);
-                       break;
-               default:
-                       btdm_2AntSetFw3a(padapter, 0x0, 0x0, 0x0, 0x8, 0x0);
-                       break;
-               }
-       }
-
-       /*  update pre state */
-       pBtdm8723->bPrePsTdmaOn =  pBtdm8723->bCurPsTdmaOn;
-       pBtdm8723->prePsTdma = pBtdm8723->curPsTdma;
-}
-
-static void btdm_2AntBtInquiryPage(struct rtw_adapter *padapter)
-{
-       btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-       btdm_2AntIgnoreWlanAct(padapter, false);
-       btdm_2AntPsTdma(padapter, true, 8);
-}
-
-static u8 btdm_HoldForBtInqPage(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u32 curTime = jiffies;
-
-       if (pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage) {
-               /*  bt inquiry or page is started. */
-               if (pHalData->bt_coexist.halCoex8723.btInqPageStartTime == 0) {
-                       pHalData->bt_coexist.halCoex8723.btInqPageStartTime = curTime;
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT Inquiry/page is started at time : 0x%lx \n",
-                       pHalData->bt_coexist.halCoex8723.btInqPageStartTime));
-               }
-       }
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT Inquiry/page started time : 0x%lx, curTime : 0x%x \n",
-               pHalData->bt_coexist.halCoex8723.btInqPageStartTime, curTime));
-
-       if (pHalData->bt_coexist.halCoex8723.btInqPageStartTime) {
-               if (((curTime - pHalData->bt_coexist.halCoex8723.btInqPageStartTime)/1000000) >= 10) {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], BT Inquiry/page >= 10sec!!!"));
-                       pHalData->bt_coexist.halCoex8723.btInqPageStartTime = 0;
-               }
-       }
-
-       if (pHalData->bt_coexist.halCoex8723.btInqPageStartTime) {
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, true, 8);
-               return true;
-       } else {
-               return false;
-       }
-}
-
-static u8 btdm_Is2Ant8723ACommonAction(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-       u8 bCommon = false;
-
-       RTPRINT(FBT, BT_TRACE, ("%s :BTDM_IsWifiConnectionExist =%x check_fwstate =%x pmlmepriv->fw_state = 0x%x\n", __func__, BTDM_IsWifiConnectionExist(padapter), check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)), padapter->mlmepriv.fw_state));
-
-       if ((!BTDM_IsWifiConnectionExist(padapter)) &&
-           (!check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) &&
-           (BT_2ANT_BT_STATUS_IDLE == pBtdm8723->btStatus)) {
-               RTPRINT(FBT, BT_TRACE, ("Wifi idle + Bt idle!!\n"));
-
-               btdm_2AntLowPenaltyRa(padapter, false);
-               btdm_2AntRfShrink(padapter, false);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, false, 0);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-               btdm_2AntDecBtPwr(padapter, false);
-
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-
-               bCommon = true;
-       } else if (((BTDM_IsWifiConnectionExist(padapter)) ||
-                  (check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)))) &&
-                  (BT_2ANT_BT_STATUS_IDLE == pBtdm8723->btStatus)) {
-               RTPRINT(FBT, BT_TRACE, ("Wifi non-idle + BT idle!!\n"));
-
-               btdm_2AntLowPenaltyRa(padapter, true);
-               btdm_2AntRfShrink(padapter, false);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, false, 0);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-               btdm_2AntDecBtPwr(padapter, true);
-
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-
-               bCommon = true;
-       } else if ((!BTDM_IsWifiConnectionExist(padapter)) &&
-                  (!check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) &&
-                  (BT_2ANT_BT_STATUS_CONNECTED_IDLE == pBtdm8723->btStatus)) {
-               RTPRINT(FBT, BT_TRACE, ("Wifi idle + Bt connected idle!!\n"));
-
-               btdm_2AntLowPenaltyRa(padapter, true);
-               btdm_2AntRfShrink(padapter, true);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, false, 0);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-               btdm_2AntDecBtPwr(padapter, false);
-
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-
-               bCommon = true;
-       } else if (((BTDM_IsWifiConnectionExist(padapter)) ||
-                  (check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING)))) &&
-                  (BT_2ANT_BT_STATUS_CONNECTED_IDLE == pBtdm8723->btStatus)) {
-               RTPRINT(FBT, BT_TRACE, ("Wifi non-idle + Bt connected idle!!\n"));
-
-               btdm_2AntLowPenaltyRa(padapter, true);
-               btdm_2AntRfShrink(padapter, true);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, false, 0);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-               btdm_2AntDecBtPwr(padapter, true);
-
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-
-               bCommon = true;
-       } else if ((!BTDM_IsWifiConnectionExist(padapter)) &&
-                  (!check_fwstate(&padapter->mlmepriv, (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) &&
-                  (BT_2ANT_BT_STATUS_NON_IDLE == pBtdm8723->btStatus)) {
-               RTPRINT(FBT, BT_TRACE, ("Wifi idle + BT non-idle!!\n"));
-
-               btdm_2AntLowPenaltyRa(padapter, true);
-               btdm_2AntRfShrink(padapter, true);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntPsTdma(padapter, false, 0);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-               btdm_2AntDecBtPwr(padapter, false);
-
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-
-               bCommon = true;
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("Wifi non-idle + BT non-idle!!\n"));
-               btdm_2AntLowPenaltyRa(padapter, true);
-               btdm_2AntRfShrink(padapter, true);
-               btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-               btdm_2AntIgnoreWlanAct(padapter, false);
-               btdm_2AntFwDacSwingLvl(padapter, 0x20);
-
-               bCommon = false;
-       }
-       return bCommon;
-}
-
-static void
-btdm_2AntTdmaDurationAdjust(struct rtw_adapter *padapter, u8 bScoHid,
-                           u8 bTxPause, u8 maxInterval)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-       static s32              up, dn, m, n, WaitCount;
-       s32                     result;   /* 0: no change, +1: increase WiFi duration, -1: decrease WiFi duration */
-       u8 retryCount = 0;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], TdmaDurationAdjust()\n"));
-
-       if (pBtdm8723->bResetTdmaAdjust) {
-               pBtdm8723->bResetTdmaAdjust = false;
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], first run TdmaDurationAdjust()!!\n"));
-               if (bScoHid) {
-                       if (bTxPause) {
-                               btdm_2AntPsTdma(padapter, true, 15);
-                               pBtdm8723->psTdmaDuAdjType = 15;
-                       } else {
-                               btdm_2AntPsTdma(padapter, true, 11);
-                               pBtdm8723->psTdmaDuAdjType = 11;
-                       }
-               } else {
-                       if (bTxPause) {
-                               btdm_2AntPsTdma(padapter, true, 7);
-                               pBtdm8723->psTdmaDuAdjType = 7;
-                       } else {
-                               btdm_2AntPsTdma(padapter, true, 3);
-                               pBtdm8723->psTdmaDuAdjType = 3;
-                       }
-               }
-               up = 0;
-               dn = 0;
-               m = 1;
-               n = 3;
-               result = 0;
-               WaitCount = 0;
-       } else {
-               /* accquire the BT TRx retry count from BT_Info byte2 */
-               retryCount = pHalData->bt_coexist.halCoex8723.btRetryCnt;
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], retryCount = %d\n", retryCount));
-               result = 0;
-               WaitCount++;
-
-               if (retryCount == 0) {  /*  no retry in the last 2-second duration */
-                       up++;
-                       dn--;
-
-                       if (dn <= 0)
-                               dn = 0;
-
-                       if (up >= n) {  /*  if ³sÄò n ­Ó2¬í retry count¬°0, «h½Õ¼eWiFi duration */
-                               WaitCount = 0;
-                               n = 3;
-                               up = 0;
-                               dn = 0;
-                               result = 1;
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Increase wifi duration!!\n"));
-                       }
-               } else if (retryCount <= 3) {   /*  <= 3 retry in the last 2-second duration */
-                       up--;
-                       dn++;
-
-                       if (up <= 0)
-                               up = 0;
-
-                       if (dn == 2) {  /*  if ³sÄò 2 ­Ó2¬í retry count< 3, «h½Õ¯¶WiFi duration */
-                               if (WaitCount <= 2)
-                                       m++; /*  ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^ */
-                               else
-                                       m = 1;
-
-                               if (m >= 20) /* m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration. */
-                                       m = 20;
-
-                               n = 3*m;
-                               up = 0;
-                               dn = 0;
-                               WaitCount = 0;
-                               result = -1;
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter<3!!\n"));
-                       }
-               } else {  /* retry count > 3, ¥u­n1¦¸ retry count > 3, «h½Õ¯¶WiFi duration */
-                       if (WaitCount == 1)
-                               m++; /*  ÁקK¤@ª½¦b¨â­Ólevel¤¤¨Ó¦^ */
-                       else
-                               m = 1;
-
-                       if (m >= 20) /* m ³Ì¤j­È = 20 ' ³Ì¤j120¬í recheck¬O§_½Õ¾ã WiFi duration. */
-                               m = 20;
-                       n = 3*m;
-                       up = 0;
-                       dn = 0;
-                       WaitCount = 0;
-                       result = -1;
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Decrease wifi duration for retryCounter>3!!\n"));
-               }
-
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], max Interval = %d\n", maxInterval));
-               if (maxInterval == 1) {
-                       if (bTxPause) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 1\n"));
-                               if (pBtdm8723->curPsTdma == 1) {
-                                       btdm_2AntPsTdma(padapter, true, 5);
-                                       pBtdm8723->psTdmaDuAdjType = 5;
-                               } else if (pBtdm8723->curPsTdma == 2) {
-                                       btdm_2AntPsTdma(padapter, true, 6);
-                                       pBtdm8723->psTdmaDuAdjType = 6;
-                               } else if (pBtdm8723->curPsTdma == 3) {
-                                       btdm_2AntPsTdma(padapter, true, 7);
-                                       pBtdm8723->psTdmaDuAdjType = 7;
-                               } else if (pBtdm8723->curPsTdma == 4) {
-                                       btdm_2AntPsTdma(padapter, true, 8);
-                                       pBtdm8723->psTdmaDuAdjType = 8;
-                               }
-                               if (pBtdm8723->curPsTdma == 9) {
-                                       btdm_2AntPsTdma(padapter, true, 13);
-                                       pBtdm8723->psTdmaDuAdjType = 13;
-                               } else if (pBtdm8723->curPsTdma == 10) {
-                                       btdm_2AntPsTdma(padapter, true, 14);
-                                       pBtdm8723->psTdmaDuAdjType = 14;
-                               } else if (pBtdm8723->curPsTdma == 11) {
-                                       btdm_2AntPsTdma(padapter, true, 15);
-                                       pBtdm8723->psTdmaDuAdjType = 15;
-                               } else if (pBtdm8723->curPsTdma == 12) {
-                                       btdm_2AntPsTdma(padapter, true, 16);
-                                       pBtdm8723->psTdmaDuAdjType = 16;
-                               }
-
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 5) {
-                                               btdm_2AntPsTdma(padapter, true, 6);
-                                               pBtdm8723->psTdmaDuAdjType = 6;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 8);
-                                               pBtdm8723->psTdmaDuAdjType = 8;
-                                       } else if (pBtdm8723->curPsTdma == 13) {
-                                               btdm_2AntPsTdma(padapter, true, 14);
-                                               pBtdm8723->psTdmaDuAdjType = 14;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 16);
-                                               pBtdm8723->psTdmaDuAdjType = 16;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 8) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 6);
-                                               pBtdm8723->psTdmaDuAdjType = 6;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 5);
-                                               pBtdm8723->psTdmaDuAdjType = 5;
-                                       } else if (pBtdm8723->curPsTdma == 16) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 14);
-                                               pBtdm8723->psTdmaDuAdjType = 14;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 13);
-                                               pBtdm8723->psTdmaDuAdjType = 13;
-                                       }
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 0\n"));
-                               if (pBtdm8723->curPsTdma == 5) {
-                                       btdm_2AntPsTdma(padapter, true, 1);
-                                       pBtdm8723->psTdmaDuAdjType = 1;
-                               } else if (pBtdm8723->curPsTdma == 6) {
-                                       btdm_2AntPsTdma(padapter, true, 2);
-                                       pBtdm8723->psTdmaDuAdjType = 2;
-                               } else if (pBtdm8723->curPsTdma == 7) {
-                                       btdm_2AntPsTdma(padapter, true, 3);
-                                       pBtdm8723->psTdmaDuAdjType = 3;
-                               } else if (pBtdm8723->curPsTdma == 8) {
-                                       btdm_2AntPsTdma(padapter, true, 4);
-                                       pBtdm8723->psTdmaDuAdjType = 4;
-                               }
-                               if (pBtdm8723->curPsTdma == 13) {
-                                       btdm_2AntPsTdma(padapter, true, 9);
-                                       pBtdm8723->psTdmaDuAdjType = 9;
-                               } else if (pBtdm8723->curPsTdma == 14) {
-                                       btdm_2AntPsTdma(padapter, true, 10);
-                                       pBtdm8723->psTdmaDuAdjType = 10;
-                               } else if (pBtdm8723->curPsTdma == 15) {
-                                       btdm_2AntPsTdma(padapter, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               } else if (pBtdm8723->curPsTdma == 16) {
-                                       btdm_2AntPsTdma(padapter, true, 12);
-                                       pBtdm8723->psTdmaDuAdjType = 12;
-                               }
-
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 1) {
-                                               btdm_2AntPsTdma(padapter, true, 2);
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 4);
-                                               pBtdm8723->psTdmaDuAdjType = 4;
-                                       } else if (pBtdm8723->curPsTdma == 9) {
-                                               btdm_2AntPsTdma(padapter, true, 10);
-                                               pBtdm8723->psTdmaDuAdjType = 10;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 12);
-                                               pBtdm8723->psTdmaDuAdjType = 12;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 4) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 2);
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 1);
-                                               pBtdm8723->psTdmaDuAdjType = 1;
-                                       } else if (pBtdm8723->curPsTdma == 12) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 10);
-                                               pBtdm8723->psTdmaDuAdjType = 10;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 9);
-                                               pBtdm8723->psTdmaDuAdjType = 9;
-                                       }
-                               }
-                       }
-               } else if (maxInterval == 2) {
-                       if (bTxPause) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 1\n"));
-                               if (pBtdm8723->curPsTdma == 1) {
-                                       btdm_2AntPsTdma(padapter, true, 6);
-                                       pBtdm8723->psTdmaDuAdjType = 6;
-                               } else if (pBtdm8723->curPsTdma == 2) {
-                                       btdm_2AntPsTdma(padapter, true, 6);
-                                       pBtdm8723->psTdmaDuAdjType = 6;
-                               } else if (pBtdm8723->curPsTdma == 3) {
-                                       btdm_2AntPsTdma(padapter, true, 7);
-                                       pBtdm8723->psTdmaDuAdjType = 7;
-                               } else if (pBtdm8723->curPsTdma == 4) {
-                                       btdm_2AntPsTdma(padapter, true, 8);
-                                       pBtdm8723->psTdmaDuAdjType = 8;
-                               }
-                               if (pBtdm8723->curPsTdma == 9) {
-                                       btdm_2AntPsTdma(padapter, true, 14);
-                                       pBtdm8723->psTdmaDuAdjType = 14;
-                               } else if (pBtdm8723->curPsTdma == 10) {
-                                       btdm_2AntPsTdma(padapter, true, 14);
-                                       pBtdm8723->psTdmaDuAdjType = 14;
-                               } else if (pBtdm8723->curPsTdma == 11) {
-                                       btdm_2AntPsTdma(padapter, true, 15);
-                                       pBtdm8723->psTdmaDuAdjType = 15;
-                               } else if (pBtdm8723->curPsTdma == 12) {
-                                       btdm_2AntPsTdma(padapter, true, 16);
-                                       pBtdm8723->psTdmaDuAdjType = 16;
-                               }
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 5) {
-                                               btdm_2AntPsTdma(padapter, true, 6);
-                                               pBtdm8723->psTdmaDuAdjType = 6;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 8);
-                                               pBtdm8723->psTdmaDuAdjType = 8;
-                                       } else if (pBtdm8723->curPsTdma == 13) {
-                                               btdm_2AntPsTdma(padapter, true, 14);
-                                               pBtdm8723->psTdmaDuAdjType = 14;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 16);
-                                               pBtdm8723->psTdmaDuAdjType = 16;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 8) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 6);
-                                               pBtdm8723->psTdmaDuAdjType = 6;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 6);
-                                               pBtdm8723->psTdmaDuAdjType = 6;
-                                       } else if (pBtdm8723->curPsTdma == 16) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 14);
-                                               pBtdm8723->psTdmaDuAdjType = 14;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 14);
-                                               pBtdm8723->psTdmaDuAdjType = 14;
-                                       }
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 0\n"));
-                               if (pBtdm8723->curPsTdma == 5) {
-                                       btdm_2AntPsTdma(padapter, true, 2);
-                                       pBtdm8723->psTdmaDuAdjType = 2;
-                               } else if (pBtdm8723->curPsTdma == 6) {
-                                       btdm_2AntPsTdma(padapter, true, 2);
-                                       pBtdm8723->psTdmaDuAdjType = 2;
-                               } else if (pBtdm8723->curPsTdma == 7) {
-                                       btdm_2AntPsTdma(padapter, true, 3);
-                                       pBtdm8723->psTdmaDuAdjType = 3;
-                               } else if (pBtdm8723->curPsTdma == 8) {
-                                       btdm_2AntPsTdma(padapter, true, 4);
-                                       pBtdm8723->psTdmaDuAdjType = 4;
-                               }
-                               if (pBtdm8723->curPsTdma == 13) {
-                                       btdm_2AntPsTdma(padapter, true, 10);
-                                       pBtdm8723->psTdmaDuAdjType = 10;
-                               } else if (pBtdm8723->curPsTdma == 14) {
-                                       btdm_2AntPsTdma(padapter, true, 10);
-                                       pBtdm8723->psTdmaDuAdjType = 10;
-                               } else if (pBtdm8723->curPsTdma == 15) {
-                                       btdm_2AntPsTdma(padapter, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               } else if (pBtdm8723->curPsTdma == 16) {
-                                       btdm_2AntPsTdma(padapter, true, 12);
-                                       pBtdm8723->psTdmaDuAdjType = 12;
-                               }
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 1) {
-                                               btdm_2AntPsTdma(padapter, true, 2);
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 4);
-                                               pBtdm8723->psTdmaDuAdjType = 4;
-                                       } else if (pBtdm8723->curPsTdma == 9) {
-                                               btdm_2AntPsTdma(padapter, true, 10);
-                                               pBtdm8723->psTdmaDuAdjType = 10;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 12);
-                                               pBtdm8723->psTdmaDuAdjType = 12;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 4) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 2);
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 2);
-                                               pBtdm8723->psTdmaDuAdjType = 2;
-                                       } else if (pBtdm8723->curPsTdma == 12) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 10);
-                                               pBtdm8723->psTdmaDuAdjType = 10;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 10);
-                                               pBtdm8723->psTdmaDuAdjType = 10;
-                                       }
-                               }
-                       }
-               } else if (maxInterval == 3) {
-                       if (bTxPause) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 1\n"));
-                               if (pBtdm8723->curPsTdma == 1) {
-                                       btdm_2AntPsTdma(padapter, true, 7);
-                                       pBtdm8723->psTdmaDuAdjType = 7;
-                               } else if (pBtdm8723->curPsTdma == 2) {
-                                       btdm_2AntPsTdma(padapter, true, 7);
-                                       pBtdm8723->psTdmaDuAdjType = 7;
-                               } else if (pBtdm8723->curPsTdma == 3) {
-                                       btdm_2AntPsTdma(padapter, true, 7);
-                                       pBtdm8723->psTdmaDuAdjType = 7;
-                               } else if (pBtdm8723->curPsTdma == 4) {
-                                       btdm_2AntPsTdma(padapter, true, 8);
-                                       pBtdm8723->psTdmaDuAdjType = 8;
-                               }
-                               if (pBtdm8723->curPsTdma == 9) {
-                                       btdm_2AntPsTdma(padapter, true, 15);
-                                       pBtdm8723->psTdmaDuAdjType = 15;
-                               } else if (pBtdm8723->curPsTdma == 10) {
-                                       btdm_2AntPsTdma(padapter, true, 15);
-                                       pBtdm8723->psTdmaDuAdjType = 15;
-                               } else if (pBtdm8723->curPsTdma == 11) {
-                                       btdm_2AntPsTdma(padapter, true, 15);
-                                       pBtdm8723->psTdmaDuAdjType = 15;
-                               } else if (pBtdm8723->curPsTdma == 12) {
-                                       btdm_2AntPsTdma(padapter, true, 16);
-                                       pBtdm8723->psTdmaDuAdjType = 16;
-                               }
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 5) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 8);
-                                               pBtdm8723->psTdmaDuAdjType = 8;
-                                       } else if (pBtdm8723->curPsTdma == 13) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 16);
-                                               pBtdm8723->psTdmaDuAdjType = 16;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 8) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 7) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 6) {
-                                               btdm_2AntPsTdma(padapter, true, 7);
-                                               pBtdm8723->psTdmaDuAdjType = 7;
-                                       } else if (pBtdm8723->curPsTdma == 16) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 15) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       } else if (pBtdm8723->curPsTdma == 14) {
-                                               btdm_2AntPsTdma(padapter, true, 15);
-                                               pBtdm8723->psTdmaDuAdjType = 15;
-                                       }
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], TxPause = 0\n"));
-                               if (pBtdm8723->curPsTdma == 5) {
-                                       btdm_2AntPsTdma(padapter, true, 3);
-                                       pBtdm8723->psTdmaDuAdjType = 3;
-                               } else if (pBtdm8723->curPsTdma == 6) {
-                                       btdm_2AntPsTdma(padapter, true, 3);
-                                       pBtdm8723->psTdmaDuAdjType = 3;
-                               } else if (pBtdm8723->curPsTdma == 7) {
-                                       btdm_2AntPsTdma(padapter, true, 3);
-                                       pBtdm8723->psTdmaDuAdjType = 3;
-                               } else if (pBtdm8723->curPsTdma == 8) {
-                                       btdm_2AntPsTdma(padapter, true, 4);
-                                       pBtdm8723->psTdmaDuAdjType = 4;
-                               }
-                               if (pBtdm8723->curPsTdma == 13) {
-                                       btdm_2AntPsTdma(padapter, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               } else if (pBtdm8723->curPsTdma == 14) {
-                                       btdm_2AntPsTdma(padapter, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               } else if (pBtdm8723->curPsTdma == 15) {
-                                       btdm_2AntPsTdma(padapter, true, 11);
-                                       pBtdm8723->psTdmaDuAdjType = 11;
-                               } else if (pBtdm8723->curPsTdma == 16) {
-                                       btdm_2AntPsTdma(padapter, true, 12);
-                                       pBtdm8723->psTdmaDuAdjType = 12;
-                               }
-                               if (result == -1) {
-                                       if (pBtdm8723->curPsTdma == 1) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 4);
-                                               pBtdm8723->psTdmaDuAdjType = 4;
-                                       } else if (pBtdm8723->curPsTdma == 9) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 12);
-                                               pBtdm8723->psTdmaDuAdjType = 12;
-                                       }
-                               } else if (result == 1) {
-                                       if (pBtdm8723->curPsTdma == 4) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 3) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 2) {
-                                               btdm_2AntPsTdma(padapter, true, 3);
-                                               pBtdm8723->psTdmaDuAdjType = 3;
-                                       } else if (pBtdm8723->curPsTdma == 12) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 11) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       } else if (pBtdm8723->curPsTdma == 10) {
-                                               btdm_2AntPsTdma(padapter, true, 11);
-                                               pBtdm8723->psTdmaDuAdjType = 11;
-                                       }
-                               }
-                       }
-               }
-       }
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], PsTdma type : recordPsTdma =%d\n", pBtdm8723->psTdmaDuAdjType));
-       /*  if current PsTdma not match with the recorded one (when scan, dhcp...), */
-       /*  then we have to adjust it back to the previous record one. */
-       if (pBtdm8723->curPsTdma != pBtdm8723->psTdmaDuAdjType) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PsTdma type dismatch!!!, curPsTdma =%d, recordPsTdma =%d\n",
-                       pBtdm8723->curPsTdma, pBtdm8723->psTdmaDuAdjType));
-
-               if (!check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING))
-                       btdm_2AntPsTdma(padapter, true, pBtdm8723->psTdmaDuAdjType);
-               else
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], roaming/link/scan is under progress, will adjust next time!!!\n"));
-       }
-}
-
-/*  default Action */
-/*  SCO only or SCO+PAN(HS) */
-static void btdm_2Ant8723ASCOAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 11);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 15);
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 11);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 15);
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-static void btdm_2Ant8723AHIDAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-                       /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 9);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 13);
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, false);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 9);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 13);
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-/* A2DP only / PAN(EDR) only/ A2DP+PAN(HS) */
-static void btdm_2Ant8723AA2DPAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, false, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, false, 1);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, true, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                       btdm_2AntTdmaDurationAdjust(padapter, false, true, 1);
-                       }
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, false, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, false, 1);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, true, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, false, true, 1);
-                       }
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-static void btdm_2Ant8723APANEDRAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 2);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntPsTdma(padapter, true, 6);
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 2);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 6);
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-/* PAN(HS) only */
-static void btdm_2Ant8723APANHSAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState;
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 47, 0);
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntDecBtPwr(padapter, true);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntDecBtPwr(padapter, false);
-               }
-               btdm_2AntPsTdma(padapter, false, 0);
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 47, 0);
-
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high\n"));
-                       /*  fw mechanism */
-                       btdm_2AntDecBtPwr(padapter, true);
-                       btdm_2AntPsTdma(padapter, false, 0);
-
-                       /*  sw mechanism */
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low\n"));
-                       /*  fw mechanism */
-                       btdm_2AntDecBtPwr(padapter, false);
-                       btdm_2AntPsTdma(padapter, false, 0);
-
-                       /*  sw mechanism */
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-/* PAN(EDR)+A2DP */
-static void btdm_2Ant8723APANEDRA2DPAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1, btInfoExt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       /*  fw mechanism */
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 4);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 2);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       /*  fw mechanism */
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 8);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 6);
-                       }
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       /*  fw mechanism */
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 4);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 2);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       /*  fw mechanism */
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 8);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 6);
-                       }
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-static void btdm_2Ant8723APANEDRHIDAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 10);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntPsTdma(padapter, true, 14);
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntPsTdma(padapter, true, 10);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntPsTdma(padapter, true, 14);
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-/*  HID+A2DP+PAN(EDR) */
-static void btdm_2Ant8723AHIDA2DPPANEDRAction(struct rtw_adapter *padapter)
-{
-       u8 btRssiState, btRssiState1, btInfoExt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 12);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 10);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 16);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 14);
-                       }
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 37, 0);
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 27, 0);
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 12);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 10);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 16);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntPsTdma(padapter, true, 14);
-                       }
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-static void btdm_2Ant8723AHIDA2DPAction(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 btRssiState, btRssiState1, btInfoExt;
-
-       btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, false, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, false, 1);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, true, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, true, 1);
-                       }
-               }
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState(padapter, 2, 27, 0);
-
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, false, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, false, 1);
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       if (btInfoExt&BIT(0)) { /* a2dp rate, 1:basic /0:edr */
-                               RTPRINT(FBT, BT_TRACE, ("a2dp basic rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, true, 3);
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("a2dp edr rate \n"));
-                               btdm_2AntTdmaDurationAdjust(padapter, true, true, 1);
-                       }
-               }
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       /*  sw mechanism */
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       /*  sw mechanism */
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-static void btdm_2Ant8723AA2dp(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 btRssiState, btRssiState1, btInfoExt;
-
-       btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-
-       if (btdm_NeedToDecBtPwr(padapter))
-               btdm_2AntDecBtPwr(padapter, true);
-       else
-               btdm_2AntDecBtPwr(padapter, false);
-       /*  coex table */
-       btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-       btdm_2AntIgnoreWlanAct(padapter, false);
-
-       if (BTDM_IsHT40(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("HT40\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 37, 0);
-               /*  fw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntTdmaDurationAdjust(padapter, false, false, 1);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntTdmaDurationAdjust(padapter, false, true, 1);
-               }
-
-               /*  sw mechanism */
-               btdm_2AntAgcTable(padapter, false);
-               btdm_2AntAdcBackOff(padapter, true);
-               btdm_2AntDacSwing(padapter, false, 0xc0);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("HT20 or Legacy\n"));
-               btRssiState = BTDM_CheckCoexRSSIState(padapter, 2, 47, 0);
-               btRssiState1 = BTDM_CheckCoexRSSIState1(padapter, 2, 27, 0);
-
-               /*  fw mechanism */
-               if ((btRssiState1 == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState1 == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 high \n"));
-                       PlatformEFIOWrite1Byte(padapter, 0x883, 0x40);
-                       btdm_2AntTdmaDurationAdjust(padapter, false, false, 1);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi-1 low \n"));
-                       btdm_2AntTdmaDurationAdjust(padapter, false, true, 1);
-               }
-
-               /*  sw mechanism */
-               if ((btRssiState == BT_RSSI_STATE_HIGH) ||
-                   (btRssiState == BT_RSSI_STATE_STAY_HIGH)) {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi high \n"));
-                       btdm_2AntAgcTable(padapter, true);
-                       btdm_2AntAdcBackOff(padapter, true);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("Wifi rssi low \n"));
-                       btdm_2AntAgcTable(padapter, false);
-                       btdm_2AntAdcBackOff(padapter, false);
-                       btdm_2AntDacSwing(padapter, false, 0xc0);
-               }
-       }
-}
-
-/*  extern function start with BTDM_ */
-static void BTDM_2AntParaInit(struct rtw_adapter *padapter)
-{
-
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], 2Ant Parameter Init!!\n"));
-
-       /*  Enable counter statistics */
-       rtl8723au_write8(padapter, 0x76e, 0x4);
-       rtl8723au_write8(padapter, 0x778, 0x3);
-       rtl8723au_write8(padapter, 0x40, 0x20);
-
-       /*  force to reset coex mechanism */
-       pBtdm8723->preVal0x6c0 = 0x0;
-       btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-
-       pBtdm8723->bPrePsTdmaOn = true;
-       btdm_2AntPsTdma(padapter, false, 0);
-
-       pBtdm8723->preFwDacSwingLvl = 0x10;
-       btdm_2AntFwDacSwingLvl(padapter, 0x20);
-
-       pBtdm8723->bPreDecBtPwr = true;
-       btdm_2AntDecBtPwr(padapter, false);
-
-       pBtdm8723->bPreAgcTableEn = true;
-       btdm_2AntAgcTable(padapter, false);
-
-       pBtdm8723->bPreAdcBackOff = true;
-       btdm_2AntAdcBackOff(padapter, false);
-
-       pBtdm8723->bPreLowPenaltyRa = true;
-       btdm_2AntLowPenaltyRa(padapter, false);
-
-       pBtdm8723->bPreRfRxLpfShrink = true;
-       btdm_2AntRfShrink(padapter, false);
-
-       pBtdm8723->bPreDacSwingOn = true;
-       btdm_2AntDacSwing(padapter, false, 0xc0);
-
-       pBtdm8723->bPreIgnoreWlanAct = true;
-       btdm_2AntIgnoreWlanAct(padapter, false);
-}
-
-static void BTDM_2AntHwCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       btdm_2AntCoexTable(padapter, 0x55555555, 0xffff, 0x3);
-}
-
-static void BTDM_2AntFwCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       btdm_2AntIgnoreWlanAct(padapter, false);
-       btdm_2AntPsTdma(padapter, false, 0);
-       btdm_2AntFwDacSwingLvl(padapter, 0x20);
-       btdm_2AntDecBtPwr(padapter, false);
-}
-
-static void BTDM_2AntSwCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       btdm_2AntAgcTable(padapter, false);
-       btdm_2AntAdcBackOff(padapter, false);
-       btdm_2AntLowPenaltyRa(padapter, false);
-       btdm_2AntRfShrink(padapter, false);
-       btdm_2AntDacSwing(padapter, false, 0xc0);
-}
-
-static void BTDM_2AntFwC2hBtInfo8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-       u8 btInfo = 0;
-       u8 algorithm = BT_2ANT_COEX_ALGO_UNDEFINED;
-       u8 bBtLinkExist = false, bBtHsModeExist = false;
-
-       btInfo = pHalData->bt_coexist.halCoex8723.c2hBtInfoOriginal;
-       pBtdm8723->btStatus = BT_2ANT_BT_STATUS_IDLE;
-
-       /*  check BIT2 first ==> check if bt is under inquiry or page scan */
-       if (btInfo & BIT(2)) {
-               if (!pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage) {
-                       pBtMgnt->ExtConfig.bHoldForBtOperation = true;
-                       pBtMgnt->ExtConfig.bHoldPeriodCnt = 1;
-                       btdm_2AntBtInquiryPage(padapter);
-               } else {
-                       pBtMgnt->ExtConfig.bHoldPeriodCnt++;
-                       btdm_HoldForBtInqPage(padapter);
-               }
-               pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage = true;
-
-       } else {
-               pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage = false;
-               pBtMgnt->ExtConfig.bHoldForBtOperation = false;
-               pBtMgnt->ExtConfig.bHoldPeriodCnt = 0;
-
-       }
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTC2H], pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage =%x pBtMgnt->ExtConfig.bHoldPeriodCnt =%x pBtMgnt->ExtConfig.bHoldForBtOperation =%x\n",
-               pHalData->bt_coexist.halCoex8723.bC2hBtInquiryPage,
-               pBtMgnt->ExtConfig.bHoldPeriodCnt,
-               pBtMgnt->ExtConfig.bHoldForBtOperation));
-
-       RTPRINT(FBT, BT_TRACE,
-               ("[BTC2H],   btInfo =%x   pHalData->bt_coexist.halCoex8723.c2hBtInfoOriginal =%x\n",
-               btInfo, pHalData->bt_coexist.halCoex8723.c2hBtInfoOriginal));
-       if (btInfo&BT_INFO_ACL) {
-               RTPRINT(FBT, BT_TRACE, ("[BTC2H], BTInfo: bConnect = true   btInfo =%x\n", btInfo));
-               bBtLinkExist = true;
-               if (((btInfo&(BT_INFO_FTP|BT_INFO_A2DP|BT_INFO_HID|BT_INFO_SCO_BUSY)) != 0) ||
-                   pHalData->bt_coexist.halCoex8723.btRetryCnt > 0) {
-                       pBtdm8723->btStatus = BT_2ANT_BT_STATUS_NON_IDLE;
-               } else {
-                       pBtdm8723->btStatus = BT_2ANT_BT_STATUS_CONNECTED_IDLE;
-               }
-
-               if (btInfo&BT_INFO_SCO || btInfo&BT_INFO_SCO_BUSY) {
-                       if (btInfo&BT_INFO_FTP || btInfo&BT_INFO_A2DP || btInfo&BT_INFO_HID) {
-                               switch (btInfo&0xe0) {
-                               case BT_INFO_HID:
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + HID\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID;
-                                       break;
-                               case BT_INFO_A2DP:
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Error!!! SCO + A2DP\n"));
-                                       break;
-                               case BT_INFO_FTP:
-                                       if (bBtHsModeExist) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + PAN(HS)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_SCO;
-                                       } else {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO + PAN(EDR)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                                       }
-                                       break;
-                               case (BT_INFO_HID | BT_INFO_A2DP):
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                                       break;
-                               case (BT_INFO_HID | BT_INFO_FTP):
-                                       if (bBtHsModeExist) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                                       } else {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                                       }
-                                       break;
-                               case (BT_INFO_A2DP | BT_INFO_FTP):
-                                       if (bBtHsModeExist) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_A2DP;
-                                       } else {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_PANEDR_A2DP;
-                                       }
-                                       break;
-                               case (BT_INFO_HID | BT_INFO_A2DP | BT_INFO_FTP):
-                                       if (bBtHsModeExist) {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                                       } else {
-                                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
-                                               algorithm = BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
-                                       }
-                                       break;
-                               }
-                       } else {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], SCO only\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_SCO;
-                       }
-               } else {
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], non SCO\n"));
-                       switch (btInfo&0xe0) {
-                       case BT_INFO_HID:
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_HID;
-                               break;
-                       case BT_INFO_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex],  A2DP\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_A2DP;
-                               break;
-                       case BT_INFO_FTP:
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], PAN(EDR)\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                               break;
-                       case (BT_INFO_HID | BT_INFO_A2DP):
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP\n"));
-                               algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                               break;
-                       case (BT_INFO_HID|BT_INFO_FTP):
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_HID;
-                               }
-                               break;
-                       case (BT_INFO_A2DP|BT_INFO_FTP):
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], A2DP + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_PANEDR_A2DP;
-                               }
-                               break;
-                       case (BT_INFO_HID|BT_INFO_A2DP|BT_INFO_FTP):
-                               if (bBtHsModeExist) {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(HS)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP;
-                               } else {
-                                       RTPRINT(FBT, BT_TRACE, ("[BTCoex], HID + A2DP + PAN(EDR)\n"));
-                                       algorithm = BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR;
-                               }
-                               break;
-                       }
-
-               }
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTC2H], BTInfo: bConnect = false\n"));
-               pBtdm8723->btStatus = BT_2ANT_BT_STATUS_IDLE;
-       }
-
-       pBtdm8723->curAlgorithm = algorithm;
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], Algorithm = %d \n", pBtdm8723->curAlgorithm));
-
-/* From */
-       BTDM_CheckWiFiState(padapter);
-       if (pBtMgnt->ExtConfig.bManualControl) {
-               RTPRINT(FBT, BT_TRACE, ("Action Manual control, won't execute bt coexist mechanism!!\n"));
-               return;
-       }
-}
-
-void BTDM_2AntBtCoexist8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct bt_dgb *pBtDbg = &pBTInfo->BtDbg;
-       u8 btInfoOriginal = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct btdm_8723a_2ant *pBtdm8723 = &pHalData->bt_coexist.halCoex8723.btdm2Ant;
-
-       if (BTDM_BtProfileSupport(padapter)) {
-               if (pBtMgnt->ExtConfig.bHoldForBtOperation) {
-                       RTPRINT(FBT, BT_TRACE, ("Action for BT Operation adjust!!\n"));
-                       return;
-               }
-               if (pBtMgnt->ExtConfig.bHoldPeriodCnt) {
-                       RTPRINT(FBT, BT_TRACE, ("Hold BT inquiry/page scan setting (cnt = %d)!!\n",
-                               pBtMgnt->ExtConfig.bHoldPeriodCnt));
-                       if (pBtMgnt->ExtConfig.bHoldPeriodCnt >= 11) {
-                               pBtMgnt->ExtConfig.bHoldPeriodCnt = 0;
-                               /*  next time the coexist parameters should be reset again. */
-                       } else {
-                               pBtMgnt->ExtConfig.bHoldPeriodCnt++;
-                       }
-                       return;
-               }
-
-               if (pBtDbg->dbgCtrl)
-                       RTPRINT(FBT, BT_TRACE, ("[Dbg control], "));
-
-               pBtdm8723->curAlgorithm = btdm_ActionAlgorithm(padapter);
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Algorithm = %d \n", pBtdm8723->curAlgorithm));
-
-               if (btdm_Is2Ant8723ACommonAction(padapter)) {
-                       RTPRINT(FBT, BT_TRACE, ("Action 2-Ant common.\n"));
-                       pBtdm8723->bResetTdmaAdjust = true;
-               } else {
-                       if (pBtdm8723->curAlgorithm != pBtdm8723->preAlgorithm) {
-                               RTPRINT(FBT, BT_TRACE, ("[BTCoex], preAlgorithm =%d, curAlgorithm =%d\n",
-                               pBtdm8723->preAlgorithm, pBtdm8723->curAlgorithm));
-                               pBtdm8723->bResetTdmaAdjust = true;
-                       }
-                       switch (pBtdm8723->curAlgorithm) {
-                       case BT_2ANT_COEX_ALGO_SCO:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = SCO.\n"));
-                               btdm_2Ant8723ASCOAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID.\n"));
-                               btdm_2Ant8723AHIDAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = A2DP.\n"));
-                               btdm_2Ant8723AA2DPAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN(EDR).\n"));
-                               btdm_2Ant8723APANEDRAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANHS:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HS mode.\n"));
-                               btdm_2Ant8723APANHSAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN+A2DP.\n"));
-                               btdm_2Ant8723APANEDRA2DPAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR_HID:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));
-                               btdm_2Ant8723APANEDRHIDAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));
-                               btdm_2Ant8723AHIDA2DPPANEDRAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID+A2DP.\n"));
-                               btdm_2Ant8723AHIDA2DPAction(padapter);
-                               break;
-                       default:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = 0.\n"));
-                               btdm_2Ant8723AA2DPAction(padapter);
-                               break;
-                       }
-                       pBtdm8723->preAlgorithm = pBtdm8723->curAlgorithm;
-               }
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex] Get bt info by fw!!\n"));
-               /* msg shows c2h rsp for bt_info is received or not. */
-               if (pHalData->bt_coexist.halCoex8723.bC2hBtInfoReqSent)
-                       RTPRINT(FBT, BT_TRACE, ("[BTCoex] c2h for btInfo not rcvd yet!!\n"));
-
-               btInfoOriginal = pHalData->bt_coexist.halCoex8723.c2hBtInfoOriginal;
-
-               if (pBtMgnt->ExtConfig.bHoldForBtOperation) {
-                       RTPRINT(FBT, BT_TRACE, ("Action for BT Operation adjust!!\n"));
-                       return;
-               }
-               if (pBtMgnt->ExtConfig.bHoldPeriodCnt) {
-                       RTPRINT(FBT, BT_TRACE,
-                               ("Hold BT inquiry/page scan setting (cnt = %d)!!\n",
-                               pBtMgnt->ExtConfig.bHoldPeriodCnt));
-                       if (pBtMgnt->ExtConfig.bHoldPeriodCnt >= 11) {
-                               pBtMgnt->ExtConfig.bHoldPeriodCnt = 0;
-                               /*  next time the coexist parameters should be reset again. */
-                       } else {
-                                pBtMgnt->ExtConfig.bHoldPeriodCnt++;
-                       }
-                       return;
-               }
-
-               if (pBtDbg->dbgCtrl)
-                       RTPRINT(FBT, BT_TRACE, ("[Dbg control], "));
-               if (btdm_Is2Ant8723ACommonAction(padapter)) {
-                       RTPRINT(FBT, BT_TRACE, ("Action 2-Ant common.\n"));
-                       pBtdm8723->bResetTdmaAdjust = true;
-               } else {
-                       if (pBtdm8723->curAlgorithm != pBtdm8723->preAlgorithm) {
-                               RTPRINT(FBT, BT_TRACE,
-                                       ("[BTCoex], preAlgorithm =%d, curAlgorithm =%d\n",
-                                       pBtdm8723->preAlgorithm,
-                                       pBtdm8723->curAlgorithm));
-                               pBtdm8723->bResetTdmaAdjust = true;
-                       }
-                       switch (pBtdm8723->curAlgorithm) {
-                       case BT_2ANT_COEX_ALGO_SCO:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = SCO.\n"));
-                               btdm_2Ant8723ASCOAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID.\n"));
-                               btdm_2Ant8723AHIDAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = A2DP.\n"));
-                               btdm_2Ant8723AA2dp(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN(EDR).\n"));
-                               btdm_2Ant8723APANEDRAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANHS:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HS mode.\n"));
-                               btdm_2Ant8723APANHSAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN+A2DP.\n"));
-                               btdm_2Ant8723APANEDRA2DPAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_PANEDR_HID:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = PAN(EDR)+HID.\n"));
-                               btdm_2Ant8723APANEDRHIDAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID+A2DP+PAN.\n"));
-                               btdm_2Ant8723AHIDA2DPPANEDRAction(padapter);
-                               break;
-                       case BT_2ANT_COEX_ALGO_HID_A2DP:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = HID+A2DP.\n"));
-                               btdm_2Ant8723AHIDA2DPAction(padapter);
-                               break;
-                       default:
-                               RTPRINT(FBT, BT_TRACE, ("Action 2-Ant, algorithm = 0.\n"));
-                               btdm_2Ant8723AA2DPAction(padapter);
-                               break;
-                       }
-                       pBtdm8723->preAlgorithm = pBtdm8723->curAlgorithm;
-               }
-       }
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc8723.c ===== */
-
-static u8 btCoexDbgBuf[BT_TMP_BUF_SIZE];
-
-static const char *const BtProfileString[] = {
-       "NONE",
-       "A2DP",
-       "PAN",
-       "HID",
-       "SCO",
-};
-
-static const char *const BtSpecString[] = {
-       "1.0b",
-       "1.1",
-       "1.2",
-       "2.0+EDR",
-       "2.1+EDR",
-       "3.0+HS",
-       "4.0",
-};
-
-static const char *const BtLinkRoleString[] = {
-       "Master",
-       "Slave",
-};
-
-static u8 btdm_BtWifiAntNum(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct bt_coexist_8723a *pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       if (Ant_x2 == pHalData->bt_coexist.BT_Ant_Num) {
-               if (Ant_x2 == pBtCoex->TotalAntNum)
-                       return Ant_x2;
-               else
-                       return Ant_x1;
-       } else {
-               return Ant_x1;
-       }
-       return Ant_x2;
-}
-
-static void btdm_BtHwCountersMonitor(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u32     regHPTxRx, regLPTxRx, u4Tmp;
-       u32     regHPTx = 0, regHPRx = 0, regLPTx = 0, regLPRx = 0;
-
-       regHPTxRx = REG_HIGH_PRIORITY_TXRX;
-       regLPTxRx = REG_LOW_PRIORITY_TXRX;
-
-       u4Tmp = rtl8723au_read32(padapter, regHPTxRx);
-       regHPTx = u4Tmp & bMaskLWord;
-       regHPRx = (u4Tmp & bMaskHWord)>>16;
-
-       u4Tmp = rtl8723au_read32(padapter, regLPTxRx);
-       regLPTx = u4Tmp & bMaskLWord;
-       regLPRx = (u4Tmp & bMaskHWord)>>16;
-
-       pHalData->bt_coexist.halCoex8723.highPriorityTx = regHPTx;
-       pHalData->bt_coexist.halCoex8723.highPriorityRx = regHPRx;
-       pHalData->bt_coexist.halCoex8723.lowPriorityTx = regLPTx;
-       pHalData->bt_coexist.halCoex8723.lowPriorityRx = regLPRx;
-
-       RTPRINT(FBT, BT_TRACE, ("High Priority Tx/Rx = %d / %d\n", regHPTx, regHPRx));
-       RTPRINT(FBT, BT_TRACE, ("Low Priority Tx/Rx = %d / %d\n", regLPTx, regLPRx));
-
-       /*  reset counter */
-       rtl8723au_write8(padapter, 0x76e, 0xc);
-}
-
-/*  This function check if 8723 bt is disabled */
-static void btdm_BtEnableDisableCheck8723A(struct rtw_adapter *padapter)
-{
-       u8 btAlife = true;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-#ifdef CHECK_BT_EXIST_FROM_REG
-       u8 val8;
-
-       /*  ox68[28]= 1 => BT enable; otherwise disable */
-       val8 = rtl8723au_read8(padapter, 0x6B);
-       if (!(val8 & BIT(4)))
-               btAlife = false;
-
-       if (btAlife)
-               pHalData->bt_coexist.bCurBtDisabled = false;
-       else
-               pHalData->bt_coexist.bCurBtDisabled = true;
-#else
-       if (pHalData->bt_coexist.halCoex8723.highPriorityTx == 0 &&
-           pHalData->bt_coexist.halCoex8723.highPriorityRx == 0 &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityTx == 0 &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityRx == 0)
-               btAlife = false;
-       if (pHalData->bt_coexist.halCoex8723.highPriorityTx == 0xeaea &&
-           pHalData->bt_coexist.halCoex8723.highPriorityRx == 0xeaea &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityTx == 0xeaea &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityRx == 0xeaea)
-               btAlife = false;
-       if (pHalData->bt_coexist.halCoex8723.highPriorityTx == 0xffff &&
-           pHalData->bt_coexist.halCoex8723.highPriorityRx == 0xffff &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityTx == 0xffff &&
-           pHalData->bt_coexist.halCoex8723.lowPriorityRx == 0xffff)
-               btAlife = false;
-       if (btAlife) {
-               pHalData->bt_coexist.btActiveZeroCnt = 0;
-               pHalData->bt_coexist.bCurBtDisabled = false;
-               RTPRINT(FBT, BT_TRACE, ("8723A BT is enabled !!\n"));
-       } else {
-               pHalData->bt_coexist.btActiveZeroCnt++;
-               RTPRINT(FBT, BT_TRACE, ("8723A bt all counters = 0, %d times!!\n",
-                               pHalData->bt_coexist.btActiveZeroCnt));
-               if (pHalData->bt_coexist.btActiveZeroCnt >= 2) {
-                       pHalData->bt_coexist.bCurBtDisabled = true;
-                       RTPRINT(FBT, BT_TRACE, ("8723A BT is disabled !!\n"));
-               }
-       }
-#endif
-
-       if (!pHalData->bt_coexist.bCurBtDisabled) {
-               if (BTDM_IsWifiConnectionExist(padapter))
-                       BTDM_SetFwChnlInfo(padapter, RT_MEDIA_CONNECT);
-               else
-                       BTDM_SetFwChnlInfo(padapter, RT_MEDIA_DISCONNECT);
-       }
-
-       if (pHalData->bt_coexist.bPreBtDisabled !=
-           pHalData->bt_coexist.bCurBtDisabled) {
-               RTPRINT(FBT, BT_TRACE, ("8723A BT is from %s to %s!!\n",
-                       (pHalData->bt_coexist.bPreBtDisabled ? "disabled":"enabled"),
-                       (pHalData->bt_coexist.bCurBtDisabled ? "disabled":"enabled")));
-               pHalData->bt_coexist.bPreBtDisabled = pHalData->bt_coexist.bCurBtDisabled;
-       }
-}
-
-static void btdm_BTCoexist8723AHandler(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-
-       pHalData = GET_HAL_DATA(padapter);
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x2) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], 2 Ant mechanism\n"));
-               BTDM_2AntBtCoexist8723A(padapter);
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], 1 Ant mechanism\n"));
-               BTDM_1AntBtCoexist8723A(padapter);
-       }
-
-       if (!BTDM_IsSameCoexistState(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Coexist State[bitMap] change from 0x%"i64fmt"x to 0x%"i64fmt"x\n",
-                       pHalData->bt_coexist.PreviousState,
-                       pHalData->bt_coexist.CurrentState));
-               pHalData->bt_coexist.PreviousState = pHalData->bt_coexist.CurrentState;
-
-               RTPRINT(FBT, BT_TRACE, ("["));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_BT30)
-                       RTPRINT(FBT, BT_TRACE, ("BT 3.0, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_HT20)
-                       RTPRINT(FBT, BT_TRACE, ("HT20, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_HT40)
-                       RTPRINT(FBT, BT_TRACE, ("HT40, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_LEGACY)
-                       RTPRINT(FBT, BT_TRACE, ("Legacy, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_RSSI_LOW)
-                       RTPRINT(FBT, BT_TRACE, ("Rssi_Low, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_RSSI_MEDIUM)
-                       RTPRINT(FBT, BT_TRACE, ("Rssi_Mid, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_RSSI_HIGH)
-                       RTPRINT(FBT, BT_TRACE, ("Rssi_High, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_IDLE)
-                       RTPRINT(FBT, BT_TRACE, ("Wifi_Idle, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_UPLINK)
-                       RTPRINT(FBT, BT_TRACE, ("Wifi_Uplink, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_WIFI_DOWNLINK)
-                       RTPRINT(FBT, BT_TRACE, ("Wifi_Downlink, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_BT_IDLE)
-                       RTPRINT(FBT, BT_TRACE, ("BT_idle, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_PROFILE_HID)
-                       RTPRINT(FBT, BT_TRACE, ("PRO_HID, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_PROFILE_A2DP)
-                       RTPRINT(FBT, BT_TRACE, ("PRO_A2DP, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_PROFILE_PAN)
-                       RTPRINT(FBT, BT_TRACE, ("PRO_PAN, "));
-               if (pHalData->bt_coexist.CurrentState & BT_COEX_STATE_PROFILE_SCO)
-                       RTPRINT(FBT, BT_TRACE, ("PRO_SCO, "));
-               RTPRINT(FBT, BT_TRACE, ("]\n"));
-       }
-}
-
-/*  extern function start with BTDM_ */
-u32 BTDM_BtTxRxCounterH(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u32     counters;
-
-       counters = pHalData->bt_coexist.halCoex8723.highPriorityTx+
-               pHalData->bt_coexist.halCoex8723.highPriorityRx;
-       return counters;
-}
-
-u32 BTDM_BtTxRxCounterL(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u32     counters;
-
-       counters = pHalData->bt_coexist.halCoex8723.lowPriorityTx+
-               pHalData->bt_coexist.halCoex8723.lowPriorityRx;
-       return counters;
-}
-
-void BTDM_SetFwChnlInfo(struct rtw_adapter *padapter, enum rt_media_status mstatus)
-{
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 H2C_Parameter[3] = {0};
-       u8 chnl;
-
-       /*  opMode */
-       if (RT_MEDIA_CONNECT == mstatus)
-               H2C_Parameter[0] = 0x1; /*  0: disconnected, 1:connected */
-
-       if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE)) {
-               /*  channel */
-               chnl = pmlmeext->cur_channel;
-               if (BTDM_IsHT40(padapter)) {
-                       if (pmlmeext->cur_ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                               chnl -= 2;
-                       else if (pmlmeext->cur_ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                               chnl += 2;
-               }
-               H2C_Parameter[1] = chnl;
-       } else {        /*  check if HS link is exists */
-               /*  channel */
-               if (BT_Operation(padapter))
-                       H2C_Parameter[1] = pBtMgnt->BTChannel;
-               else
-                       H2C_Parameter[1] = pmlmeext->cur_channel;
-       }
-
-       if (BTDM_IsHT40(padapter))
-               H2C_Parameter[2] = 0x30;
-       else
-               H2C_Parameter[2] = 0x20;
-
-       FillH2CCmd(padapter, 0x19, 3, H2C_Parameter);
-}
-
-u8 BTDM_IsWifiConnectionExist(struct rtw_adapter *padapter)
-{
-       u8 bRet = false;
-
-       if (BTHCI_HsConnectionEstablished(padapter))
-               bRet = true;
-
-       if (check_fwstate(&padapter->mlmepriv, WIFI_ASOC_STATE) == true)
-               bRet = true;
-
-       return bRet;
-}
-
-void BTDM_SetFw3a(
-       struct rtw_adapter *padapter,
-       u8 byte1,
-       u8 byte2,
-       u8 byte3,
-       u8 byte4,
-       u8 byte5
-       )
-{
-       u8 H2C_Parameter[5] = {0};
-
-       if (rtl8723a_BT_using_antenna_1(padapter)) {
-               if ((!check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE)) &&
-                   (get_fwstate(&padapter->mlmepriv) != WIFI_NULL_STATE)) {
-                       /*  for softap mode */
-                       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-                       struct bt_coexist_8723a *pBtCoex = &pHalData->bt_coexist.halCoex8723;
-                       u8 BtState = pBtCoex->c2hBtInfo;
-
-                       if ((BtState != BT_INFO_STATE_NO_CONNECTION) &&
-                           (BtState != BT_INFO_STATE_CONNECT_IDLE)) {
-                               if (byte1 & BIT(4)) {
-                                       byte1 &= ~BIT(4);
-                                       byte1 |= BIT(5);
-                               }
-
-                               byte5 |= BIT(5);
-                               if (byte5 & BIT(6))
-                                       byte5 &= ~BIT(6);
-                       }
-               }
-       }
-
-       H2C_Parameter[0] = byte1;
-       H2C_Parameter[1] = byte2;
-       H2C_Parameter[2] = byte3;
-       H2C_Parameter[3] = byte4;
-       H2C_Parameter[4] = byte5;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], FW write 0x3a(5bytes) = 0x%02x%08x\n",
-               H2C_Parameter[0],
-               H2C_Parameter[1]<<24|H2C_Parameter[2]<<16|H2C_Parameter[3]<<8|H2C_Parameter[4]));
-
-       FillH2CCmd(padapter, 0x3a, 5, H2C_Parameter);
-}
-
-void BTDM_QueryBtInformation(struct rtw_adapter *padapter)
-{
-       u8 H2C_Parameter[1] = {0};
-       struct hal_data_8723a *pHalData;
-       struct bt_coexist_8723a *pBtCoex;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       if (!rtl8723a_BT_enabled(padapter)) {
-               pBtCoex->c2hBtInfo = BT_INFO_STATE_DISABLED;
-               pBtCoex->bC2hBtInfoReqSent = false;
-               return;
-       }
-
-       if (pBtCoex->c2hBtInfo == BT_INFO_STATE_DISABLED)
-               pBtCoex->c2hBtInfo = BT_INFO_STATE_NO_CONNECTION;
-
-       if (pBtCoex->bC2hBtInfoReqSent == true)
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], didn't recv previous BtInfo report!\n"));
-       else
-               pBtCoex->bC2hBtInfoReqSent = true;
-
-       H2C_Parameter[0] |= BIT(0);     /*  trigger */
-
-/*RTPRINT(FBT, BT_TRACE, ("[BTCoex], Query Bt information, write 0x38 = 0x%x\n", */
-/*H2C_Parameter[0])); */
-
-       FillH2CCmd(padapter, 0x38, 1, H2C_Parameter);
-}
-
-void BTDM_SetSwRfRxLpfCorner(struct rtw_adapter *padapter, u8 type)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (BT_RF_RX_LPF_CORNER_SHRINK == type) {
-               /* Shrink RF Rx LPF corner */
-               RTPRINT(FBT, BT_TRACE, ("Shrink RF Rx LPF corner!!\n"));
-               PHY_SetRFReg(padapter, PathA, 0x1e, bRFRegOffsetMask, 0xf0ff7);
-               pHalData->bt_coexist.bSWCoexistAllOff = false;
-       } else if (BT_RF_RX_LPF_CORNER_RESUME == type) {
-               /* Resume RF Rx LPF corner */
-               RTPRINT(FBT, BT_TRACE, ("Resume RF Rx LPF corner!!\n"));
-               PHY_SetRFReg(padapter, PathA, 0x1e, bRFRegOffsetMask, pHalData->bt_coexist.BtRfRegOrigin1E);
-       }
-}
-
-void
-BTDM_SetSwPenaltyTxRateAdaptive(
-       struct rtw_adapter *padapter,
-       u8 raType
-       )
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 tmpU1;
-
-       tmpU1 = rtl8723au_read8(padapter, 0x4fd);
-       tmpU1 |= BIT(0);
-       if (BT_TX_RATE_ADAPTIVE_LOW_PENALTY == raType) {
-               tmpU1 &= ~BIT(2);
-               pHalData->bt_coexist.bSWCoexistAllOff = false;
-       } else if (BT_TX_RATE_ADAPTIVE_NORMAL == raType) {
-               tmpU1 |= BIT(2);
-       }
-
-       rtl8723au_write8(padapter, 0x4fd, tmpU1);
-}
-
-void BTDM_SetFwDecBtPwr(struct rtw_adapter *padapter, u8 bDecBtPwr)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[1] = {0};
-
-       H2C_Parameter[0] = 0;
-
-       if (bDecBtPwr) {
-               H2C_Parameter[0] |= BIT(1);
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], decrease Bt Power : %s, write 0x21 = 0x%x\n",
-               (bDecBtPwr ? "Yes!!" : "No!!"), H2C_Parameter[0]));
-
-       FillH2CCmd(padapter, 0x21, 1, H2C_Parameter);
-}
-
-u8 BTDM_BtProfileSupport(struct rtw_adapter *padapter)
-{
-       u8 bRet = false;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pBtMgnt->bSupportProfile &&
-           !pHalData->bt_coexist.halCoex8723.bForceFwBtInfo)
-               bRet = true;
-
-       return bRet;
-}
-
-static void BTDM_AdjustForBtOperation8723A(struct rtw_adapter *padapter)
-{
-       /* BTDM_2AntAdjustForBtOperation8723(padapter); */
-}
-
-static void BTDM_FwC2hBtRssi8723A(struct rtw_adapter *padapter, u8 *tmpBuf)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 percent, u1tmp;
-
-       u1tmp = tmpBuf[0];
-       percent = u1tmp*2+10;
-
-       pHalData->bt_coexist.halCoex8723.btRssi = percent;
-/*RTPRINT(FBT, BT_TRACE, ("[BTC2H], BT RSSI =%d\n", percent)); */
-}
-
-void
-rtl8723a_fw_c2h_BT_info(struct rtw_adapter *padapter, u8 *tmpBuf, u8 length)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_coexist_8723a *pBtCoex;
-       u8 i;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       pBtCoex->bC2hBtInfoReqSent = false;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTC2H], BT info[%d]=[", length));
-
-       pBtCoex->btRetryCnt = 0;
-       for (i = 0; i < length; i++) {
-               switch (i) {
-               case 0:
-                       pBtCoex->c2hBtInfoOriginal = tmpBuf[i];
-                       break;
-               case 1:
-                       pBtCoex->btRetryCnt = tmpBuf[i];
-                       break;
-               case 2:
-                       BTDM_FwC2hBtRssi8723A(padapter, &tmpBuf[i]);
-                       break;
-               case 3:
-                       pBtCoex->btInfoExt = tmpBuf[i]&BIT(0);
-                       break;
-               }
-
-               if (i == length-1)
-                       RTPRINT(FBT, BT_TRACE, ("0x%02x]\n", tmpBuf[i]));
-               else
-                       RTPRINT(FBT, BT_TRACE, ("0x%02x, ", tmpBuf[i]));
-       }
-       RTPRINT(FBT, BT_TRACE, ("[BTC2H], BT RSSI =%d\n", pBtCoex->btRssi));
-       if (pBtCoex->btInfoExt)
-               RTPRINT(FBT, BT_TRACE, ("[BTC2H], pBtCoex->btInfoExt =%x\n", pBtCoex->btInfoExt));
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntFwC2hBtInfo8723A(padapter);
-       else
-               BTDM_2AntFwC2hBtInfo8723A(padapter);
-
-       if (pBtMgnt->ExtConfig.bManualControl) {
-               RTPRINT(FBT, BT_TRACE, ("%s: Action Manual control!!\n", __func__));
-               return;
-       }
-
-       btdm_BTCoexist8723AHandler(padapter);
-}
-
-static void BTDM_Display8723ABtCoexInfo(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct bt_coexist_8723a *pBtCoex = &pHalData->bt_coexist.halCoex8723;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       u8 u1Tmp, u1Tmp1, u1Tmp2, i, btInfoExt, psTdmaCase = 0;
-       u32 u4Tmp[4];
-       u8 antNum = Ant_x2;
-
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n ============[BT Coexist info]============");
-       DCMD_Printf(btCoexDbgBuf);
-
-       if (!rtl8723a_BT_coexist(padapter)) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n BT not exists !!!");
-               DCMD_Printf(btCoexDbgBuf);
-               return;
-       }
-
-       antNum = btdm_BtWifiAntNum(padapter);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d/%d ", "Ant mechanism PG/Now run :", \
-               ((pHalData->bt_coexist.BT_Ant_Num == Ant_x2) ? 2 : 1), ((antNum == Ant_x2) ? 2 : 1));
-       DCMD_Printf(btCoexDbgBuf);
-
-       if (pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "[Action Manual control]!!");
-               DCMD_Printf(btCoexDbgBuf);
-       } else {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s / %d", "BT stack/ hci ext ver", \
-                       ((pBtMgnt->bSupportProfile) ? "Yes" : "No"), pBtMgnt->ExtConfig.HCIExtensionVer);
-               DCMD_Printf(btCoexDbgBuf);
-       }
-
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\n %-35s = / %d", "Dot11 channel / BT channel", \
-               pBtMgnt->BTChannel);
-               DCMD_Printf(btCoexDbgBuf);
-
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\n %-35s = %d / %d / %d", "Wifi/BT/HS rssi", \
-               BTDM_GetRxSS(padapter),
-               pHalData->bt_coexist.halCoex8723.btRssi,
-               pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB);
-                       DCMD_Printf(btCoexDbgBuf);
-
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\n %-35s = %s / %s ", "WIfi status",
-                       ((BTDM_Legacy(padapter)) ? "Legacy" : (((BTDM_IsHT40(padapter)) ? "HT40" : "HT20"))),
-                       ((!BTDM_IsWifiBusy(padapter)) ? "idle" : ((BTDM_IsWifiUplink(padapter)) ? "uplink" : "downlink")));
-               DCMD_Printf(btCoexDbgBuf);
-
-               if (pBtMgnt->bSupportProfile) {
-                       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d / %d / %d", "SCO/HID/PAN/A2DP",
-                               ((BTHCI_CheckProfileExist(padapter, BT_PROFILE_SCO)) ? 1 : 0),
-                               ((BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID)) ? 1 : 0),
-                               ((BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) ? 1 : 0),
-                               ((BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) ? 1 : 0));
-               DCMD_Printf(btCoexDbgBuf);
-
-                       for (i = 0; i < pBtMgnt->ExtConfig.NumberOfHandle; i++) {
-                               if (pBtMgnt->ExtConfig.HCIExtensionVer >= 1) {
-                                       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/ %s/ %s", "Bt link type/spec/role",
-                                               BtProfileString[pBtMgnt->ExtConfig.linkInfo[i].BTProfile],
-                                               BtSpecString[pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec],
-                                               BtLinkRoleString[pBtMgnt->ExtConfig.linkInfo[i].linkRole]);
-                                       DCMD_Printf(btCoexDbgBuf);
-
-                                       btInfoExt = pHalData->bt_coexist.halCoex8723.btInfoExt;
-                                       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s", "A2DP rate", \
-                                                (btInfoExt & BIT(0)) ?
-                                                "Basic rate" : "EDR rate");
-                                       DCMD_Printf(btCoexDbgBuf);
-                               } else {
-                                       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %s/ %s", "Bt link type/spec", \
-                                               BtProfileString[pBtMgnt->ExtConfig.linkInfo[i].BTProfile],
-                                               BtSpecString[pBtMgnt->ExtConfig.linkInfo[i].BTCoreSpec]);
-                                       DCMD_Printf(btCoexDbgBuf);
-                               }
-                       }
-               }
-       }
-
-       /*  Sw mechanism */
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Sw BT Coex mechanism]============");
-               DCMD_Printf(btCoexDbgBuf);
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ", "AGC Table", \
-                       pBtCoex->btdm2Ant.bCurAgcTableEn);
-               DCMD_Printf(btCoexDbgBuf);
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ", "ADC Backoff", \
-                       pBtCoex->btdm2Ant.bCurAdcBackOff);
-               DCMD_Printf(btCoexDbgBuf);
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ", "Low penalty RA", \
-                       pBtCoex->btdm2Ant.bCurLowPenaltyRa);
-               DCMD_Printf(btCoexDbgBuf);
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ", "RF Rx LPF Shrink", \
-                       pBtCoex->btdm2Ant.bCurRfRxLpfShrink);
-               DCMD_Printf(btCoexDbgBuf);
-       }
-       u4Tmp[0] = PHY_QueryRFReg(padapter, PathA, 0x1e, 0xff0);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x", "RF-A, 0x1e[11:4]/original val", \
-               u4Tmp[0], pHalData->bt_coexist.BtRfRegOrigin1E);
-       DCMD_Printf(btCoexDbgBuf);
-
-       /*  Fw mechanism */
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Fw BT Coex mechanism]============");
-               DCMD_Printf(btCoexDbgBuf);
-       }
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-                       psTdmaCase = pHalData->bt_coexist.halCoex8723.btdm1Ant.curPsTdma;
-               else
-                       psTdmaCase = pHalData->bt_coexist.halCoex8723.btdm2Ant.curPsTdma;
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %*ph case-%d",
-                        "PS TDMA(0x3a)", 5, pHalData->bt_coexist.fw3aVal, psTdmaCase);
-               DCMD_Printf(btCoexDbgBuf);
-
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d ", "Decrease Bt Power", \
-                       pBtCoex->btdm2Ant.bCurDecBtPwr);
-               DCMD_Printf(btCoexDbgBuf);
-       }
-       u1Tmp = rtl8723au_read8(padapter, 0x778);
-       u1Tmp1 = rtl8723au_read8(padapter, 0x783);
-       u1Tmp2 = rtl8723au_read8(padapter, 0x796);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x", "0x778/ 0x783/ 0x796", \
-               u1Tmp, u1Tmp1, u1Tmp2);
-       DCMD_Printf(btCoexDbgBuf);
-
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x / 0x%x", "Sw DacSwing Ctrl/Val", \
-                       pBtCoex->btdm2Ant.bCurDacSwingOn, pBtCoex->btdm2Ant.curDacSwingLvl);
-               DCMD_Printf(btCoexDbgBuf);
-       }
-       u4Tmp[0] =  rtl8723au_read32(padapter, 0x880);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x880", \
-               u4Tmp[0]);
-       DCMD_Printf(btCoexDbgBuf);
-
-       /*  Hw mechanism */
-       if (!pBtMgnt->ExtConfig.bManualControl) {
-               snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s", "============[Hw BT Coex mechanism]============");
-               DCMD_Printf(btCoexDbgBuf);
-       }
-
-       u1Tmp = rtl8723au_read8(padapter, 0x40);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x40", \
-               u1Tmp);
-       DCMD_Printf(btCoexDbgBuf);
-
-       u4Tmp[0] = rtl8723au_read32(padapter, 0x550);
-       u1Tmp = rtl8723au_read8(padapter, 0x522);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/0x%x", "0x550(bcn contrl)/0x522", \
-               u4Tmp[0], u1Tmp);
-       DCMD_Printf(btCoexDbgBuf);
-
-       u4Tmp[0] = rtl8723au_read32(padapter, 0x484);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x484(rate adaptive)", \
-               u4Tmp[0]);
-       DCMD_Printf(btCoexDbgBuf);
-
-       u4Tmp[0] = rtl8723au_read32(padapter, 0x50);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0xc50(dig)", \
-               u4Tmp[0]);
-       DCMD_Printf(btCoexDbgBuf);
-
-       u4Tmp[0] = rtl8723au_read32(padapter, 0xda0);
-       u4Tmp[1] = rtl8723au_read32(padapter, 0xda4);
-       u4Tmp[2] = rtl8723au_read32(padapter, 0xda8);
-       u4Tmp[3] = rtl8723au_read32(padapter, 0xdac);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0xda0/0xda4/0xda8/0xdac(FA cnt)", \
-               u4Tmp[0], u4Tmp[1], u4Tmp[2], u4Tmp[3]);
-       DCMD_Printf(btCoexDbgBuf);
-
-       u4Tmp[0] = rtl8723au_read32(padapter, 0x6c0);
-       u4Tmp[1] = rtl8723au_read32(padapter, 0x6c4);
-       u4Tmp[2] = rtl8723au_read32(padapter, 0x6c8);
-       u1Tmp = rtl8723au_read8(padapter, 0x6cc);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x/ 0x%x/ 0x%x/ 0x%x", "0x6c0/0x6c4/0x6c8/0x6cc(coexTable)", \
-               u4Tmp[0], u4Tmp[1], u4Tmp[2], u1Tmp);
-       DCMD_Printf(btCoexDbgBuf);
-
-       /* u4Tmp = rtl8723au_read32(padapter, 0x770); */
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "0x770(Hi pri Rx[31:16]/Tx[15:0])", \
-               pHalData->bt_coexist.halCoex8723.highPriorityRx,
-               pHalData->bt_coexist.halCoex8723.highPriorityTx);
-       DCMD_Printf(btCoexDbgBuf);
-       /* u4Tmp = rtl8723au_read32(padapter, 0x774); */
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = %d / %d", "0x774(Lo pri Rx[31:16]/Tx[15:0])", \
-               pHalData->bt_coexist.halCoex8723.lowPriorityRx,
-               pHalData->bt_coexist.halCoex8723.lowPriorityTx);
-       DCMD_Printf(btCoexDbgBuf);
-
-       /*  Tx mgnt queue hang or not, 0x41b should = 0xf, ex: 0xd ==>hang */
-       u1Tmp = rtl8723au_read8(padapter, 0x41b);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "0x41b (hang chk == 0xf)", \
-               u1Tmp);
-       DCMD_Printf(btCoexDbgBuf);
-       snprintf(btCoexDbgBuf, BT_TMP_BUF_SIZE, "\r\n %-35s = 0x%x", "lastHMEBoxNum", \
-               pHalData->LastHMEBoxNum);
-       DCMD_Printf(btCoexDbgBuf);
-}
-
-static void
-BTDM_8723ASignalCompensation(struct rtw_adapter *padapter,
-                            u8 *rssi_wifi, u8 *rssi_bt)
-{
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntSignalCompensation(padapter, rssi_wifi, rssi_bt);
-}
-
-static void BTDM_8723AInit(struct rtw_adapter *padapter)
-{
-       if (btdm_BtWifiAntNum(padapter) == Ant_x2)
-               BTDM_2AntParaInit(padapter);
-       else
-               BTDM_1AntParaInit(padapter);
-}
-
-static void BTDM_HWCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x2)
-               BTDM_2AntHwCoexAllOff8723A(padapter);
-}
-
-static void BTDM_FWCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x2)
-               BTDM_2AntFwCoexAllOff8723A(padapter);
-}
-
-static void BTDM_SWCoexAllOff8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x2)
-               BTDM_2AntSwCoexAllOff8723A(padapter);
-}
-
-static void
-BTDM_Set8723ABtCoexCurrAntNum(struct rtw_adapter *padapter, u8 antNum)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct bt_coexist_8723a *pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       if (antNum == 1)
-               pBtCoex->TotalAntNum = Ant_x1;
-       else if (antNum == 2)
-               pBtCoex->TotalAntNum = Ant_x2;
-}
-
-void rtl8723a_BT_lps_leave(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntLpsLeave(padapter);
-}
-
-static void BTDM_ForHalt8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntForHalt(padapter);
-}
-
-static void BTDM_WifiScanNotify8723A(struct rtw_adapter *padapter, u8 scanType)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntWifiScanNotify(padapter, scanType);
-}
-
-static void
-BTDM_WifiAssociateNotify8723A(struct rtw_adapter *padapter, u8 action)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntWifiAssociateNotify(padapter, action);
-}
-
-static void
-BTDM_MediaStatusNotify8723A(struct rtw_adapter *padapter,
-                           enum rt_media_status mstatus)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], MediaStatusNotify, %s\n",
-               mstatus?"connect":"disconnect"));
-
-       BTDM_SetFwChnlInfo(padapter, mstatus);
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntMediaStatusNotify(padapter, mstatus);
-}
-
-static void BTDM_ForDhcp8723A(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               BTDM_1AntForDhcp(padapter);
-}
-
-bool rtl8723a_BT_using_antenna_1(struct rtw_adapter *padapter)
-{
-       if (btdm_BtWifiAntNum(padapter) == Ant_x1)
-               return true;
-       else
-               return false;
-}
-
-static void BTDM_BTCoexist8723A(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_coexist_8723a *pBtCoex;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtCoex = &pHalData->bt_coexist.halCoex8723;
-
-       RTPRINT(FBT, BT_TRACE, ("[BTCoex], beacon RSSI = 0x%x(%d)\n",
-               pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB,
-               pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB));
-
-       btdm_BtHwCountersMonitor(padapter);
-       btdm_BtEnableDisableCheck8723A(padapter);
-
-       if (pBtMgnt->ExtConfig.bManualControl) {
-               RTPRINT(FBT, BT_TRACE, ("%s: Action Manual control!!\n", __func__));
-               return;
-       }
-
-       if (pBtCoex->bC2hBtInfoReqSent) {
-               if (!rtl8723a_BT_enabled(padapter)) {
-                       pBtCoex->c2hBtInfo = BT_INFO_STATE_DISABLED;
-               } else {
-                       if (pBtCoex->c2hBtInfo == BT_INFO_STATE_DISABLED)
-                               pBtCoex->c2hBtInfo = BT_INFO_STATE_NO_CONNECTION;
-               }
-
-               btdm_BTCoexist8723AHandler(padapter);
-       } else if (!rtl8723a_BT_enabled(padapter)) {
-               pBtCoex->c2hBtInfo = BT_INFO_STATE_DISABLED;
-               btdm_BTCoexist8723AHandler(padapter);
-       }
-
-       BTDM_QueryBtInformation(padapter);
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.c ===== */
-
-/*  local function start with btdm_ */
-/*  extern function start with BTDM_ */
-
-static void BTDM_SetAntenna(struct rtw_adapter *padapter, u8 who)
-{
-}
-
-void
-BTDM_SingleAnt(
-       struct rtw_adapter *padapter,
-       u8 bSingleAntOn,
-       u8 bInterruptOn,
-       u8 bMultiNAVOn
-       )
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[3] = {0};
-
-       if (pHalData->bt_coexist.BT_Ant_Num != Ant_x1)
-               return;
-
-       H2C_Parameter[2] = 0;
-       H2C_Parameter[1] = 0;
-       H2C_Parameter[0] = 0;
-
-       if (bInterruptOn) {
-               H2C_Parameter[2] |= 0x02;       /* BIT1 */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-       pHalData->bt_coexist.bInterruptOn = bInterruptOn;
-
-       if (bSingleAntOn) {
-               H2C_Parameter[2] |= 0x10;       /* BIT4 */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-       pHalData->bt_coexist.bSingleAntOn = bSingleAntOn;
-
-       if (bMultiNAVOn) {
-               H2C_Parameter[2] |= 0x20;       /* BIT5 */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-       pHalData->bt_coexist.bMultiNAVOn = bMultiNAVOn;
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], SingleAntenna =[%s:%s:%s], write 0xe = 0x%x\n",
-               bSingleAntOn?"ON":"OFF", bInterruptOn?"ON":"OFF", bMultiNAVOn?"ON":"OFF",
-               H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
-}
-
-void BTDM_CheckBTIdleChange1Ant(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       u8      stateChange = false;
-       u32                     BT_Polling, Ratio_Act, Ratio_STA;
-       u32                             BT_Active, BT_State;
-       u32                             regBTActive = 0, regBTState = 0, regBTPolling = 0;
-
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-       if (pBtMgnt->ExtConfig.bManualControl)
-               return;
-       if (pHalData->bt_coexist.BT_CoexistType != BT_CSR_BC8)
-               return;
-       if (pHalData->bt_coexist.BT_Ant_Num != Ant_x1)
-               return;
-
-       /*  The following we only consider CSR BC8 and fw version should be >= 62 */
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], FirmwareVersion = 0x%x(%d)\n",
-       pHalData->FirmwareVersion, pHalData->FirmwareVersion));
-       regBTActive = REG_BT_ACTIVE;
-       regBTState = REG_BT_STATE;
-       if (pHalData->FirmwareVersion >= FW_VER_BT_REG1)
-               regBTPolling = REG_BT_POLLING1;
-       else
-               regBTPolling = REG_BT_POLLING;
-
-       BT_Active = rtl8723au_read32(padapter, regBTActive);
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT_Active(0x%x) =%x\n", regBTActive, BT_Active));
-       BT_Active = BT_Active & 0x00ffffff;
-
-       BT_State = rtl8723au_read32(padapter, regBTState);
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT_State(0x%x) =%x\n", regBTState, BT_State));
-       BT_State = BT_State & 0x00ffffff;
-
-       BT_Polling = rtl8723au_read32(padapter, regBTPolling);
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT_Polling(0x%x) =%x\n", regBTPolling, BT_Polling));
-
-       if (BT_Active == 0xffffffff && BT_State == 0xffffffff && BT_Polling == 0xffffffff)
-               return;
-       if (BT_Polling == 0)
-               return;
-
-       Ratio_Act = BT_Active*1000/BT_Polling;
-       Ratio_STA = BT_State*1000/BT_Polling;
-
-       pHalData->bt_coexist.Ratio_Tx = Ratio_Act;
-       pHalData->bt_coexist.Ratio_PRI = Ratio_STA;
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], Ratio_Act =%d\n", Ratio_Act));
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], Ratio_STA =%d\n", Ratio_STA));
-
-       if (Ratio_STA < 60 && Ratio_Act < 500) {        /*  BT PAN idle */
-               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_PAN_IDLE;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_DOWNLINK;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_UPLINK;
-       } else {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_IDLE;
-
-               if (Ratio_STA) {
-                       /*  Check if BT PAN (under BT 2.1) is uplink or downlink */
-                       if ((Ratio_Act/Ratio_STA) < 2) {
-                               /*  BT PAN Uplink */
-                               pHalData->bt_coexist.BT21TrafficStatistics.bTxBusyTraffic = true;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_PAN_UPLINK;
-                               pHalData->bt_coexist.BT21TrafficStatistics.bRxBusyTraffic = false;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_DOWNLINK;
-                       } else {
-                               /*  BT PAN downlink */
-                               pHalData->bt_coexist.BT21TrafficStatistics.bTxBusyTraffic = false;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_UPLINK;
-                               pHalData->bt_coexist.BT21TrafficStatistics.bRxBusyTraffic = true;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_PAN_DOWNLINK;
-                       }
-               } else {
-                       /*  BT PAN downlink */
-                       pHalData->bt_coexist.BT21TrafficStatistics.bTxBusyTraffic = false;
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_PAN_UPLINK;
-                       pHalData->bt_coexist.BT21TrafficStatistics.bRxBusyTraffic = true;
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_PAN_DOWNLINK;
-               }
-       }
-
-       /*  Check BT is idle or not */
-       if (pBtMgnt->ExtConfig.NumberOfHandle == 0 &&
-           pBtMgnt->ExtConfig.NumberOfSCO == 0) {
-               pBtMgnt->ExtConfig.bBTBusy = false;
-               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_IDLE;
-       } else {
-               if (Ratio_STA < 60) {
-                       pBtMgnt->ExtConfig.bBTBusy = false;
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_IDLE;
-               } else {
-                       pBtMgnt->ExtConfig.bBTBusy = true;
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_IDLE;
-               }
-       }
-
-       if (pBtMgnt->ExtConfig.NumberOfHandle == 0 &&
-           pBtMgnt->ExtConfig.NumberOfSCO == 0) {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_RSSI_LOW;
-               pBtMgnt->ExtConfig.MIN_BT_RSSI = 0;
-               BTDM_SetAntenna(padapter, BTDM_ANT_BT_IDLE);
-       } else {
-               if (pBtMgnt->ExtConfig.MIN_BT_RSSI <= -5) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT_RSSI_LOW;
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], core stack notify bt rssi Low\n"));
-               } else {
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT_RSSI_LOW;
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], core stack notify bt rssi Normal\n"));
-               }
-       }
-
-       if (pHalData->bt_coexist.bBTBusyTraffic != pBtMgnt->ExtConfig.bBTBusy) {
-               /*  BT idle or BT non-idle */
-               pHalData->bt_coexist.bBTBusyTraffic = pBtMgnt->ExtConfig.bBTBusy;
-               stateChange = true;
-       }
-
-       if (stateChange) {
-               if (!pBtMgnt->ExtConfig.bBTBusy)
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT is idle or disable\n"));
-               else
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT is non-idle\n"));
-       }
-       if (!pBtMgnt->ExtConfig.bBTBusy) {
-               RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT is idle or disable\n"));
-               if (check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING|WIFI_SITE_MONITOR) == true)
-                       BTDM_SetAntenna(padapter, BTDM_ANT_WIFI);
-       }
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.c ===== */
-
-/*  local function start with btdm_ */
-
-/*  Note: */
-/*  In the following, FW should be done before SW mechanism. */
-/*  BTDM_Balance(), BTDM_DiminishWiFi(), BT_NAV() should be done */
-/*  before BTDM_AGCTable(), BTDM_BBBackOffLevel(), btdm_DacSwing(). */
-
-/*  extern function start with BTDM_ */
-
-void
-BTDM_DiminishWiFi(
-       struct rtw_adapter *padapter,
-       u8 bDACOn,
-       u8 bInterruptOn,
-       u8 DACSwingLevel,
-       u8 bNAVOn
-       )
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[3] = {0};
-
-       if (pHalData->bt_coexist.BT_Ant_Num != Ant_x2)
-               return;
-
-       if ((pHalData->bt_coexist.CurrentState & BT_COEX_STATE_BT_RSSI_LOW) &&
-           (DACSwingLevel == 0x20)) {
-               RTPRINT(FBT, BT_TRACE, ("[BT]DiminishWiFi 0x20 original, but set 0x18 for Low RSSI!\n"));
-               DACSwingLevel = 0x18;
-       }
-
-       H2C_Parameter[2] = 0;
-       H2C_Parameter[1] = DACSwingLevel;
-       H2C_Parameter[0] = 0;
-       if (bDACOn) {
-               H2C_Parameter[2] |= 0x01;       /* BIT0 */
-               if (bInterruptOn)
-                       H2C_Parameter[2] |= 0x02;       /* BIT1 */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-       if (bNAVOn) {
-               H2C_Parameter[2] |= 0x08;       /* BIT3 */
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], bDACOn = %s, bInterruptOn = %s, write 0xe = 0x%x\n",
-               bDACOn?"ON":"OFF", bInterruptOn?"ON":"OFF",
-               H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], bNAVOn = %s\n",
-               bNAVOn?"ON":"OFF"));
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtCoexist.c ===== */
-
-/*  local function */
-static void btdm_ResetFWCoexState(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->bt_coexist.CurrentState = 0;
-       pHalData->bt_coexist.PreviousState = 0;
-}
-
-static void btdm_InitBtCoexistDM(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  20100415 Joseph: Restore RF register 0x1E and 0x1F value for further usage. */
-       pHalData->bt_coexist.BtRfRegOrigin1E = PHY_QueryRFReg(padapter, PathA, RF_RCK1, bRFRegOffsetMask);
-       pHalData->bt_coexist.BtRfRegOrigin1F = PHY_QueryRFReg(padapter, PathA, RF_RCK2, 0xf0);
-
-       pHalData->bt_coexist.CurrentState = 0;
-       pHalData->bt_coexist.PreviousState = 0;
-
-       BTDM_8723AInit(padapter);
-       pHalData->bt_coexist.bInitlized = true;
-}
-
-/*  */
-/*  extern function */
-/*  */
-void BTDM_CheckAntSelMode(struct rtw_adapter *padapter)
-{
-}
-
-void BTDM_FwC2hBtRssi(struct rtw_adapter *padapter, u8 *tmpBuf)
-{
-       BTDM_FwC2hBtRssi8723A(padapter, tmpBuf);
-}
-
-void BTDM_DisplayBtCoexInfo(struct rtw_adapter *padapter)
-{
-       BTDM_Display8723ABtCoexInfo(padapter);
-}
-
-void BTDM_RejectAPAggregatedPacket(struct rtw_adapter *padapter, u8 bReject)
-{
-}
-
-u8 BTDM_IsHT40(struct rtw_adapter *padapter)
-{
-       u8 isht40 = true;
-       enum ht_channel_width bw;
-
-       bw = padapter->mlmeextpriv.cur_bwmode;
-
-       if (bw == HT_CHANNEL_WIDTH_20)
-               isht40 = false;
-       else if (bw == HT_CHANNEL_WIDTH_40)
-               isht40 = true;
-
-       return isht40;
-}
-
-u8 BTDM_Legacy(struct rtw_adapter *padapter)
-{
-       struct mlme_ext_priv *pmlmeext;
-       u8 isLegacy = false;
-
-       pmlmeext = &padapter->mlmeextpriv;
-       if ((pmlmeext->cur_wireless_mode == WIRELESS_11B) ||
-               (pmlmeext->cur_wireless_mode == WIRELESS_11G) ||
-               (pmlmeext->cur_wireless_mode == WIRELESS_11BG))
-               isLegacy = true;
-
-       return isLegacy;
-}
-
-void BTDM_CheckWiFiState(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct mlme_priv *pmlmepriv;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pmlmepriv = &padapter->mlmepriv;
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pmlmepriv->LinkDetectInfo.bBusyTraffic) {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_IDLE;
-
-               if (pmlmepriv->LinkDetectInfo.bTxBusyTraffic)
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_UPLINK;
-               else
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_UPLINK;
-
-               if (pmlmepriv->LinkDetectInfo.bRxBusyTraffic)
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_DOWNLINK;
-               else
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_DOWNLINK;
-       } else {
-               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_IDLE;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_UPLINK;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_DOWNLINK;
-       }
-
-       if (BTDM_Legacy(padapter)) {
-               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_LEGACY;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_HT20;
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_HT40;
-       } else {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_LEGACY;
-               if (BTDM_IsHT40(padapter)) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_HT40;
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_HT20;
-               } else {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_HT20;
-                       pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_HT40;
-               }
-       }
-
-       if (pBtMgnt->BtOperationOn)
-               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_BT30;
-       else
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_BT30;
-}
-
-s32 BTDM_GetRxSS(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct mlme_priv *pmlmepriv;
-       struct hal_data_8723a *pHalData;
-       s32                     UndecoratedSmoothedPWDB = 0;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pHalData = GET_HAL_DATA(padapter);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               UndecoratedSmoothedPWDB = GET_UNDECORATED_AVERAGE_RSSI(padapter);
-       } else { /*  associated entry pwdb */
-               UndecoratedSmoothedPWDB = pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB;
-               /* pHalData->BT_EntryMinUndecoratedSmoothedPWDB */
-       }
-       RTPRINT(FBT, BT_TRACE, ("BTDM_GetRxSS() = %d\n", UndecoratedSmoothedPWDB));
-       return UndecoratedSmoothedPWDB;
-}
-
-static s32 BTDM_GetRxBeaconSS(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &padapter->MgntInfo; */
-       struct mlme_priv *pmlmepriv;
-       struct hal_data_8723a *pHalData;
-       s32                     pwdbBeacon = 0;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pHalData = GET_HAL_DATA(padapter);
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-               /* pwdbBeacon = pHalData->dmpriv.UndecoratedSmoothedBeacon; */
-               pwdbBeacon = pHalData->dmpriv.EntryMinUndecoratedSmoothedPWDB;
-       }
-       RTPRINT(FBT, BT_TRACE, ("BTDM_GetRxBeaconSS() = %d\n", pwdbBeacon));
-       return pwdbBeacon;
-}
-
-/*  Get beacon rssi state */
-u8 BTDM_CheckCoexBcnRssiState(struct rtw_adapter *padapter, u8 levelNum,
-                             u8 RssiThresh, u8 RssiThresh1)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       s32 pwdbBeacon = 0;
-       u8 bcnRssiState = 0;
-
-       pwdbBeacon = BTDM_GetRxBeaconSS(padapter);
-
-       if (levelNum == 2) {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM;
-
-               if ((pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_STAY_LOW)) {
-                       if (pwdbBeacon >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               bcnRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to High\n"));
-                       } else {
-                               bcnRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state stay at Low\n"));
-                       }
-               } else {
-                       if (pwdbBeacon < RssiThresh) {
-                               bcnRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to Low\n"));
-                       } else {
-                               bcnRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state stay at High\n"));
-                       }
-               }
-       } else if (levelNum == 3) {
-               if (RssiThresh > RssiThresh1) {
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON thresh error!!\n"));
-                       return pHalData->bt_coexist.preRssiStateBeacon;
-               }
-
-               if ((pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_STAY_LOW)) {
-                       if (pwdbBeacon >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               bcnRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to Medium\n"));
-                       } else {
-                               bcnRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state stay at Low\n"));
-                       }
-               } else if ((pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_MEDIUM) ||
-                          (pHalData->bt_coexist.preRssiStateBeacon == BT_RSSI_STATE_STAY_MEDIUM)) {
-                       if (pwdbBeacon >= (RssiThresh1+BT_FW_COEX_THRESH_TOL)) {
-                               bcnRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to High\n"));
-                       } else if (pwdbBeacon < RssiThresh) {
-                               bcnRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to Low\n"));
-                       } else {
-                               bcnRssiState = BT_RSSI_STATE_STAY_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state stay at Medium\n"));
-                       }
-               } else {
-                       if (pwdbBeacon < RssiThresh1) {
-                               bcnRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_BEACON_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state switch to Medium\n"));
-                       } else {
-                               bcnRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_BEACON state stay at High\n"));
-                       }
-               }
-       }
-
-       pHalData->bt_coexist.preRssiStateBeacon = bcnRssiState;
-
-       return bcnRssiState;
-}
-
-u8 BTDM_CheckCoexRSSIState1(struct rtw_adapter *padapter, u8 levelNum,
-                           u8 RssiThresh, u8 RssiThresh1)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       s32 UndecoratedSmoothedPWDB = 0;
-       u8 btRssiState = 0;
-
-       UndecoratedSmoothedPWDB = BTDM_GetRxSS(padapter);
-
-       if (levelNum == 2) {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_MEDIUM;
-
-               if ((pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_STAY_LOW)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to High\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state stay at Low\n"));
-                       }
-               } else {
-                       if (UndecoratedSmoothedPWDB < RssiThresh) {
-                               btRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to Low\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state stay at High\n"));
-                       }
-               }
-       } else if (levelNum == 3) {
-               if (RssiThresh > RssiThresh1) {
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 thresh error!!\n"));
-                       return pHalData->bt_coexist.preRssiState1;
-               }
-
-               if ((pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_STAY_LOW)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to Medium\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state stay at Low\n"));
-                       }
-               } else if ((pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_MEDIUM) ||
-                          (pHalData->bt_coexist.preRssiState1 == BT_RSSI_STATE_STAY_MEDIUM)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh1+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to High\n"));
-                       } else if (UndecoratedSmoothedPWDB < RssiThresh) {
-                               btRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to Low\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state stay at Medium\n"));
-                       }
-               } else {
-                       if (UndecoratedSmoothedPWDB < RssiThresh1) {
-                               btRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_1_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_1_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state switch to Medium\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI_1 state stay at High\n"));
-                       }
-               }
-       }
-
-       pHalData->bt_coexist.preRssiState1 = btRssiState;
-
-       return btRssiState;
-}
-
-u8 BTDM_CheckCoexRSSIState(struct rtw_adapter *padapter, u8 levelNum,
-                          u8 RssiThresh, u8 RssiThresh1)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       s32 UndecoratedSmoothedPWDB = 0;
-       u8 btRssiState = 0;
-
-       UndecoratedSmoothedPWDB = BTDM_GetRxSS(padapter);
-
-       if (levelNum == 2) {
-               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_MEDIUM;
-
-               if ((pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_STAY_LOW)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to High\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state stay at Low\n"));
-                       }
-               } else {
-                       if (UndecoratedSmoothedPWDB < RssiThresh) {
-                               btRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to Low\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state stay at High\n"));
-                       }
-               }
-       } else if (levelNum == 3) {
-               if (RssiThresh > RssiThresh1) {
-                       RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI thresh error!!\n"));
-                       return pHalData->bt_coexist.preRssiState;
-               }
-
-               if ((pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_LOW) ||
-                   (pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_STAY_LOW)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to Medium\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state stay at Low\n"));
-                       }
-               } else if ((pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_MEDIUM) ||
-                          (pHalData->bt_coexist.preRssiState == BT_RSSI_STATE_STAY_MEDIUM)) {
-                       if (UndecoratedSmoothedPWDB >= (RssiThresh1+BT_FW_COEX_THRESH_TOL)) {
-                               btRssiState = BT_RSSI_STATE_HIGH;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to High\n"));
-                       } else if (UndecoratedSmoothedPWDB < RssiThresh) {
-                               btRssiState = BT_RSSI_STATE_LOW;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_LOW;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to Low\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_MEDIUM;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state stay at Medium\n"));
-                       }
-               } else {
-                       if (UndecoratedSmoothedPWDB < RssiThresh1) {
-                               btRssiState = BT_RSSI_STATE_MEDIUM;
-                               pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_WIFI_RSSI_MEDIUM;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_HIGH;
-                               pHalData->bt_coexist.CurrentState &= ~BT_COEX_STATE_WIFI_RSSI_LOW;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state switch to Medium\n"));
-                       } else {
-                               btRssiState = BT_RSSI_STATE_STAY_HIGH;
-                               RTPRINT(FBT, BT_TRACE, ("[DM][BT], RSSI state stay at High\n"));
-                       }
-               }
-       }
-
-       pHalData->bt_coexist.preRssiState = btRssiState;
-
-       return btRssiState;
-}
-
-bool rtl8723a_BT_disable_EDCA_turbo(struct rtw_adapter *padapter)
-{
-       struct bt_mgnt *pBtMgnt;
-       struct hal_data_8723a *pHalData;
-       u8 bBtChangeEDCA = false;
-       u32 EDCA_BT_BE = 0x5ea42b, cur_EDCA_reg;
-       bool bRet = false;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtMgnt = &pHalData->BtInfo.BtMgnt;
-
-       if (!rtl8723a_BT_coexist(padapter)) {
-               bRet = false;
-               pHalData->bt_coexist.lastBtEdca = 0;
-               return bRet;
-       }
-       if (!((pBtMgnt->bSupportProfile) ||
-           (pHalData->bt_coexist.BT_CoexistType == BT_CSR_BC8))) {
-               bRet = false;
-               pHalData->bt_coexist.lastBtEdca = 0;
-               return bRet;
-       }
-
-       if (rtl8723a_BT_using_antenna_1(padapter)) {
-               bRet = false;
-               pHalData->bt_coexist.lastBtEdca = 0;
-               return bRet;
-       }
-
-       if (pHalData->bt_coexist.exec_cnt < 3)
-               pHalData->bt_coexist.exec_cnt++;
-       else
-               pHalData->bt_coexist.bEDCAInitialized = true;
-
-       /*  When BT is non idle */
-       if (!(pHalData->bt_coexist.CurrentState & BT_COEX_STATE_BT_IDLE)) {
-               RTPRINT(FBT, BT_TRACE, ("BT state non idle, set bt EDCA\n"));
-
-               /* aggr_num = 0x0909; */
-               if (pHalData->odmpriv.DM_EDCA_Table.bCurrentTurboEDCA) {
-                       bBtChangeEDCA = true;
-                       pHalData->odmpriv.DM_EDCA_Table.bCurrentTurboEDCA = false;
-                       pHalData->dmpriv.prv_traffic_idx = 3;
-               }
-               cur_EDCA_reg = rtl8723au_read32(padapter, REG_EDCA_BE_PARAM);
-
-               if (cur_EDCA_reg != EDCA_BT_BE)
-                       bBtChangeEDCA = true;
-               if (bBtChangeEDCA || !pHalData->bt_coexist.bEDCAInitialized) {
-                       rtl8723au_write32(padapter, REG_EDCA_BE_PARAM,
-                                         EDCA_BT_BE);
-                       pHalData->bt_coexist.lastBtEdca = EDCA_BT_BE;
-               }
-               bRet = true;
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("BT state idle, set original EDCA\n"));
-               pHalData->bt_coexist.lastBtEdca = 0;
-               bRet = false;
-       }
-       return bRet;
-}
-
-void
-BTDM_Balance(
-       struct rtw_adapter *padapter,
-       u8 bBalanceOn,
-       u8 ms0,
-       u8 ms1
-       )
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[3] = {0};
-
-       if (bBalanceOn) {
-               H2C_Parameter[2] = 1;
-               H2C_Parameter[1] = ms1;
-               H2C_Parameter[0] = ms0;
-               pHalData->bt_coexist.bFWCoexistAllOff = false;
-       } else {
-               H2C_Parameter[2] = 0;
-               H2C_Parameter[1] = 0;
-               H2C_Parameter[0] = 0;
-       }
-       pHalData->bt_coexist.bBalanceOn = bBalanceOn;
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], Balance =[%s:%dms:%dms], write 0xc = 0x%x\n",
-               bBalanceOn?"ON":"OFF", ms0, ms1,
-               H2C_Parameter[0]<<16|H2C_Parameter[1]<<8|H2C_Parameter[2]));
-
-       FillH2CCmd(padapter, 0xc, 3, H2C_Parameter);
-}
-
-void BTDM_AGCTable(struct rtw_adapter *padapter, u8 type)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       if (type == BT_AGCTABLE_OFF) {
-               RTPRINT(FBT, BT_TRACE, ("[BT]AGCTable Off!\n"));
-               rtl8723au_write32(padapter, 0xc78, 0x641c0001);
-               rtl8723au_write32(padapter, 0xc78, 0x631d0001);
-               rtl8723au_write32(padapter, 0xc78, 0x621e0001);
-               rtl8723au_write32(padapter, 0xc78, 0x611f0001);
-               rtl8723au_write32(padapter, 0xc78, 0x60200001);
-
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0x32000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0x71000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0xb0000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0xfc000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_G1, bRFRegOffsetMask, 0x30355);
-
-               pHalData->bt_coexist.b8723aAgcTableOn = false;
-       } else if (type == BT_AGCTABLE_ON) {
-               RTPRINT(FBT, BT_TRACE, ("[BT]AGCTable On!\n"));
-               rtl8723au_write32(padapter, 0xc78, 0x4e1c0001);
-               rtl8723au_write32(padapter, 0xc78, 0x4d1d0001);
-               rtl8723au_write32(padapter, 0xc78, 0x4c1e0001);
-               rtl8723au_write32(padapter, 0xc78, 0x4b1f0001);
-               rtl8723au_write32(padapter, 0xc78, 0x4a200001);
-
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0xdc000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0x90000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0x51000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_AGC_HP, bRFRegOffsetMask, 0x12000);
-               PHY_SetRFReg(padapter, PathA, RF_RX_G1, bRFRegOffsetMask, 0x00355);
-
-               pHalData->bt_coexist.b8723aAgcTableOn = true;
-
-               pHalData->bt_coexist.bSWCoexistAllOff = false;
-       }
-}
-
-void BTDM_BBBackOffLevel(struct rtw_adapter *padapter, u8 type)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (type == BT_BB_BACKOFF_OFF) {
-               RTPRINT(FBT, BT_TRACE, ("[BT]BBBackOffLevel Off!\n"));
-               rtl8723au_write32(padapter, 0xc04, 0x3a05611);
-       } else if (type == BT_BB_BACKOFF_ON) {
-               RTPRINT(FBT, BT_TRACE, ("[BT]BBBackOffLevel On!\n"));
-               rtl8723au_write32(padapter, 0xc04, 0x3a07611);
-               pHalData->bt_coexist.bSWCoexistAllOff = false;
-       }
-}
-
-void BTDM_FWCoexAllOff(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       RTPRINT(FBT, BT_TRACE, ("BTDM_FWCoexAllOff()\n"));
-       if (pHalData->bt_coexist.bFWCoexistAllOff)
-               return;
-       RTPRINT(FBT, BT_TRACE, ("BTDM_FWCoexAllOff(), real Do\n"));
-
-       BTDM_FWCoexAllOff8723A(padapter);
-
-       pHalData->bt_coexist.bFWCoexistAllOff = true;
-}
-
-void BTDM_SWCoexAllOff(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       RTPRINT(FBT, BT_TRACE, ("BTDM_SWCoexAllOff()\n"));
-       if (pHalData->bt_coexist.bSWCoexistAllOff)
-               return;
-       RTPRINT(FBT, BT_TRACE, ("BTDM_SWCoexAllOff(), real Do\n"));
-       BTDM_SWCoexAllOff8723A(padapter);
-
-       pHalData->bt_coexist.bSWCoexistAllOff = true;
-}
-
-void BTDM_HWCoexAllOff(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       RTPRINT(FBT, BT_TRACE, ("BTDM_HWCoexAllOff()\n"));
-       if (pHalData->bt_coexist.bHWCoexistAllOff)
-               return;
-       RTPRINT(FBT, BT_TRACE, ("BTDM_HWCoexAllOff(), real Do\n"));
-
-       BTDM_HWCoexAllOff8723A(padapter);
-
-       pHalData->bt_coexist.bHWCoexistAllOff = true;
-}
-
-void BTDM_CoexAllOff(struct rtw_adapter *padapter)
-{
-       BTDM_FWCoexAllOff(padapter);
-       BTDM_SWCoexAllOff(padapter);
-       BTDM_HWCoexAllOff(padapter);
-}
-
-void rtl8723a_BT_disable_coexist(struct rtw_adapter *padapter)
-{
-       struct pwrctrl_priv *ppwrctrl = &padapter->pwrctrlpriv;
-
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       /*  8723 1Ant doesn't need to turn off bt coexist mechanism. */
-       if (rtl8723a_BT_using_antenna_1(padapter))
-               return;
-
-       /*  Before enter IPS, turn off FW BT Co-exist mechanism */
-       if (ppwrctrl->reg_rfoff == rf_on) {
-               RTPRINT(FBT, BT_TRACE, ("[BT][DM], Before enter IPS, turn off all Coexist DM\n"));
-               btdm_ResetFWCoexState(padapter);
-               BTDM_CoexAllOff(padapter);
-               BTDM_SetAntenna(padapter, BTDM_ANT_BT);
-       }
-}
-
-void BTDM_SignalCompensation(struct rtw_adapter *padapter, u8 *rssi_wifi, u8 *rssi_bt)
-{
-       BTDM_8723ASignalCompensation(padapter, rssi_wifi, rssi_bt);
-}
-
-void rtl8723a_BT_do_coexist(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (!rtl8723a_BT_coexist(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("[DM][BT], BT not exists!!\n"));
-               return;
-       }
-
-       if (!pHalData->bt_coexist.bInitlized) {
-               RTPRINT(FBT, BT_TRACE, ("[DM][BT], btdm_InitBtCoexistDM()\n"));
-               btdm_InitBtCoexistDM(padapter);
-       }
-
-       RTPRINT(FBT, BT_TRACE, ("\n\n[DM][BT], BTDM start!!\n"));
-
-       BTDM_PWDBMonitor(padapter);
-
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], HW type is 8723\n"));
-       BTDM_BTCoexist8723A(padapter);
-       RTPRINT(FBT, BT_TRACE, ("[DM][BT], BTDM end!!\n\n"));
-}
-
-void BTDM_UpdateCoexState(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (!BTDM_IsSameCoexistState(padapter)) {
-               RTPRINT(FBT, BT_TRACE, ("[BTCoex], Coexist State[bitMap] change from 0x%"i64fmt"x to 0x%"i64fmt"x,  changeBits = 0x%"i64fmt"x\n",
-                       pHalData->bt_coexist.PreviousState,
-                       pHalData->bt_coexist.CurrentState,
-                       (pHalData->bt_coexist.PreviousState^pHalData->bt_coexist.CurrentState)));
-               pHalData->bt_coexist.PreviousState = pHalData->bt_coexist.CurrentState;
-       }
-}
-
-u8 BTDM_IsSameCoexistState(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.PreviousState == pHalData->bt_coexist.CurrentState) {
-               return true;
-       } else {
-               RTPRINT(FBT, BT_TRACE, ("[DM][BT], Coexist state changed!!\n"));
-               return false;
-       }
-}
-
-void BTDM_PWDBMonitor(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(GetDefaultAdapter(padapter));
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 H2C_Parameter[3] = {0};
-       s32 tmpBTEntryMaxPWDB = 0, tmpBTEntryMinPWDB = 0xff;
-       u8 i;
-
-       if (pBtMgnt->BtOperationOn) {
-               for (i = 0; i < MAX_BT_ASOC_ENTRY_NUM; i++) {
-                       if (pBTInfo->BtAsocEntry[i].bUsed) {
-                               if (pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB < tmpBTEntryMinPWDB)
-                                       tmpBTEntryMinPWDB = pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB;
-                               if (pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB > tmpBTEntryMaxPWDB)
-                                       tmpBTEntryMaxPWDB = pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB;
-                               /*  Report every BT connection (HS mode) RSSI to FW */
-                               H2C_Parameter[2] = (u8)(pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB & 0xFF);
-                               H2C_Parameter[0] = (MAX_FW_SUPPORT_MACID_NUM-1-i);
-                               RTPRINT(FDM, DM_BT30, ("RSSI report for BT[%d], H2C_Par = 0x%x\n", i, H2C_Parameter[0]));
-                               FillH2CCmd(padapter, RSSI_SETTING_EID, 3, H2C_Parameter);
-                               RTPRINT_ADDR(FDM, (DM_PWDB|DM_BT30), ("BT_Entry Mac :"),
-                                            pBTInfo->BtAsocEntry[i].BTRemoteMACAddr)
-                               RTPRINT(FDM, (DM_PWDB|DM_BT30),
-                                       ("BT rx pwdb[%d] = 0x%x(%d)\n", i,
-                                       pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB,
-                                       pBTInfo->BtAsocEntry[i].UndecoratedSmoothedPWDB));
-                       }
-               }
-               if (tmpBTEntryMaxPWDB != 0) {   /*  If associated entry is found */
-                       pHalData->dmpriv.BT_EntryMaxUndecoratedSmoothedPWDB = tmpBTEntryMaxPWDB;
-                       RTPRINT(FDM, (DM_PWDB|DM_BT30), ("BT_EntryMaxPWDB = 0x%x(%d)\n",
-                               tmpBTEntryMaxPWDB, tmpBTEntryMaxPWDB));
-               } else {
-                       pHalData->dmpriv.BT_EntryMaxUndecoratedSmoothedPWDB = 0;
-               }
-               if (tmpBTEntryMinPWDB != 0xff) { /*  If associated entry is found */
-                       pHalData->dmpriv.BT_EntryMinUndecoratedSmoothedPWDB = tmpBTEntryMinPWDB;
-                       RTPRINT(FDM, (DM_PWDB|DM_BT30), ("BT_EntryMinPWDB = 0x%x(%d)\n",
-                               tmpBTEntryMinPWDB, tmpBTEntryMinPWDB));
-               } else {
-                       pHalData->dmpriv.BT_EntryMinUndecoratedSmoothedPWDB = 0;
-               }
-       }
-}
-
-u8 BTDM_IsBTBusy(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_mgnt *pBtMgnt = &pBTInfo->BtMgnt;
-
-       if (pBtMgnt->ExtConfig.bBTBusy)
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsWifiBusy(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &GetDefaultAdapter(padapter)->MgntInfo; */
-       struct mlme_priv *pmlmepriv = &GetDefaultAdapter(padapter)->mlmepriv;
-       struct bt_30info *pBTInfo = GET_BT_INFO(padapter);
-       struct bt_traffic *pBtTraffic = &pBTInfo->BtTraffic;
-
-       if (pmlmepriv->LinkDetectInfo.bBusyTraffic ||
-               pBtTraffic->Bt30TrafficStatistics.bTxBusyTraffic ||
-               pBtTraffic->Bt30TrafficStatistics.bRxBusyTraffic)
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsCoexistStateChanged(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.PreviousState == pHalData->bt_coexist.CurrentState)
-               return false;
-       else
-               return true;
-}
-
-u8 BTDM_IsWifiUplink(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &GetDefaultAdapter(padapter)->MgntInfo; */
-       struct mlme_priv *pmlmepriv;
-       struct bt_30info *pBTInfo;
-       struct bt_traffic *pBtTraffic;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtTraffic = &pBTInfo->BtTraffic;
-
-       if ((pmlmepriv->LinkDetectInfo.bTxBusyTraffic) ||
-               (pBtTraffic->Bt30TrafficStatistics.bTxBusyTraffic))
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsWifiDownlink(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &GetDefaultAdapter(padapter)->MgntInfo; */
-       struct mlme_priv *pmlmepriv;
-       struct bt_30info *pBTInfo;
-       struct bt_traffic *pBtTraffic;
-
-       pmlmepriv = &padapter->mlmepriv;
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtTraffic = &pBTInfo->BtTraffic;
-
-       if ((pmlmepriv->LinkDetectInfo.bRxBusyTraffic) ||
-               (pBtTraffic->Bt30TrafficStatistics.bRxBusyTraffic))
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsBTHSMode(struct rtw_adapter *padapter)
-{
-/*PMGNT_INFO           pMgntInfo = &GetDefaultAdapter(padapter)->MgntInfo; */
-       struct hal_data_8723a *pHalData;
-       struct bt_mgnt *pBtMgnt;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBtMgnt = &pHalData->BtInfo.BtMgnt;
-
-       if (pBtMgnt->BtOperationOn)
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsBTUplink(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.BT21TrafficStatistics.bTxBusyTraffic)
-               return true;
-       else
-               return false;
-}
-
-u8 BTDM_IsBTDownlink(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.BT21TrafficStatistics.bRxBusyTraffic)
-               return true;
-       else
-               return false;
-}
-
-void BTDM_AdjustForBtOperation(struct rtw_adapter *padapter)
-{
-       RTPRINT(FBT, BT_TRACE, ("[BT][DM], BTDM_AdjustForBtOperation()\n"));
-       BTDM_AdjustForBtOperation8723A(padapter);
-}
-
-void BTDM_SetBtCoexCurrAntNum(struct rtw_adapter *padapter, u8 antNum)
-{
-       BTDM_Set8723ABtCoexCurrAntNum(padapter, antNum);
-}
-
-void BTDM_ForHalt(struct rtw_adapter *padapter)
-{
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       BTDM_ForHalt8723A(padapter);
-       GET_HAL_DATA(padapter)->bt_coexist.bInitlized = false;
-}
-
-void BTDM_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType)
-{
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       BTDM_WifiScanNotify8723A(padapter, scanType);
-}
-
-void BTDM_WifiAssociateNotify(struct rtw_adapter *padapter, u8 action)
-{
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       BTDM_WifiAssociateNotify8723A(padapter, action);
-}
-
-void rtl8723a_BT_mediastatus_notify(struct rtw_adapter *padapter,
-                                   enum rt_media_status mstatus)
-{
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       BTDM_MediaStatusNotify8723A(padapter, mstatus);
-}
-
-void rtl8723a_BT_specialpacket_notify(struct rtw_adapter *padapter)
-{
-       if (!rtl8723a_BT_coexist(padapter))
-               return;
-
-       BTDM_ForDhcp8723A(padapter);
-}
-
-void BTDM_ResetActionProfileState(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->bt_coexist.CurrentState &= ~\
-               (BT_COEX_STATE_PROFILE_HID|BT_COEX_STATE_PROFILE_A2DP|
-               BT_COEX_STATE_PROFILE_PAN|BT_COEX_STATE_PROFILE_SCO);
-}
-
-u8 BTDM_IsActionSCO(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_SCO) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_SCO;
-                       bRet = true;
-               }
-       } else {
-               if (pBtMgnt->ExtConfig.NumberOfSCO > 0) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_SCO;
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionHID(struct rtw_adapter *padapter)
-{
-       struct bt_30info *pBTInfo;
-       struct hal_data_8723a *pHalData;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_HID) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_HID;
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                   pBtMgnt->ExtConfig.NumberOfHandle == 1) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_HID;
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionA2DP(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_A2DP) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_A2DP;
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP) &&
-                   pBtMgnt->ExtConfig.NumberOfHandle == 1) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_A2DP;
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionPAN(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_PAN) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_PAN;
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) &&
-                   pBtMgnt->ExtConfig.NumberOfHandle == 1) {
-                       pHalData->bt_coexist.CurrentState |= BT_COEX_STATE_PROFILE_PAN;
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionHIDA2DP(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_mgnt *pBtMgnt;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtMgnt = &pBTInfo->BtMgnt;
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_HID_A2DP) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_HID|BT_COEX_STATE_PROFILE_A2DP);
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                   BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_HID|BT_COEX_STATE_PROFILE_A2DP);
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionHIDPAN(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_HID_PAN) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_HID|BT_COEX_STATE_PROFILE_PAN);
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_HID) &&
-                   BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN)) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_HID|BT_COEX_STATE_PROFILE_PAN);
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-u8 BTDM_IsActionPANA2DP(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct bt_30info *pBTInfo;
-       struct bt_dgb *pBtDbg;
-       u8 bRet;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pBTInfo = GET_BT_INFO(padapter);
-       pBtDbg = &pBTInfo->BtDbg;
-       bRet = false;
-
-       if (pBtDbg->dbgCtrl) {
-               if (pBtDbg->dbgProfile == BT_DBG_PROFILE_PAN_A2DP) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_PAN|BT_COEX_STATE_PROFILE_A2DP);
-                       bRet = true;
-               }
-       } else {
-               if (BTHCI_CheckProfileExist(padapter, BT_PROFILE_PAN) && BTHCI_CheckProfileExist(padapter, BT_PROFILE_A2DP)) {
-                       pHalData->bt_coexist.CurrentState |= (BT_COEX_STATE_PROFILE_PAN|BT_COEX_STATE_PROFILE_A2DP);
-                       bRet = true;
-               }
-       }
-       return bRet;
-}
-
-bool rtl8723a_BT_enabled(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.bCurBtDisabled)
-               return false;
-       else
-               return true;
-}
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtCoexist.c ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/HalBT.c ===== */
-
-/*  */
-/*local function */
-/*  */
-
-static void halbt_InitHwConfig8723A(struct rtw_adapter *padapter)
-{
-}
-
-/*  */
-/*extern function */
-/*  */
-u8 HALBT_GetPGAntNum(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       return pHalData->bt_coexist.BT_Ant_Num;
-}
-
-void HALBT_SetKey(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTinfo;
-       struct bt_asoc_entry *pBtAssocEntry;
-       u16                             usConfig = 0;
-
-       pBTinfo = GET_BT_INFO(padapter);
-       pBtAssocEntry = &pBTinfo->BtAsocEntry[EntryNum];
-
-       pBtAssocEntry->HwCAMIndex = BT_HWCAM_STAR + EntryNum;
-
-       usConfig = CAM_VALID | (CAM_AES << 2);
-       rtl8723a_cam_write(padapter, pBtAssocEntry->HwCAMIndex, usConfig,
-                          pBtAssocEntry->BTRemoteMACAddr,
-                          pBtAssocEntry->PTK + TKIP_ENC_KEY_POS);
-}
-
-void HALBT_RemoveKey(struct rtw_adapter *padapter, u8 EntryNum)
-{
-       struct bt_30info *pBTinfo;
-       struct bt_asoc_entry *pBtAssocEntry;
-
-       pBTinfo = GET_BT_INFO(padapter);
-       pBtAssocEntry = &pBTinfo->BtAsocEntry[EntryNum];
-
-       if (pBTinfo->BtAsocEntry[EntryNum].HwCAMIndex != 0) {
-               /*  ToDo : add New HALBT_RemoveKey function !! */
-               if (pBtAssocEntry->HwCAMIndex >= BT_HWCAM_STAR &&
-                   pBtAssocEntry->HwCAMIndex < HALF_CAM_ENTRY)
-                       rtl8723a_cam_empty_entry(padapter,
-                                                pBtAssocEntry->HwCAMIndex);
-               pBTinfo->BtAsocEntry[EntryNum].HwCAMIndex = 0;
-       }
-}
-
-void rtl8723a_BT_init_hal_vars(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-
-       pHalData = GET_HAL_DATA(padapter);
-
-       pHalData->bt_coexist.BluetoothCoexist = pHalData->EEPROMBluetoothCoexist;
-       pHalData->bt_coexist.BT_Ant_Num = pHalData->EEPROMBluetoothAntNum;
-       pHalData->bt_coexist.BT_CoexistType = pHalData->EEPROMBluetoothType;
-       pHalData->bt_coexist.BT_Ant_isolation = pHalData->EEPROMBluetoothAntIsolation;
-       pHalData->bt_coexist.bt_radiosharedtype = pHalData->EEPROMBluetoothRadioShared;
-
-       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                "BT Coexistance = 0x%x\n", rtl8723a_BT_coexist(padapter));
-
-       if (rtl8723a_BT_coexist(padapter)) {
-               if (pHalData->bt_coexist.BT_Ant_Num == Ant_x2) {
-                       BTDM_SetBtCoexCurrAntNum(padapter, 2);
-                       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                "BlueTooth BT_Ant_Num = Antx2\n");
-               } else if (pHalData->bt_coexist.BT_Ant_Num == Ant_x1) {
-                       BTDM_SetBtCoexCurrAntNum(padapter, 1);
-                       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                "BlueTooth BT_Ant_Num = Antx1\n");
-               }
-               pHalData->bt_coexist.bBTBusyTraffic = false;
-               pHalData->bt_coexist.bBTTrafficModeSet = false;
-               pHalData->bt_coexist.bBTNonTrafficModeSet = false;
-               pHalData->bt_coexist.CurrentState = 0;
-               pHalData->bt_coexist.PreviousState = 0;
-
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "bt_radiosharedType = 0x%x\n",
-                        pHalData->bt_coexist.bt_radiosharedtype);
-       }
-}
-
-bool rtl8723a_BT_coexist(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (pHalData->bt_coexist.BluetoothCoexist)
-               return true;
-       else
-               return false;
-}
-
-u8 HALBT_BTChipType(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       return pHalData->bt_coexist.BT_CoexistType;
-}
-
-void rtl8723a_BT_init_hwconfig(struct rtw_adapter *padapter)
-{
-       halbt_InitHwConfig8723A(padapter);
-       rtl8723a_BT_do_coexist(padapter);
-}
-
-void HALBT_SetRtsCtsNoLenLimit(struct rtw_adapter *padapter)
-{
-}
-
-/*  ===== End of sync from SD7 driver HAL/HalBT.c ===== */
-
-void rtl8723a_dual_antenna_detection(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct dm_odm_t *pDM_Odm;
-       struct sw_ant_sw *pDM_SWAT_Table;
-       u8 i;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pDM_Odm = &pHalData->odmpriv;
-       pDM_SWAT_Table = &pDM_Odm->DM_SWAT_Table;
-
-       /*  */
-       /*  <Roger_Notes> RTL8723A Single and Dual antenna dynamic detection
-           mechanism when RF power state is on. */
-       /*  We should take power tracking, IQK, LCK, RCK RF read/write
-           operation into consideration. */
-       /*  2011.12.15. */
-       /*  */
-       if (!pHalData->bAntennaDetected) {
-               u8 btAntNum = BT_GetPGAntNum(padapter);
-
-               /*  Set default antenna B status */
-               if (btAntNum == Ant_x2)
-                       pDM_SWAT_Table->ANTB_ON = true;
-               else if (btAntNum == Ant_x1)
-                       pDM_SWAT_Table->ANTB_ON = false;
-               else
-                       pDM_SWAT_Table->ANTB_ON = true;
-
-               if (pHalData->CustomerID != RT_CID_TOSHIBA) {
-                       for (i = 0; i < MAX_ANTENNA_DETECTION_CNT; i++) {
-                               if (ODM_SingleDualAntennaDetection
-                                   (&pHalData->odmpriv, ANTTESTALL) == true)
-                                       break;
-                       }
-
-                       /*  Set default antenna number for BT coexistence */
-                       if (btAntNum == Ant_x2)
-                               BT_SetBtCoexCurrAntNum(padapter,
-                                                      pDM_SWAT_Table->
-                                                      ANTB_ON ? 2 : 1);
-               }
-               pHalData->bAntennaDetected = true;
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
deleted file mode 100644 (file)
index 2230f4c..0000000
+++ /dev/null
@@ -1,755 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8723A_CMD_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <mlme_osdep.h>
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-#define RTL92C_MAX_H2C_BOX_NUMS                4
-#define RTL92C_MAX_CMD_LEN             5
-#define MESSAGE_BOX_SIZE               4
-#define EX_MESSAGE_BOX_SIZE            2
-
-static u8 _is_fw_read_cmd_down(struct rtw_adapter *padapter, u8 msgbox_num)
-{
-       u8 read_down = false;
-       int     retry_cnts = 100;
-       u8 valid;
-
-       do {
-               valid = rtl8723au_read8(padapter, REG_HMETFR) & BIT(msgbox_num);
-               if (0 == valid)
-                       read_down = true;
-       } while ((!read_down) && (retry_cnts--));
-
-       return read_down;
-}
-
-/*****************************************
-* H2C Msg format :
-*| 31 - 8              |7              | 6 - 0 |
-*| h2c_msg     |Ext_bit        |CMD_ID |
-*
-******************************************/
-int FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen,
-              u8 *pCmdBuffer)
-{
-       u8 bcmd_down = false;
-       s32 retry_cnts = 100;
-       u8 h2c_box_num;
-       u32 msgbox_addr;
-       u32 msgbox_ex_addr;
-       struct hal_data_8723a *pHalData;
-       u32 h2c_cmd = 0;
-       u16 h2c_cmd_ex = 0;
-       int ret = _FAIL;
-
-       padapter = GET_PRIMARY_ADAPTER(padapter);
-       pHalData = GET_HAL_DATA(padapter);
-
-       mutex_lock(&adapter_to_dvobj(padapter)->h2c_fwcmd_mutex);
-
-       if (!pCmdBuffer)
-               goto exit;
-       if (CmdLen > RTL92C_MAX_CMD_LEN)
-               goto exit;
-       if (padapter->bSurpriseRemoved == true)
-               goto exit;
-
-       /* pay attention to if  race condition happened in  H2C cmd setting. */
-       do {
-               h2c_box_num = pHalData->LastHMEBoxNum;
-
-               if (!_is_fw_read_cmd_down(padapter, h2c_box_num)) {
-                       DBG_8723A(" fw read cmd failed...\n");
-                       goto exit;
-               }
-
-               if (CmdLen <= 3) {
-                       memcpy((u8 *)(&h2c_cmd)+1, pCmdBuffer, CmdLen);
-               } else {
-                       memcpy((u8 *)(&h2c_cmd_ex), pCmdBuffer, EX_MESSAGE_BOX_SIZE);
-                       memcpy((u8 *)(&h2c_cmd)+1, pCmdBuffer+2, (CmdLen-EX_MESSAGE_BOX_SIZE));
-                       *(u8 *)(&h2c_cmd) |= BIT(7);
-               }
-
-               *(u8 *)(&h2c_cmd) |= ElementID;
-
-               if (h2c_cmd & BIT(7)) {
-                       msgbox_ex_addr = REG_HMEBOX_EXT_0 + (h2c_box_num * EX_MESSAGE_BOX_SIZE);
-                       h2c_cmd_ex = le16_to_cpu(h2c_cmd_ex);
-                       rtl8723au_write16(padapter, msgbox_ex_addr, h2c_cmd_ex);
-               }
-               msgbox_addr = REG_HMEBOX_0 + (h2c_box_num * MESSAGE_BOX_SIZE);
-               h2c_cmd = le32_to_cpu(h2c_cmd);
-               rtl8723au_write32(padapter, msgbox_addr, h2c_cmd);
-
-               bcmd_down = true;
-
-               pHalData->LastHMEBoxNum = (h2c_box_num+1) % RTL92C_MAX_H2C_BOX_NUMS;
-
-       } while ((!bcmd_down) && (retry_cnts--));
-
-       ret = _SUCCESS;
-
-exit:
-       mutex_unlock(&adapter_to_dvobj(padapter)->h2c_fwcmd_mutex);
-       return ret;
-}
-
-int rtl8723a_set_rssi_cmd(struct rtw_adapter *padapter, u32 param)
-{
-       __le32 cmd = cpu_to_le32(param);
-
-       FillH2CCmd(padapter, RSSI_SETTING_EID, 3, (void *)&cmd);
-
-       return _SUCCESS;
-}
-
-int rtl8723a_set_raid_cmd(struct rtw_adapter *padapter, u32 mask, u8 arg)
-{
-       u8 buf[5];
-
-       memset(buf, 0, 5);
-       put_unaligned_le32(mask, buf);
-       buf[4]  = arg;
-
-       FillH2CCmd(padapter, MACID_CONFIG_EID, 5, buf);
-
-       return _SUCCESS;
-}
-
-/* bitmap[0:27] = tx_rate_bitmap */
-/* bitmap[28:31]= Rate Adaptive id */
-/* arg[0:4] = macid */
-/* arg[5] = Short GI */
-void rtl8723a_add_rateatid(struct rtw_adapter *pAdapter, u32 bitmap, u8 arg, u8 rssi_level)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-       u8 macid = arg & 0x1f;
-       u32 raid = bitmap & 0xf0000000;
-
-       bitmap &= 0x0fffffff;
-       if (rssi_level != DM_RATR_STA_INIT)
-               bitmap = ODM_Get_Rate_Bitmap23a(pHalData, macid, bitmap,
-                                               rssi_level);
-
-       bitmap |= raid;
-
-       rtl8723a_set_raid_cmd(pAdapter, bitmap, arg);
-}
-
-void rtl8723a_set_FwPwrMode_cmd(struct rtw_adapter *padapter, u8 Mode)
-{
-       struct setpwrmode_parm H2CSetPwrMode;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       DBG_8723A("%s: Mode =%d SmartPS =%d UAPSD =%d BcnMode = 0x%02x\n", __func__,
-                       Mode, pwrpriv->smart_ps, padapter->registrypriv.uapsd_enable, pwrpriv->bcn_ant_mode);
-
-       /*  Forece leave RF low power mode for 1T1R to
-           prevent conficting setting in Fw power */
-       /*  saving sequence. 2010.06.07. Added by tynli.
-           Suggested by SD3 yschang. */
-       if (Mode != PS_MODE_ACTIVE && pHalData->rf_type != RF_2T2R)
-               ODM_RF_Saving23a(&pHalData->odmpriv, true);
-
-       H2CSetPwrMode.Mode = Mode;
-       H2CSetPwrMode.SmartPS = pwrpriv->smart_ps;
-       H2CSetPwrMode.AwakeInterval = 1;
-       H2CSetPwrMode.bAllQueueUAPSD = padapter->registrypriv.uapsd_enable;
-       H2CSetPwrMode.BcnAntMode = pwrpriv->bcn_ant_mode;
-
-       FillH2CCmd(padapter, SET_PWRMODE_EID, sizeof(H2CSetPwrMode), (u8 *)&H2CSetPwrMode);
-
-}
-
-static void
-ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength)
-{
-       struct ieee80211_mgmt *mgmt;
-       u32 rate_len, pktlen;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-
-       /* DBG_8723A("%s\n", __func__); */
-
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_BEACON);
-
-       ether_addr_copy(mgmt->da, bc_addr);
-       ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt->bssid, get_my_bssid23a(cur_network));
-
-       /* A Beacon frame shouldn't have fragment bits set */
-       mgmt->seq_ctrl = 0;
-
-       /* timestamp will be inserted by hardware */
-
-       put_unaligned_le16(cur_network->beacon_interval,
-                          &mgmt->u.beacon.beacon_int);
-
-       put_unaligned_le16(cur_network->capability,
-                          &mgmt->u.beacon.capab_info);
-
-       pframe = mgmt->u.beacon.variable;
-       pktlen = offsetof(struct ieee80211_mgmt, u.beacon.variable);
-
-       if ((pmlmeinfo->state&0x03) == MSR_AP) {
-               /* DBG_8723A("ie len =%d\n", cur_network->IELength); */
-               pktlen += cur_network->IELength;
-               memcpy(pframe, cur_network->IEs, pktlen);
-
-               goto _ConstructBeacon;
-       }
-
-       /* below for ad-hoc mode */
-
-       /*  SSID */
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_SSID,
-                              cur_network->Ssid.ssid_len,
-                              cur_network->Ssid.ssid, &pktlen);
-
-       /*  supported rates... */
-       rate_len = rtw_get_rateset_len23a(cur_network->SupportedRates);
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES, ((rate_len > 8) ?
-                              8 : rate_len), cur_network->SupportedRates, &pktlen);
-
-       /*  DS parameter set */
-       pframe = rtw_set_ie23a(pframe, WLAN_EID_DS_PARAMS, 1, (unsigned char *)
-                              &cur_network->DSConfig, &pktlen);
-
-       if ((pmlmeinfo->state&0x03) == MSR_ADHOC) {
-               u32 ATIMWindow;
-               /*  IBSS Parameter Set... */
-               /* ATIMWindow = cur->ATIMWindow; */
-               ATIMWindow = 0;
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_IBSS_PARAMS, 2,
-                                      (unsigned char *)&ATIMWindow, &pktlen);
-       }
-
-       /* todo: ERP IE */
-
-       /*  EXTERNDED SUPPORTED RATE */
-       if (rate_len > 8)
-               pframe = rtw_set_ie23a(pframe, WLAN_EID_EXT_SUPP_RATES,
-                                      (rate_len - 8),
-                                      (cur_network->SupportedRates + 8),
-                                      &pktlen);
-
-       /* todo:HT for adhoc */
-
-_ConstructBeacon:
-
-       if ((pktlen + TXDESC_SIZE) > 512) {
-               DBG_8723A("beacon frame too large\n");
-               return;
-       }
-
-       *pLength = pktlen;
-
-       /* DBG_8723A("%s bcn_sz =%d\n", __func__, pktlen); */
-
-}
-
-static void ConstructPSPoll(struct rtw_adapter *padapter,
-                           u8 *pframe, u32 *pLength)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       /*  Frame control. */
-       pwlanhdr->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_CTL | IEEE80211_STYPE_PSPOLL);
-       pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
-
-       /*  AID. */
-       pwlanhdr->duration_id = cpu_to_le16(pmlmeinfo->aid | 0xc000);
-
-       /*  BSSID. */
-       memcpy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN);
-
-       /*  TA. */
-       memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-
-       *pLength = 16;
-}
-
-static void
-ConstructNullFunctionData(struct rtw_adapter *padapter, u8 *pframe,
-                         u32 *pLength, u8 *StaAddr, u8 bQoS, u8 AC,
-                         u8 bEosp, u8 bForcePowerSave)
-{
-       struct ieee80211_hdr *pwlanhdr;
-       u32 pktlen;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-
-       pwlanhdr->frame_control = 0;
-       pwlanhdr->seq_ctrl = 0;
-
-       if (bForcePowerSave)
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PM);
-
-       switch (cur_network->network.ifmode) {
-       case NL80211_IFTYPE_P2P_CLIENT:
-       case NL80211_IFTYPE_STATION:
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_TODS);
-               memcpy(pwlanhdr->addr1,
-                      get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv),
-                      ETH_ALEN);
-               memcpy(pwlanhdr->addr3, StaAddr, ETH_ALEN);
-               break;
-       case NL80211_IFTYPE_P2P_GO:
-       case NL80211_IFTYPE_AP:
-               pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
-               memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-               memcpy(pwlanhdr->addr2,
-                      get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN);
-               memcpy(pwlanhdr->addr3, myid(&padapter->eeprompriv),
-                      ETH_ALEN);
-               break;
-       case NL80211_IFTYPE_ADHOC:
-       default:
-               memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
-               memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
-               memcpy(pwlanhdr->addr3,
-                      get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN);
-               break;
-       }
-
-       if (bQoS == true) {
-               struct ieee80211_qos_hdr *qoshdr;
-               qoshdr = (struct ieee80211_qos_hdr *)pframe;
-
-               qoshdr->frame_control |=
-                       cpu_to_le16(IEEE80211_FTYPE_DATA |
-                                   IEEE80211_STYPE_QOS_NULLFUNC);
-
-               qoshdr->qos_ctrl = cpu_to_le16(AC & IEEE80211_QOS_CTL_TID_MASK);
-               if (bEosp)
-                       qoshdr->qos_ctrl |= cpu_to_le16(IEEE80211_QOS_CTL_EOSP);
-
-               pktlen = sizeof(struct ieee80211_qos_hdr);
-       } else {
-               pwlanhdr->frame_control |=
-                       cpu_to_le16(IEEE80211_FTYPE_DATA |
-                                   IEEE80211_STYPE_NULLFUNC);
-
-               pktlen = sizeof(struct ieee80211_hdr_3addr);
-       }
-
-       *pLength = pktlen;
-}
-
-static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe,
-                             u32 *pLength, u8 *StaAddr, bool bHideSSID)
-{
-       struct ieee80211_mgmt *mgmt;
-       u8 *mac, *bssid;
-       u32 pktlen;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-
-       /* DBG_8723A("%s\n", __func__); */
-
-       mgmt = (struct ieee80211_mgmt *)pframe;
-
-       mac = myid(&padapter->eeprompriv);
-       bssid = cur_network->MacAddress;
-
-       mgmt->frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_RESP);
-
-       mgmt->seq_ctrl = 0;
-
-       memcpy(mgmt->da, StaAddr, ETH_ALEN);
-       memcpy(mgmt->sa, mac, ETH_ALEN);
-       memcpy(mgmt->bssid, bssid, ETH_ALEN);
-
-       put_unaligned_le64(cur_network->tsf,
-                          &mgmt->u.probe_resp.timestamp);
-       put_unaligned_le16(cur_network->beacon_interval,
-                          &mgmt->u.probe_resp.beacon_int);
-       put_unaligned_le16(cur_network->capability,
-                          &mgmt->u.probe_resp.capab_info);
-
-       pktlen = offsetof(struct ieee80211_mgmt, u.probe_resp.variable);
-
-       if (cur_network->IELength > MAX_IE_SZ)
-               return;
-
-       memcpy(mgmt->u.probe_resp.variable, cur_network->IEs,
-              cur_network->IELength);
-       pktlen += (cur_network->IELength);
-
-       *pLength = pktlen;
-}
-
-/*  */
-/*  Description: Fill the reserved packets that FW will use to RSVD page. */
-/*                     Now we just send 4 types packet to rsvd page. */
-/*                     (1)Beacon, (2)Ps-poll, (3)Null data, (4)ProbeRsp. */
-/*     Input: */
-/*         bDLFinished - false: At the first time we will send all the packets as a large packet to Hw, */
-/*                                             so we need to set the packet length to total lengh. */
-/*                           true: At the second time, we should send the first packet (default:beacon) */
-/*                                             to Hw again and set the lengh in descriptor to the real beacon lengh. */
-/*  2009.10.15 by tynli. */
-static void SetFwRsvdPagePkt(struct rtw_adapter *padapter, bool bDLFinished)
-{
-       struct hal_data_8723a *pHalData;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       struct xmit_priv *pxmitpriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info *pmlmeinfo;
-       u32 BeaconLength = 0, ProbeRspLength = 0, PSPollLength;
-       u32 NullDataLength, QosNullLength, BTQosNullLength;
-       u8 *ReservedPagePacket;
-       u8 PageNum, PageNeed, TxDescLen;
-       u16 BufIndex;
-       u32 TotalPacketLen;
-       struct rsvdpage_loc     RsvdPageLoc;
-
-       DBG_8723A("%s\n", __func__);
-
-       ReservedPagePacket = kzalloc(1000, GFP_KERNEL);
-       if (ReservedPagePacket == NULL) {
-               DBG_8723A("%s: alloc ReservedPagePacket fail!\n", __func__);
-               return;
-       }
-
-       pHalData = GET_HAL_DATA(padapter);
-       pxmitpriv = &padapter->xmitpriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       TxDescLen = TXDESC_SIZE;
-       PageNum = 0;
-
-       /* 3 (1) beacon */
-       BufIndex = TXDESC_OFFSET;
-       ConstructBeacon(padapter, &ReservedPagePacket[BufIndex], &BeaconLength);
-
-       /*  When we count the first page size, we need to reserve description size for the RSVD */
-       /*  packet, it will be filled in front of the packet in TXPKTBUF. */
-       PageNeed = (u8)PageNum_128(TxDescLen + BeaconLength);
-       /*  To reserved 2 pages for beacon buffer. 2010.06.24. */
-       if (PageNeed == 1)
-               PageNeed += 1;
-       PageNum += PageNeed;
-       pHalData->FwRsvdPageStartOffset = PageNum;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (2) ps-poll */
-       RsvdPageLoc.LocPsPoll = PageNum;
-       ConstructPSPoll(padapter, &ReservedPagePacket[BufIndex], &PSPollLength);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], PSPollLength, true, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + PSPollLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (3) null data */
-       RsvdPageLoc.LocNullData = PageNum;
-       ConstructNullFunctionData(padapter, &ReservedPagePacket[BufIndex],
-                                 &NullDataLength,
-                                 get_my_bssid23a(&pmlmeinfo->network),
-                                 false, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter,
-                                 &ReservedPagePacket[BufIndex-TxDescLen],
-                                 NullDataLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (4) probe response */
-       RsvdPageLoc.LocProbeRsp = PageNum;
-       ConstructProbeRsp(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &ProbeRspLength,
-               get_my_bssid23a(&pmlmeinfo->network),
-               false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], ProbeRspLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + ProbeRspLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (5) Qos null data */
-       RsvdPageLoc.LocQosNull = PageNum;
-       ConstructNullFunctionData(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &QosNullLength,
-               get_my_bssid23a(&pmlmeinfo->network),
-               true, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], QosNullLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + QosNullLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (6) BT Qos null data */
-       RsvdPageLoc.LocBTQosNull = PageNum;
-       ConstructNullFunctionData(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &BTQosNullLength,
-               get_my_bssid23a(&pmlmeinfo->network),
-               true, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, false, true);
-
-       TotalPacketLen = BufIndex + BTQosNullLength;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (pmgntframe == NULL)
-               goto exit;
-
-       /*  update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->qsel = 0x10;
-       pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
-       memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
-
-       rtl8723au_mgnt_xmit(padapter, pmgntframe);
-
-       DBG_8723A("%s: Set RSVD page location to Fw\n", __func__);
-       FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8 *)&RsvdPageLoc);
-
-exit:
-       kfree(ReservedPagePacket);
-}
-
-void rtl8723a_set_FwJoinBssReport_cmd(struct rtw_adapter *padapter, u8 mstatus)
-{
-       struct joinbssrpt_parm  JoinBssRptParm;
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(padapter);
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       DBG_8723A("%s mstatus(%x)\n", __func__, mstatus);
-
-       if (mstatus == 1) {
-               bool bRecover = false;
-               u8 v8;
-
-               /*  We should set AID, correct TSF, HW seq enable before set JoinBssReport to Fw in 88/92C. */
-               /*  Suggested by filen. Added by tynli. */
-               rtl8723au_write16(padapter, REG_BCN_PSR_RPT,
-                                 0xC000|pmlmeinfo->aid);
-               /*  Do not set TSF again here or vWiFi beacon DMA INT will not work. */
-               /* correct_TSF23a(padapter, pmlmeext); */
-               /*  Hw sequende enable by dedault. 2010.06.23. by tynli. */
-               /* rtl8723au_write16(padapter, REG_NQOS_SEQ, ((pmlmeext->mgnt_seq+100)&0xFFF)); */
-               /* rtl8723au_write8(padapter, REG_HWSEQ_CTRL, 0xFF); */
-
-               /*  set REG_CR bit 8 */
-               v8 = rtl8723au_read8(padapter, REG_CR+1);
-               v8 |= BIT(0); /*  ENSWBCN */
-               rtl8723au_write8(padapter,  REG_CR+1, v8);
-
-               /*  Disable Hw protection for a time which revserd for Hw sending beacon. */
-               /*  Fix download reserved page packet fail that access collision with the protection time. */
-               /*  2010.05.11. Added by tynli. */
-/*                     SetBcnCtrlReg23a(padapter, 0, BIT(3)); */
-/*                     SetBcnCtrlReg23a(padapter, BIT(4), 0); */
-               SetBcnCtrlReg23a(padapter, BIT(4), BIT(3));
-
-               /*  Set FWHW_TXQ_CTRL 0x422[6]= 0 to tell Hw the packet is not a real beacon frame. */
-               if (pHalData->RegFwHwTxQCtrl & BIT(6))
-                       bRecover = true;
-
-               /*  To tell Hw the packet is not a real beacon frame. */
-               /* U1bTmp = rtl8723au_read8(padapter, REG_FWHW_TXQ_CTRL+2); */
-               rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                                pHalData->RegFwHwTxQCtrl & ~BIT(6));
-               pHalData->RegFwHwTxQCtrl &= ~BIT(6);
-               SetFwRsvdPagePkt(padapter, 0);
-
-               /*  2010.05.11. Added by tynli. */
-               SetBcnCtrlReg23a(padapter, BIT(3), BIT(4));
-
-               /*  To make sure that if there exists an adapter which would like to send beacon. */
-               /*  If exists, the origianl value of 0x422[6] will be 1, we should check this to */
-               /*  prevent from setting 0x422[6] to 0 after download reserved page, or it will cause */
-               /*  the beacon cannot be sent by HW. */
-               /*  2010.06.23. Added by tynli. */
-               if (bRecover) {
-                       rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                                        pHalData->RegFwHwTxQCtrl | BIT(6));
-                       pHalData->RegFwHwTxQCtrl |= BIT(6);
-               }
-
-               /*  Clear CR[8] or beacon packet will not be send to TxBuf anymore. */
-               v8 = rtl8723au_read8(padapter, REG_CR+1);
-               v8 &= ~BIT(0); /*  ~ENSWBCN */
-               rtl8723au_write8(padapter, REG_CR+1, v8);
-       }
-
-       JoinBssRptParm.OpMode = mstatus;
-
-       FillH2CCmd(padapter, JOINBSS_RPT_EID, sizeof(JoinBssRptParm), (u8 *)&JoinBssRptParm);
-
-}
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-static void SetFwRsvdPagePkt_BTCoex(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       struct xmit_priv *pxmitpriv;
-       struct mlme_ext_priv *pmlmeext;
-       struct mlme_ext_info *pmlmeinfo;
-       u8 fakemac[6] = {0x00, 0xe0, 0x4c, 0x00, 0x00, 0x00};
-       u32 NullDataLength, BTQosNullLength;
-       u8 *ReservedPagePacket;
-       u8 PageNum, PageNeed, TxDescLen;
-       u16 BufIndex;
-       u32 TotalPacketLen;
-       struct rsvdpage_loc     RsvdPageLoc;
-
-       DBG_8723A("+%s\n", __func__);
-
-       ReservedPagePacket = kzalloc(1024, GFP_KERNEL);
-       if (ReservedPagePacket == NULL) {
-               DBG_8723A("%s: alloc ReservedPagePacket fail!\n", __func__);
-               return;
-       }
-
-       pHalData = GET_HAL_DATA(padapter);
-       pxmitpriv = &padapter->xmitpriv;
-       pmlmeext = &padapter->mlmeextpriv;
-       pmlmeinfo = &pmlmeext->mlmext_info;
-
-       TxDescLen = TXDESC_SIZE;
-       PageNum = 0;
-
-       /* 3 (1) beacon */
-       BufIndex = TXDESC_OFFSET;
-       /*  skip Beacon Packet */
-       PageNeed = 3;
-
-       PageNum += PageNeed;
-       pHalData->FwRsvdPageStartOffset = PageNum;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (3) null data */
-       RsvdPageLoc.LocNullData = PageNum;
-       ConstructNullFunctionData(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &NullDataLength,
-               fakemac,
-               false, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, false, false);
-
-       PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
-       PageNum += PageNeed;
-
-       BufIndex += PageNeed*128;
-
-       /* 3 (6) BT Qos null data */
-       RsvdPageLoc.LocBTQosNull = PageNum;
-       ConstructNullFunctionData(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &BTQosNullLength,
-               fakemac,
-               true, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], BTQosNullLength, false, true);
-
-       TotalPacketLen = BufIndex + BTQosNullLength;
-
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (pmgntframe == NULL)
-               goto exit;
-
-       /*  update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->qsel = 0x10;
-       pattrib->pktlen = pattrib->last_txcmdsz = TotalPacketLen - TXDESC_OFFSET;
-       memcpy(pmgntframe->buf_addr, ReservedPagePacket, TotalPacketLen);
-
-       rtl8723au_mgnt_xmit(padapter, pmgntframe);
-
-       DBG_8723A("%s: Set RSVD page location to Fw\n", __func__);
-       FillH2CCmd(padapter, RSVD_PAGE_EID, sizeof(RsvdPageLoc), (u8 *)&RsvdPageLoc);
-
-exit:
-       kfree(ReservedPagePacket);
-}
-
-void rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       u8 bRecover = false;
-
-       DBG_8723A("+%s\n", __func__);
-
-       pHalData = GET_HAL_DATA(padapter);
-
-       /*  Set FWHW_TXQ_CTRL 0x422[6]= 0 to tell Hw the packet is not a real beacon frame. */
-       if (pHalData->RegFwHwTxQCtrl & BIT(6))
-               bRecover = true;
-
-       /*  To tell Hw the packet is not a real beacon frame. */
-       pHalData->RegFwHwTxQCtrl &= ~BIT(6);
-       rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                        pHalData->RegFwHwTxQCtrl);
-       SetFwRsvdPagePkt_BTCoex(padapter);
-
-       /*  To make sure that if there exists an adapter which would like to send beacon. */
-       /*  If exists, the origianl value of 0x422[6] will be 1, we should check this to */
-       /*  prevent from setting 0x422[6] to 0 after download reserved page, or it will cause */
-       /*  the beacon cannot be sent by HW. */
-       /*  2010.06.23. Added by tynli. */
-       if (bRecover) {
-               pHalData->RegFwHwTxQCtrl |= BIT(6);
-               rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                                pHalData->RegFwHwTxQCtrl);
-       }
-}
-#endif
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_dm.c b/drivers/staging/rtl8723au/hal/rtl8723a_dm.c
deleted file mode 100644 (file)
index 1e831f2..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/*  */
-/*  Description: */
-/*  */
-/*  This file is for 92CE/92CU dynamic mechanism only */
-/*  */
-/*  */
-/*  */
-#define _RTL8723A_DM_C_
-
-/*  */
-/*  include files */
-/*  */
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-/*  */
-/*  Global var */
-/*  */
-
-static void dm_CheckPbcGPIO(struct rtw_adapter *padapter)
-{
-       u8      tmp1byte;
-       u8      bPbcPressed = false;
-
-       if (!padapter->registrypriv.hw_wps_pbc)
-               return;
-
-       tmp1byte = rtl8723au_read8(padapter, GPIO_IO_SEL);
-       tmp1byte |= (HAL_8192C_HW_GPIO_WPS_BIT);
-       /* enable GPIO[2] as output mode */
-       rtl8723au_write8(padapter, GPIO_IO_SEL, tmp1byte);
-
-       tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
-       /* reset the floating voltage level */
-       rtl8723au_write8(padapter,  GPIO_IN, tmp1byte);
-
-       tmp1byte = rtl8723au_read8(padapter, GPIO_IO_SEL);
-       tmp1byte &= ~(HAL_8192C_HW_GPIO_WPS_BIT);
-       /* enable GPIO[2] as input mode */
-       rtl8723au_write8(padapter, GPIO_IO_SEL, tmp1byte);
-
-       tmp1byte = rtl8723au_read8(padapter, GPIO_IN);
-
-       if (tmp1byte == 0xff)
-               return;
-
-       if (tmp1byte&HAL_8192C_HW_GPIO_WPS_BIT)
-               bPbcPressed = true;
-
-       if (bPbcPressed) {
-               /*  Here we only set bPbcPressed to true */
-               /*  After trigger PBC, the variable will be set to false */
-               DBG_8723A("CheckPbcGPIO - PBC is pressed\n");
-
-               if (padapter->pid[0] == 0) {
-                       /* 0 is the default value and it means the application
-                        * monitors the HW PBC doesn't privde its pid to driver.
-                        */
-                       return;
-               }
-
-               kill_pid(find_vpid(padapter->pid[0]), SIGUSR1, 1);
-       }
-}
-
-/*  Initialize GPIO setting registers */
-/*  functions */
-
-void rtl8723a_init_dm_priv(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       u8 cut_ver, fab_ver;
-
-       memset(pdmpriv, 0, sizeof(struct dm_priv));
-       memset(pDM_Odm, 0, sizeof(*pDM_Odm));
-
-       pDM_Odm->Adapter = Adapter;
-
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_IC_TYPE, ODM_RTL8723A);
-
-       if (IS_8723A_A_CUT(pHalData->VersionID)) {
-               fab_ver = ODM_UMC;
-               cut_ver = ODM_CUT_A;
-       } else if (IS_8723A_B_CUT(pHalData->VersionID)) {
-               fab_ver = ODM_UMC;
-               cut_ver = ODM_CUT_B;
-       } else {
-               fab_ver = ODM_TSMC;
-               cut_ver = ODM_CUT_A;
-       }
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_FAB_VER, fab_ver);
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_CUT_VER, cut_ver);
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_MP_TEST_CHIP, IS_NORMAL_CHIP(pHalData->VersionID));
-
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_BOARD_TYPE, pHalData->BoardType);
-
-       if (pHalData->BoardType == BOARD_USB_High_PA) {
-               ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_EXT_LNA, true);
-               ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_EXT_PA, true);
-       }
-       ODM_CmnInfoInit23a(pDM_Odm, ODM_CMNINFO_BWIFI_TEST, Adapter->registrypriv.wifi_spec);
-}
-
-static void Update_ODM_ComInfo_8723a(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       int i;
-       pdmpriv->InitODMFlag = 0;
-       /*  Pointer reference */
-       rtl8723a_odm_support_ability_set(Adapter, DYNAMIC_ALL_FUNC_ENABLE);
-
-       for (i = 0; i < NUM_STA; i++)
-               ODM_CmnInfoPtrArrayHook23a(pDM_Odm, ODM_CMNINFO_STA_STATUS, i, NULL);
-}
-
-void rtl8723a_InitHalDm(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-       u8      i;
-
-       Update_ODM_ComInfo_8723a(Adapter);
-       ODM23a_DMInit(pDM_Odm);
-       /*  Save REG_INIDATA_RATE_SEL value for TXDESC. */
-       for (i = 0; i < 32; i++)
-               pdmpriv->INIDATA_RATE[i] = rtl8723au_read8(Adapter, REG_INIDATA_RATE_SEL+i) & 0x3f;
-}
-
-void
-rtl8723a_HalDmWatchDog(
-       struct rtw_adapter *Adapter
-       )
-{
-       bool            bFwCurrentInPSMode = false;
-       bool            bFwPSAwake = true;
-       u8 bLinked = false;
-       u8 hw_init_completed = false;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-
-       hw_init_completed = Adapter->hw_init_completed;
-
-       if (hw_init_completed == false)
-               goto skip_dm;
-
-       bFwCurrentInPSMode = Adapter->pwrctrlpriv.bFwCurrentInPSMode;
-       bFwPSAwake = rtl8723a_get_fwlps_rf_on(Adapter);
-
-       if (!bFwCurrentInPSMode && bFwPSAwake) {
-               /*  Read REG_INIDATA_RATE_SEL value for TXDESC. */
-               if (check_fwstate(&Adapter->mlmepriv, WIFI_STATION_STATE)) {
-                       pdmpriv->INIDATA_RATE[0] = rtl8723au_read8(Adapter, REG_INIDATA_RATE_SEL) & 0x3f;
-               } else {
-                       u8      i;
-                       for (i = 1 ; i < (Adapter->stapriv.asoc_sta_count + 1); i++)
-                               pdmpriv->INIDATA_RATE[i] = rtl8723au_read8(Adapter, (REG_INIDATA_RATE_SEL+i)) & 0x3f;
-               }
-       }
-
-       /* ODM */
-       if (rtw_linked_check(Adapter))
-               bLinked = true;
-
-       ODM_CmnInfoUpdate23a(&pHalData->odmpriv, ODM_CMNINFO_LINK, bLinked);
-       ODM_DMWatchdog23a(Adapter);
-
-skip_dm:
-
-       /*  Check GPIO to determine current RF on/off and Pbc status. */
-       /*  Check Hardware Radio ON/OFF or not */
-       dm_CheckPbcGPIO(Adapter);
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c b/drivers/staging/rtl8723au/hal/rtl8723a_hal_init.c
deleted file mode 100644 (file)
index 1ea0af4..0000000
+++ /dev/null
@@ -1,2076 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _HAL_INIT_C_
-
-#include <linux/firmware.h>
-#include <drv_types.h>
-#include <rtw_efuse.h>
-
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-static void _FWDownloadEnable(struct rtw_adapter *padapter, bool enable)
-{
-       u8 tmp;
-
-       if (enable) {
-               /*  8051 enable */
-               tmp = rtl8723au_read8(padapter, REG_SYS_FUNC_EN + 1);
-               rtl8723au_write8(padapter, REG_SYS_FUNC_EN + 1, tmp | 0x04);
-
-               /*  MCU firmware download enable. */
-               tmp = rtl8723au_read8(padapter, REG_MCUFWDL);
-               rtl8723au_write8(padapter, REG_MCUFWDL, tmp | 0x01);
-
-               /*  8051 reset */
-               tmp = rtl8723au_read8(padapter, REG_MCUFWDL + 2);
-               rtl8723au_write8(padapter, REG_MCUFWDL + 2, tmp & 0xf7);
-       } else {
-               /*  MCU firmware download disable. */
-               tmp = rtl8723au_read8(padapter, REG_MCUFWDL);
-               rtl8723au_write8(padapter, REG_MCUFWDL, tmp & 0xfe);
-
-               /*  Reserved for fw extension. */
-               rtl8723au_write8(padapter, REG_MCUFWDL + 1, 0x00);
-       }
-}
-
-static int
-_PageWrite(struct rtw_adapter *padapter, u32 page, void *buffer, u32 size)
-{
-       u8 value8;
-       u8 u8Page = (u8) (page & 0x07);
-
-       if (size > MAX_PAGE_SIZE)
-               return _FAIL;
-
-       value8 = (rtl8723au_read8(padapter, REG_MCUFWDL + 2) & 0xF8) | u8Page;
-       rtl8723au_write8(padapter, REG_MCUFWDL + 2, value8);
-
-       return rtl8723au_writeN(padapter, FW_8723A_START_ADDRESS, size, buffer);
-}
-
-static int _WriteFW(struct rtw_adapter *padapter, void *buffer, u32 size)
-{
-       /*  Since we need dynamic decide method of dwonload fw, so we
-           call this function to get chip version. */
-       /*  We can remove _ReadChipVersion from ReadpadapterInfo8192C later. */
-       int ret = _SUCCESS;
-       u32 pageNums, remainSize;
-       u32 page, offset;
-       u8 *bufferPtr = (u8 *) buffer;
-
-       pageNums = size / MAX_PAGE_SIZE;
-       /* RT_ASSERT((pageNums <= 4),
-          ("Page numbers should not greater then 4 \n")); */
-       remainSize = size % MAX_PAGE_SIZE;
-
-       for (page = 0; page < pageNums; page++) {
-               offset = page * MAX_PAGE_SIZE;
-               ret = _PageWrite(padapter, page, bufferPtr + offset,
-                                MAX_PAGE_SIZE);
-
-               if (ret == _FAIL)
-                       goto exit;
-       }
-       if (remainSize) {
-               offset = pageNums * MAX_PAGE_SIZE;
-               page = pageNums;
-               ret = _PageWrite(padapter, page, bufferPtr + offset,
-                                remainSize);
-
-               if (ret == _FAIL)
-                       goto exit;
-       }
-       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                "_WriteFW Done- for Normal chip.\n");
-
-exit:
-       return ret;
-}
-
-static int _FWFreeToGo(struct rtw_adapter *padapter)
-{
-       u32 counter = 0;
-       u32 value32;
-
-       /*  polling CheckSum report */
-       do {
-               value32 = rtl8723au_read32(padapter, REG_MCUFWDL);
-               if (value32 & FWDL_ChkSum_rpt)
-                       break;
-       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
-
-       if (counter >= POLLING_READY_TIMEOUT_COUNT) {
-               RT_TRACE(_module_hal_init_c_, _drv_err_,
-                        "%s: chksum report fail! REG_MCUFWDL:0x%08x\n",
-                        __func__, value32);
-               return _FAIL;
-       }
-       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                "%s: Checksum report OK! REG_MCUFWDL:0x%08x\n", __func__,
-                value32);
-
-       value32 = rtl8723au_read32(padapter, REG_MCUFWDL);
-       value32 |= MCUFWDL_RDY;
-       value32 &= ~WINTINI_RDY;
-       rtl8723au_write32(padapter, REG_MCUFWDL, value32);
-
-       /*  polling for FW ready */
-       counter = 0;
-       do {
-               value32 = rtl8723au_read32(padapter, REG_MCUFWDL);
-               if (value32 & WINTINI_RDY) {
-                       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                "%s: Polling FW ready success!! REG_MCUFWDL:0x%08x\n",
-                                __func__, value32);
-                       return _SUCCESS;
-               }
-               udelay(5);
-       } while (counter++ < POLLING_READY_TIMEOUT_COUNT);
-
-       RT_TRACE(_module_hal_init_c_, _drv_err_,
-                "%s: Polling FW ready fail!! REG_MCUFWDL:0x%08x\n",
-                __func__, value32);
-       return _FAIL;
-}
-
-#define IS_FW_81xxC(padapter)  (((GET_HAL_DATA(padapter))->FirmwareSignature & 0xFFF0) == 0x88C0)
-
-void rtl8723a_FirmwareSelfReset(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 u1bTmp;
-       u8 Delay = 100;
-
-       if (!(IS_FW_81xxC(padapter) &&
-             ((pHalData->FirmwareVersion < 0x21) ||
-              (pHalData->FirmwareVersion == 0x21 &&
-               pHalData->FirmwareSubVersion < 0x01)))) {
-               /*  after 88C Fw v33.1 */
-               /* 0x1cf = 0x20. Inform 8051 to reset. 2009.12.25. tynli_test */
-               rtl8723au_write8(padapter, REG_HMETFR + 3, 0x20);
-
-               u1bTmp = rtl8723au_read8(padapter, REG_SYS_FUNC_EN + 1);
-               while (u1bTmp & BIT(2)) {
-                       Delay--;
-                       if (Delay == 0)
-                               break;
-                       udelay(50);
-                       u1bTmp = rtl8723au_read8(padapter, REG_SYS_FUNC_EN + 1);
-               }
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "-%s: 8051 reset success (%d)\n", __func__,
-                        Delay);
-
-               if ((Delay == 0)) {
-                       /* force firmware reset */
-                       u1bTmp = rtl8723au_read8(padapter, REG_SYS_FUNC_EN + 1);
-                       rtl8723au_write8(padapter, REG_SYS_FUNC_EN + 1,
-                                        u1bTmp & ~BIT(2));
-               }
-       }
-}
-
-/*  */
-/*     Description: */
-/*             Download 8192C firmware code. */
-/*  */
-/*  */
-int rtl8723a_FirmwareDownload(struct rtw_adapter *padapter)
-{
-       int rtStatus = _SUCCESS;
-       u8 writeFW_retry = 0;
-       unsigned long fwdl_start_time;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct dvobj_priv *dvobj = adapter_to_dvobj(padapter);
-       struct device *device = dvobj_to_dev(dvobj);
-       struct rt_8723a_firmware_hdr *pFwHdr = NULL;
-       const struct firmware *fw;
-       char *fw_name;
-       u8 *firmware_buf = NULL;
-       u8 *buf;
-       int fw_size;
-       static int log_version;
-
-       RT_TRACE(_module_hal_init_c_, _drv_info_, "+%s\n", __func__);
-
-       if (IS_8723A_A_CUT(pHalData->VersionID)) {
-               fw_name = "rtlwifi/rtl8723aufw_A.bin";
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "rtl8723a_FirmwareDownload: R8723FwImageArray_UMC for RTL8723A A CUT\n");
-       } else if (IS_8723A_B_CUT(pHalData->VersionID)) {
-               /*  WLAN Fw. */
-               if (padapter->registrypriv.wifi_spec == 1) {
-                       fw_name = "rtlwifi/rtl8723aufw_B_NoBT.bin";
-                       DBG_8723A(" Rtl8723_FwUMCBCutImageArrayWithoutBT for "
-                                 "RTL8723A B CUT\n");
-               } else {
-                       if (rtl8723a_BT_coexist(padapter)) {
-                               fw_name = "rtlwifi/rtl8723aufw_B.bin";
-                               DBG_8723A(" Rtl8723_FwUMCBCutImageArrayWithBT "
-                                         "for RTL8723A B CUT\n");
-                       } else {
-                               fw_name = "rtlwifi/rtl8723aufw_B_NoBT.bin";
-                               DBG_8723A(" Rtl8723_FwUMCBCutImageArrayWithout "
-                                         "BT for RTL8723A B CUT\n");
-                       }
-               }
-       } else {
-               /*  <Roger_TODO> We should download proper RAM Code here
-                   to match the ROM code. */
-               RT_TRACE(_module_hal_init_c_, _drv_err_,
-                        "%s: unknown version!\n", __func__);
-               rtStatus = _FAIL;
-               goto Exit;
-       }
-
-       pr_info("rtl8723au: Loading firmware %s\n", fw_name);
-       if (request_firmware(&fw, fw_name, device)) {
-               pr_err("rtl8723au: request_firmware load failed\n");
-               rtStatus = _FAIL;
-               goto Exit;
-       }
-       if (!fw) {
-               pr_err("rtl8723au: Firmware %s not available\n", fw_name);
-               rtStatus = _FAIL;
-               goto Exit;
-       }
-       firmware_buf = kmemdup(fw->data, fw->size, GFP_KERNEL);
-       fw_size = fw->size;
-       release_firmware(fw);
-       if (!firmware_buf) {
-               rtStatus = _FAIL;
-               goto Exit;
-       }
-       buf = firmware_buf;
-
-       /*  To Check Fw header. Added by tynli. 2009.12.04. */
-       pFwHdr = (struct rt_8723a_firmware_hdr *)firmware_buf;
-
-       pHalData->FirmwareVersion = le16_to_cpu(pFwHdr->Version);
-       pHalData->FirmwareSubVersion = pFwHdr->Subversion;
-       pHalData->FirmwareSignature = le16_to_cpu(pFwHdr->Signature);
-
-       DBG_8723A("%s: fw_ver =%d fw_subver =%d sig = 0x%x\n",
-                 __func__, pHalData->FirmwareVersion,
-                 pHalData->FirmwareSubVersion, pHalData->FirmwareSignature);
-
-       if (!log_version++)
-               pr_info("%sFirmware Version %d, SubVersion %d, Signature "
-                       "0x%x\n", DRIVER_PREFIX, pHalData->FirmwareVersion,
-                       pHalData->FirmwareSubVersion,
-                       pHalData->FirmwareSignature);
-
-       if (IS_FW_HEADER_EXIST(pFwHdr)) {
-               /*  Shift 32 bytes for FW header */
-               buf = buf + 32;
-               fw_size = fw_size - 32;
-       }
-
-       /*  Suggested by Filen. If 8051 is running in RAM code, driver should
-           inform Fw to reset by itself, */
-       /*  or it will cause download Fw fail. 2010.02.01. by tynli. */
-       if (rtl8723au_read8(padapter, REG_MCUFWDL) & RAM_DL_SEL) {
-               /* 8051 RAM code */
-               rtl8723a_FirmwareSelfReset(padapter);
-               rtl8723au_write8(padapter, REG_MCUFWDL, 0x00);
-       }
-
-       _FWDownloadEnable(padapter, true);
-       fwdl_start_time = jiffies;
-       while (1) {
-               /* reset the FWDL chksum */
-               rtl8723au_write8(padapter, REG_MCUFWDL,
-                                rtl8723au_read8(padapter, REG_MCUFWDL) |
-                                FWDL_ChkSum_rpt);
-
-               rtStatus = _WriteFW(padapter, buf, fw_size);
-
-               if (rtStatus == _SUCCESS ||
-                   (jiffies_to_msecs(jiffies - fwdl_start_time) > 500 &&
-                    writeFW_retry++ >= 3))
-                       break;
-
-               DBG_8723A("%s writeFW_retry:%u, time after fwdl_start_time:"
-                         "%ums\n", __func__, writeFW_retry,
-                         jiffies_to_msecs(jiffies - fwdl_start_time));
-       }
-       _FWDownloadEnable(padapter, false);
-       if (_SUCCESS != rtStatus) {
-               DBG_8723A("DL Firmware failed!\n");
-               goto Exit;
-       }
-
-       rtStatus = _FWFreeToGo(padapter);
-       if (_SUCCESS != rtStatus) {
-               RT_TRACE(_module_hal_init_c_, _drv_err_,
-                        "DL Firmware failed!\n");
-               goto Exit;
-       }
-       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                "Firmware is ready to run!\n");
-
-Exit:
-       kfree(firmware_buf);
-       return rtStatus;
-}
-
-void rtl8723a_InitializeFirmwareVars(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  Init Fw LPS related. */
-       padapter->pwrctrlpriv.bFwCurrentInPSMode = false;
-
-       /*  Init H2C counter. by tynli. 2009.12.09. */
-       pHalData->LastHMEBoxNum = 0;
-}
-
-/*  */
-/*                             Efuse related code */
-/*  */
-static u8
-hal_EfuseSwitchToBank(struct rtw_adapter *padapter, u8 bank)
-{
-       u8 bRet = false;
-       u32 value32 = 0;
-
-       DBG_8723A("%s: Efuse switch bank to %d\n", __func__, bank);
-       value32 = rtl8723au_read32(padapter, EFUSE_TEST);
-       bRet = true;
-       switch (bank) {
-       case 0:
-               value32 = (value32 & ~EFUSE_SEL_MASK) |
-                       EFUSE_SEL(EFUSE_WIFI_SEL_0);
-               break;
-       case 1:
-               value32 = (value32 & ~EFUSE_SEL_MASK) |
-                       EFUSE_SEL(EFUSE_BT_SEL_0);
-               break;
-       case 2:
-               value32 = (value32 & ~EFUSE_SEL_MASK) |
-                       EFUSE_SEL(EFUSE_BT_SEL_1);
-               break;
-       case 3:
-               value32 = (value32 & ~EFUSE_SEL_MASK) |
-                       EFUSE_SEL(EFUSE_BT_SEL_2);
-               break;
-       default:
-               value32 = (value32 & ~EFUSE_SEL_MASK) |
-                       EFUSE_SEL(EFUSE_WIFI_SEL_0);
-               bRet = false;
-               break;
-       }
-       rtl8723au_write32(padapter, EFUSE_TEST, value32);
-
-       return bRet;
-}
-
-static void
-hal_ReadEFuse_WiFi(struct rtw_adapter *padapter,
-                  u16 _offset, u16 _size_byte, u8 *pbuf)
-{
-       u8 *efuseTbl = NULL;
-       u16 eFuse_Addr = 0;
-       u8 offset, wden;
-       u8 efuseHeader, efuseExtHdr, efuseData;
-       u16 i, total, used;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  Do NOT excess total size of EFuse table.
-           Added by Roger, 2008.11.10. */
-       if ((_offset + _size_byte) > EFUSE_MAP_LEN_8723A) {
-               DBG_8723A("%s: Invalid offset(%#x) with read bytes(%#x)!!\n",
-                         __func__, _offset, _size_byte);
-               return;
-       }
-
-       efuseTbl = kmalloc(EFUSE_MAP_LEN_8723A, GFP_KERNEL);
-       if (!efuseTbl)
-               return;
-       /*  0xff will be efuse default value instead of 0x00. */
-       memset(efuseTbl, 0xFF, EFUSE_MAP_LEN_8723A);
-
-       /*  switch bank back to bank 0 for later BT and wifi use. */
-       hal_EfuseSwitchToBank(padapter, 0);
-
-       while (AVAILABLE_EFUSE_ADDR(eFuse_Addr)) {
-               ReadEFuseByte23a(padapter, eFuse_Addr++, &efuseHeader);
-               if (efuseHeader == 0xFF) {
-                       DBG_8723A("%s: data end at address =%#x\n", __func__,
-                                 eFuse_Addr);
-                       break;
-               }
-
-               /*  Check PG header for section num. */
-               if (EXT_HEADER(efuseHeader)) {  /* extended header */
-                       offset = GET_HDR_OFFSET_2_0(efuseHeader);
-
-                       ReadEFuseByte23a(padapter, eFuse_Addr++, &efuseExtHdr);
-                       if (ALL_WORDS_DISABLED(efuseExtHdr))
-                               continue;
-
-                       offset |= ((efuseExtHdr & 0xF0) >> 1);
-                       wden = efuseExtHdr & 0x0F;
-               } else {
-                       offset = (efuseHeader >> 4) & 0x0f;
-                       wden = efuseHeader & 0x0f;
-               }
-
-               if (offset < EFUSE_MAX_SECTION_8723A) {
-                       u16 addr;
-                       /*  Get word enable value from PG header */
-
-                       addr = offset * PGPKT_DATA_SIZE;
-                       for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
-                               /* Check word enable condition in the section */
-                               if (!(wden & (0x01 << i))) {
-                                       ReadEFuseByte23a(padapter, eFuse_Addr++,
-                                                     &efuseData);
-                                       efuseTbl[addr] = efuseData;
-
-                                       ReadEFuseByte23a(padapter, eFuse_Addr++,
-                                                     &efuseData);
-                                       efuseTbl[addr + 1] = efuseData;
-                               }
-                               addr += 2;
-                       }
-               } else {
-                       DBG_8723A(KERN_ERR "%s: offset(%d) is illegal!!\n",
-                                 __func__, offset);
-                       eFuse_Addr += Efuse_CalculateWordCnts23a(wden) * 2;
-               }
-       }
-
-       /*  Copy from Efuse map to output pointer memory!!! */
-       for (i = 0; i < _size_byte; i++)
-               pbuf[i] = efuseTbl[_offset + i];
-
-       /*  Calculate Efuse utilization */
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_WIFI,
-                                TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total);
-       used = eFuse_Addr - 1;
-       pHalData->EfuseUsedBytes = used;
-
-       kfree(efuseTbl);
-}
-
-static void
-hal_ReadEFuse_BT(struct rtw_adapter *padapter,
-                u16 _offset, u16 _size_byte, u8 *pbuf)
-{
-       u8 *efuseTbl;
-       u8 bank;
-       u16 eFuse_Addr;
-       u8 efuseHeader, efuseExtHdr, efuseData;
-       u8 offset, wden;
-       u16 i, total, used;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  Do NOT excess total size of EFuse table.
-           Added by Roger, 2008.11.10. */
-       if ((_offset + _size_byte) > EFUSE_BT_MAP_LEN) {
-               DBG_8723A("%s: Invalid offset(%#x) with read bytes(%#x)!!\n",
-                         __func__, _offset, _size_byte);
-               return;
-       }
-
-       efuseTbl = kmalloc(EFUSE_BT_MAP_LEN, GFP_KERNEL);
-       if (!efuseTbl)
-               return;
-       /*  0xff will be efuse default value instead of 0x00. */
-       memset(efuseTbl, 0xFF, EFUSE_BT_MAP_LEN);
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_BT,
-                                TYPE_AVAILABLE_EFUSE_BYTES_BANK, &total);
-
-       for (bank = 1; bank < EFUSE_MAX_BANK; bank++) {
-               if (hal_EfuseSwitchToBank(padapter, bank) == false) {
-                       DBG_8723A("%s: hal_EfuseSwitchToBank Fail!!\n",
-                                 __func__);
-                       goto exit;
-               }
-
-               eFuse_Addr = 0;
-
-               while (AVAILABLE_EFUSE_ADDR(eFuse_Addr)) {
-                       ReadEFuseByte23a(padapter, eFuse_Addr++, &efuseHeader);
-                       if (efuseHeader == 0xFF)
-                               break;
-
-                       /*  Check PG header for section num. */
-                       if (EXT_HEADER(efuseHeader)) {  /* extended header */
-                               offset = GET_HDR_OFFSET_2_0(efuseHeader);
-
-                               ReadEFuseByte23a(padapter, eFuse_Addr++,
-                                             &efuseExtHdr);
-                               if (ALL_WORDS_DISABLED(efuseExtHdr))
-                                       continue;
-
-                               offset |= ((efuseExtHdr & 0xF0) >> 1);
-                               wden = efuseExtHdr & 0x0F;
-                       } else {
-                               offset = (efuseHeader >> 4) & 0x0f;
-                               wden = efuseHeader & 0x0f;
-                       }
-
-                       if (offset < EFUSE_BT_MAX_SECTION) {
-                               u16 addr;
-
-                               /*  Get word enable value from PG header */
-
-                               addr = offset * PGPKT_DATA_SIZE;
-                               for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {
-                                       /*  Check word enable condition in
-                                           the section */
-                                       if (!(wden & (0x01 << i))) {
-                                               ReadEFuseByte23a(padapter,
-                                                             eFuse_Addr++,
-                                                             &efuseData);
-                                               efuseTbl[addr] = efuseData;
-
-                                               ReadEFuseByte23a(padapter,
-                                                             eFuse_Addr++,
-                                                             &efuseData);
-                                               efuseTbl[addr + 1] = efuseData;
-                                       }
-                                       addr += 2;
-                               }
-                       } else {
-                               DBG_8723A(KERN_ERR
-                                         "%s: offset(%d) is illegal!!\n",
-                                         __func__, offset);
-                               eFuse_Addr += Efuse_CalculateWordCnts23a(wden) * 2;
-                       }
-               }
-
-               if ((eFuse_Addr - 1) < total) {
-                       DBG_8723A("%s: bank(%d) data end at %#x\n",
-                                 __func__, bank, eFuse_Addr - 1);
-                       break;
-               }
-       }
-
-       /*  switch bank back to bank 0 for later BT and wifi use. */
-       hal_EfuseSwitchToBank(padapter, 0);
-
-       /*  Copy from Efuse map to output pointer memory!!! */
-       for (i = 0; i < _size_byte; i++)
-               pbuf[i] = efuseTbl[_offset + i];
-
-       /*  */
-       /*  Calculate Efuse utilization. */
-       /*  */
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_BT,
-                                TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, &total);
-       used = (EFUSE_BT_REAL_BANK_CONTENT_LEN * (bank - 1)) + eFuse_Addr - 1;
-       pHalData->BTEfuseUsedBytes = used;
-
-exit:
-       kfree(efuseTbl);
-}
-
-void
-rtl8723a_readefuse(struct rtw_adapter *padapter,
-                  u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf)
-{
-       if (efuseType == EFUSE_WIFI)
-               hal_ReadEFuse_WiFi(padapter, _offset, _size_byte, pbuf);
-       else
-               hal_ReadEFuse_BT(padapter, _offset, _size_byte, pbuf);
-}
-
-u16 rtl8723a_EfuseGetCurrentSize_WiFi(struct rtw_adapter *padapter)
-{
-       u16 efuse_addr = 0;
-       u8 hoffset = 0, hworden = 0;
-       u8 efuse_data, word_cnts = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       efuse_addr = pHalData->EfuseUsedBytes;
-
-       DBG_8723A("%s: start_efuse_addr = 0x%X\n", __func__, efuse_addr);
-
-       /*  switch bank back to bank 0 for later BT and wifi use. */
-       hal_EfuseSwitchToBank(padapter, 0);
-
-       while (AVAILABLE_EFUSE_ADDR(efuse_addr)) {
-               if (efuse_OneByteRead23a(padapter, efuse_addr, &efuse_data) ==
-                   _FAIL) {
-                       DBG_8723A(KERN_ERR "%s: efuse_OneByteRead23a Fail! "
-                                 "addr = 0x%X !!\n", __func__, efuse_addr);
-                       break;
-               }
-
-               if (efuse_data == 0xFF)
-                       break;
-
-               if (EXT_HEADER(efuse_data)) {
-                       hoffset = GET_HDR_OFFSET_2_0(efuse_data);
-                       efuse_addr++;
-                       efuse_OneByteRead23a(padapter, efuse_addr, &efuse_data);
-                       if (ALL_WORDS_DISABLED(efuse_data))
-                               continue;
-
-                       hoffset |= ((efuse_data & 0xF0) >> 1);
-                       hworden = efuse_data & 0x0F;
-               } else {
-                       hoffset = (efuse_data >> 4) & 0x0F;
-                       hworden = efuse_data & 0x0F;
-               }
-
-               word_cnts = Efuse_CalculateWordCnts23a(hworden);
-               efuse_addr += (word_cnts * 2) + 1;
-       }
-
-       pHalData->EfuseUsedBytes = efuse_addr;
-
-       DBG_8723A("%s: CurrentSize =%d\n", __func__, efuse_addr);
-
-       return efuse_addr;
-}
-
-u16 rtl8723a_EfuseGetCurrentSize_BT(struct rtw_adapter *padapter)
-{
-       u16 btusedbytes;
-       u16 efuse_addr;
-       u8 bank, startBank;
-       u8 hoffset = 0, hworden = 0;
-       u8 efuse_data, word_cnts = 0;
-       u16 retU2 = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       btusedbytes = pHalData->BTEfuseUsedBytes;
-
-       efuse_addr = (u16) ((btusedbytes % EFUSE_BT_REAL_BANK_CONTENT_LEN));
-       startBank = (u8) (1 + (btusedbytes / EFUSE_BT_REAL_BANK_CONTENT_LEN));
-
-       DBG_8723A("%s: start from bank =%d addr = 0x%X\n", __func__, startBank,
-                 efuse_addr);
-
-       EFUSE_GetEfuseDefinition23a(padapter, EFUSE_BT,
-                                TYPE_AVAILABLE_EFUSE_BYTES_BANK, &retU2);
-
-       for (bank = startBank; bank < EFUSE_MAX_BANK; bank++) {
-               if (hal_EfuseSwitchToBank(padapter, bank) == false) {
-                       DBG_8723A(KERN_ERR "%s: switch bank(%d) Fail!!\n",
-                                 __func__, bank);
-                       bank = EFUSE_MAX_BANK;
-                       break;
-               }
-
-               /*  only when bank is switched we have to reset
-                   the efuse_addr. */
-               if (bank != startBank)
-                       efuse_addr = 0;
-
-               while (AVAILABLE_EFUSE_ADDR(efuse_addr)) {
-                       if (efuse_OneByteRead23a(padapter, efuse_addr,
-                                             &efuse_data) == _FAIL) {
-                               DBG_8723A(KERN_ERR "%s: efuse_OneByteRead23a Fail!"
-                                         " addr = 0x%X !!\n",
-                                         __func__, efuse_addr);
-                               bank = EFUSE_MAX_BANK;
-                               break;
-                       }
-
-                       if (efuse_data == 0xFF)
-                               break;
-
-                       if (EXT_HEADER(efuse_data)) {
-                               hoffset = GET_HDR_OFFSET_2_0(efuse_data);
-                               efuse_addr++;
-                               efuse_OneByteRead23a(padapter, efuse_addr,
-                                                 &efuse_data);
-                               if (ALL_WORDS_DISABLED(efuse_data)) {
-                                       efuse_addr++;
-                                       continue;
-                               }
-
-                               hoffset |= ((efuse_data & 0xF0) >> 1);
-                               hworden = efuse_data & 0x0F;
-                       } else {
-                               hoffset = (efuse_data >> 4) & 0x0F;
-                               hworden = efuse_data & 0x0F;
-                       }
-                       word_cnts = Efuse_CalculateWordCnts23a(hworden);
-                       /* read next header */
-                       efuse_addr += (word_cnts * 2) + 1;
-               }
-
-               /*  Check if we need to check next bank efuse */
-               if (efuse_addr < retU2)
-                       break;  /*  don't need to check next bank. */
-       }
-
-       retU2 = ((bank - 1) * EFUSE_BT_REAL_BANK_CONTENT_LEN) + efuse_addr;
-       pHalData->BTEfuseUsedBytes = retU2;
-
-       DBG_8723A("%s: CurrentSize =%d\n", __func__, retU2);
-       return retU2;
-}
-
-void rtl8723a_read_chip_version(struct rtw_adapter *padapter)
-{
-       u32 value32;
-       struct hal_version ChipVersion;
-       struct hal_data_8723a *pHalData;
-
-       pHalData = GET_HAL_DATA(padapter);
-
-       value32 = rtl8723au_read32(padapter, REG_SYS_CFG);
-       ChipVersion.ICType = CHIP_8723A;
-       ChipVersion.ChipType = ((value32 & RTL_ID) ? TEST_CHIP : NORMAL_CHIP);
-       pHalData->rf_type = RF_1T1R;
-       ChipVersion.VendorType =
-               ((value32 & VENDOR_ID) ? CHIP_VENDOR_UMC : CHIP_VENDOR_TSMC);
-       ChipVersion.CUTVersion = (value32 & CHIP_VER_RTL_MASK) >> CHIP_VER_RTL_SHIFT;   /*  IC version (CUT) */
-
-       /*  For regulator mode. by tynli. 2011.01.14 */
-       pHalData->RegulatorMode = ((value32 & SPS_SEL) ?
-                                  RT_LDO_REGULATOR : RT_SWITCHING_REGULATOR);
-
-       value32 = rtl8723au_read32(padapter, REG_GPIO_OUTSTS);
-       /*  ROM code version. */
-       ChipVersion.ROMVer = (value32 & RF_RL_ID) >> 20;
-
-       /*  For multi-function consideration. Added by Roger, 2010.10.06. */
-       pHalData->MultiFunc = RT_MULTI_FUNC_NONE;
-       value32 = rtl8723au_read32(padapter, REG_MULTI_FUNC_CTRL);
-       pHalData->MultiFunc |=
-               ((value32 & WL_FUNC_EN) ? RT_MULTI_FUNC_WIFI : 0);
-       pHalData->MultiFunc |= ((value32 & BT_FUNC_EN) ? RT_MULTI_FUNC_BT : 0);
-       pHalData->MultiFunc |=
-               ((value32 & GPS_FUNC_EN) ? RT_MULTI_FUNC_GPS : 0);
-       pHalData->PolarityCtl =
-               ((value32 & WL_HWPDN_SL) ? RT_POLARITY_HIGH_ACT :
-                RT_POLARITY_LOW_ACT);
-       pHalData->VersionID = ChipVersion;
-
-       MSG_8723A("RF_Type is %x!!\n", pHalData->rf_type);
-}
-
-/*  */
-/*  */
-/*  20100209 Joseph: */
-/*  This function is used only for 92C to set REG_BCN_CTRL(0x550) register. */
-/*  We just reserve the value of the register in variable
-    pHalData->RegBcnCtrlVal and then operate */
-/*  the value of the register via atomic operation. */
-/*  This prevents from race condition when setting this register. */
-/*  The value of pHalData->RegBcnCtrlVal is initialized in
-    HwConfigureRTL8192CE() function. */
-/*  */
-void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits)
-{
-       u8 val8;
-
-       val8 = rtl8723au_read8(padapter, REG_BCN_CTRL);
-       val8 |= SetBits;
-       val8 &= ~ClearBits;
-
-       rtl8723au_write8(padapter, REG_BCN_CTRL, val8);
-}
-
-void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter)
-{
-       rtl8723au_write16(padapter, REG_BCN_CTRL, 0x1010);
-
-       /*  TODO: Remove these magic number */
-       rtl8723au_write16(padapter, REG_TBTT_PROHIBIT, 0x6404); /*  ms */
-       /*  Firmware will control REG_DRVERLYINT when power saving is enable, */
-       /*  so don't set this register on STA mode. */
-       if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == false)
-               rtl8723au_write8(padapter, REG_DRVERLYINT,
-                                DRIVER_EARLY_INT_TIME);
-       /*  2ms */
-       rtl8723au_write8(padapter, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME);
-
-       /*  Suggested by designer timchen. Change beacon AIFS to the
-           largest number beacause test chip does not contension before
-           sending beacon. by tynli. 2009.11.03 */
-       rtl8723au_write16(padapter, REG_BCNTCFG, 0x660F);
-}
-
-static void ResumeTxBeacon(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  2010.03.01. Marked by tynli. No need to call workitem beacause
-           we record the value */
-       /*  which should be read from register to a global variable. */
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_, "+ResumeTxBeacon\n");
-
-       pHalData->RegFwHwTxQCtrl |= BIT(6);
-       rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                        pHalData->RegFwHwTxQCtrl);
-       rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 1, 0xff);
-       pHalData->RegReg542 |= BIT(0);
-       rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 2, pHalData->RegReg542);
-}
-
-static void StopTxBeacon(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  2010.03.01. Marked by tynli. No need to call workitem beacause
-           we record the value */
-       /*  which should be read from register to a global variable. */
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_, "+StopTxBeacon\n");
-
-       pHalData->RegFwHwTxQCtrl &= ~BIT(6);
-       rtl8723au_write8(padapter, REG_FWHW_TXQ_CTRL + 2,
-                        pHalData->RegFwHwTxQCtrl);
-       rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 1, 0x64);
-       pHalData->RegReg542 &= ~BIT(0);
-       rtl8723au_write8(padapter, REG_TBTT_PROHIBIT + 2, pHalData->RegReg542);
-}
-
-static void _BeaconFunctionEnable(struct rtw_adapter *padapter, u8 Enable,
-                                 u8 Linked)
-{
-       SetBcnCtrlReg23a(padapter, DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_BCNQ_SUB,
-                     0);
-       rtl8723au_write8(padapter, REG_RD_CTRL + 1, 0x6F);
-}
-
-void rtl8723a_SetBeaconRelatedRegisters(struct rtw_adapter *padapter)
-{
-       u32 value32;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* reset TSF, enable update TSF, correcting TSF On Beacon */
-
-       /* REG_BCN_INTERVAL */
-       /* REG_BCNDMATIM */
-       /* REG_ATIMWND */
-       /* REG_TBTT_PROHIBIT */
-       /* REG_DRVERLYINT */
-       /* REG_BCN_MAX_ERR */
-       /* REG_BCNTCFG (0x510) */
-       /* REG_DUAL_TSF_RST */
-       /* REG_BCN_CTRL (0x550) */
-
-       /*  */
-       /*  ATIM window */
-       /*  */
-       rtl8723au_write16(padapter, REG_ATIMWND, 2);
-
-       /*  */
-       /*  Beacon interval (in unit of TU). */
-       /*  */
-       rtl8723au_write16(padapter, REG_BCN_INTERVAL, pmlmeinfo->bcn_interval);
-
-       rtl8723a_InitBeaconParameters(padapter);
-
-       rtl8723au_write8(padapter, REG_SLOT, 0x09);
-
-       /*  */
-       /*  Reset TSF Timer to zero, added by Roger. 2008.06.24 */
-       /*  */
-       value32 = rtl8723au_read32(padapter, REG_TCR);
-       value32 &= ~TSFRST;
-       rtl8723au_write32(padapter, REG_TCR, value32);
-
-       value32 |= TSFRST;
-       rtl8723au_write32(padapter, REG_TCR, value32);
-
-       /*  NOTE: Fix test chip's bug (about contention windows's randomness) */
-       if (check_fwstate(&padapter->mlmepriv, WIFI_ADHOC_STATE |
-                         WIFI_ADHOC_MASTER_STATE | WIFI_AP_STATE) == true) {
-               rtl8723au_write8(padapter, REG_RXTSF_OFFSET_CCK, 0x50);
-               rtl8723au_write8(padapter, REG_RXTSF_OFFSET_OFDM, 0x50);
-       }
-
-       _BeaconFunctionEnable(padapter, true, true);
-
-       ResumeTxBeacon(padapter);
-       SetBcnCtrlReg23a(padapter, DIS_BCNQ_SUB, 0);
-}
-
-void rtl8723a_SetHalODMVar(struct rtw_adapter *Adapter,
-                          enum hal_odm_variable eVariable,
-                          void *pValue1, bool bSet)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_odm_t *podmpriv = &pHalData->odmpriv;
-       switch (eVariable) {
-       case HAL_ODM_STA_INFO:
-       {
-               struct sta_info *psta = (struct sta_info *)pValue1;
-
-               if (bSet) {
-                       DBG_8723A("Set STA_(%d) info\n", psta->mac_id);
-                       ODM_CmnInfoPtrArrayHook23a(podmpriv,
-                                               ODM_CMNINFO_STA_STATUS,
-                                               psta->mac_id, psta);
-               } else {
-                       DBG_8723A("Clean STA_(%d) info\n", psta->mac_id);
-                               ODM_CmnInfoPtrArrayHook23a(podmpriv,
-                                                       ODM_CMNINFO_STA_STATUS,
-                                                       psta->mac_id, NULL);
-               }
-       }
-               break;
-       case HAL_ODM_P2P_STATE:
-               ODM_CmnInfoUpdate23a(podmpriv, ODM_CMNINFO_WIFI_DIRECT, bSet);
-               break;
-       case HAL_ODM_WIFI_DISPLAY_STATE:
-               ODM_CmnInfoUpdate23a(podmpriv, ODM_CMNINFO_WIFI_DISPLAY, bSet);
-               break;
-       default:
-               break;
-       }
-}
-
-void rtl8723a_notch_filter(struct rtw_adapter *adapter, bool enable)
-{
-       if (enable) {
-               DBG_8723A("Enable notch filter\n");
-               rtl8723au_write8(adapter, rOFDM0_RxDSP + 1,
-                                rtl8723au_read8(adapter, rOFDM0_RxDSP + 1) |
-                                BIT(1));
-       } else {
-               DBG_8723A("Disable notch filter\n");
-               rtl8723au_write8(adapter, rOFDM0_RxDSP + 1,
-                          rtl8723au_read8(adapter, rOFDM0_RxDSP + 1) &
-                                ~BIT(1));
-       }
-}
-
-bool c2h_id_filter_ccx_8723a(u8 id)
-{
-       bool ret = false;
-       if (id == C2H_CCX_TX_RPT)
-               ret = true;
-
-       return ret;
-}
-
-int c2h_handler_8723a(struct rtw_adapter *padapter, struct c2h_evt_hdr *c2h_evt)
-{
-       int ret = _SUCCESS;
-       u8 i = 0;
-
-       if (c2h_evt == NULL) {
-               DBG_8723A("%s c2h_evt is NULL\n", __func__);
-               ret = _FAIL;
-               goto exit;
-       }
-
-       switch (c2h_evt->id) {
-       case C2H_DBG:
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "C2HCommandHandler: %s\n", c2h_evt->payload);
-               break;
-
-       case C2H_CCX_TX_RPT:
-               handle_txrpt_ccx_8723a(padapter, c2h_evt->payload);
-               break;
-       case C2H_EXT_RA_RPT:
-               break;
-       case C2H_HW_INFO_EXCH:
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "[BT], C2H_HW_INFO_EXCH\n");
-               for (i = 0; i < c2h_evt->plen; i++) {
-                       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                                "[BT], tmpBuf[%d]= 0x%x\n", i,
-                                c2h_evt->payload[i]);
-               }
-               break;
-
-       case C2H_C2H_H2C_TEST:
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "[BT], C2H_H2C_TEST\n");
-               RT_TRACE(_module_hal_init_c_, _drv_info_,
-                        "[BT], tmpBuf[0]/[1]/[2]/[3]/[4]= 0x%x/ 0x%x/ 0x%x/ 0x%x/ 0x%x\n",
-                        c2h_evt->payload[0],
-                        c2h_evt->payload[1], c2h_evt->payload[2],
-                        c2h_evt->payload[3], c2h_evt->payload[4]);
-               break;
-
-       case C2H_BT_INFO:
-               DBG_8723A("%s ,  Got  C2H_BT_INFO \n", __func__);
-               rtl8723a_fw_c2h_BT_info(padapter,
-                                       c2h_evt->payload, c2h_evt->plen);
-               break;
-
-       default:
-               ret = _FAIL;
-               break;
-       }
-
-exit:
-       return ret;
-}
-
-void handle_txrpt_ccx_8723a(struct rtw_adapter *adapter, void *buf)
-{
-       struct txrpt_ccx_8723a *txrpt_ccx = buf;
-       struct submit_ctx *pack_tx_ops = &adapter->xmitpriv.ack_tx_ops;
-
-       if (txrpt_ccx->int_ccx && adapter->xmitpriv.ack_tx) {
-               if (txrpt_ccx->pkt_ok)
-                       rtw23a_sctx_done_err(&pack_tx_ops,
-                                            RTW_SCTX_DONE_SUCCESS);
-               else
-                       rtw23a_sctx_done_err(&pack_tx_ops,
-                                            RTW_SCTX_DONE_CCX_PKT_FAIL);
-       }
-}
-
-void rtl8723a_InitAntenna_Selection(struct rtw_adapter *padapter)
-{
-       u8 val;
-
-       val = rtl8723au_read8(padapter, REG_LEDCFG2);
-       /*  Let 8051 take control antenna setting */
-       val |= BIT(7);          /*  DPDT_SEL_EN, 0x4C[23] */
-       rtl8723au_write8(padapter, REG_LEDCFG2, val);
-}
-
-void rtl8723a_CheckAntenna_Selection(struct rtw_adapter *padapter)
-{
-       u8 val;
-
-       val = rtl8723au_read8(padapter, REG_LEDCFG2);
-       /*  Let 8051 take control antenna setting */
-       if (!(val & BIT(7))) {
-               val |= BIT(7);  /*  DPDT_SEL_EN, 0x4C[23] */
-               rtl8723au_write8(padapter, REG_LEDCFG2, val);
-       }
-}
-
-void rtl8723a_DeinitAntenna_Selection(struct rtw_adapter *padapter)
-{
-       u8 val;
-
-       val = rtl8723au_read8(padapter, REG_LEDCFG2);
-       /*  Let 8051 take control antenna setting */
-       val &= ~BIT(7);         /*  DPDT_SEL_EN, clear 0x4C[23] */
-       rtl8723au_write8(padapter, REG_LEDCFG2, val);
-}
-
-void rtl8723a_init_default_value(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData;
-       struct dm_priv *pdmpriv;
-       u8 i;
-
-       pHalData = GET_HAL_DATA(padapter);
-       pdmpriv = &pHalData->dmpriv;
-
-       /*  init default value */
-       pHalData->bIQKInitialized = false;
-       if (!padapter->pwrctrlpriv.bkeepfwalive)
-               pHalData->LastHMEBoxNum = 0;
-
-       pHalData->bIQKInitialized = false;
-
-       /*  init dm default value */
-       pdmpriv->TM_Trigger = 0;        /* for IQK */
-/*     pdmpriv->binitialized = false; */
-/*     pdmpriv->prv_traffic_idx = 3; */
-/*     pdmpriv->initialize = 0; */
-
-       pdmpriv->ThermalValue_HP_index = 0;
-       for (i = 0; i < HP_THERMAL_NUM; i++)
-               pdmpriv->ThermalValue_HP[i] = 0;
-
-       /*  init Efuse variables */
-       pHalData->EfuseUsedBytes = 0;
-       pHalData->BTEfuseUsedBytes = 0;
-}
-
-u8 GetEEPROMSize8723A(struct rtw_adapter *padapter)
-{
-       u8 size = 0;
-       u32 cr;
-
-       cr = rtl8723au_read16(padapter, REG_9346CR);
-       /*  6: EEPROM used is 93C46, 4: boot from E-Fuse. */
-       size = (cr & BOOT_FROM_EEPROM) ? 6 : 4;
-
-       MSG_8723A("EEPROM type is %s\n", size == 4 ? "E-FUSE" : "93C46");
-
-       return size;
-}
-
-/*  */
-/*  */
-/*  LLT R/W/Init function */
-/*  */
-/*  */
-static int _LLTWrite(struct rtw_adapter *padapter, u32 address, u32 data)
-{
-       int status = _SUCCESS;
-       s32 count = 0;
-       u32 value = _LLT_INIT_ADDR(address) | _LLT_INIT_DATA(data) |
-                   _LLT_OP(_LLT_WRITE_ACCESS);
-       u16 LLTReg = REG_LLT_INIT;
-
-       rtl8723au_write32(padapter, LLTReg, value);
-
-       /* polling */
-       do {
-               value = rtl8723au_read32(padapter, LLTReg);
-               if (_LLT_NO_ACTIVE == _LLT_OP_VALUE(value))
-                       break;
-
-               if (count > POLLING_LLT_THRESHOLD) {
-                       RT_TRACE(_module_hal_init_c_, _drv_err_,
-                                "Failed to polling write LLT done at address %d!\n",
-                                address);
-                       status = _FAIL;
-                       break;
-               }
-       } while (count++);
-
-       return status;
-}
-
-int InitLLTTable23a(struct rtw_adapter *padapter, u32 boundary)
-{
-       int status = _SUCCESS;
-       u32 i;
-       u32 txpktbuf_bndy = boundary;
-       u32 Last_Entry_Of_TxPktBuf = LAST_ENTRY_OF_TX_PKT_BUFFER;
-
-       for (i = 0; i < (txpktbuf_bndy - 1); i++) {
-               status = _LLTWrite(padapter, i, i + 1);
-               if (status != _SUCCESS)
-                       return status;
-       }
-
-       /*  end of list */
-       status = _LLTWrite(padapter, (txpktbuf_bndy - 1), 0xFF);
-       if (status != _SUCCESS)
-               return status;
-
-       /*  Make the other pages as ring buffer */
-       /*  This ring buffer is used as beacon buffer if we config this
-           MAC as two MAC transfer. */
-       /*  Otherwise used as local loopback buffer. */
-       for (i = txpktbuf_bndy; i < Last_Entry_Of_TxPktBuf; i++) {
-               status = _LLTWrite(padapter, i, (i + 1));
-               if (_SUCCESS != status)
-                       return status;
-       }
-
-       /*  Let last entry point to the start entry of ring buffer */
-       status = _LLTWrite(padapter, Last_Entry_Of_TxPktBuf, txpktbuf_bndy);
-
-       return status;
-}
-
-static void _DisableGPIO(struct rtw_adapter *padapter)
-{
-/***************************************
-j. GPIO_PIN_CTRL 0x44[31:0]= 0x000
-k.Value = GPIO_PIN_CTRL[7:0]
-l. GPIO_PIN_CTRL 0x44[31:0] = 0x00FF0000 | (value <<8); write external PIN level
-m. GPIO_MUXCFG 0x42 [15:0] = 0x0780
-n. LEDCFG 0x4C[15:0] = 0x8080
-***************************************/
-       u32 value32;
-       u32 u4bTmp;
-
-       /* 1. Disable GPIO[7:0] */
-       rtl8723au_write16(padapter, REG_GPIO_PIN_CTRL + 2, 0x0000);
-       value32 = rtl8723au_read32(padapter, REG_GPIO_PIN_CTRL) & 0xFFFF00FF;
-       u4bTmp = value32 & 0x000000FF;
-       value32 |= ((u4bTmp << 8) | 0x00FF0000);
-       rtl8723au_write32(padapter, REG_GPIO_PIN_CTRL, value32);
-
-       /*  */
-       /*  <Roger_Notes> For RTL8723u multi-function configuration which
-           was autoload from Efuse offset 0x0a and 0x0b, */
-       /*  WLAN HW GPIO[9], GPS HW GPIO[10] and BT HW GPIO[11]. */
-       /*  Added by Roger, 2010.10.07. */
-       /*  */
-       /* 2. Disable GPIO[8] and GPIO[12] */
-
-       /*  Configure all pins as input mode. */
-       rtl8723au_write16(padapter, REG_GPIO_IO_SEL_2, 0x0000);
-       value32 = rtl8723au_read32(padapter, REG_GPIO_PIN_CTRL_2) & 0xFFFF001F;
-       u4bTmp = value32 & 0x0000001F;
-       /*  Set pin 8, 10, 11 and pin 12 to output mode. */
-       value32 |= ((u4bTmp << 8) | 0x001D0000);
-       rtl8723au_write32(padapter, REG_GPIO_PIN_CTRL_2, value32);
-
-       /* 3. Disable LED0 & 1 */
-       rtl8723au_write16(padapter, REG_LEDCFG0, 0x8080);
-}                              /* end of _DisableGPIO() */
-
-static void _DisableRFAFEAndResetBB8192C(struct rtw_adapter *padapter)
-{
-/**************************************
-a.     TXPAUSE 0x522[7:0] = 0xFF               Pause MAC TX queue
-b.     RF path 0 offset 0x00 = 0x00            disable RF
-c.     APSD_CTRL 0x600[7:0] = 0x40
-d.     SYS_FUNC_EN 0x02[7:0] = 0x16            reset BB state machine
-e.     SYS_FUNC_EN 0x02[7:0] = 0x14            reset BB state machine
-***************************************/
-       u8 value8;
-
-       rtl8723au_write8(padapter, REG_TXPAUSE, 0xFF);
-
-       PHY_SetRFReg(padapter, RF_PATH_A, 0x0, bMaskByte0, 0x0);
-
-       value8 = APSDOFF;
-       rtl8723au_write8(padapter, REG_APSD_CTRL, value8);      /* 0x40 */
-
-       /*  Set BB reset at first */
-       value8 = FEN_USBD | FEN_USBA | FEN_BB_GLB_RSTn;
-       rtl8723au_write8(padapter, REG_SYS_FUNC_EN, value8);    /* 0x16 */
-
-       /*  Set global reset. */
-       value8 &= ~FEN_BB_GLB_RSTn;
-       rtl8723au_write8(padapter, REG_SYS_FUNC_EN, value8);    /* 0x14 */
-
-       /*  2010/08/12 MH We need to set BB/GLBAL reset to save power
-           for SS mode. */
-}
-
-static void _ResetDigitalProcedure1_92C(struct rtw_adapter *padapter,
-                                       bool bWithoutHWSM)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (IS_FW_81xxC(padapter) && (pHalData->FirmwareVersion <= 0x20)) {
-       /*****************************
-       f.      MCUFWDL 0x80[7:0]= 0            reset MCU ready status
-       g.      SYS_FUNC_EN 0x02[10]= 0         reset MCU register, (8051 reset)
-       h.      SYS_FUNC_EN 0x02[15-12]= 5      reset MAC register, DCORE
-       i.     SYS_FUNC_EN 0x02[10]= 1          enable MCU register,
-                                               (8051 enable)
-       ******************************/
-               u16 valu16;
-               rtl8723au_write8(padapter, REG_MCUFWDL, 0);
-
-               valu16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN);
-               /* reset MCU , 8051 */
-               rtl8723au_write16(padapter, REG_SYS_FUNC_EN,
-                                 valu16 & ~FEN_CPUEN);
-
-               valu16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN) & 0x0FFF;
-               /* reset MAC */
-               rtl8723au_write16(padapter, REG_SYS_FUNC_EN,
-                                 valu16 | FEN_HWPDN | FEN_ELDR);
-
-               valu16 = rtl8723au_read16(padapter, REG_SYS_FUNC_EN);
-               /* enable MCU , 8051 */
-               rtl8723au_write16(padapter, REG_SYS_FUNC_EN,
-                                 valu16 | FEN_CPUEN);
-       } else {
-               u8 retry_cnts = 0;
-               u8 val8;
-
-               val8 = rtl8723au_read8(padapter, REG_MCUFWDL);
-
-               /*  2010/08/12 MH For USB SS, we can not stop 8051 when we
-                   are trying to enter IPS/HW&SW radio off. For
-                   S3/S4/S5/Disable, we can stop 8051 because */
-               /*  we will init FW when power on again. */
-               /*  If we want to SS mode, we can not reset 8051. */
-               if ((val8 & BIT(1)) && padapter->bFWReady) {
-                       /* IF fw in RAM code, do reset */
-                       /*  2010/08/25 MH According to RD alfred's
-                           suggestion, we need to disable other */
-                       /*  HRCV INT to influence 8051 reset. */
-                       rtl8723au_write8(padapter, REG_FWIMR, 0x20);
-                       /*  2011/02/15 MH According to Alex's
-                           suggestion, close mask to prevent
-                           incorrect FW write operation. */
-                       rtl8723au_write8(padapter, REG_FTIMR, 0x00);
-                       rtl8723au_write8(padapter, REG_FSIMR, 0x00);
-
-                       /* 8051 reset by self */
-                       rtl8723au_write8(padapter, REG_HMETFR + 3, 0x20);
-
-                       while ((retry_cnts++ < 100) &&
-                              (rtl8723au_read16(padapter, REG_SYS_FUNC_EN) &
-                               FEN_CPUEN)) {
-                               udelay(50);     /* us */
-                       }
-
-                       if (retry_cnts >= 100) {
-                               /* Reset MAC and Enable 8051 */
-                               rtl8723au_write8(padapter,
-                                                REG_SYS_FUNC_EN + 1, 0x50);
-                               mdelay(10);
-                       }
-               }
-               /* Reset MAC and Enable 8051 */
-               rtl8723au_write8(padapter, REG_SYS_FUNC_EN + 1, 0x54);
-               rtl8723au_write8(padapter, REG_MCUFWDL, 0);
-       }
-
-       if (bWithoutHWSM) {
-       /*****************************
-               Without HW auto state machine
-       g.      SYS_CLKR 0x08[15:0] = 0x30A3            disable MAC clock
-       h.      AFE_PLL_CTRL 0x28[7:0] = 0x80           disable AFE PLL
-       i.      AFE_XTAL_CTRL 0x24[15:0] = 0x880F       gated AFE DIG_CLOCK
-       j.      SYS_ISO_CTRL 0x00[7:0] = 0xF9           isolated digital to PON
-       ******************************/
-               /* modify to 0x70A3 by Scott. */
-               rtl8723au_write16(padapter, REG_SYS_CLKR, 0x70A3);
-               rtl8723au_write8(padapter, REG_AFE_PLL_CTRL, 0x80);
-               rtl8723au_write16(padapter, REG_AFE_XTAL_CTRL, 0x880F);
-               rtl8723au_write8(padapter, REG_SYS_ISO_CTRL, 0xF9);
-       } else {
-               /*  Disable all RF/BB power */
-               rtl8723au_write8(padapter, REG_RF_CTRL, 0x00);
-       }
-}
-
-static void _ResetDigitalProcedure2(struct rtw_adapter *padapter)
-{
-/*****************************
-k.     SYS_FUNC_EN 0x03[7:0] = 0x44            disable ELDR runction
-l.     SYS_CLKR 0x08[15:0] = 0x3083            disable ELDR clock
-m.     SYS_ISO_CTRL 0x01[7:0] = 0x83           isolated ELDR to PON
-******************************/
-       /* modify to 0x70a3 by Scott. */
-       rtl8723au_write16(padapter, REG_SYS_CLKR, 0x70a3);
-       /* modify to 0x82 by Scott. */
-       rtl8723au_write8(padapter, REG_SYS_ISO_CTRL + 1, 0x82);
-}
-
-static void _DisableAnalog(struct rtw_adapter *padapter, bool bWithoutHWSM)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u16 value16;
-       u8 value8;
-
-       if (bWithoutHWSM) {
-       /*****************************
-       n.      LDOA15_CTRL 0x20[7:0] = 0x04    disable A15 power
-       o.      LDOV12D_CTRL 0x21[7:0] = 0x54   disable digital core power
-       r.      When driver call disable, the ASIC will turn off remaining
-               clock automatically
-       ******************************/
-
-               rtl8723au_write8(padapter, REG_LDOA15_CTRL, 0x04);
-               /* rtl8723au_write8(padapter, REG_LDOV12D_CTRL, 0x54); */
-
-               value8 = rtl8723au_read8(padapter, REG_LDOV12D_CTRL);
-               value8 &= ~LDV12_EN;
-               rtl8723au_write8(padapter, REG_LDOV12D_CTRL, value8);
-       }
-
-       /*****************************
-       h.      SPS0_CTRL 0x11[7:0] = 0x23              enter PFM mode
-       i.      APS_FSMCO 0x04[15:0] = 0x4802           set USB suspend
-       ******************************/
-       value8 = 0x23;
-       if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-               value8 |= BIT(3);
-
-       rtl8723au_write8(padapter, REG_SPS0_CTRL, value8);
-
-       if (bWithoutHWSM) {
-               /* value16 |= (APDM_HOST | FSM_HSUS |/PFM_ALDN); */
-               /*  2010/08/31 According to Filen description, we need to
-                   use HW to shut down 8051 automatically. */
-               /*  Because suspend operation need the asistance of 8051
-                   to wait for 3ms. */
-               value16 = APDM_HOST | AFSM_HSUS | PFM_ALDN;
-       } else {
-               value16 = APDM_HOST | AFSM_HSUS | PFM_ALDN;
-       }
-
-       rtl8723au_write16(padapter, REG_APS_FSMCO, value16);    /* 0x4802 */
-
-       rtl8723au_write8(padapter, REG_RSV_CTRL, 0x0e);
-}
-
-/*  HW Auto state machine */
-int CardDisableHWSM(struct rtw_adapter *padapter, u8 resetMCU)
-{
-       if (padapter->bSurpriseRemoved)
-               return _SUCCESS;
-
-       /*  RF Off Sequence ==== */
-       _DisableRFAFEAndResetBB8192C(padapter);
-
-       /*   ==== Reset digital sequence   ====== */
-       _ResetDigitalProcedure1_92C(padapter, false);
-
-       /*   ==== Pull GPIO PIN to balance level and LED control ====== */
-       _DisableGPIO(padapter);
-
-       /*   ==== Disable analog sequence === */
-       _DisableAnalog(padapter, false);
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "======> Card disable finished.\n");
-
-       return _SUCCESS;
-}
-
-/*  without HW Auto state machine */
-int CardDisableWithoutHWSM(struct rtw_adapter *padapter)
-{
-       if (padapter->bSurpriseRemoved)
-               return _SUCCESS;
-
-       /*  RF Off Sequence ==== */
-       _DisableRFAFEAndResetBB8192C(padapter);
-
-       /*   ==== Reset digital sequence   ====== */
-       _ResetDigitalProcedure1_92C(padapter, true);
-
-       /*   ==== Pull GPIO PIN to balance level and LED control ====== */
-       _DisableGPIO(padapter);
-
-       /*   ==== Reset digital sequence   ====== */
-       _ResetDigitalProcedure2(padapter);
-
-       /*   ==== Disable analog sequence === */
-       _DisableAnalog(padapter, true);
-
-       return _SUCCESS;
-}
-
-void Hal_InitPGData(struct rtw_adapter *padapter, u8 *PROMContent)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
-       if (!pEEPROM->bautoload_fail_flag) {    /*  autoload OK. */
-               if (!pEEPROM->EepromOrEfuse) {
-                       /*  Read EFUSE real map to shadow. */
-                       EFUSE_ShadowMapUpdate23a(padapter, EFUSE_WIFI);
-                       memcpy(PROMContent, pEEPROM->efuse_eeprom_data,
-                              HWSET_MAX_SIZE);
-               }
-       } else {
-               RT_TRACE(_module_hci_hal_init_c_, _drv_notice_,
-                        "AutoLoad Fail reported from CR9346!!\n");
-               /* update to default value 0xFF */
-               if (!pEEPROM->EepromOrEfuse)
-                       EFUSE_ShadowMapUpdate23a(padapter, EFUSE_WIFI);
-               memcpy(PROMContent, pEEPROM->efuse_eeprom_data,
-                      HWSET_MAX_SIZE);
-       }
-}
-
-void Hal_EfuseParseIDCode(struct rtw_adapter *padapter, u8 *hwinfo)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-/*     struct hal_data_8723a   *pHalData = GET_HAL_DATA(padapter); */
-       u16 EEPROMId;
-
-       /*  Checl 0x8129 again for making sure autoload status!! */
-       EEPROMId = le16_to_cpu(*((__le16 *) hwinfo));
-       if (EEPROMId != RTL_EEPROM_ID) {
-               DBG_8723A("EEPROM ID(%#x) is invalid!!\n", EEPROMId);
-               pEEPROM->bautoload_fail_flag = true;
-       } else {
-               pEEPROM->bautoload_fail_flag = false;
-       }
-
-       RT_TRACE(_module_hal_init_c_, _drv_info_,
-                "EEPROM ID = 0x%04x\n", EEPROMId);
-}
-
-static void
-Hal_ReadPowerValueFromPROM_8723A(struct txpowerinfo *pwrInfo,
-                                u8 *PROMContent, bool AutoLoadFail)
-{
-       u32 rfPath, eeAddr, group, rfPathMax = 1;
-
-       memset(pwrInfo, 0, sizeof(*pwrInfo));
-
-       if (AutoLoadFail) {
-               for (group = 0; group < MAX_CHNL_GROUP; group++) {
-                       for (rfPath = 0; rfPath < rfPathMax; rfPath++) {
-                               pwrInfo->CCKIndex[rfPath][group] =
-                                       EEPROM_Default_TxPowerLevel;
-                               pwrInfo->HT40_1SIndex[rfPath][group] =
-                                       EEPROM_Default_TxPowerLevel;
-                               pwrInfo->HT40_2SIndexDiff[rfPath][group] =
-                                       EEPROM_Default_HT40_2SDiff;
-                               pwrInfo->HT20IndexDiff[rfPath][group] =
-                                       EEPROM_Default_HT20_Diff;
-                               pwrInfo->OFDMIndexDiff[rfPath][group] =
-                                       EEPROM_Default_LegacyHTTxPowerDiff;
-                               pwrInfo->HT40MaxOffset[rfPath][group] =
-                                       EEPROM_Default_HT40_PwrMaxOffset;
-                               pwrInfo->HT20MaxOffset[rfPath][group] =
-                                       EEPROM_Default_HT20_PwrMaxOffset;
-                       }
-               }
-               pwrInfo->TSSI_A[0] = EEPROM_Default_TSSI;
-               return;
-       }
-
-       for (rfPath = 0; rfPath < rfPathMax; rfPath++) {
-               for (group = 0; group < MAX_CHNL_GROUP; group++) {
-                       eeAddr =
-                           EEPROM_CCK_TX_PWR_INX_8723A + (rfPath * 3) + group;
-
-                       pwrInfo->CCKIndex[rfPath][group] = PROMContent[eeAddr];
-                       if (pwrInfo->CCKIndex[rfPath][group] > 63)
-                               pwrInfo->CCKIndex[rfPath][group] =
-                                       EEPROM_Default_TxPowerLevel;
-
-                       eeAddr = EEPROM_HT40_1S_TX_PWR_INX_8723A +
-                               (rfPath * 3) + group;
-                       pwrInfo->HT40_1SIndex[rfPath][group] =
-                               PROMContent[eeAddr];
-                       if (pwrInfo->HT40_1SIndex[rfPath][group] > 63)
-                               pwrInfo->HT40_1SIndex[rfPath][group] =
-                                       EEPROM_Default_TxPowerLevel;
-               }
-       }
-
-       for (group = 0; group < MAX_CHNL_GROUP; group++) {
-               for (rfPath = 0; rfPath < rfPathMax; rfPath++) {
-                       pwrInfo->HT40_2SIndexDiff[rfPath][group] = 0;
-                       pwrInfo->HT20IndexDiff[rfPath][group] =
-                               (PROMContent
-                                [EEPROM_HT20_TX_PWR_INX_DIFF_8723A +
-                                 group] >> (rfPath * 4)) & 0xF;
-                       /* 4bit sign number to 8 bit sign number */
-                       if (pwrInfo->HT20IndexDiff[rfPath][group] & BIT(3))
-                               pwrInfo->HT20IndexDiff[rfPath][group] |= 0xF0;
-
-                       pwrInfo->OFDMIndexDiff[rfPath][group] =
-                               (PROMContent[EEPROM_OFDM_TX_PWR_INX_DIFF_8723A +
-                                            group] >> (rfPath * 4)) & 0xF;
-
-                       pwrInfo->HT40MaxOffset[rfPath][group] =
-                               (PROMContent[EEPROM_HT40_MAX_PWR_OFFSET_8723A +
-                                            group] >> (rfPath * 4)) & 0xF;
-
-                       pwrInfo->HT20MaxOffset[rfPath][group] =
-                               (PROMContent[EEPROM_HT20_MAX_PWR_OFFSET_8723A +
-                                            group] >> (rfPath * 4)) & 0xF;
-               }
-       }
-
-       pwrInfo->TSSI_A[0] = PROMContent[EEPROM_TSSI_A_8723A];
-}
-
-static u8 Hal_GetChnlGroup(u8 chnl)
-{
-       u8 group = 0;
-
-       if (chnl < 3)           /*  Cjanel 1-3 */
-               group = 0;
-       else if (chnl < 9)      /*  Channel 4-9 */
-               group = 1;
-       else                    /*  Channel 10-14 */
-               group = 2;
-
-       return group;
-}
-
-void
-Hal_EfuseParsetxpowerinfo_8723A(struct rtw_adapter *padapter,
-                               u8 *PROMContent, bool AutoLoadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct txpowerinfo pwrInfo;
-       u8 rfPath, ch, group, rfPathMax = 1;
-       u8 pwr, diff;
-
-       Hal_ReadPowerValueFromPROM_8723A(&pwrInfo, PROMContent, AutoLoadFail);
-       for (rfPath = 0; rfPath < rfPathMax; rfPath++) {
-               for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-                       group = Hal_GetChnlGroup(ch);
-
-                       pHalData->TxPwrLevelCck[rfPath][ch] =
-                               pwrInfo.CCKIndex[rfPath][group];
-                       pHalData->TxPwrLevelHT40_1S[rfPath][ch] =
-                               pwrInfo.HT40_1SIndex[rfPath][group];
-
-                       pHalData->TxPwrHt20Diff[rfPath][ch] =
-                               pwrInfo.HT20IndexDiff[rfPath][group];
-                       pHalData->TxPwrLegacyHtDiff[rfPath][ch] =
-                               pwrInfo.OFDMIndexDiff[rfPath][group];
-                       pHalData->PwrGroupHT20[rfPath][ch] =
-                               pwrInfo.HT20MaxOffset[rfPath][group];
-                       pHalData->PwrGroupHT40[rfPath][ch] =
-                               pwrInfo.HT40MaxOffset[rfPath][group];
-
-                       pwr = pwrInfo.HT40_1SIndex[rfPath][group];
-                       diff = pwrInfo.HT40_2SIndexDiff[rfPath][group];
-
-                       pHalData->TxPwrLevelHT40_2S[rfPath][ch] =
-                           (pwr > diff) ? (pwr - diff) : 0;
-               }
-       }
-       for (rfPath = 0; rfPath < RF_PATH_MAX; rfPath++) {
-               for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-                       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                                "RF(%u)-Ch(%u) [CCK / HT40_1S / HT40_2S] = [0x%x / 0x%x / 0x%x]\n",
-                                rfPath, ch,
-                                pHalData->TxPwrLevelCck[rfPath][ch],
-                                pHalData->TxPwrLevelHT40_1S[rfPath][ch],
-                                pHalData->TxPwrLevelHT40_2S[rfPath][ch]);
-
-               }
-       }
-       for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-               RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                        "RF-A Ht20 to HT40 Diff[%u] = 0x%x(%d)\n", ch,
-                        pHalData->TxPwrHt20Diff[RF_PATH_A][ch],
-                        pHalData->TxPwrHt20Diff[RF_PATH_A][ch]);
-       }
-       for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++)
-               RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                        "RF-A Legacy to Ht40 Diff[%u] = 0x%x\n", ch,
-                        pHalData->TxPwrLegacyHtDiff[RF_PATH_A][ch]);
-       for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++) {
-               RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                        "RF-B Ht20 to HT40 Diff[%u] = 0x%x(%d)\n", ch,
-                        pHalData->TxPwrHt20Diff[RF_PATH_B][ch],
-                        pHalData->TxPwrHt20Diff[RF_PATH_B][ch]);
-       }
-       for (ch = 0; ch < CHANNEL_MAX_NUMBER; ch++)
-               RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                        "RF-B Legacy to HT40 Diff[%u] = 0x%x\n", ch,
-                        pHalData->TxPwrLegacyHtDiff[RF_PATH_B][ch]);
-       if (!AutoLoadFail) {
-               struct registry_priv *registry_par = &padapter->registrypriv;
-               if (registry_par->regulatory_tid == 0xff) {
-                       if (PROMContent[RF_OPTION1_8723A] == 0xff)
-                               pHalData->EEPROMRegulatory = 0;
-                       else
-                               pHalData->EEPROMRegulatory =
-                                       PROMContent[RF_OPTION1_8723A] & 0x7;
-               } else {
-                       pHalData->EEPROMRegulatory =
-                           registry_par->regulatory_tid;
-               }
-       } else {
-               pHalData->EEPROMRegulatory = 0;
-       }
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "EEPROMRegulatory = 0x%x\n", pHalData->EEPROMRegulatory);
-
-       if (!AutoLoadFail)
-               pHalData->bTXPowerDataReadFromEEPORM = true;
-}
-
-void
-Hal_EfuseParseBTCoexistInfo_8723A(struct rtw_adapter *padapter,
-                                 u8 *hwinfo, bool AutoLoadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       u8 tempval;
-       u32 tmpu4;
-
-       if (!AutoLoadFail) {
-               tmpu4 = rtl8723au_read32(padapter, REG_MULTI_FUNC_CTRL);
-               if (tmpu4 & BT_FUNC_EN)
-                       pHalData->EEPROMBluetoothCoexist = 1;
-               else
-                       pHalData->EEPROMBluetoothCoexist = 0;
-               pHalData->EEPROMBluetoothType = BT_RTL8723A;
-
-               /*  The following need to be checked with newer version of */
-               /*  eeprom spec */
-               tempval = hwinfo[RF_OPTION4_8723A];
-               pHalData->EEPROMBluetoothAntNum = (tempval & 0x1);
-               pHalData->EEPROMBluetoothAntIsolation = (tempval & 0x10) >> 4;
-               pHalData->EEPROMBluetoothRadioShared = (tempval & 0x20) >> 5;
-       } else {
-               pHalData->EEPROMBluetoothCoexist = 0;
-               pHalData->EEPROMBluetoothType = BT_RTL8723A;
-               pHalData->EEPROMBluetoothAntNum = Ant_x2;
-               pHalData->EEPROMBluetoothAntIsolation = 0;
-               pHalData->EEPROMBluetoothRadioShared = BT_Radio_Shared;
-       }
-
-       rtl8723a_BT_init_hal_vars(padapter);
-}
-
-void
-Hal_EfuseParseEEPROMVer(struct rtw_adapter *padapter,
-                       u8 *hwinfo, bool AutoLoadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (!AutoLoadFail)
-               pHalData->EEPROMVersion = hwinfo[EEPROM_VERSION_8723A];
-       else
-               pHalData->EEPROMVersion = 1;
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "Hal_EfuseParseEEPROMVer(), EEVer = %d\n",
-                pHalData->EEPROMVersion);
-}
-
-void
-rtl8723a_EfuseParseChnlPlan(struct rtw_adapter *padapter,
-                           u8 *hwinfo, bool AutoLoadFail)
-{
-       padapter->mlmepriv.ChannelPlan =
-               hal_com_get_channel_plan23a(padapter, hwinfo ?
-                                        hwinfo[EEPROM_ChannelPlan_8723A]:0xFF,
-                                        padapter->registrypriv.channel_plan,
-                                        RT_CHANNEL_DOMAIN_WORLD_WIDE_13,
-                                        AutoLoadFail);
-
-       DBG_8723A("mlmepriv.ChannelPlan = 0x%02x\n",
-                 padapter->mlmepriv.ChannelPlan);
-}
-
-void
-Hal_EfuseParseCustomerID(struct rtw_adapter *padapter,
-                        u8 *hwinfo, bool AutoLoadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       if (!AutoLoadFail) {
-               pHalData->EEPROMCustomerID = hwinfo[EEPROM_CustomID_8723A];
-               pHalData->EEPROMSubCustomerID =
-                   hwinfo[EEPROM_SubCustomID_8723A];
-       } else {
-               pHalData->EEPROMCustomerID = 0;
-               pHalData->EEPROMSubCustomerID = 0;
-       }
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "EEPROM Customer ID: 0x%2x\n", pHalData->EEPROMCustomerID);
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "EEPROM SubCustomer ID: 0x%02x\n",
-                pHalData->EEPROMSubCustomerID);
-}
-
-void
-Hal_EfuseParseAntennaDiversity(struct rtw_adapter *padapter,
-                              u8 *hwinfo, bool AutoLoadFail)
-{
-}
-
-void
-Hal_EfuseParseRateIndicationOption(struct rtw_adapter *padapter,
-                                  u8 *hwinfo, bool AutoLoadFail)
-{
-}
-
-void
-Hal_EfuseParseXtal_8723A(struct rtw_adapter *pAdapter,
-                        u8 *hwinfo, u8 AutoLoadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-
-       if (!AutoLoadFail) {
-               pHalData->CrystalCap = hwinfo[EEPROM_XTAL_K_8723A];
-               if (pHalData->CrystalCap == 0xFF)
-                       pHalData->CrystalCap = EEPROM_Default_CrystalCap_8723A;
-       } else {
-               pHalData->CrystalCap = EEPROM_Default_CrystalCap_8723A;
-       }
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "%s: CrystalCap = 0x%2x\n", __func__,
-                pHalData->CrystalCap);
-}
-
-void
-Hal_EfuseParseThermalMeter_8723A(struct rtw_adapter *padapter,
-                                u8 *PROMContent, bool AutoloadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-
-       /*  */
-       /*  ThermalMeter from EEPROM */
-       /*  */
-       if (!AutoloadFail)
-               pHalData->EEPROMThermalMeter =
-                   PROMContent[EEPROM_THERMAL_METER_8723A];
-       else
-               pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter;
-
-       if ((pHalData->EEPROMThermalMeter == 0xff) || AutoloadFail) {
-               pHalData->bAPKThermalMeterIgnore = true;
-               pHalData->EEPROMThermalMeter = EEPROM_Default_ThermalMeter;
-       }
-
-       DBG_8723A("%s: ThermalMeter = 0x%x\n", __func__,
-                 pHalData->EEPROMThermalMeter);
-}
-
-static void rtl8723a_cal_txdesc_chksum(struct tx_desc *ptxdesc)
-{
-       __le16 *usPtr = (__le16 *)ptxdesc;
-       u32 count = 16;         /*  (32 bytes / 2 bytes per XOR) => 16 times */
-       u32 index;
-       u16 checksum = 0;
-
-       /*  Clear first */
-       ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
-
-       for (index = 0; index < count; index++)
-               checksum ^= le16_to_cpu(usPtr[index]);
-
-       ptxdesc->txdw7 |= cpu_to_le32(checksum & 0x0000ffff);
-}
-
-/*
- *  Description: In normal chip, we should send some packet to Hw which
- *  will be used by Fw in FW LPS mode. The function is to fill the Tx
- * descriptor of this packets, then
- */
-/*                     Fw can tell Hw to send these packet derectly. */
-/*  Added by tynli. 2009.10.15. */
-/*  */
-void rtl8723a_fill_fake_txdesc(struct rtw_adapter *padapter, u8 *pDesc,
-                              u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull)
-{
-       struct tx_desc *ptxdesc;
-
-       /*  Clear all status */
-       ptxdesc = (struct tx_desc *)pDesc;
-       memset(pDesc, 0, TXDESC_SIZE);
-
-       /* offset 0 */
-       /* own, bFirstSeg, bLastSeg; */
-       ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG);
-
-       /* 32 bytes for TX Desc */
-       ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE + OFFSET_SZ) <<
-                                      OFFSET_SHT) & 0x00ff0000);
-
-       /*  Buffer size + command header */
-       ptxdesc->txdw0 |= cpu_to_le32(BufferLen & 0x0000ffff);
-
-       /* offset 4 */
-       /*  Fixed queue of Mgnt queue */
-       ptxdesc->txdw1 |= cpu_to_le32((QSLT_MGNT << QSEL_SHT) & 0x00001f00);
-
-       /* Set NAVUSEHDR to prevent Ps-poll AId filed to be changed
-          to error vlaue by Hw. */
-       if (IsPsPoll) {
-               ptxdesc->txdw1 |= cpu_to_le32(NAVUSEHDR);
-       } else {
-               /*  Hw set sequence number */
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(7));
-               /* set bit3 to 1. Suugested by TimChen. 2009.12.29. */
-               ptxdesc->txdw3 |= cpu_to_le32((8 << 28));
-       }
-
-       if (true == IsBTQosNull)
-               ptxdesc->txdw2 |= cpu_to_le32(BIT(23)); /*  BT NULL */
-
-       /* offset 16 */
-       ptxdesc->txdw4 |= cpu_to_le32(BIT(8));  /* driver uses rate */
-
-       /*  USB interface drop packet if the checksum of descriptor isn't
-           correct. */
-       /*  Using this checksum can let hardware recovery from packet bulk
-           out error (e.g. Cancel URC, Bulk out error.). */
-       rtl8723a_cal_txdesc_chksum(ptxdesc);
-}
-
-void hw_var_set_opmode(struct rtw_adapter *padapter, u8 mode)
-{
-       u8 val8;
-
-       if (mode == MSR_INFRA || mode == MSR_NOLINK) {
-               StopTxBeacon(padapter);
-
-               /*  disable atim wnd */
-               val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_ATIM;
-               SetBcnCtrlReg23a(padapter, val8, ~val8);
-       } else if (mode == MSR_ADHOC) {
-               ResumeTxBeacon(padapter);
-
-               val8 = DIS_TSF_UDT | EN_BCN_FUNCTION | DIS_BCNQ_SUB;
-               SetBcnCtrlReg23a(padapter, val8, ~val8);
-       } else if (mode == MSR_AP) {
-               /*  add NULL Data and BT NULL Data Packets to FW RSVD Page */
-               rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(padapter);
-
-               ResumeTxBeacon(padapter);
-
-               val8 = DIS_TSF_UDT | DIS_BCNQ_SUB;
-               SetBcnCtrlReg23a(padapter, val8, ~val8);
-
-               /*  Set RCR */
-               /* rtl8723au_write32(padapter, REG_RCR, 0x70002a8e);
-                  CBSSID_DATA must set to 0 */
-               /* CBSSID_DATA must set to 0 */
-               rtl8723au_write32(padapter, REG_RCR, 0x7000228e);
-               /*  enable to rx data frame */
-               rtl8723au_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
-               /*  enable to rx ps-poll */
-               rtl8723au_write16(padapter, REG_RXFLTMAP1, 0x0400);
-
-               /*  Beacon Control related register for first time */
-               /*  2ms */
-               rtl8723au_write8(padapter, REG_BCNDMATIM, 0x02);
-               /*  5ms */
-               rtl8723au_write8(padapter, REG_DRVERLYINT, 0x05);
-               /*  10ms for port0 */
-               rtl8723au_write8(padapter, REG_ATIMWND, 0x0a);
-               rtl8723au_write16(padapter, REG_BCNTCFG, 0x00);
-               rtl8723au_write16(padapter, REG_TBTT_PROHIBIT, 0xff04);
-               /*  +32767 (~32ms) */
-               rtl8723au_write16(padapter, REG_TSFTR_SYN_OFFSET, 0x7fff);
-
-               /*  reset TSF */
-               rtl8723au_write8(padapter, REG_DUAL_TSF_RST, BIT(0));
-
-               /*  enable BCN Function */
-               /*  don't enable update TSF (due to TSF update when
-                   beacon/probe rsp are received) */
-               val8 = DIS_TSF_UDT | EN_BCN_FUNCTION |
-                      EN_TXBCN_RPT | DIS_BCNQ_SUB;
-               SetBcnCtrlReg23a(padapter, val8, ~val8);
-       }
-
-       val8 = rtl8723au_read8(padapter, MSR);
-       val8 = (val8 & 0xC) | mode;
-       rtl8723au_write8(padapter, MSR, val8);
-}
-
-void hw_var_set_macaddr(struct rtw_adapter *padapter, u8 *val)
-{
-       u8 idx = 0;
-       u32 reg_macid;
-
-       reg_macid = REG_MACID;
-
-       for (idx = 0; idx < 6; idx++)
-               rtl8723au_write8(padapter, (reg_macid + idx), val[idx]);
-}
-
-void hw_var_set_bssid(struct rtw_adapter *padapter, u8 *val)
-{
-       u8 idx = 0;
-       u32 reg_bssid;
-
-       reg_bssid = REG_BSSID;
-
-       for (idx = 0; idx < 6; idx++)
-               rtl8723au_write8(padapter, (reg_bssid + idx), val[idx]);
-}
-
-void hw_var_set_correct_tsf(struct rtw_adapter *padapter)
-{
-       u64 tsf;
-       u32 reg_tsftr;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-
-       /* tsf = pmlmeext->TSFValue - ((u32)pmlmeext->TSFValue %
-          (pmlmeinfo->bcn_interval*1024)) - 1024; us */
-       tsf = pmlmeext->TSFValue -
-               do_div(pmlmeext->TSFValue,
-                      (pmlmeinfo->bcn_interval * 1024)) - 1024;        /* us */
-
-       if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) ||
-           ((pmlmeinfo->state & 0x03) == MSR_AP)) {
-               /* pHalData->RegTxPause |= STOP_BCNQ;BIT(6) */
-               /* rtl8723au_write8(padapter, REG_TXPAUSE,
-                  (rtl8723au_read8(Adapter, REG_TXPAUSE)|BIT(6))); */
-               StopTxBeacon(padapter);
-       }
-
-       reg_tsftr = REG_TSFTR;
-
-       /*  disable related TSF function */
-       SetBcnCtrlReg23a(padapter, 0, EN_BCN_FUNCTION);
-
-       rtl8723au_write32(padapter, reg_tsftr, tsf);
-       rtl8723au_write32(padapter, reg_tsftr + 4, tsf >> 32);
-
-       /* enable related TSF function */
-       SetBcnCtrlReg23a(padapter, EN_BCN_FUNCTION, 0);
-
-       if (((pmlmeinfo->state & 0x03) == MSR_ADHOC) ||
-           ((pmlmeinfo->state & 0x03) == MSR_AP))
-               ResumeTxBeacon(padapter);
-}
-
-void hw_var_set_mlme_disconnect(struct rtw_adapter *padapter)
-{
-       /*  reject all data frames */
-       rtl8723au_write16(padapter, REG_RXFLTMAP2, 0);
-
-       /*  reset TSF */
-       rtl8723au_write8(padapter, REG_DUAL_TSF_RST, BIT(0));
-
-       /*  disable update TSF */
-       SetBcnCtrlReg23a(padapter, DIS_TSF_UDT, 0);
-}
-
-void hw_var_set_mlme_join(struct rtw_adapter *padapter, u8 type)
-{
-       u8 RetryLimit = 0x30;
-
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       if (type == 0) {        /*  prepare to join */
-               u32 v32;
-
-               /*  enable to rx data frame.Accept all data frame */
-               /* rtl8723au_write32(padapter, REG_RCR,
-                  rtl8723au_read32(padapter, REG_RCR)|RCR_ADF); */
-               rtl8723au_write16(padapter, REG_RXFLTMAP2, 0xFFFF);
-
-               v32 = rtl8723au_read32(padapter, REG_RCR);
-               v32 |= RCR_CBSSID_DATA | RCR_CBSSID_BCN;
-               rtl8723au_write32(padapter, REG_RCR, v32);
-
-               if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) == true)
-                       RetryLimit =
-                           (pHalData->CustomerID == RT_CID_CCX) ? 7 : 48;
-               else            /*  Ad-hoc Mode */
-                       RetryLimit = 0x7;
-       } else if (type == 1) { /*  joinbss_event callback when join res < 0 */
-               /*  config RCR to receive different BSSID & not to
-                   receive data frame during linking */
-               rtl8723au_write16(padapter, REG_RXFLTMAP2, 0);
-       } else if (type == 2) { /*  sta add event callback */
-               /*  enable update TSF */
-               SetBcnCtrlReg23a(padapter, 0, DIS_TSF_UDT);
-
-               if (check_fwstate(pmlmepriv,
-                                 WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) {
-                       /*  fixed beacon issue for 8191su........... */
-                       rtl8723au_write8(padapter, 0x542, 0x02);
-                       RetryLimit = 0x7;
-               }
-       }
-
-       rtl8723au_write16(padapter, REG_RL,
-                         RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit <<
-                         RETRY_LIMIT_LONG_SHIFT);
-
-       switch (type) {
-       case 0:
-               /*  prepare to join */
-               rtl8723a_BT_wifiassociate_notify(padapter, true);
-               break;
-       case 1:
-               /*  joinbss_event callback when join res < 0 */
-               rtl8723a_BT_wifiassociate_notify(padapter, false);
-               break;
-       case 2:
-               /*  sta add event callback */
-/*             BT_WifiMediaStatusNotify(padapter, RT_MEDIA_CONNECT); */
-               break;
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c b/drivers/staging/rtl8723au/hal/rtl8723a_phycfg.c
deleted file mode 100644 (file)
index 06a6c3e..0000000
+++ /dev/null
@@ -1,961 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8723A_PHYCFG_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-/*---------------------------Define Local Constant---------------------------*/
-/* Channel switch:The size of command tables for switch channel*/
-#define MAX_PRECMD_CNT 16
-#define MAX_RFDEPENDCMD_CNT 16
-#define MAX_POSTCMD_CNT 16
-
-#define MAX_DOZE_WAITING_TIMES_9x 64
-
-/*---------------------------Define Local Constant---------------------------*/
-
-/*------------------------Define global variable-----------------------------*/
-
-/*------------------------Define local variable------------------------------*/
-
-/*--------------------Define export function prototype-----------------------*/
-/*  Please refer to header file */
-/*--------------------Define export function prototype-----------------------*/
-
-/*----------------------------Function Body----------------------------------*/
-/*  */
-/*  1. BB register R/W API */
-/*  */
-
-/**
-* Function:    phy_CalculateBitShift
-*
-* OverView:    Get shifted position of the BitMask
-*
-* Input:
-*                      u32             BitMask,
-*
-* Output:      none
-* Return:              u32             Return the shift bit bit position of the mask
-*/
-static u32 phy_CalculateBitShift(u32 BitMask)
-{
-       u32 i;
-
-       for (i = 0; i <= 31; i++) {
-               if (((BitMask>>i) & 0x1) == 1)
-                       break;
-       }
-
-       return i;
-}
-
-/**
-* Function:    PHY_QueryBBReg
-*
-* OverView:    Read "sepcific bits" from BB register
-*
-* Input:
-*      struct rtw_adapter *    Adapter,
-*      u32                     RegAddr,        Target address to be readback
-*      u32                     BitMask         Target bit position in the
-*                                              target address to be readback
-* Output:
-*      None
-* Return:
-*      u32                     Data            The readback register value
-* Note:
-*      This function is equal to "GetRegSetting" in PHY programming guide
-*/
-u32
-PHY_QueryBBReg(struct rtw_adapter *Adapter, u32 RegAddr, u32 BitMask)
-{
-       u32     ReturnValue = 0, OriginalValue, BitShift;
-
-       OriginalValue = rtl8723au_read32(Adapter, RegAddr);
-       BitShift = phy_CalculateBitShift(BitMask);
-       ReturnValue = (OriginalValue & BitMask) >> BitShift;
-       return ReturnValue;
-}
-
-/**
-* Function:    PHY_SetBBReg
-*
-* OverView:    Write "Specific bits" to BB register (page 8~)
-*
-* Input:
-*      struct rtw_adapter *    Adapter,
-*      u32                     RegAddr,        Target address to be modified
-*      u32                     BitMask         Target bit position in the
-*                                              target address to be modified
-*      u32                     Data            The new register value in the
-*                                              target bit position of the
-*                                               target address
-*
-* Output:
-*      None
-* Return:
-*      None
-* Note:
-*      This function is equal to "PutRegSetting" in PHY programming guide
-*/
-
-void
-PHY_SetBBReg(struct rtw_adapter *Adapter, u32 RegAddr, u32 BitMask, u32        Data)
-{
-       u32 OriginalValue, BitShift;
-
-       if (BitMask != bMaskDWord) {/* if not "double word" write */
-               OriginalValue = rtl8723au_read32(Adapter, RegAddr);
-               BitShift = phy_CalculateBitShift(BitMask);
-               Data = (OriginalValue & (~BitMask)) | (Data << BitShift);
-       }
-
-       rtl8723au_write32(Adapter, RegAddr, Data);
-
-       /* RTPRINT(FPHY, PHY_BBW, ("BBW MASK = 0x%lx Addr[0x%lx]= 0x%lx\n", BitMask, RegAddr, Data)); */
-}
-
-/*  */
-/*  2. RF register R/W API */
-/*  */
-
-/**
-* Function:    phy_RFSerialRead
-*
-* OverView:    Read regster from RF chips
-*
-* Input:
-*              struct rtw_adapter *            Adapter,
-*              enum RF_RADIO_PATH      eRFPath,        Radio path of A/B/C/D
-*              u32 Offset,                     The target address to be read
-*
-* Output:      None
-* Return:      u32                     reback value
-* Note:                Threre are three types of serial operations:
-*              1. Software serial write
-*              2. Hardware LSSI-Low Speed Serial Interface
-*              3. Hardware HSSI-High speed
-*              serial write. Driver need to implement (1) and (2).
-*              This function is equal to the combination of RF_ReadReg() and
-*              RFLSSIRead()
-*/
-static u32
-phy_RFSerialRead(struct rtw_adapter *Adapter, enum RF_RADIO_PATH eRFPath,
-                u32 Offset)
-{
-       u32 retValue = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct bb_reg_define *pPhyReg = &pHalData->PHYRegDef[eRFPath];
-       u32 NewOffset;
-       u32 tmplong, tmplong2;
-       u8 RfPiEnable = 0;
-       /*  */
-       /*  Make sure RF register offset is correct */
-       /*  */
-       Offset &= 0x3f;
-
-       /*  */
-       /*  Switch page for 8256 RF IC */
-       /*  */
-       NewOffset = Offset;
-
-       /*  2009/06/17 MH We can not execute IO for power save or
-           other accident mode. */
-       /* if (RT_CANNOT_IO(Adapter)) */
-       /*  */
-       /*      RTPRINT(FPHY, PHY_RFR, ("phy_RFSerialRead return all one\n")); */
-       /*      return  0xFFFFFFFF; */
-       /*  */
-
-       /*  For 92S LSSI Read RFLSSIRead */
-       /*  For RF A/B write 0x824/82c(does not work in the future) */
-       /*  We must use 0x824 for RF A and B to execute read trigger */
-       tmplong = rtl8723au_read32(Adapter, rFPGA0_XA_HSSIParameter2);
-       if (eRFPath == RF_PATH_A)
-               tmplong2 = tmplong;
-       else
-               tmplong2 = rtl8723au_read32(Adapter, pPhyReg->rfHSSIPara2);
-
-       tmplong2 = (tmplong2 & ~bLSSIReadAddress) |
-               (NewOffset << 23) | bLSSIReadEdge;      /* T65 RF */
-
-       rtl8723au_write32(Adapter, rFPGA0_XA_HSSIParameter2,
-                         tmplong & (~bLSSIReadEdge));
-       udelay(10);/*  PlatformStallExecution(10); */
-
-       rtl8723au_write32(Adapter, pPhyReg->rfHSSIPara2, tmplong2);
-       udelay(100);/* PlatformStallExecution(100); */
-
-       rtl8723au_write32(Adapter, rFPGA0_XA_HSSIParameter2,
-                         tmplong | bLSSIReadEdge);
-       udelay(10);/* PlatformStallExecution(10); */
-
-       if (eRFPath == RF_PATH_A)
-               RfPiEnable = (u8)PHY_QueryBBReg(Adapter,
-                                               rFPGA0_XA_HSSIParameter1,
-                                               BIT(8));
-       else if (eRFPath == RF_PATH_B)
-               RfPiEnable = (u8)PHY_QueryBBReg(Adapter,
-                                               rFPGA0_XB_HSSIParameter1,
-                                               BIT(8));
-
-       if (RfPiEnable) {
-               /* Read from BBreg8b8, 12 bits for 8190, 20bits for T65 RF */
-               retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBackPi,
-                                         bLSSIReadBackData);
-               /* DBG_8723A("Readback from RF-PI : 0x%x\n", retValue); */
-       } else {
-               /* Read from BBreg8a0, 12 bits for 8190, 20 bits for T65 RF */
-               retValue = PHY_QueryBBReg(Adapter, pPhyReg->rfLSSIReadBack,
-                                         bLSSIReadBackData);
-               /* DBG_8723A("Readback from RF-SI : 0x%x\n", retValue); */
-       }
-       /* DBG_8723A("RFR-%d Addr[0x%x]= 0x%x\n", eRFPath, pPhyReg->rfLSSIReadBack, retValue); */
-
-       return retValue;
-}
-
-/**
-* Function:    phy_RFSerialWrite
-*
-* OverView:    Write data to RF register (page 8~)
-*
-* Input:
-*      struct rtw_adapter *            Adapter,
-*      enum RF_RADIO_PATH      eRFPath,        Radio path of A/B/C/D
-*      u32 Offset,                     The target address to be read
-*      u32 Data                        The new register Data in the target
-*                                      bit position of the target to be read
-*
-* Output:
-*      None
-* Return:
-*      None
-* Note:
-*      Threre are three types of serial operations:
-*              1. Software serial write
-*              2. Hardware LSSI-Low Speed Serial Interface
-*              3. Hardware HSSI-High speed
-*              serial write. Driver need to implement (1) and (2).
-*              This function is equal to the combination of RF_ReadReg() and
-*              RFLSSIRead()
-*
-* Note:          For RF8256 only
-* The total count of RTL8256(Zebra4) register is around 36 bit it only employs
-* 4-bit RF address. RTL8256 uses "register mode control bit"
-* (Reg00[12], Reg00[10]) to access register address bigger than 0xf.
-* See "Appendix-4 in PHY Configuration programming guide" for more details.
-* Thus, we define a sub-finction for RTL8526 register address conversion
-* ===========================================================
-* Register Mode:       RegCTL[1]       RegCTL[0]       Note
-*                      (Reg00[12])     (Reg00[10])
-* ===========================================================
-* Reg_Mode0            0               x               Reg 0 ~15(0x0 ~ 0xf)
-* ------------------------------------------------------------------
-* Reg_Mode1            1               0               Reg 16 ~30(0x1 ~ 0xf)
-* ------------------------------------------------------------------
-* Reg_Mode2            1               1               Reg 31 ~ 45(0x1 ~ 0xf)
-* ------------------------------------------------------------------
-*
-*      2008/09/02      MH      Add 92S RF definition
-*/
-static void
-phy_RFSerialWrite(struct rtw_adapter *Adapter, enum RF_RADIO_PATH eRFPath,
-                 u32 Offset, u32 Data)
-{
-       u32 DataAndAddr = 0;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct bb_reg_define *pPhyReg = &pHalData->PHYRegDef[eRFPath];
-       u32 NewOffset;
-
-       /*  2009/06/17 MH We can not execute IO for power save or
-           other accident mode. */
-       /* if (RT_CANNOT_IO(Adapter)) */
-       /*  */
-       /*      RTPRINT(FPHY, PHY_RFW, ("phy_RFSerialWrite stop\n")); */
-       /*      return; */
-       /*  */
-
-       Offset &= 0x3f;
-
-       /*  */
-       /*  Shadow Update */
-       /*  */
-       /* PHY_RFShadowWrite(Adapter, eRFPath, Offset, Data); */
-
-       /*  */
-       /*  Switch page for 8256 RF IC */
-       /*  */
-       NewOffset = Offset;
-
-       /*  */
-       /*  Put write addr in [5:0]  and write data in [31:16] */
-       /*  */
-       /* DataAndAddr = (Data<<16) | (NewOffset&0x3f); */
-       /*  T65 RF */
-       DataAndAddr = ((NewOffset<<20) | (Data&0x000fffff)) & 0x0fffffff;
-
-       /*  */
-       /*  Write Operation */
-       /*  */
-       rtl8723au_write32(Adapter, pPhyReg->rf3wireOffset, DataAndAddr);
-}
-
-/**
-* Function:    PHY_QueryRFReg
-*
-* OverView:    Query "Specific bits" to RF register (page 8~)
-*
-* Input:
-*      struct rtw_adapter *            Adapter,
-*      enum RF_RADIO_PATH      eRFPath,        Radio path of A/B/C/D
-*      u32 RegAddr,                    The target address to be read
-*      u32BitMask                      The target bit position in the target
-*                                      address to be read
-*
-* Output:
-*      None
-* Return:
-*      u32                             Readback value
-* Note:
-*      This function is equal to "GetRFRegSetting" in PHY programming guide
-*/
-u32
-PHY_QueryRFReg(struct rtw_adapter *Adapter, enum RF_RADIO_PATH eRFPath,
-              u32 RegAddr, u32 BitMask)
-{
-       u32 Original_Value, Readback_Value, BitShift;
-       /* struct hal_data_8723a        *pHalData = GET_HAL_DATA(Adapter); */
-       /* u8   RFWaitCounter = 0; */
-       /* _irqL        irqL; */
-
-       Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
-
-       BitShift =  phy_CalculateBitShift(BitMask);
-       Readback_Value = (Original_Value & BitMask) >> BitShift;
-
-       return Readback_Value;
-}
-
-/**
-* Function:    PHY_SetRFReg
-*
-* OverView:    Write "Specific bits" to RF register (page 8~)
-*
-* Input:
-*      struct rtw_adapter *            Adapter,
-*      enum RF_RADIO_PATH      eRFPath,        Radio path of A/B/C/D
-*      u32 RegAddr,                    The target address to be modified
-*      u32 BitMask                     The target bit position in the target
-*                                      address to be modified
-*      u32 Data                        The new register Data in the target
-*                                      bit position of the target address
-*
-* Output:
-*      None
-* Return:
-*      None
-* Note:        This function is equal to "PutRFRegSetting" in PHY programming guide
-*/
-void
-PHY_SetRFReg(struct rtw_adapter *Adapter, enum RF_RADIO_PATH eRFPath,
-            u32 RegAddr, u32 BitMask, u32 Data)
-{
-       /* struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter); */
-       /* u8 RFWaitCounter     = 0; */
-       u32 Original_Value, BitShift;
-
-       /*  RF data is 12 bits only */
-       if (BitMask != bRFRegOffsetMask) {
-               Original_Value = phy_RFSerialRead(Adapter, eRFPath, RegAddr);
-               BitShift =  phy_CalculateBitShift(BitMask);
-               Data = (Original_Value & (~BitMask)) | (Data << BitShift);
-       }
-
-       phy_RFSerialWrite(Adapter, eRFPath, RegAddr, Data);
-}
-
-/*  3. Initial MAC/BB/RF config by reading MAC/BB/RF txt. */
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_MACConfig8723A
- *
- * Overview:   Condig MAC by header file or parameter file.
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- *  When               Who             Remark
- *  08/12/2008 MHC             Create Version 0.
- *
- *---------------------------------------------------------------------------*/
-int PHY_MACConfig8723A(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /*  */
-       /*  Config MAC */
-       /*  */
-       ODM_ReadAndConfig_MAC_REG_8723A(&pHalData->odmpriv);
-
-       /*  2010.07.13 AMPDU aggregation number 9 */
-       rtl8723au_write8(Adapter, REG_MAX_AGGR_NUM, 0x0A);
-       if (pHalData->rf_type == RF_2T2R &&
-           BOARD_USB_DONGLE == pHalData->BoardType)
-               rtl8723au_write8(Adapter, 0x40, 0x04);
-
-       return _SUCCESS;
-}
-
-/**
-* Function:    phy_InitBBRFRegisterDefinition
-*
-* OverView:    Initialize Register definition offset for Radio Path A/B/C/D
-*
-* Input:
-*                      struct rtw_adapter *            Adapter,
-*
-* Output:      None
-* Return:              None
-* Note:
-*      The initialization value is constant and it should never be changes
-*/
-static void
-phy_InitBBRFRegisterDefinition(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /*  RF Interface Sowrtware Control */
-        /*  16 LSBs if read 32-bit from 0x870 */
-       pHalData->PHYRegDef[RF_PATH_A].rfintfs = rFPGA0_XAB_RFInterfaceSW;
-        /*  16 MSBs if read 32-bit from 0x870 (16-bit for 0x872) */
-       pHalData->PHYRegDef[RF_PATH_B].rfintfs = rFPGA0_XAB_RFInterfaceSW;
-
-       /*  RF Interface Readback Value */
-       /*  16 LSBs if read 32-bit from 0x8E0 */
-       pHalData->PHYRegDef[RF_PATH_A].rfintfi = rFPGA0_XAB_RFInterfaceRB;
-       /*  16 MSBs if read 32-bit from 0x8E0 (16-bit for 0x8E2) */
-       pHalData->PHYRegDef[RF_PATH_B].rfintfi = rFPGA0_XAB_RFInterfaceRB;
-
-       /*  RF Interface Output (and Enable) */
-       /*  16 LSBs if read 32-bit from 0x860 */
-       pHalData->PHYRegDef[RF_PATH_A].rfintfo = rFPGA0_XA_RFInterfaceOE;
-        /*  16 LSBs if read 32-bit from 0x864 */
-       pHalData->PHYRegDef[RF_PATH_B].rfintfo = rFPGA0_XB_RFInterfaceOE;
-
-       /*  RF Interface (Output and)  Enable */
-        /*  16 MSBs if read 32-bit from 0x860 (16-bit for 0x862) */
-       pHalData->PHYRegDef[RF_PATH_A].rfintfe = rFPGA0_XA_RFInterfaceOE;
-       /*  16 MSBs if read 32-bit from 0x864 (16-bit for 0x866) */
-       pHalData->PHYRegDef[RF_PATH_B].rfintfe = rFPGA0_XB_RFInterfaceOE;
-
-       /* Addr of LSSI. Wirte RF register by driver */
-       pHalData->PHYRegDef[RF_PATH_A].rf3wireOffset = rFPGA0_XA_LSSIParameter;
-       pHalData->PHYRegDef[RF_PATH_B].rf3wireOffset = rFPGA0_XB_LSSIParameter;
-
-       /*  RF parameter */
-       /* BB Band Select */
-       pHalData->PHYRegDef[RF_PATH_A].rfLSSI_Select = rFPGA0_XAB_RFParameter;
-       pHalData->PHYRegDef[RF_PATH_B].rfLSSI_Select = rFPGA0_XAB_RFParameter;
-
-       /*  Tx AGC Gain Stage (same for all path. Should we remove this?) */
-       pHalData->PHYRegDef[RF_PATH_A].rfTxGainStage = rFPGA0_TxGainStage;
-       pHalData->PHYRegDef[RF_PATH_B].rfTxGainStage = rFPGA0_TxGainStage;
-
-       /*  Tranceiver A~D HSSI Parameter-1 */
-       /* wire control parameter1 */
-       pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara1 = rFPGA0_XA_HSSIParameter1;
-       /* wire control parameter1 */
-       pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara1 = rFPGA0_XB_HSSIParameter1;
-
-       /*  Tranceiver A~D HSSI Parameter-2 */
-       /* wire control parameter2 */
-       pHalData->PHYRegDef[RF_PATH_A].rfHSSIPara2 = rFPGA0_XA_HSSIParameter2;
-       /* wire control parameter2 */
-       pHalData->PHYRegDef[RF_PATH_B].rfHSSIPara2 = rFPGA0_XB_HSSIParameter2;
-
-       /*  RF switch Control */
-       pHalData->PHYRegDef[RF_PATH_A].rfSwitchControl =
-               rFPGA0_XAB_SwitchControl; /* TR/Ant switch control */
-       pHalData->PHYRegDef[RF_PATH_B].rfSwitchControl =
-               rFPGA0_XAB_SwitchControl;
-
-       /*  AGC control 1 */
-       pHalData->PHYRegDef[RF_PATH_A].rfAGCControl1 = rOFDM0_XAAGCCore1;
-       pHalData->PHYRegDef[RF_PATH_B].rfAGCControl1 = rOFDM0_XBAGCCore1;
-
-       /*  AGC control 2 */
-       pHalData->PHYRegDef[RF_PATH_A].rfAGCControl2 = rOFDM0_XAAGCCore2;
-       pHalData->PHYRegDef[RF_PATH_B].rfAGCControl2 = rOFDM0_XBAGCCore2;
-
-       /*  RX AFE control 1 */
-       pHalData->PHYRegDef[RF_PATH_A].rfRxIQImbalance = rOFDM0_XARxIQImbalance;
-       pHalData->PHYRegDef[RF_PATH_B].rfRxIQImbalance = rOFDM0_XBRxIQImbalance;
-
-       /*  RX AFE control 1 */
-       pHalData->PHYRegDef[RF_PATH_A].rfRxAFE = rOFDM0_XARxAFE;
-       pHalData->PHYRegDef[RF_PATH_B].rfRxAFE = rOFDM0_XBRxAFE;
-
-       /*  Tx AFE control 1 */
-       pHalData->PHYRegDef[RF_PATH_A].rfTxIQImbalance = rOFDM0_XATxIQImbalance;
-       pHalData->PHYRegDef[RF_PATH_B].rfTxIQImbalance = rOFDM0_XBTxIQImbalance;
-
-       /*  Tx AFE control 2 */
-       pHalData->PHYRegDef[RF_PATH_A].rfTxAFE = rOFDM0_XATxAFE;
-       pHalData->PHYRegDef[RF_PATH_B].rfTxAFE = rOFDM0_XBTxAFE;
-
-       /*  Tranceiver LSSI Readback SI mode */
-       pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBack = rFPGA0_XA_LSSIReadBack;
-       pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBack = rFPGA0_XB_LSSIReadBack;
-
-       /*  Tranceiver LSSI Readback PI mode */
-       pHalData->PHYRegDef[RF_PATH_A].rfLSSIReadBackPi =
-               TransceiverA_HSPI_Readback;
-       pHalData->PHYRegDef[RF_PATH_B].rfLSSIReadBackPi =
-               TransceiverB_HSPI_Readback;
-}
-
-/*  The following is for High Power PA */
-static void
-storePwrIndexDiffRateOffset(struct rtw_adapter *Adapter, u32 RegAddr,
-                           u32 BitMask, u32 Data)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       if (RegAddr == rTxAGC_A_Rate18_06) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][0] = Data;
-       }
-       if (RegAddr == rTxAGC_A_Rate54_24) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][1] = Data;
-       }
-       if (RegAddr == rTxAGC_A_CCK1_Mcs32) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][6] = Data;
-       }
-       if (RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0xffffff00) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][7] = Data;
-       }
-       if (RegAddr == rTxAGC_A_Mcs03_Mcs00) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][2] = Data;
-       }
-       if (RegAddr == rTxAGC_A_Mcs07_Mcs04) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][3] = Data;
-       }
-       if (RegAddr == rTxAGC_A_Mcs11_Mcs08) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][4] = Data;
-       }
-       if (RegAddr == rTxAGC_A_Mcs15_Mcs12) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][5] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Rate18_06) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][8] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Rate54_24) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][9] = Data;
-       }
-       if (RegAddr == rTxAGC_B_CCK1_55_Mcs32) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][14] = Data;
-       }
-       if (RegAddr == rTxAGC_B_CCK11_A_CCK2_11 && BitMask == 0x000000ff) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][15] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Mcs03_Mcs00) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][10] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Mcs07_Mcs04) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][11] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Mcs11_Mcs08) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][12] = Data;
-       }
-       if (RegAddr == rTxAGC_B_Mcs15_Mcs12) {
-               pHalData->MCSTxPowerLevelOriginalOffset[pHalData->pwrGroupCnt][13] = Data;
-               pHalData->pwrGroupCnt++;
-       }
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   phy_ConfigBBWithPgHeaderFile
- *
- * Overview:   Config PHY_REG_PG array
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- * When                Who     Remark
- * 11/06/2008  MHC     Add later!!!!!!.. Please modify for new files!!!!
- * 11/10/2008  tynli   Modify to mew files.
- *---------------------------------------------------------------------------*/
-static int
-phy_ConfigBBWithPgHeaderFile(struct rtw_adapter *Adapter)
-{
-       int i;
-       u32 *Rtl819XPHY_REGArray_Table_PG;
-       u16 PHY_REGArrayPGLen;
-
-       PHY_REGArrayPGLen = Rtl8723_PHY_REG_Array_PGLength;
-       Rtl819XPHY_REGArray_Table_PG = (u32 *)Rtl8723_PHY_REG_Array_PG;
-
-       for (i = 0; i < PHY_REGArrayPGLen; i = i + 3) {
-               storePwrIndexDiffRateOffset(Adapter,
-                                           Rtl819XPHY_REGArray_Table_PG[i],
-                                           Rtl819XPHY_REGArray_Table_PG[i+1],
-                                           Rtl819XPHY_REGArray_Table_PG[i+2]);
-       }
-
-       return _SUCCESS;
-}
-
-static void
-phy_BB8192C_Config_1T(struct rtw_adapter *Adapter)
-{
-       /* for path - B */
-       PHY_SetBBReg(Adapter, rFPGA0_TxInfo, 0x3, 0x2);
-       PHY_SetBBReg(Adapter, rFPGA1_TxInfo, 0x300033, 0x200022);
-
-       /*  20100519 Joseph: Add for 1T2R config. Suggested by Kevin,
-           Jenyu and Yunan. */
-       PHY_SetBBReg(Adapter, rCCK0_AFESetting, bMaskByte3, 0x45);
-       PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, bMaskByte0, 0x23);
-       /*  B path first AGC */
-       PHY_SetBBReg(Adapter, rOFDM0_AGCParameter1, 0x30, 0x1);
-
-       PHY_SetBBReg(Adapter, 0xe74, 0x0c000000, 0x2);
-       PHY_SetBBReg(Adapter, 0xe78, 0x0c000000, 0x2);
-       PHY_SetBBReg(Adapter, 0xe7c, 0x0c000000, 0x2);
-       PHY_SetBBReg(Adapter, 0xe80, 0x0c000000, 0x2);
-       PHY_SetBBReg(Adapter, 0xe88, 0x0c000000, 0x2);
-}
-
-static int
-phy_BB8723a_Config_ParaFile(struct rtw_adapter *Adapter)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       int rtStatus = _SUCCESS;
-
-       /*  */
-       /*  1. Read PHY_REG.TXT BB INIT!! */
-       /*  We will separate as 88C / 92C according to chip version */
-       /*  */
-       ODM_ReadAndConfig_PHY_REG_1T_8723A(&pHalData->odmpriv);
-
-       /*  */
-       /*  20100318 Joseph: Config 2T2R to 1T2R if necessary. */
-       /*  */
-       if (pHalData->rf_type == RF_1T2R) {
-               phy_BB8192C_Config_1T(Adapter);
-               DBG_8723A("phy_BB8723a_Config_ParaFile():Config to 1T!!\n");
-       }
-
-       /*  */
-       /*  2. If EEPROM or EFUSE autoload OK, We must config by
-           PHY_REG_PG.txt */
-       /*  */
-       if (pEEPROM->bautoload_fail_flag == false) {
-               pHalData->pwrGroupCnt = 0;
-
-               rtStatus = phy_ConfigBBWithPgHeaderFile(Adapter);
-       }
-
-       if (rtStatus != _SUCCESS)
-               goto phy_BB8190_Config_ParaFile_Fail;
-
-       /*  */
-       /*  3. BB AGC table Initialization */
-       /*  */
-       ODM_ReadAndConfig_AGC_TAB_1T_8723A(&pHalData->odmpriv);
-
-phy_BB8190_Config_ParaFile_Fail:
-
-       return rtStatus;
-}
-
-int
-PHY_BBConfig8723A(struct rtw_adapter *Adapter)
-{
-       int rtStatus = _SUCCESS;
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(Adapter);
-       u8 TmpU1B = 0;
-       u8 CrystalCap;
-
-       phy_InitBBRFRegisterDefinition(Adapter);
-
-       /*  Suggested by Scott. tynli_test. 2010.12.30. */
-       /* 1. 0x28[1] = 1 */
-       TmpU1B = rtl8723au_read8(Adapter, REG_AFE_PLL_CTRL);
-       udelay(2);
-       rtl8723au_write8(Adapter, REG_AFE_PLL_CTRL, TmpU1B | BIT(1));
-       udelay(2);
-
-       /* 2. 0x29[7:0] = 0xFF */
-       rtl8723au_write8(Adapter, REG_AFE_PLL_CTRL+1, 0xff);
-       udelay(2);
-
-       /* 3. 0x02[1:0] = 2b'11 */
-       TmpU1B = rtl8723au_read8(Adapter, REG_SYS_FUNC_EN);
-       rtl8723au_write8(Adapter, REG_SYS_FUNC_EN,
-                        (TmpU1B | FEN_BB_GLB_RSTn | FEN_BBRSTB));
-
-       /* 4. 0x25[6] = 0 */
-       TmpU1B = rtl8723au_read8(Adapter, REG_AFE_XTAL_CTRL + 1);
-       rtl8723au_write8(Adapter, REG_AFE_XTAL_CTRL+1, TmpU1B & ~BIT(6));
-
-       /* 5. 0x24[20] = 0      Advised by SD3 Alex Wang. 2011.02.09. */
-       TmpU1B = rtl8723au_read8(Adapter, REG_AFE_XTAL_CTRL+2);
-       rtl8723au_write8(Adapter, REG_AFE_XTAL_CTRL+2, TmpU1B & ~BIT(4));
-
-       /* 6. 0x1f[7:0] = 0x07 */
-       rtl8723au_write8(Adapter, REG_RF_CTRL, 0x07);
-
-       /*  */
-       /*  Config BB and AGC */
-       /*  */
-       rtStatus = phy_BB8723a_Config_ParaFile(Adapter);
-
-/* only for B-cut */
-       if (pHalData->EEPROMVersion >= 0x01) {
-               CrystalCap = pHalData->CrystalCap & 0x3F;
-               PHY_SetBBReg(Adapter, REG_MAC_PHY_CTRL, 0xFFF000,
-                            (CrystalCap | (CrystalCap << 6)));
-       }
-
-       rtl8723au_write32(Adapter, REG_LDOA15_CTRL, 0x01572505);
-       return rtStatus;
-}
-
-/*-----------------------------------------------------------------------------
- * Function:    SetTxPowerLevel8723A()
- *
- * Overview:    This function is export to "HalCommon" moudule
- *                     We must consider RF path later!!!!!!!
- *
- * Input:       struct rtw_adapter *           Adapter
- *                     u8              channel
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- *---------------------------------------------------------------------------*/
-void PHY_SetTxPowerLevel8723A(struct rtw_adapter *Adapter, u8 channel)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 cckpwr[2], ofdmpwr[2];       /*  [0]:RF-A, [1]:RF-B */
-       int i = channel - 1;
-
-       if (pHalData->bTXPowerDataReadFromEEPORM == false)
-               return;
-
-       /*  1. CCK */
-       cckpwr[RF_PATH_A] = pHalData->TxPwrLevelCck[RF_PATH_A][i];
-       cckpwr[RF_PATH_B] = pHalData->TxPwrLevelCck[RF_PATH_B][i];
-
-       /*  2. OFDM for 1S or 2S */
-       if (GET_RF_TYPE(Adapter) == RF_1T2R ||
-           GET_RF_TYPE(Adapter) == RF_1T1R) {
-               /*  Read HT 40 OFDM TX power */
-               ofdmpwr[RF_PATH_A] = pHalData->TxPwrLevelHT40_1S[RF_PATH_A][i];
-               ofdmpwr[RF_PATH_B] = pHalData->TxPwrLevelHT40_1S[RF_PATH_B][i];
-       } else if (GET_RF_TYPE(Adapter) == RF_2T2R) {
-               /*  Read HT 40 OFDM TX power */
-               ofdmpwr[RF_PATH_A] = pHalData->TxPwrLevelHT40_2S[RF_PATH_A][i];
-               ofdmpwr[RF_PATH_B] = pHalData->TxPwrLevelHT40_2S[RF_PATH_B][i];
-       }
-
-       rtl823a_phy_rf6052setccktxpower(Adapter, &cckpwr[0]);
-       rtl8723a_PHY_RF6052SetOFDMTxPower(Adapter, &ofdmpwr[0], channel);
-}
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_SetBWMode23aCallback8192C()
- *
- * Overview:    Timer callback function for SetSetBWMode23a
- *
- * Input:              PRT_TIMER               pTimer
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:
- *     (1) We do not take j mode into consideration now
- *     (2) Will two workitem of "switch channel" and
- *         "switch channel bandwidth" run concurrently?
- *---------------------------------------------------------------------------*/
-static void
-_PHY_SetBWMode23a92C(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 regBwOpMode;
-       u8 regRRSR_RSC;
-
-       if (Adapter->bDriverStopped)
-               return;
-
-       /* 3 */
-       /* 3<1>Set MAC register */
-       /* 3 */
-
-       regBwOpMode = rtl8723au_read8(Adapter, REG_BWOPMODE);
-       regRRSR_RSC = rtl8723au_read8(Adapter, REG_RRSR+2);
-
-       switch (pHalData->CurrentChannelBW) {
-       case HT_CHANNEL_WIDTH_20:
-               regBwOpMode |= BW_OPMODE_20MHZ;
-               rtl8723au_write8(Adapter, REG_BWOPMODE, regBwOpMode);
-               break;
-       case HT_CHANNEL_WIDTH_40:
-               regBwOpMode &= ~BW_OPMODE_20MHZ;
-               rtl8723au_write8(Adapter, REG_BWOPMODE, regBwOpMode);
-               regRRSR_RSC = (regRRSR_RSC & 0x90) |
-                       (pHalData->nCur40MhzPrimeSC << 5);
-               rtl8723au_write8(Adapter, REG_RRSR+2, regRRSR_RSC);
-               break;
-
-       default:
-               break;
-       }
-
-       /* 3 */
-       /* 3<2>Set PHY related register */
-       /* 3 */
-       switch (pHalData->CurrentChannelBW) {
-               /* 20 MHz channel*/
-       case HT_CHANNEL_WIDTH_20:
-               PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x0);
-               PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x0);
-               PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT(10), 1);
-
-               break;
-
-               /* 40 MHz channel*/
-       case HT_CHANNEL_WIDTH_40:
-               PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bRFMOD, 0x1);
-               PHY_SetBBReg(Adapter, rFPGA1_RFMOD, bRFMOD, 0x1);
-
-               /*  Set Control channel to upper or lower. These settings
-                   are required only for 40MHz */
-               PHY_SetBBReg(Adapter, rCCK0_System, bCCKSideBand,
-                            (pHalData->nCur40MhzPrimeSC >> 1));
-               PHY_SetBBReg(Adapter, rOFDM1_LSTF, 0xC00,
-                            pHalData->nCur40MhzPrimeSC);
-               PHY_SetBBReg(Adapter, rFPGA0_AnalogParameter2, BIT(10), 0);
-
-               PHY_SetBBReg(Adapter, 0x818, BIT(26) | BIT(27),
-                            (pHalData->nCur40MhzPrimeSC ==
-                             HAL_PRIME_CHNL_OFFSET_LOWER) ? 2:1);
-               break;
-
-       default:
-               break;
-       }
-       /* Skip over setting of J-mode in BB register here. Default value
-          is "None J mode". Emily 20070315 */
-
-       /*  Added it for 20/40 mhz switch time evaluation by guangan 070531 */
-       /* NowL = PlatformEFIORead4Byte(Adapter, TSFR); */
-       /* NowH = PlatformEFIORead4Byte(Adapter, TSFR+4); */
-       /* EndTime = ((u64)NowH << 32) + NowL; */
-
-       rtl8723a_phy_rf6052set_bw(Adapter, pHalData->CurrentChannelBW);
-}
-
- /*-----------------------------------------------------------------------------
- * Function:   SetBWMode23a8190Pci()
- *
- * Overview:  This function is export to "HalCommon" moudule
- *
- * Input:              struct rtw_adapter *                    Adapter
- *                     enum ht_channel_width   Bandwidth       20M or 40M
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:               We do not take j mode into consideration now
- *---------------------------------------------------------------------------*/
-void
-PHY_SetBWMode23a8723A(struct rtw_adapter *Adapter,
-                  enum ht_channel_width Bandwidth, unsigned char Offset)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       enum ht_channel_width tmpBW = pHalData->CurrentChannelBW;
-
-       pHalData->CurrentChannelBW = Bandwidth;
-
-       pHalData->nCur40MhzPrimeSC = Offset;
-
-       if ((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved))
-               _PHY_SetBWMode23a92C(Adapter);
-       else
-               pHalData->CurrentChannelBW = tmpBW;
-}
-
-static void _PHY_SwChnl8723A(struct rtw_adapter *Adapter, u8 channel)
-{
-       enum RF_RADIO_PATH eRFPath;
-       u32 param1, param2;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /* s1. pre common command - CmdID_SetTxPowerLevel */
-       PHY_SetTxPowerLevel8723A(Adapter, channel);
-
-       /* s2. RF dependent command - CmdID_RF_WriteReg,
-          param1 = RF_CHNLBW, param2 = channel */
-       param1 = RF_CHNLBW;
-       param2 = channel;
-       for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) {
-               pHalData->RfRegChnlVal[eRFPath] =
-                       (pHalData->RfRegChnlVal[eRFPath] & 0xfffffc00) | param2;
-               PHY_SetRFReg(Adapter, eRFPath, param1,
-                            bRFRegOffsetMask, pHalData->RfRegChnlVal[eRFPath]);
-       }
-
-       /* s3. post common command - CmdID_End, None */
-}
-
-void PHY_SwChnl8723A(struct rtw_adapter *Adapter, u8 channel)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 tmpchannel = pHalData->CurrentChannel;
-       bool  result = true;
-
-       if (channel == 0)
-               channel = 1;
-
-       pHalData->CurrentChannel = channel;
-
-       if ((!Adapter->bDriverStopped) && (!Adapter->bSurpriseRemoved)) {
-               _PHY_SwChnl8723A(Adapter, channel);
-
-               if (!result)
-                       pHalData->CurrentChannel = tmpchannel;
-       } else {
-               pHalData->CurrentChannel = tmpchannel;
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c b/drivers/staging/rtl8723au/hal/rtl8723a_rf6052.c
deleted file mode 100644 (file)
index 24c0ff3..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/******************************************************************************
- *
- *
- * Module:     rtl8192c_rf6052.c       (Source C File)
- *
- * Note:       Provide RF 6052 series relative API.
- *
- * Function:
- *
- * Export:
- *
- * Abbrev:
- *
- * History:
- * Data                        Who             Remark
- *
- * 09/25/2008  MHC             Create initial version.
- * 11/05/2008  MHC             Add API for tw power setting.
- *
- *
-******************************************************************************/
-
-#define _RTL8723A_RF6052_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-/*-----------------------------------------------------------------------------
- * Function:    PHY_RF6052SetBandwidth()
- *
- * Overview:    This function is called by SetBWMode23aCallback8190Pci() only
- *
- * Input:       struct rtw_adapter *                           Adapter
- *                     WIRELESS_BANDWIDTH_E    Bandwidth       20M or 40M
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Note:               For RF type 0222D
- *---------------------------------------------------------------------------*/
-void rtl8723a_phy_rf6052set_bw(struct rtw_adapter *Adapter,
-                              enum ht_channel_width Bandwidth) /* 20M or 40M */
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       switch (Bandwidth) {
-       case HT_CHANNEL_WIDTH_20:
-               pHalData->RfRegChnlVal[0] =
-                       (pHalData->RfRegChnlVal[0] & 0xfffff3ff) | 0x0400;
-               PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,
-                            pHalData->RfRegChnlVal[0]);
-               break;
-       case HT_CHANNEL_WIDTH_40:
-               pHalData->RfRegChnlVal[0] =
-                       (pHalData->RfRegChnlVal[0] & 0xfffff3ff);
-               PHY_SetRFReg(Adapter, RF_PATH_A, RF_CHNLBW, bRFRegOffsetMask,
-                            pHalData->RfRegChnlVal[0]);
-               break;
-       default:
-               break;
-       }
-}
-
-/*-----------------------------------------------------------------------------
- * Function:   PHY_RF6052SetCckTxPower
- *
- * Overview:
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- * When                        Who             Remark
- * 11/05/2008  MHC             Simulate 8192series..
- *
- *---------------------------------------------------------------------------*/
-
-void rtl823a_phy_rf6052setccktxpower(struct rtw_adapter *Adapter,
-                                    u8 *pPowerlevel)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
-       u32 TxAGC[2] = {0, 0}, tmpval = 0;
-       u8 idx1, idx2;
-       u8 *ptr;
-
-       if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
-               TxAGC[RF_PATH_A] = 0x3f3f3f3f;
-               TxAGC[RF_PATH_B] = 0x3f3f3f3f;
-
-               for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-                       TxAGC[idx1] = pPowerlevel[idx1] |
-                               (pPowerlevel[idx1] << 8) |
-                               (pPowerlevel[idx1] << 16) |
-                               (pPowerlevel[idx1] << 24);
-                       /*
-                        * 2010/10/18 MH For external PA module. We need
-                        * to limit power index to be less than 0x20.
-                        */
-                       if (TxAGC[idx1] > 0x20 && pHalData->ExternalPA)
-                               TxAGC[idx1] = 0x20;
-               }
-       } else {
-/*  20100427 Joseph: Driver dynamic Tx power shall not affect Tx
- *  power. It shall be determined by power training mechanism. */
-/*  Currently, we cannot fully disable driver dynamic tx power
- *  mechanism because it is referenced by BT coexist mechanism. */
-/*  In the future, two mechanism shall be separated from each other
- *  and maintained independently. Thanks for Lanhsin's reminder. */
-               if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1) {
-                       TxAGC[RF_PATH_A] = 0x10101010;
-                       TxAGC[RF_PATH_B] = 0x10101010;
-               } else if (pdmpriv->DynamicTxHighPowerLvl ==
-                          TxHighPwrLevel_Level2) {
-                       TxAGC[RF_PATH_A] = 0x00000000;
-                       TxAGC[RF_PATH_B] = 0x00000000;
-               } else {
-                       for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-                               TxAGC[idx1] = pPowerlevel[idx1] |
-                                       (pPowerlevel[idx1] << 8) |
-                                       (pPowerlevel[idx1] << 16) |
-                                       (pPowerlevel[idx1] << 24);
-                       }
-
-                       if (pHalData->EEPROMRegulatory == 0) {
-                               tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][6]) +
-                                               (pHalData->MCSTxPowerLevelOriginalOffset[0][7]<<8);
-                               TxAGC[RF_PATH_A] += tmpval;
-
-                               tmpval = (pHalData->MCSTxPowerLevelOriginalOffset[0][14]) +
-                                               (pHalData->MCSTxPowerLevelOriginalOffset[0][15]<<24);
-                               TxAGC[RF_PATH_B] += tmpval;
-                       }
-               }
-       }
-
-       for (idx1 = RF_PATH_A; idx1 <= RF_PATH_B; idx1++) {
-               ptr = (u8 *)(&TxAGC[idx1]);
-               for (idx2 = 0; idx2 < 4; idx2++) {
-                       if (*ptr > RF6052_MAX_TX_PWR)
-                               *ptr = RF6052_MAX_TX_PWR;
-                       ptr++;
-               }
-       }
-
-       /*  rf-A cck tx power */
-       tmpval = TxAGC[RF_PATH_A] & 0xff;
-       PHY_SetBBReg(Adapter, rTxAGC_A_CCK1_Mcs32, bMaskByte1, tmpval);
-       tmpval = TxAGC[RF_PATH_A] >> 8;
-       PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, 0xffffff00, tmpval);
-
-       /*  rf-B cck tx power */
-       tmpval = TxAGC[RF_PATH_B] >> 24;
-       PHY_SetBBReg(Adapter, rTxAGC_B_CCK11_A_CCK2_11, bMaskByte0, tmpval);
-       tmpval = TxAGC[RF_PATH_B] & 0x00ffffff;
-       PHY_SetBBReg(Adapter, rTxAGC_B_CCK1_55_Mcs32, 0xffffff00, tmpval);
-}      /* PHY_RF6052SetCckTxPower */
-
-/*  powerbase0 for OFDM rates */
-/*  powerbase1 for HT MCS rates */
-static void getPowerBase(struct rtw_adapter *Adapter, u8 *pPowerLevel,
-                        u8 Channel, u32 *OfdmBase, u32 *MCSBase)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u32 ofdm, mcs;
-       u8 Legacy_pwrdiff = 0;
-       s8 HT20_pwrdiff = 0;
-       u8 i, powerlevel[2];
-
-       for (i = 0; i < 2; i++) {
-               powerlevel[i] = pPowerLevel[i];
-               Legacy_pwrdiff = pHalData->TxPwrLegacyHtDiff[i][Channel-1];
-               ofdm = powerlevel[i] + Legacy_pwrdiff;
-
-               ofdm = ofdm << 24 | ofdm << 16 | ofdm << 8 | ofdm;
-               *(OfdmBase + i) = ofdm;
-       }
-
-       for (i = 0; i < 2; i++) {
-               /* Check HT20 to HT40 diff */
-               if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_20) {
-                       HT20_pwrdiff = pHalData->TxPwrHt20Diff[i][Channel-1];
-                       powerlevel[i] += HT20_pwrdiff;
-               }
-               mcs = powerlevel[i];
-               mcs = mcs << 24 | mcs << 16 | mcs << 8 | mcs;
-               *(MCSBase + i) = mcs;
-       }
-}
-
-static void
-getTxPowerWriteValByRegulatory(struct rtw_adapter *Adapter, u8 Channel,
-                              u8 index, u32 *powerBase0, u32 *powerBase1,
-                              u32 *pOutWriteVal)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       u8 i, chnlGroup = 0, pwr_diff_limit[4];
-       u32 writeVal, customer_limit, rf;
-
-       /*  Index 0 & 1 = legacy OFDM, 2-5 = HT_MCS rate */
-       for (rf = 0; rf < 2; rf++) {
-               switch (pHalData->EEPROMRegulatory) {
-               case 0: /*  Realtek better performance */
-                       /*  increase power diff defined by Realtek for
-                        *  large power */
-                       chnlGroup = 0;
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
-                               ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               case 1: /*  Realtek regulatory */
-                       /*  increase power diff defined by Realtek for
-                        *  regulatory */
-                       if (pHalData->pwrGroupCnt == 1)
-                               chnlGroup = 0;
-                       if (pHalData->pwrGroupCnt >= 3) {
-                               if (Channel <= 3)
-                                       chnlGroup = 0;
-                               else if (Channel >= 4 && Channel <= 9)
-                                       chnlGroup = 1;
-                               else if (Channel > 9)
-                                       chnlGroup = 2;
-
-                               if (pHalData->CurrentChannelBW ==
-                                   HT_CHANNEL_WIDTH_20)
-                                       chnlGroup++;
-                               else
-                                       chnlGroup += 4;
-                       }
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
-                                  ((index < 2) ? powerBase0[rf] :
-                                   powerBase1[rf]);
-                       break;
-               case 2: /*  Better regulatory */
-                       /*  don't increase any power diff */
-                       writeVal = (index < 2) ? powerBase0[rf] :
-                                   powerBase1[rf];
-                       break;
-               case 3: /*  Customer defined power diff. */
-                       chnlGroup = 0;
-
-                       for (i = 0; i < 4; i++) {
-                               pwr_diff_limit[i] = (u8)((pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index +
-                                                   (rf ? 8 : 0)]&(0x7f << (i*8))) >> (i*8));
-                               if (pHalData->CurrentChannelBW == HT_CHANNEL_WIDTH_40) {
-                                       if (pwr_diff_limit[i] > pHalData->PwrGroupHT40[rf][Channel-1])
-                                               pwr_diff_limit[i] = pHalData->PwrGroupHT40[rf][Channel-1];
-                               } else {
-                                       if (pwr_diff_limit[i] > pHalData->PwrGroupHT20[rf][Channel-1])
-                                               pwr_diff_limit[i] = pHalData->PwrGroupHT20[rf][Channel-1];
-                               }
-                       }
-                       customer_limit = (pwr_diff_limit[3]<<24) | (pwr_diff_limit[2]<<16) |
-                                                       (pwr_diff_limit[1]<<8) | (pwr_diff_limit[0]);
-                       writeVal = customer_limit + ((index<2)?powerBase0[rf]:powerBase1[rf]);
-                       break;
-               default:
-                       chnlGroup = 0;
-                       writeVal = pHalData->MCSTxPowerLevelOriginalOffset[chnlGroup][index+(rf?8:0)] +
-                                       ((index < 2) ? powerBase0[rf] : powerBase1[rf]);
-                       break;
-               }
-
-/*  20100427 Joseph: Driver dynamic Tx power shall not affect Tx power.
-    It shall be determined by power training mechanism. */
-/*  Currently, we cannot fully disable driver dynamic tx power mechanism
-    because it is referenced by BT coexist mechanism. */
-/*  In the future, two mechanism shall be separated from each other and
-    maintained independently. Thanks for Lanhsin's reminder. */
-
-               if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_Level1)
-                       writeVal = 0x14141414;
-               else if (pdmpriv->DynamicTxHighPowerLvl ==
-                        TxHighPwrLevel_Level2)
-                       writeVal = 0x00000000;
-
-               /* 20100628 Joseph: High power mode for BT-Coexist mechanism. */
-               /* This mechanism is only applied when
-                  Driver-Highpower-Mechanism is OFF. */
-               if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT1)
-                       writeVal = writeVal - 0x06060606;
-               else if (pdmpriv->DynamicTxHighPowerLvl == TxHighPwrLevel_BT2)
-                       writeVal = writeVal;
-               *(pOutWriteVal + rf) = writeVal;
-       }
-}
-
-static void writeOFDMPowerReg(struct rtw_adapter *Adapter, u8 index,
-                             u32 *pValue)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u16 RegOffset_A[6] = {
-               rTxAGC_A_Rate18_06, rTxAGC_A_Rate54_24,
-               rTxAGC_A_Mcs03_Mcs00, rTxAGC_A_Mcs07_Mcs04,
-               rTxAGC_A_Mcs11_Mcs08, rTxAGC_A_Mcs15_Mcs12
-       };
-       u16 RegOffset_B[6] = {
-               rTxAGC_B_Rate18_06, rTxAGC_B_Rate54_24,
-               rTxAGC_B_Mcs03_Mcs00, rTxAGC_B_Mcs07_Mcs04,
-               rTxAGC_B_Mcs11_Mcs08, rTxAGC_B_Mcs15_Mcs12
-       };
-       u8 i, rf, pwr_val[4];
-       u32 writeVal;
-       u16 RegOffset;
-
-       for (rf = 0; rf < 2; rf++) {
-               writeVal = pValue[rf];
-               for (i = 0; i < 4; i++) {
-                       pwr_val[i] = (u8)((writeVal &
-                                          (0x7f << (i * 8))) >> (i * 8));
-                       if (pwr_val[i] > RF6052_MAX_TX_PWR)
-                               pwr_val[i]  = RF6052_MAX_TX_PWR;
-               }
-               writeVal = pwr_val[3] << 24 | pwr_val[2] << 16 |
-                       pwr_val[1] << 8 | pwr_val[0];
-
-               if (rf == 0)
-                       RegOffset = RegOffset_A[index];
-               else
-                       RegOffset = RegOffset_B[index];
-
-               rtl8723au_write32(Adapter, RegOffset, writeVal);
-
-               /*  201005115 Joseph: Set Tx Power diff for Tx power
-                   training mechanism. */
-               if (((pHalData->rf_type == RF_2T2R) &&
-                   (RegOffset == rTxAGC_A_Mcs15_Mcs12 ||
-                    RegOffset == rTxAGC_B_Mcs15_Mcs12)) ||
-                   ((pHalData->rf_type != RF_2T2R) &&
-                    (RegOffset == rTxAGC_A_Mcs07_Mcs04 ||
-                     RegOffset == rTxAGC_B_Mcs07_Mcs04))) {
-                       writeVal = pwr_val[3];
-                       if (RegOffset == rTxAGC_A_Mcs15_Mcs12 ||
-                           RegOffset == rTxAGC_A_Mcs07_Mcs04)
-                               RegOffset = 0xc90;
-                       if (RegOffset == rTxAGC_B_Mcs15_Mcs12 ||
-                           RegOffset == rTxAGC_B_Mcs07_Mcs04)
-                               RegOffset = 0xc98;
-                       for (i = 0; i < 3; i++) {
-                               if (i != 2)
-                                       writeVal = (writeVal > 8) ?
-                                               (writeVal - 8) : 0;
-                               else
-                                       writeVal = (writeVal > 6) ?
-                                               (writeVal - 6) : 0;
-                               rtl8723au_write8(Adapter, RegOffset + i,
-                                                (u8)writeVal);
-                       }
-               }
-       }
-}
-/*-----------------------------------------------------------------------------
- * Function:   PHY_RF6052SetOFDMTxPower
- *
- * Overview:   For legacy and HY OFDM, we must read EEPROM TX power index for
- *             different channel and read original value in TX power
- *             register area from 0xe00. We increase offset and
- *             original value to be correct tx pwr.
- *
- * Input:       NONE
- *
- * Output:      NONE
- *
- * Return:      NONE
- *
- * Revised History:
- * When                        Remark
- * 11/05/2008  MHC     Simulate 8192 series method.
- * 01/06/2009  MHC     1. Prevent Path B tx power overflow or
- *                     underflow dure to A/B pwr difference or
- *                     legacy/HT pwr diff.
- *                     2. We concern with path B legacy/HT OFDM difference.
- * 01/22/2009  MHC     Support new EPRO format from SD3.
- *
- *---------------------------------------------------------------------------*/
-void rtl8723a_PHY_RF6052SetOFDMTxPower(struct rtw_adapter *Adapter,
-                                      u8 *pPowerLevel, u8 Channel)
-{
-       u32 writeVal[2], powerBase0[2], powerBase1[2];
-       u8 index = 0;
-
-       getPowerBase(Adapter, pPowerLevel, Channel,
-                    &powerBase0[0], &powerBase1[0]);
-
-       for (index = 0; index < 6; index++) {
-               getTxPowerWriteValByRegulatory(Adapter, Channel, index,
-                       &powerBase0[0], &powerBase1[0], &writeVal[0]);
-
-               writeOFDMPowerReg(Adapter, index, &writeVal[0]);
-       }
-}
-
-static int phy_RF6052_Config_ParaFile(struct rtw_adapter *Adapter)
-{
-       u32 u4RegValue = 0;
-       u8 eRFPath;
-       struct bb_reg_define *pPhyReg;
-       int rtStatus = _SUCCESS;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /* 3----------------------------------------------------------------- */
-       /* 3 <2> Initialize RF */
-       /* 3----------------------------------------------------------------- */
-       for (eRFPath = 0; eRFPath < pHalData->NumTotalRFPath; eRFPath++) {
-
-               pPhyReg = &pHalData->PHYRegDef[eRFPath];
-
-               /*----Store original RFENV control type----*/
-               switch (eRFPath) {
-               case RF_PATH_A:
-                       u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs,
-                                                   bRFSI_RFENV);
-                       break;
-               case RF_PATH_B:
-                       u4RegValue = PHY_QueryBBReg(Adapter, pPhyReg->rfintfs,
-                                                   bRFSI_RFENV << 16);
-                       break;
-               }
-
-               /*----Set RF_ENV enable----*/
-               PHY_SetBBReg(Adapter, pPhyReg->rfintfe, bRFSI_RFENV << 16, 0x1);
-               udelay(1);/* PlatformStallExecution(1); */
-
-               /*----Set RF_ENV output high----*/
-               PHY_SetBBReg(Adapter, pPhyReg->rfintfo, bRFSI_RFENV, 0x1);
-               udelay(1);/* PlatformStallExecution(1); */
-
-               /* Set bit number of Address and Data for RF register */
-               PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireAddressLength,
-                            0x0);      /*  Set 1 to 4 bits for 8255 */
-               udelay(1);/* PlatformStallExecution(1); */
-
-               PHY_SetBBReg(Adapter, pPhyReg->rfHSSIPara2, b3WireDataLength,
-                            0x0);      /*  Set 0 to 12  bits for 8255 */
-               udelay(1);/* PlatformStallExecution(1); */
-
-               /*----Initialize RF fom connfiguration file----*/
-               switch (eRFPath) {
-               case RF_PATH_A:
-                       ODM_ReadAndConfig_RadioA_1T_8723A(&pHalData->odmpriv);
-                       break;
-               case RF_PATH_B:
-                       break;
-               }
-
-               /*----Restore RFENV control type----*/
-               switch (eRFPath) {
-               case RF_PATH_A:
-                       PHY_SetBBReg(Adapter, pPhyReg->rfintfs,
-                                    bRFSI_RFENV, u4RegValue);
-                       break;
-               case RF_PATH_B:
-                       PHY_SetBBReg(Adapter, pPhyReg->rfintfs,
-                                    bRFSI_RFENV << 16, u4RegValue);
-                       break;
-               }
-
-               if (rtStatus != _SUCCESS) {
-                       goto phy_RF6052_Config_ParaFile_Fail;
-               }
-       }
-phy_RF6052_Config_ParaFile_Fail:
-       return rtStatus;
-}
-
-int PHY_RF6052_Config8723A(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /*  Initialize general global value */
-       /*  TODO: Extend RF_PATH_C and RF_PATH_D in the future */
-       if (pHalData->rf_type == RF_1T1R)
-               pHalData->NumTotalRFPath = 1;
-       else
-               pHalData->NumTotalRFPath = 2;
-
-       /*  Config BB and RF */
-       return phy_RF6052_Config_ParaFile(Adapter);
-}
-
-/* End of HalRf6052.c */
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_rxdesc.c b/drivers/staging/rtl8723au/hal/rtl8723a_rxdesc.c
deleted file mode 100644 (file)
index 81b5efe..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8723A_REDESC_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtl8723a_hal.h>
-
-static void process_rssi(struct rtw_adapter *padapter,
-                        struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib = &prframe->attrib;
-       struct signal_stat *signal_stat = &padapter->recvpriv.signal_strength_data;
-
-       if (signal_stat->update_req) {
-               signal_stat->total_num = 0;
-               signal_stat->total_val = 0;
-               signal_stat->update_req = 0;
-       }
-
-       signal_stat->total_num++;
-       signal_stat->total_val  += pattrib->phy_info.SignalStrength;
-       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-}
-
-static void process_link_qual(struct rtw_adapter *padapter,
-                             struct recv_frame *prframe)
-{
-       struct rx_pkt_attrib *pattrib;
-       struct signal_stat *signal_stat;
-
-       if (prframe == NULL || padapter == NULL)
-               return;
-
-       pattrib = &prframe->attrib;
-       signal_stat = &padapter->recvpriv.signal_qual_data;
-
-       if (signal_stat->update_req) {
-               signal_stat->total_num = 0;
-               signal_stat->total_val = 0;
-               signal_stat->update_req = 0;
-       }
-
-       signal_stat->total_num++;
-       signal_stat->total_val  += pattrib->phy_info.SignalQuality;
-       signal_stat->avg_val = signal_stat->total_val / signal_stat->total_num;
-}
-
-/* void rtl8723a_process_phy_info(struct rtw_adapter *padapter, union recv_frame *prframe) */
-void rtl8723a_process_phy_info(struct rtw_adapter *padapter, void *prframe)
-{
-       struct recv_frame *precvframe = prframe;
-       /*  Check RSSI */
-       process_rssi(padapter, precvframe);
-       /*  Check EVM */
-       process_link_qual(padapter,  precvframe);
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c b/drivers/staging/rtl8723au/hal/rtl8723a_sreset.c
deleted file mode 100644 (file)
index 3c46294..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8723A_SRESET_C_
-
-#include <rtl8723a_sreset.h>
-#include <rtl8723a_hal.h>
-#include <usb_ops_linux.h>
-
-void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(padapter);
-       struct sreset_priv *psrtpriv = &pHalData->srestpriv;
-
-       unsigned long current_time;
-       struct xmit_priv        *pxmitpriv = &padapter->xmitpriv;
-       unsigned int diff_time;
-       u32 txdma_status;
-
-       txdma_status = rtl8723au_read32(padapter, REG_TXDMA_STATUS);
-       if (txdma_status != 0) {
-               DBG_8723A("%s REG_TXDMA_STATUS:0x%08x\n", __func__, txdma_status);
-               rtw_sreset_reset(padapter);
-       }
-
-       current_time = jiffies;
-
-       if (0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {
-
-               diff_time = jiffies_to_msecs(jiffies - psrtpriv->last_tx_time);
-
-               if (diff_time > 2000) {
-                       if (psrtpriv->last_tx_complete_time == 0) {
-                               psrtpriv->last_tx_complete_time = current_time;
-                       } else {
-                               diff_time = jiffies_to_msecs(jiffies - psrtpriv->last_tx_complete_time);
-                               if (diff_time > 4000) {
-                                       DBG_8723A("%s tx hang\n", __func__);
-                                       rtw_sreset_reset(padapter);
-                               }
-                       }
-               }
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723au_recv.c b/drivers/staging/rtl8723au/hal/rtl8723au_recv.c
deleted file mode 100644 (file)
index 0fec84b..0000000
+++ /dev/null
@@ -1,267 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8192CU_RECV_C_
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <mlme_osdep.h>
-#include <linux/ip.h>
-#include <linux/if_ether.h>
-#include <usb_ops.h>
-#include <wifi.h>
-#include <rtl8723a_hal.h>
-
-int rtl8723au_init_recv_priv(struct rtw_adapter *padapter)
-{
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       int i, size, res = _SUCCESS;
-       struct recv_buf *precvbuf;
-       unsigned long tmpaddr;
-       unsigned long alignment;
-       struct sk_buff *pskb;
-
-       tasklet_init(&precvpriv->recv_tasklet,
-                    (void(*)(unsigned long))rtl8723au_recv_tasklet,
-                    (unsigned long)padapter);
-
-       precvpriv->int_in_urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!precvpriv->int_in_urb)
-               DBG_8723A("alloc_urb for interrupt in endpoint fail !!!!\n");
-       precvpriv->int_in_buf = kzalloc(USB_INTR_CONTENT_LENGTH, GFP_KERNEL);
-       if (!precvpriv->int_in_buf)
-               DBG_8723A("alloc_mem for interrupt in endpoint fail !!!!\n");
-
-       size = NR_RECVBUFF * sizeof(struct recv_buf);
-       precvpriv->precv_buf = kzalloc(size, GFP_KERNEL);
-       if (!precvpriv->precv_buf) {
-               res = _FAIL;
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                        "alloc recv_buf fail!\n");
-               goto exit;
-       }
-
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               INIT_LIST_HEAD(&precvbuf->list);
-
-               precvbuf->purb = usb_alloc_urb(0, GFP_KERNEL);
-               if (!precvbuf->purb)
-                       break;
-
-               precvbuf->adapter = padapter;
-
-               precvbuf++;
-       }
-
-       skb_queue_head_init(&precvpriv->rx_skb_queue);
-       skb_queue_head_init(&precvpriv->free_recv_skb_queue);
-
-       for (i = 0; i < NR_PREALLOC_RECV_SKB; i++) {
-               size = MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ;
-               pskb = __netdev_alloc_skb(padapter->pnetdev, size, GFP_KERNEL);
-
-               if (pskb) {
-                       pskb->dev = padapter->pnetdev;
-
-                       tmpaddr = (unsigned long)pskb->data;
-                       alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
-                       skb_reserve(pskb, (RECVBUFF_ALIGN_SZ - alignment));
-
-                       skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
-               }
-
-               pskb = NULL;
-       }
-
-exit:
-       return res;
-}
-
-void rtl8723au_free_recv_priv(struct rtw_adapter *padapter)
-{
-       int     i;
-       struct recv_buf *precvbuf;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               usb_free_urb(precvbuf->purb);
-
-               if (precvbuf->pskb)
-                       dev_kfree_skb_any(precvbuf->pskb);
-
-               precvbuf++;
-       }
-
-       kfree(precvpriv->precv_buf);
-
-       usb_free_urb(precvpriv->int_in_urb);
-       kfree(precvpriv->int_in_buf);
-
-       if (skb_queue_len(&precvpriv->rx_skb_queue))
-               DBG_8723A(KERN_WARNING "rx_skb_queue not empty\n");
-
-       skb_queue_purge(&precvpriv->rx_skb_queue);
-
-       if (skb_queue_len(&precvpriv->free_recv_skb_queue)) {
-               DBG_8723A(KERN_WARNING "free_recv_skb_queue not empty, %d\n",
-                         skb_queue_len(&precvpriv->free_recv_skb_queue));
-       }
-
-       skb_queue_purge(&precvpriv->free_recv_skb_queue);
-}
-
-struct recv_stat_cpu {
-       u32 rxdw0;
-       u32 rxdw1;
-       u32 rxdw2;
-       u32 rxdw3;
-       u32 rxdw4;
-       u32 rxdw5;
-};
-
-void update_recvframe_attrib(struct recv_frame *precvframe,
-                            struct recv_stat *prxstat)
-{
-       struct rx_pkt_attrib *pattrib;
-       struct recv_stat_cpu report;
-       struct rxreport_8723a *prxreport;
-
-       report.rxdw0 = le32_to_cpu(prxstat->rxdw0);
-       report.rxdw1 = le32_to_cpu(prxstat->rxdw1);
-       report.rxdw2 = le32_to_cpu(prxstat->rxdw2);
-       report.rxdw3 = le32_to_cpu(prxstat->rxdw3);
-       report.rxdw4 = le32_to_cpu(prxstat->rxdw4);
-       report.rxdw5 = le32_to_cpu(prxstat->rxdw5);
-
-       prxreport = (struct rxreport_8723a *)&report;
-
-       pattrib = &precvframe->attrib;
-       memset(pattrib, 0, sizeof(struct rx_pkt_attrib));
-
-       /*  update rx report to recv_frame attribute */
-       pattrib->pkt_len = (u16)prxreport->pktlen;
-       pattrib->drvinfo_sz = (u8)(prxreport->drvinfosize << 3);
-       pattrib->physt = (u8)prxreport->physt;
-
-       pattrib->crc_err = (u8)prxreport->crc32;
-       pattrib->icv_err = (u8)prxreport->icverr;
-
-       pattrib->bdecrypted = (u8)(prxreport->swdec ? 0 : 1);
-       pattrib->encrypt = (u8)prxreport->security;
-
-       pattrib->qos = (u8)prxreport->qos;
-       pattrib->priority = (u8)prxreport->tid;
-
-       pattrib->amsdu = (u8)prxreport->amsdu;
-
-       pattrib->seq_num = (u16)prxreport->seq;
-       pattrib->frag_num = (u8)prxreport->frag;
-       pattrib->mfrag = (u8)prxreport->mf;
-       pattrib->mdata = (u8)prxreport->md;
-
-       pattrib->mcs_rate = (u8)prxreport->rxmcs;
-       pattrib->rxht = (u8)prxreport->rxht;
-}
-
-void update_recvframe_phyinfo(struct recv_frame *precvframe,
-                             struct phy_stat *pphy_status)
-{
-       struct rtw_adapter *padapter = precvframe->adapter;
-       struct rx_pkt_attrib *pattrib = &precvframe->attrib;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct phy_info *pPHYInfo = &pattrib->phy_info;
-       struct odm_packet_info pkt_info;
-       u8 *sa = NULL, *da;
-       struct sta_priv *pstapriv;
-       struct sta_info *psta;
-       struct sk_buff *skb = precvframe->pkt;
-       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
-       bool matchbssid = false;
-       u8 *bssid;
-
-       matchbssid = !ieee80211_is_ctl(hdr->frame_control) &&
-                     !pattrib->icv_err && !pattrib->crc_err;
-
-       if (matchbssid) {
-               switch (hdr->frame_control &
-                       cpu_to_le16(IEEE80211_FCTL_TODS |
-                                   IEEE80211_FCTL_FROMDS)) {
-               case cpu_to_le16(IEEE80211_FCTL_TODS):
-                       bssid = hdr->addr1;
-                       break;
-               case cpu_to_le16(IEEE80211_FCTL_FROMDS):
-                       bssid = hdr->addr2;
-                       break;
-               case cpu_to_le16(0):
-                       bssid = hdr->addr3;
-                       break;
-               default:
-                       bssid = NULL;
-                       matchbssid = false;
-               }
-
-               if (bssid)
-                       matchbssid = ether_addr_equal(
-                               get_bssid(&padapter->mlmepriv), bssid);
-       }
-
-       pkt_info.bPacketMatchBSSID = matchbssid;
-
-       da = ieee80211_get_DA(hdr);
-       pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID &&
-               (!memcmp(da, myid(&padapter->eeprompriv), ETH_ALEN));
-
-       pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID &&
-               ieee80211_is_beacon(hdr->frame_control);
-
-       pkt_info.StationID = 0xFF;
-       if (pkt_info.bPacketBeacon) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_STATION_STATE) == true)
-                       sa = padapter->mlmepriv.cur_network.network.MacAddress;
-               /* to do Ad-hoc */
-       } else {
-               sa = ieee80211_get_SA(hdr);
-       }
-
-       pstapriv = &padapter->stapriv;
-       psta = rtw_get_stainfo23a(pstapriv, sa);
-       if (psta) {
-               pkt_info.StationID = psta->mac_id;
-               /* printk("%s ==> StationID(%d)\n", __func__, pkt_info.StationID); */
-       }
-       pkt_info.Rate = pattrib->mcs_rate;
-
-       ODM_PhyStatusQuery23a(&pHalData->odmpriv, pPHYInfo,
-                             (u8 *)pphy_status, &pkt_info);
-       precvframe->psta = NULL;
-       if (pkt_info.bPacketMatchBSSID &&
-           (check_fwstate(&padapter->mlmepriv, WIFI_AP_STATE) == true)) {
-               if (psta) {
-                       precvframe->psta = psta;
-                       rtl8723a_process_phy_info(padapter, precvframe);
-               }
-       } else if (pkt_info.bPacketToSelf || pkt_info.bPacketBeacon) {
-               if (check_fwstate(&padapter->mlmepriv,
-                                 WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE) ==
-                   true) {
-                       if (psta)
-                               precvframe->psta = psta;
-               }
-               rtl8723a_process_phy_info(padapter, precvframe);
-       }
-}
diff --git a/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c b/drivers/staging/rtl8723au/hal/rtl8723au_xmit.c
deleted file mode 100644 (file)
index 14746dd..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTL8192C_XMIT_C_
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-#include <osdep_intf.h>
-#include <usb_ops.h>
-/* include <rtl8192c_hal.h> */
-#include <rtl8723a_hal.h>
-
-static int urb_zero_packet_chk(struct rtw_adapter *padapter, int sz)
-{
-       int blnSetTxDescOffset;
-       struct dvobj_priv       *pdvobj = adapter_to_dvobj(padapter);
-
-       if (pdvobj->ishighspeed) {
-               if (((sz + TXDESC_SIZE) % 512) == 0)
-                       blnSetTxDescOffset = 1;
-               else
-                       blnSetTxDescOffset = 0;
-       } else {
-               if (((sz + TXDESC_SIZE) % 64) == 0)
-                       blnSetTxDescOffset = 1;
-               else
-                       blnSetTxDescOffset = 0;
-       }
-       return blnSetTxDescOffset;
-}
-
-static void rtl8192cu_cal_txdesc_chksum(struct tx_desc *ptxdesc)
-{
-               __le16  *usPtr = (__le16 *)ptxdesc;
-               u32 count = 16;         /*  (32 bytes / 2 bytes per XOR) => 16 times */
-               u32 index;
-               u16 checksum = 0;
-
-               /* Clear first */
-               ptxdesc->txdw7 &= cpu_to_le32(0xffff0000);
-
-               for (index = 0 ; index < count ; index++)
-                       checksum = checksum ^ le16_to_cpu(*(usPtr + index));
-
-               ptxdesc->txdw7 |= cpu_to_le32(0x0000ffff&checksum);
-}
-
-static void fill_txdesc_sectype(struct pkt_attrib *pattrib, struct tx_desc *ptxdesc)
-{
-       if ((pattrib->encrypt > 0) && !pattrib->bswenc) {
-               switch (pattrib->encrypt) {
-               /* SEC_TYPE */
-               case WLAN_CIPHER_SUITE_WEP40:
-               case WLAN_CIPHER_SUITE_WEP104:
-                       ptxdesc->txdw1 |= cpu_to_le32((0x01<<22)&0x00c00000);
-                       break;
-               case WLAN_CIPHER_SUITE_TKIP:
-                       /* ptxdesc->txdw1 |= cpu_to_le32((0x02<<22)&0x00c00000); */
-                       ptxdesc->txdw1 |= cpu_to_le32((0x01<<22)&0x00c00000);
-                       break;
-               case WLAN_CIPHER_SUITE_CCMP:
-                       ptxdesc->txdw1 |= cpu_to_le32((0x03<<22)&0x00c00000);
-                       break;
-               case 0:
-               default:
-                       break;
-               }
-       }
-}
-
-static void fill_txdesc_vcs(struct pkt_attrib *pattrib, __le32 *pdw)
-{
-       /* DBG_8723A("cvs_mode =%d\n", pattrib->vcs_mode); */
-
-       switch (pattrib->vcs_mode) {
-       case RTS_CTS:
-               *pdw |= cpu_to_le32(BIT(12));
-               break;
-       case CTS_TO_SELF:
-               *pdw |= cpu_to_le32(BIT(11));
-               break;
-       case NONE_VCS:
-       default:
-               break;
-       }
-
-       if (pattrib->vcs_mode) {
-               *pdw |= cpu_to_le32(BIT(13));
-
-               /*  Set RTS BW */
-               if (pattrib->ht_en) {
-                       *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40) ? cpu_to_le32(BIT(27)) : 0;
-
-                       if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                               *pdw |= cpu_to_le32((0x01<<28)&0x30000000);
-                       else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                               *pdw |= cpu_to_le32((0x02<<28)&0x30000000);
-                       else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
-                               *pdw |= 0;
-                       else
-                               *pdw |= cpu_to_le32((0x03<<28)&0x30000000);
-               }
-       }
-}
-
-static void fill_txdesc_phy(struct pkt_attrib *pattrib, __le32 *pdw)
-{
-       if (pattrib->ht_en) {
-               *pdw |= (pattrib->bwmode&HT_CHANNEL_WIDTH_40) ? cpu_to_le32(BIT(25)) : 0;
-
-               if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
-                       *pdw |= cpu_to_le32((0x01<<20)&0x003f0000);
-               else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
-                       *pdw |= cpu_to_le32((0x02<<20)&0x003f0000);
-               else if (pattrib->ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
-                       *pdw |= 0;
-               else
-                       *pdw |= cpu_to_le32((0x03<<20)&0x003f0000);
-       }
-}
-
-static s32 update_txdesc(struct xmit_frame *pxmitframe, u8 *pmem, s32 sz)
-{
-       int     pull = 0;
-       uint    qsel;
-       struct rtw_adapter      *padapter = pxmitframe->padapter;
-       struct pkt_attrib       *pattrib = &pxmitframe->attrib;
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv  *pdmpriv = &pHalData->dmpriv;
-       struct tx_desc  *ptxdesc = (struct tx_desc *)pmem;
-       struct mlme_ext_priv    *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info    *pmlmeinfo = &pmlmeext->mlmext_info;
-       int     bmcst = is_multicast_ether_addr(pattrib->ra);
-
-       if (urb_zero_packet_chk(padapter, sz) == 0) {
-               ptxdesc = (struct tx_desc *)(pmem+PACKET_OFFSET_SZ);
-               pull = 1;
-               pxmitframe->pkt_offset--;
-       }
-
-       memset(ptxdesc, 0, sizeof(struct tx_desc));
-
-       if (pxmitframe->frame_tag == DATA_FRAMETAG) {
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
-
-               qsel = (uint)(pattrib->qsel & 0x0000001f);
-               ptxdesc->txdw1 |= cpu_to_le32((qsel << QSEL_SHT) & 0x00001f00);
-
-               ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid<<16) & 0x000f0000);
-
-               fill_txdesc_sectype(pattrib, ptxdesc);
-
-               if (pattrib->ampdu_en)
-                       ptxdesc->txdw1 |= cpu_to_le32(BIT(5));/* AGG EN */
-               else
-                       ptxdesc->txdw1 |= cpu_to_le32(BIT(6));/* AGG BK */
-
-               /* offset 8 */
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
-
-               /* offset 16 , offset 20 */
-               if (pattrib->qos_en)
-                       ptxdesc->txdw4 |= cpu_to_le32(BIT(6));/* QoS */
-
-               if ((pattrib->ether_type != 0x888e) &&
-                   (pattrib->ether_type != 0x0806) &&
-                   (pattrib->dhcp_pkt != 1)) {
-                       /* Non EAP & ARP & DHCP type data packet */
-
-                       fill_txdesc_vcs(pattrib, &ptxdesc->txdw4);
-                       fill_txdesc_phy(pattrib, &ptxdesc->txdw4);
-
-                       ptxdesc->txdw4 |= cpu_to_le32(0x00000008);/* RTS Rate = 24M */
-                       ptxdesc->txdw5 |= cpu_to_le32(0x0001ff00);/*  */
-
-                       /* use REG_INIDATA_RATE_SEL value */
-                       ptxdesc->txdw5 |= cpu_to_le32(pdmpriv->INIDATA_RATE[pattrib->mac_id]);
-               } else {
-                       /*  EAP data packet and ARP packet. */
-                       /*  Use the 1M data rate to send the EAP/ARP packet. */
-                       /*  This will maybe make the handshake smooth. */
-
-                       ptxdesc->txdw1 |= cpu_to_le32(BIT(6));/* AGG BK */
-
-                       ptxdesc->txdw4 |= cpu_to_le32(BIT(8));/* driver uses rate */
-
-                       if (pmlmeinfo->preamble_mode == PREAMBLE_SHORT)
-                               ptxdesc->txdw4 |= cpu_to_le32(BIT(24));/*  DATA_SHORT */
-
-                       ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate23a(pmlmeext->tx_rate));
-               }
-       } else if (pxmitframe->frame_tag == MGNT_FRAMETAG) {
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32(pattrib->mac_id&0x1f);
-
-               qsel = (uint)(pattrib->qsel&0x0000001f);
-               ptxdesc->txdw1 |= cpu_to_le32((qsel<<QSEL_SHT)&0x00001f00);
-
-               ptxdesc->txdw1 |= cpu_to_le32((pattrib->raid<<16) & 0x000f0000);
-
-               /* offset 8 */
-               /* CCX-TXRPT ack for xmit mgmt frames. */
-               if (pxmitframe->ack_report)
-                       ptxdesc->txdw2 |= cpu_to_le32(BIT(19));
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
-
-               /* offset 16 */
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(8));/* driver uses rate */
-
-               /* offset 20 */
-               ptxdesc->txdw5 |= cpu_to_le32(BIT(17));/* retry limit enable */
-               ptxdesc->txdw5 |= cpu_to_le32(0x00180000);/* retry limit = 6 */
-
-               ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate23a(pmlmeext->tx_rate));
-       } else if (pxmitframe->frame_tag == TXAGG_FRAMETAG) {
-               DBG_8723A("pxmitframe->frame_tag == TXAGG_FRAMETAG\n");
-       } else {
-               DBG_8723A("pxmitframe->frame_tag = %d\n",
-                         pxmitframe->frame_tag);
-
-               /* offset 4 */
-               ptxdesc->txdw1 |= cpu_to_le32((4)&0x1f);/* CAM_ID(MAC_ID) */
-
-               ptxdesc->txdw1 |= cpu_to_le32((6<<16) & 0x000f0000);/* raid */
-
-               /* offset 8 */
-
-               /* offset 12 */
-               ptxdesc->txdw3 |= cpu_to_le32((pattrib->seqnum<<16)&0xffff0000);
-
-               /* offset 16 */
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(8));/* driver uses rate */
-
-               /* offset 20 */
-               ptxdesc->txdw5 |= cpu_to_le32(MRateToHwRate23a(pmlmeext->tx_rate));
-       }
-
-       /*  (1) The sequence number of each non-Qos frame / broadcast / multicast / */
-       /*  mgnt frame should be controlled by Hw because Fw will also send null data */
-       /*  which we cannot control when Fw LPS enable. */
-       /*  --> default enable non-Qos data sequense number. 2010.06.23. by tynli. */
-       /*  (2) Enable HW SEQ control for beacon packet, because we use Hw beacon. */
-       /*  (3) Use HW Qos SEQ to control the seq num of Ext port non-Qos packets. */
-       if (!pattrib->qos_en) {
-               /*  Hw set sequence number */
-               ptxdesc->txdw4 |= cpu_to_le32(BIT(7));
-               /* set bit3 to 1. */
-               ptxdesc->txdw3 |= cpu_to_le32((8 << 28));
-       }
-
-       /* offset 0 */
-       ptxdesc->txdw0 |= cpu_to_le32(sz&0x0000ffff);
-       ptxdesc->txdw0 |= cpu_to_le32(OWN | FSG | LSG);
-       ptxdesc->txdw0 |= cpu_to_le32(((TXDESC_SIZE+OFFSET_SZ)<<OFFSET_SHT)&0x00ff0000);/* 32 bytes for TX Desc */
-
-       if (bmcst)
-               ptxdesc->txdw0 |= cpu_to_le32(BIT(24));
-
-       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                "offset0-txdesc = 0x%x\n", ptxdesc->txdw0);
-
-       /* offset 4 */
-       /*  pkt_offset, unit:8 bytes padding */
-       if (pxmitframe->pkt_offset > 0)
-               ptxdesc->txdw1 |= cpu_to_le32((pxmitframe->pkt_offset << 26) & 0x7c000000);
-
-       rtl8192cu_cal_txdesc_chksum(ptxdesc);
-       return pull;
-}
-
-static int rtw_dump_xframe(struct rtw_adapter *padapter,
-                          struct xmit_frame *pxmitframe)
-{
-       int ret = _SUCCESS;
-       int inner_ret = _SUCCESS;
-       int t, sz, w_sz, pull = 0;
-       u8 *mem_addr;
-       u32 ff_hwaddr;
-       struct xmit_buf *pxmitbuf = pxmitframe->pxmitbuf;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       if (pxmitframe->frame_tag == DATA_FRAMETAG &&
-           pxmitframe->attrib.ether_type != ETH_P_ARP &&
-           pxmitframe->attrib.ether_type != ETH_P_PAE &&
-           pxmitframe->attrib.dhcp_pkt != 1)
-               rtw_issue_addbareq_cmd23a(padapter, pxmitframe);
-
-       mem_addr = pxmitframe->buf_addr;
-
-       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, "rtw_dump_xframe()\n");
-
-       for (t = 0; t < pattrib->nr_frags; t++) {
-               if (inner_ret != _SUCCESS && ret == _SUCCESS)
-                       ret = _FAIL;
-
-               if (t != (pattrib->nr_frags - 1)) {
-                       RT_TRACE(_module_rtl871x_xmit_c_, _drv_err_,
-                                "pattrib->nr_frags =%d\n", pattrib->nr_frags);
-
-                       sz = pxmitpriv->frag_len;
-                       sz = sz - 4 - pattrib->icv_len;
-               } else {
-                       /* no frag */
-                       sz = pattrib->last_txcmdsz;
-               }
-
-               pull = update_txdesc(pxmitframe, mem_addr, sz);
-
-               if (pull) {
-                       mem_addr += PACKET_OFFSET_SZ; /* pull txdesc head */
-
-                       pxmitframe->buf_addr = mem_addr;
-
-                       w_sz = sz + TXDESC_SIZE;
-               } else {
-                       w_sz = sz + TXDESC_SIZE + PACKET_OFFSET_SZ;
-               }
-
-               ff_hwaddr = rtw_get_ff_hwaddr23a(pxmitframe);
-               inner_ret = rtl8723au_write_port(padapter, ff_hwaddr,
-                                                w_sz, pxmitbuf);
-               rtw_count_tx_stats23a(padapter, pxmitframe, sz);
-
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "rtw_write_port, w_sz =%d\n", w_sz);
-
-               mem_addr += w_sz;
-
-               mem_addr = PTR_ALIGN(mem_addr, 4);
-       }
-
-       rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-
-       if  (ret != _SUCCESS)
-               rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_UNKNOWN);
-
-       return ret;
-}
-
-bool rtl8723au_xmitframe_complete(struct rtw_adapter *padapter,
-                                 struct xmit_priv *pxmitpriv,
-                                 struct xmit_buf *pxmitbuf)
-{
-       struct hw_xmit *phwxmits;
-       struct xmit_frame *pxmitframe;
-       int hwentry;
-       int res = _SUCCESS, xcnt = 0;
-
-       phwxmits = pxmitpriv->hwxmits;
-       hwentry = pxmitpriv->hwxmit_entry;
-
-       RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_, "xmitframe_complete()\n");
-
-       if (pxmitbuf == NULL) {
-               pxmitbuf = rtw_alloc_xmitbuf23a(pxmitpriv);
-               if (!pxmitbuf)
-                       return false;
-       }
-       pxmitframe =  rtw_dequeue_xframe23a(pxmitpriv, phwxmits, hwentry);
-
-       if (pxmitframe) {
-               pxmitframe->pxmitbuf = pxmitbuf;
-
-               pxmitframe->buf_addr = pxmitbuf->pbuf;
-
-               pxmitbuf->priv_data = pxmitframe;
-
-               if (pxmitframe->frame_tag == DATA_FRAMETAG) {
-                       if (pxmitframe->attrib.priority <= 15)/* TID0~15 */
-                               res = rtw_xmitframe_coalesce23a(padapter, pxmitframe->pkt, pxmitframe);
-
-                       rtw_os_xmit_complete23a(padapter, pxmitframe);/* always return ndis_packet after rtw_xmitframe_coalesce23a */
-               }
-
-               RT_TRACE(_module_rtl871x_xmit_c_, _drv_info_,
-                        "xmitframe_complete(): rtw_dump_xframe\n");
-
-               if (res == _SUCCESS) {
-                       rtw_dump_xframe(padapter, pxmitframe);
-               } else {
-                       rtw_free_xmitbuf23a(pxmitpriv, pxmitbuf);
-                       rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-               }
-               xcnt++;
-       } else {
-               rtw_free_xmitbuf23a(pxmitpriv, pxmitbuf);
-               return false;
-       }
-       return true;
-}
-
-static int xmitframe_direct(struct rtw_adapter *padapter,
-                           struct xmit_frame *pxmitframe)
-{
-       int res;
-
-       res = rtw_xmitframe_coalesce23a(padapter, pxmitframe->pkt, pxmitframe);
-       if (res == _SUCCESS)
-               rtw_dump_xframe(padapter, pxmitframe);
-       return res;
-}
-
-/*
- * Return
- *     true    dump packet directly
- *     false   enqueue packet
- */
-bool rtl8723au_hal_xmit(struct rtw_adapter *padapter,
-                       struct xmit_frame *pxmitframe)
-{
-       int res;
-       struct xmit_buf *pxmitbuf = NULL;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct pkt_attrib *pattrib = &pxmitframe->attrib;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       pattrib->qsel = pattrib->priority;
-       spin_lock_bh(&pxmitpriv->lock);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       if (xmitframe_enqueue_for_sleeping_sta23a(padapter, pxmitframe)) {
-               struct sta_info *psta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               spin_unlock_bh(&pxmitpriv->lock);
-
-               if (pattrib->psta)
-                       psta = pattrib->psta;
-               else
-                       psta = rtw_get_stainfo23a(pstapriv, pattrib->ra);
-
-               if (psta) {
-                       if (psta->sleepq_len > (NR_XMITFRAME>>3))
-                               wakeup_sta_to_xmit23a(padapter, psta);
-               }
-
-               return false;
-       }
-#endif
-
-       if (rtw_txframes_sta_ac_pending23a(padapter, pattrib) > 0)
-               goto enqueue;
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY|_FW_UNDER_LINKING) == true)
-               goto enqueue;
-
-       pxmitbuf = rtw_alloc_xmitbuf23a(pxmitpriv);
-       if (pxmitbuf == NULL)
-               goto enqueue;
-
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       pxmitframe->pxmitbuf = pxmitbuf;
-       pxmitframe->buf_addr = pxmitbuf->pbuf;
-       pxmitbuf->priv_data = pxmitframe;
-
-       if (xmitframe_direct(padapter, pxmitframe) != _SUCCESS) {
-               rtw_free_xmitbuf23a(pxmitpriv, pxmitbuf);
-               rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-       }
-       return true;
-
-enqueue:
-       res = rtw_xmitframe_enqueue23a(padapter, pxmitframe);
-       spin_unlock_bh(&pxmitpriv->lock);
-
-       if (res != _SUCCESS) {
-               RT_TRACE(_module_xmit_osdep_c_, _drv_err_,
-                        "pre_xmitframe: enqueue xmitframe fail\n");
-               rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-
-               /*  Trick, make the statistics correct */
-               pxmitpriv->tx_pkts--;
-               pxmitpriv->tx_drop++;
-               return true;
-       }
-       return false;
-}
-
-int rtl8723au_mgnt_xmit(struct rtw_adapter *padapter,
-                       struct xmit_frame *pmgntframe)
-{
-       return rtw_dump_xframe(padapter, pmgntframe);
-}
-
-int rtl8723au_hal_xmitframe_enqueue(struct rtw_adapter *padapter,
-                                   struct xmit_frame *pxmitframe)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int err;
-
-       err = rtw_xmitframe_enqueue23a(padapter, pxmitframe);
-       if (err != _SUCCESS) {
-               rtw_free_xmitframe23a(pxmitpriv, pxmitframe);
-
-               /*  Trick, make the statistics correct */
-               pxmitpriv->tx_pkts--;
-               pxmitpriv->tx_drop++;
-       } else {
-               tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-       }
-       return err;
-}
diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c
deleted file mode 100644 (file)
index fa47aeb..0000000
+++ /dev/null
@@ -1,1269 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _HCI_HAL_INIT_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_efuse.h>
-
-#include <HalPwrSeqCmd.h>
-#include <Hal8723PwrSeq.h>
-#include <rtl8723a_hal.h>
-#include <linux/ieee80211.h>
-
-#include <usb_ops.h>
-
-static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
-                               enum rt_rf_power_state eRFPowerState);
-
-static void
-_ConfigChipOutEP(struct rtw_adapter *pAdapter, u8 NumOutPipe)
-{
-       u8 value8;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter);
-
-       pHalData->OutEpQueueSel = 0;
-       pHalData->OutEpNumber = 0;
-
-       /*  Normal and High queue */
-       value8 = rtl8723au_read8(pAdapter, (REG_NORMAL_SIE_EP + 1));
-
-       if (value8 & USB_NORMAL_SIE_EP_MASK) {
-               pHalData->OutEpQueueSel |= TX_SELE_HQ;
-               pHalData->OutEpNumber++;
-       }
-
-       if ((value8 >> USB_NORMAL_SIE_EP_SHIFT) & USB_NORMAL_SIE_EP_MASK) {
-               pHalData->OutEpQueueSel |= TX_SELE_NQ;
-               pHalData->OutEpNumber++;
-       }
-
-       /*  Low queue */
-       value8 = rtl8723au_read8(pAdapter, (REG_NORMAL_SIE_EP + 2));
-       if (value8 & USB_NORMAL_SIE_EP_MASK) {
-               pHalData->OutEpQueueSel |= TX_SELE_LQ;
-               pHalData->OutEpNumber++;
-       }
-
-       /*  TODO: Error recovery for this case */
-       /* RT_ASSERT((NumOutPipe == pHalData->OutEpNumber),
-          ("Out EP number isn't match! %d(Descriptor) != %d (SIE reg)\n",
-          (u32)NumOutPipe, (u32)pHalData->OutEpNumber)); */
-}
-
-bool rtl8723au_chip_configure(struct rtw_adapter *padapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       u8 NumInPipe = pdvobjpriv->RtNumInPipes;
-       u8 NumOutPipe = pdvobjpriv->RtNumOutPipes;
-
-       _ConfigChipOutEP(padapter, NumOutPipe);
-
-       /*  Normal chip with one IN and one OUT doesn't have interrupt IN EP. */
-       if (pHalData->OutEpNumber == 1) {
-               if (NumInPipe != 1)
-                       return false;
-       }
-
-       return Hal_MappingOutPipe23a(padapter, NumOutPipe);
-}
-
-static int _InitPowerOn(struct rtw_adapter *padapter)
-{
-       u16 value16;
-       u8 value8;
-
-       /*  RSV_CTRL 0x1C[7:0] = 0x00
-           unlock ISO/CLK/Power control register */
-       rtl8723au_write8(padapter, REG_RSV_CTRL, 0x0);
-
-       /*  HW Power on sequence */
-       if (!HalPwrSeqCmdParsing23a(padapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
-                                PWR_INTF_USB_MSK, rtl8723AU_card_enable_flow))
-               return _FAIL;
-
-       /*  0x04[19] = 1, suggest by Jackie 2011.05.09, reset 8051 */
-       value8 = rtl8723au_read8(padapter, REG_APS_FSMCO+2);
-       rtl8723au_write8(padapter, REG_APS_FSMCO + 2, value8 | BIT(3));
-
-       /*  Enable MAC DMA/WMAC/SCHEDULE/SEC block */
-       /*  Set CR bit10 to enable 32k calibration. Suggested by SD1 Gimmy.
-           Added by tynli. 2011.08.31. */
-       value16 = rtl8723au_read16(padapter, REG_CR);
-       value16 |= (HCI_TXDMA_EN | HCI_RXDMA_EN | TXDMA_EN | RXDMA_EN |
-                   PROTOCOL_EN | SCHEDULE_EN | MACTXEN | MACRXEN |
-                   ENSEC | CALTMR_EN);
-       rtl8723au_write16(padapter, REG_CR, value16);
-
-       /* for Efuse PG, suggest by Jackie 2011.11.23 */
-       PHY_SetBBReg(padapter, REG_EFUSE_CTRL, BIT(28)|BIT(29)|BIT(30), 0x06);
-
-       return _SUCCESS;
-}
-
-/*  Shall USB interface init this? */
-static void _InitInterrupt(struct rtw_adapter *Adapter)
-{
-       u32 value32;
-
-       /*  HISR - turn all on */
-       value32 = 0xFFFFFFFF;
-       rtl8723au_write32(Adapter, REG_HISR, value32);
-
-       /*  HIMR - turn all on */
-       rtl8723au_write32(Adapter, REG_HIMR, value32);
-}
-
-static void _InitQueueReservedPage(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u32 numHQ = 0;
-       u32 numLQ = 0;
-       u32 numNQ = 0;
-       u32 numPubQ;
-       u32 value32;
-       u8 value8;
-       bool bWiFiConfig = pregistrypriv->wifi_spec;
-
-       /* RT_ASSERT((outEPNum>= 2), ("for WMM , number of out-ep "
-          "must more than or equal to 2!\n")); */
-
-       numPubQ = bWiFiConfig ? WMM_NORMAL_PAGE_NUM_PUBQ : NORMAL_PAGE_NUM_PUBQ;
-
-       if (pHalData->OutEpQueueSel & TX_SELE_HQ) {
-               numHQ = bWiFiConfig ?
-                       WMM_NORMAL_PAGE_NUM_HPQ : NORMAL_PAGE_NUM_HPQ;
-       }
-
-       if (pHalData->OutEpQueueSel & TX_SELE_LQ) {
-               numLQ = bWiFiConfig ?
-                       WMM_NORMAL_PAGE_NUM_LPQ : NORMAL_PAGE_NUM_LPQ;
-       }
-       /*  NOTE: This step shall be proceed before
-           writting REG_RQPN. */
-       if (pHalData->OutEpQueueSel & TX_SELE_NQ) {
-               numNQ = bWiFiConfig ?
-                       WMM_NORMAL_PAGE_NUM_NPQ : NORMAL_PAGE_NUM_NPQ;
-       }
-       value8 = (u8)_NPQ(numNQ);
-       rtl8723au_write8(Adapter, REG_RQPN_NPQ, value8);
-
-       /*  TX DMA */
-       value32 = _HPQ(numHQ) | _LPQ(numLQ) | _PUBQ(numPubQ) | LD_RQPN;
-       rtl8723au_write32(Adapter, REG_RQPN, value32);
-}
-
-static void _InitTxBufferBoundary(struct rtw_adapter *Adapter)
-{
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-
-       u8 txpktbuf_bndy;
-
-       if (!pregistrypriv->wifi_spec)
-               txpktbuf_bndy = TX_PAGE_BOUNDARY;
-       else /* for WMM */
-               txpktbuf_bndy = WMM_NORMAL_TX_PAGE_BOUNDARY;
-
-       rtl8723au_write8(Adapter, REG_TXPKTBUF_BCNQ_BDNY, txpktbuf_bndy);
-       rtl8723au_write8(Adapter, REG_TXPKTBUF_MGQ_BDNY, txpktbuf_bndy);
-       rtl8723au_write8(Adapter, REG_TXPKTBUF_WMAC_LBK_BF_HD, txpktbuf_bndy);
-       rtl8723au_write8(Adapter, REG_TRXFF_BNDY, txpktbuf_bndy);
-       rtl8723au_write8(Adapter, REG_TDECTRL+1, txpktbuf_bndy);
-}
-
-static void _InitPageBoundary(struct rtw_adapter *Adapter)
-{
-       /*  RX Page Boundary */
-       /* srand(static_cast<unsigned int>(time(NULL))); */
-       u16 rxff_bndy = 0x27FF;/* rand() % 1) ? 0x27FF : 0x23FF; */
-
-       rtl8723au_write16(Adapter, (REG_TRXFF_BNDY + 2), rxff_bndy);
-
-       /*  TODO: ?? shall we set tx boundary? */
-}
-
-static void
-_InitNormalChipRegPriority(struct rtw_adapter *Adapter, u16 beQ, u16 bkQ,
-                          u16 viQ, u16 voQ, u16 mgtQ, u16 hiQ)
-{
-       u16 value16 = rtl8723au_read16(Adapter, REG_TRXDMA_CTRL) & 0x7;
-
-       value16 |= _TXDMA_BEQ_MAP(beQ) | _TXDMA_BKQ_MAP(bkQ) |
-               _TXDMA_VIQ_MAP(viQ) | _TXDMA_VOQ_MAP(voQ) |
-               _TXDMA_MGQ_MAP(mgtQ) | _TXDMA_HIQ_MAP(hiQ);
-
-       rtl8723au_write16(Adapter, REG_TRXDMA_CTRL, value16);
-}
-
-static void _InitNormalChipOneOutEpPriority(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u16 value = 0;
-
-       switch (pHalData->OutEpQueueSel) {
-       case TX_SELE_HQ:
-               value = QUEUE_HIGH;
-               break;
-       case TX_SELE_LQ:
-               value = QUEUE_LOW;
-               break;
-       case TX_SELE_NQ:
-               value = QUEUE_NORMAL;
-               break;
-       default:
-               /* RT_ASSERT(false, ("Shall not reach here!\n")); */
-               break;
-       }
-
-       _InitNormalChipRegPriority(Adapter, value, value, value,
-                                  value, value, value);
-}
-
-static void _InitNormalChipTwoOutEpPriority(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;
-       u16 valueHi = 0;
-       u16 valueLow = 0;
-
-       switch (pHalData->OutEpQueueSel) {
-       case (TX_SELE_HQ | TX_SELE_LQ):
-               valueHi = QUEUE_HIGH;
-               valueLow = QUEUE_LOW;
-               break;
-       case (TX_SELE_NQ | TX_SELE_LQ):
-               valueHi = QUEUE_NORMAL;
-               valueLow = QUEUE_LOW;
-               break;
-       case (TX_SELE_HQ | TX_SELE_NQ):
-               valueHi = QUEUE_HIGH;
-               valueLow = QUEUE_NORMAL;
-               break;
-       default:
-               /* RT_ASSERT(false, ("Shall not reach here!\n")); */
-               break;
-       }
-
-       if (!pregistrypriv->wifi_spec) {
-               beQ = valueLow;
-               bkQ = valueLow;
-               viQ = valueHi;
-               voQ = valueHi;
-               mgtQ = valueHi;
-               hiQ = valueHi;
-       } else {/* for WMM , CONFIG_OUT_EP_WIFI_MODE */
-               beQ = valueLow;
-               bkQ = valueHi;
-               viQ = valueHi;
-               voQ = valueLow;
-               mgtQ = valueHi;
-               hiQ = valueHi;
-       }
-
-       _InitNormalChipRegPriority(Adapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-}
-
-static void _InitNormalChipThreeOutEpPriority(struct rtw_adapter *Adapter)
-{
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;
-
-       if (!pregistrypriv->wifi_spec) {/*  typical setting */
-               beQ = QUEUE_LOW;
-               bkQ = QUEUE_LOW;
-               viQ = QUEUE_NORMAL;
-               voQ = QUEUE_HIGH;
-               mgtQ = QUEUE_HIGH;
-               hiQ = QUEUE_HIGH;
-       } else {/*  for WMM */
-               beQ = QUEUE_LOW;
-               bkQ = QUEUE_NORMAL;
-               viQ = QUEUE_NORMAL;
-               voQ = QUEUE_HIGH;
-               mgtQ = QUEUE_HIGH;
-               hiQ = QUEUE_HIGH;
-       }
-       _InitNormalChipRegPriority(Adapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-}
-
-static void _InitQueuePriority(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       switch (pHalData->OutEpNumber) {
-       case 1:
-               _InitNormalChipOneOutEpPriority(Adapter);
-               break;
-       case 2:
-               _InitNormalChipTwoOutEpPriority(Adapter);
-               break;
-       case 3:
-               _InitNormalChipThreeOutEpPriority(Adapter);
-               break;
-       default:
-               /* RT_ASSERT(false, ("Shall not reach here!\n")); */
-               break;
-       }
-}
-
-static void _InitTransferPageSize(struct rtw_adapter *Adapter)
-{
-       /*  Tx page size is always 128. */
-
-       u8 value8;
-       value8 = _PSRX(PBP_128) | _PSTX(PBP_128);
-       rtl8723au_write8(Adapter, REG_PBP, value8);
-}
-
-static void _InitDriverInfoSize(struct rtw_adapter *Adapter, u8 drvInfoSize)
-{
-       rtl8723au_write8(Adapter, REG_RX_DRVINFO_SZ, drvInfoSize);
-}
-
-static void _InitWMACSetting(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       /*  don't turn on AAP, it will allow all packets to driver */
-       pHalData->ReceiveConfig = RCR_APM | RCR_AM | RCR_AB | RCR_CBSSID_DATA |
-                                 RCR_CBSSID_BCN | RCR_APP_ICV | RCR_AMF |
-                                 RCR_HTC_LOC_CTRL | RCR_APP_MIC |
-                                 RCR_APP_PHYSTS;
-
-       /*  some REG_RCR will be modified later by
-           phy_ConfigMACWithHeaderFile() */
-       rtl8723au_write32(Adapter, REG_RCR, pHalData->ReceiveConfig);
-
-       /*  Accept all multicast address */
-       rtl8723au_write32(Adapter, REG_MAR, 0xFFFFFFFF);
-       rtl8723au_write32(Adapter, REG_MAR + 4, 0xFFFFFFFF);
-
-       /*  Accept all data frames */
-       /* value16 = 0xFFFF; */
-       /* rtl8723au_write16(Adapter, REG_RXFLTMAP2, value16); */
-
-       /*  2010.09.08 hpfan */
-       /*  Since ADF is removed from RCR, ps-poll will not be indicate
-           to driver, */
-       /*  RxFilterMap should mask ps-poll to guarantee AP mode can
-           rx ps-poll. */
-       /* value16 = 0x400; */
-       /* rtl8723au_write16(Adapter, REG_RXFLTMAP1, value16); */
-
-       /*  Accept all management frames */
-       /* value16 = 0xFFFF; */
-       /* rtl8723au_write16(Adapter, REG_RXFLTMAP0, value16); */
-
-       /* enable RX_SHIFT bits */
-       /* rtl8723au_write8(Adapter, REG_TRXDMA_CTRL, rtl8723au_read8(Adapter,
-          REG_TRXDMA_CTRL)|BIT(1)); */
-}
-
-static void _InitAdaptiveCtrl(struct rtw_adapter *Adapter)
-{
-       u16 value16;
-       u32 value32;
-
-       /*  Response Rate Set */
-       value32 = rtl8723au_read32(Adapter, REG_RRSR);
-       value32 &= ~RATE_BITMAP_ALL;
-       value32 |= RATE_RRSR_CCK_ONLY_1M;
-       rtl8723au_write32(Adapter, REG_RRSR, value32);
-
-       /*  CF-END Threshold */
-       /* m_spIoBase->rtl8723au_write8(REG_CFEND_TH, 0x1); */
-
-       /*  SIFS (used in NAV) */
-       value16 = _SPEC_SIFS_CCK(0x10) | _SPEC_SIFS_OFDM(0x10);
-       rtl8723au_write16(Adapter, REG_SPEC_SIFS, value16);
-
-       /*  Retry Limit */
-       value16 = _LRL(0x30) | _SRL(0x30);
-       rtl8723au_write16(Adapter, REG_RL, value16);
-}
-
-static void _InitRateFallback(struct rtw_adapter *Adapter)
-{
-       /*  Set Data Auto Rate Fallback Retry Count register. */
-       rtl8723au_write32(Adapter, REG_DARFRC, 0x00000000);
-       rtl8723au_write32(Adapter, REG_DARFRC+4, 0x10080404);
-       rtl8723au_write32(Adapter, REG_RARFRC, 0x04030201);
-       rtl8723au_write32(Adapter, REG_RARFRC+4, 0x08070605);
-}
-
-static void _InitEDCA(struct rtw_adapter *Adapter)
-{
-       /*  Set Spec SIFS (used in NAV) */
-       rtl8723au_write16(Adapter, REG_SPEC_SIFS, 0x100a);
-       rtl8723au_write16(Adapter, REG_MAC_SPEC_SIFS, 0x100a);
-
-       /*  Set SIFS for CCK */
-       rtl8723au_write16(Adapter, REG_SIFS_CTX, 0x100a);
-
-       /*  Set SIFS for OFDM */
-       rtl8723au_write16(Adapter, REG_SIFS_TRX, 0x100a);
-
-       /*  TXOP */
-       rtl8723au_write32(Adapter, REG_EDCA_BE_PARAM, 0x005EA42B);
-       rtl8723au_write32(Adapter, REG_EDCA_BK_PARAM, 0x0000A44F);
-       rtl8723au_write32(Adapter, REG_EDCA_VI_PARAM, 0x005EA324);
-       rtl8723au_write32(Adapter, REG_EDCA_VO_PARAM, 0x002FA226);
-}
-
-static void _InitRDGSetting(struct rtw_adapter *Adapter)
-{
-       rtl8723au_write8(Adapter, REG_RD_CTRL, 0xFF);
-       rtl8723au_write16(Adapter, REG_RD_NAV_NXT, 0x200);
-       rtl8723au_write8(Adapter, REG_RD_RESP_PKT_TH, 0x05);
-}
-
-static void _InitRetryFunction(struct rtw_adapter *Adapter)
-{
-       u8 value8;
-
-       value8 = rtl8723au_read8(Adapter, REG_FWHW_TXQ_CTRL);
-       value8 |= EN_AMPDU_RTY_NEW;
-       rtl8723au_write8(Adapter, REG_FWHW_TXQ_CTRL, value8);
-
-       /*  Set ACK timeout */
-       rtl8723au_write8(Adapter, REG_ACKTO, 0x40);
-}
-
-static void _InitRFType(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       pHalData->rf_type = RF_1T1R;
-}
-
-/*  Set CCK and OFDM Block "ON" */
-static void _BBTurnOnBlock(struct rtw_adapter *Adapter)
-{
-       PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bCCKEn, 0x1);
-       PHY_SetBBReg(Adapter, rFPGA0_RFMOD, bOFDMEn, 0x1);
-}
-
-#define MgntActSet_RF_State(...)
-static void _RfPowerSave(struct rtw_adapter *padapter)
-{
-}
-
-enum {
-       Antenna_Lfet = 1,
-       Antenna_Right = 2,
-};
-
-enum rt_rf_power_state RfOnOffDetect23a(struct rtw_adapter *pAdapter)
-{
-       /* struct hal_data_8723a *pHalData = GET_HAL_DATA(pAdapter); */
-       u8 val8;
-       enum rt_rf_power_state rfpowerstate = rf_off;
-
-       rtl8723au_write8(pAdapter, REG_MAC_PINMUX_CFG,
-                        rtl8723au_read8(pAdapter,
-                                        REG_MAC_PINMUX_CFG) & ~BIT(3));
-       val8 = rtl8723au_read8(pAdapter, REG_GPIO_IO_SEL);
-       DBG_8723A("GPIO_IN =%02x\n", val8);
-       rfpowerstate = (val8 & BIT(3)) ? rf_on : rf_off;
-
-       return rfpowerstate;
-}
-
-int rtl8723au_hal_init(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
-       struct registry_priv *pregistrypriv = &Adapter->registrypriv;
-       u8 val8 = 0;
-       u32 boundary;
-       int status = _SUCCESS;
-       bool mac_on;
-
-       unsigned long init_start_time = jiffies;
-
-       Adapter->hw_init_completed = false;
-
-       if (Adapter->pwrctrlpriv.bkeepfwalive) {
-               phy_SsPwrSwitch92CU(Adapter, rf_on);
-
-               if (pHalData->bIQKInitialized) {
-                       rtl8723a_phy_iq_calibrate(Adapter, true);
-               } else {
-                       rtl8723a_phy_iq_calibrate(Adapter, false);
-                       pHalData->bIQKInitialized = true;
-               }
-               rtl8723a_odm_check_tx_power_tracking(Adapter);
-               rtl8723a_phy_lc_calibrate(Adapter);
-
-               goto exit;
-       }
-
-       /*  Check if MAC has already power on. by tynli. 2011.05.27. */
-       val8 = rtl8723au_read8(Adapter, REG_CR);
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "%s: REG_CR 0x100 = 0x%02x\n", __func__, val8);
-       /* Fix 92DU-VC S3 hang with the reason is that secondary mac is not
-          initialized. */
-       /* 0x100 value of first mac is 0xEA while 0x100 value of secondary
-          is 0x00 */
-       if (val8 == 0xEA) {
-               mac_on = false;
-       } else {
-               mac_on = true;
-               RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                        "%s: MAC has already power on\n", __func__);
-       }
-
-       status = _InitPowerOn(Adapter);
-       if (status == _FAIL) {
-               RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
-                        "Failed to init power on!\n");
-               goto exit;
-       }
-
-       if (!pregistrypriv->wifi_spec) {
-               boundary = TX_PAGE_BOUNDARY;
-       } else {
-               /*  for WMM */
-               boundary = WMM_NORMAL_TX_PAGE_BOUNDARY;
-       }
-
-       if (!mac_on) {
-               status =  InitLLTTable23a(Adapter, boundary);
-               if (status == _FAIL) {
-                       RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
-                                "Failed to init LLT table\n");
-                       goto exit;
-               }
-       }
-
-       if (pHalData->bRDGEnable)
-               _InitRDGSetting(Adapter);
-
-       status = rtl8723a_FirmwareDownload(Adapter);
-       if (status != _SUCCESS) {
-               Adapter->bFWReady = false;
-               DBG_8723A("fw download fail!\n");
-               goto exit;
-       } else {
-               Adapter->bFWReady = true;
-               DBG_8723A("fw download ok!\n");
-       }
-
-       rtl8723a_InitializeFirmwareVars(Adapter);
-
-       if (pwrctrlpriv->reg_rfoff == true) {
-               pwrctrlpriv->rf_pwrstate = rf_off;
-       }
-
-       /*  2010/08/09 MH We need to check if we need to turnon or off RF after detecting */
-       /*  HW GPIO pin. Before PHY_RFConfig8192C. */
-       /* HalDetectPwrDownMode(Adapter); */
-       /*  2010/08/26 MH If Efuse does not support sective suspend then disable the function. */
-       /* HalDetectSelectiveSuspendMode(Adapter); */
-
-       /*  Set RF type for BB/RF configuration */
-       _InitRFType(Adapter);/* _ReadRFType() */
-
-       /*  Save target channel */
-       /*  <Roger_Notes> Current Channel will be updated again later. */
-       pHalData->CurrentChannel = 6;/* default set to 6 */
-
-       status = PHY_MACConfig8723A(Adapter);
-       if (status == _FAIL) {
-               DBG_8723A("PHY_MACConfig8723A fault !!\n");
-               goto exit;
-       }
-
-       /*  */
-       /* d. Initialize BB related configurations. */
-       /*  */
-       status = PHY_BBConfig8723A(Adapter);
-       if (status == _FAIL) {
-               DBG_8723A("PHY_BBConfig8723A fault !!\n");
-               goto exit;
-       }
-
-       /*  Add for tx power by rate fine tune. We need to call the function after BB config. */
-       /*  Because the tx power by rate table is inited in BB config. */
-
-       status = PHY_RF6052_Config8723A(Adapter);
-       if (status == _FAIL) {
-               DBG_8723A("PHY_RF6052_Config8723A failed!!\n");
-               goto exit;
-       }
-
-       /* reducing 80M spur */
-       rtl8723au_write32(Adapter, REG_AFE_XTAL_CTRL, 0x0381808d);
-       rtl8723au_write32(Adapter, REG_AFE_PLL_CTRL, 0xf0ffff83);
-       rtl8723au_write32(Adapter, REG_AFE_PLL_CTRL, 0xf0ffff82);
-       rtl8723au_write32(Adapter, REG_AFE_PLL_CTRL, 0xf0ffff83);
-
-       /* RFSW Control */
-       /* 0x804[14]= 0 */
-       rtl8723au_write32(Adapter, rFPGA0_TxInfo, 0x00000003);
-       /* 0x870[6:5]= b'11 */
-       rtl8723au_write32(Adapter, rFPGA0_XAB_RFInterfaceSW, 0x07000760);
-       /* 0x860[6:5]= b'00 */
-       rtl8723au_write32(Adapter, rFPGA0_XA_RFInterfaceOE, 0x66F60210);
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "%s: 0x870 = value 0x%x\n", __func__,
-                rtl8723au_read32(Adapter, 0x870));
-
-       /*  */
-       /*  Joseph Note: Keep RfRegChnlVal for later use. */
-       /*  */
-       pHalData->RfRegChnlVal[0] = PHY_QueryRFReg(Adapter, RF_PATH_A,
-                                                  RF_CHNLBW, bRFRegOffsetMask);
-       pHalData->RfRegChnlVal[1] = PHY_QueryRFReg(Adapter, RF_PATH_B,
-                                                  RF_CHNLBW, bRFRegOffsetMask);
-
-       if (!mac_on) {
-               _InitQueueReservedPage(Adapter);
-               _InitTxBufferBoundary(Adapter);
-       }
-       _InitQueuePriority(Adapter);
-       _InitPageBoundary(Adapter);
-       _InitTransferPageSize(Adapter);
-
-       /*  Get Rx PHY status in order to report RSSI and others. */
-       _InitDriverInfoSize(Adapter, DRVINFO_SZ);
-
-       _InitInterrupt(Adapter);
-       hw_var_set_macaddr(Adapter, Adapter->eeprompriv.mac_addr);
-       rtl8723a_set_media_status(Adapter, MSR_INFRA);
-       _InitWMACSetting(Adapter);
-       _InitAdaptiveCtrl(Adapter);
-       _InitEDCA(Adapter);
-       _InitRateFallback(Adapter);
-       _InitRetryFunction(Adapter);
-       rtl8723a_InitBeaconParameters(Adapter);
-
-       _BBTurnOnBlock(Adapter);
-       /* NicIFSetMacAddress(padapter, padapter->PermanentAddress); */
-
-       rtl8723a_cam_invalidate_all(Adapter);
-
-       /*  2010/12/17 MH We need to set TX power according to EFUSE content at first. */
-       PHY_SetTxPowerLevel8723A(Adapter, pHalData->CurrentChannel);
-
-       rtl8723a_InitAntenna_Selection(Adapter);
-
-       /*  HW SEQ CTRL */
-       /* set 0x0 to 0xFF by tynli. Default enable HW SEQ NUM. */
-       rtl8723au_write8(Adapter, REG_HWSEQ_CTRL, 0xFF);
-
-       /*  */
-       /*  Disable BAR, suggested by Scott */
-       /*  2010.04.09 add by hpfan */
-       /*  */
-       rtl8723au_write32(Adapter, REG_BAR_MODE_CTRL, 0x0201ffff);
-
-       if (pregistrypriv->wifi_spec)
-               rtl8723au_write16(Adapter, REG_FAST_EDCA_CTRL, 0);
-
-       /*  Move by Neo for USB SS from above setp */
-       _RfPowerSave(Adapter);
-
-       /*  2010/08/26 MH Merge from 8192CE. */
-       /* sherry masked that it has been done in _RfPowerSave */
-       /* 20110927 */
-       /* recovery for 8192cu and 9723Au 20111017 */
-       if (pwrctrlpriv->rf_pwrstate == rf_on) {
-               if (pHalData->bIQKInitialized) {
-                       rtl8723a_phy_iq_calibrate(Adapter, true);
-               } else {
-                       rtl8723a_phy_iq_calibrate(Adapter, false);
-                       pHalData->bIQKInitialized = true;
-               }
-
-               rtl8723a_odm_check_tx_power_tracking(Adapter);
-
-               rtl8723a_phy_lc_calibrate(Adapter);
-
-               rtl8723a_dual_antenna_detection(Adapter);
-       }
-
-       /* fixed USB interface interference issue */
-       rtl8723au_write8(Adapter, 0xfe40, 0xe0);
-       rtl8723au_write8(Adapter, 0xfe41, 0x8d);
-       rtl8723au_write8(Adapter, 0xfe42, 0x80);
-       rtl8723au_write32(Adapter, 0x20c, 0xfd0320);
-       /* Solve too many protocol error on USB bus */
-       if (!IS_81xxC_VENDOR_UMC_A_CUT(pHalData->VersionID)) {
-               /*  0xE6 = 0x94 */
-               rtl8723au_write8(Adapter, 0xFE40, 0xE6);
-               rtl8723au_write8(Adapter, 0xFE41, 0x94);
-               rtl8723au_write8(Adapter, 0xFE42, 0x80);
-
-               /*  0xE0 = 0x19 */
-               rtl8723au_write8(Adapter, 0xFE40, 0xE0);
-               rtl8723au_write8(Adapter, 0xFE41, 0x19);
-               rtl8723au_write8(Adapter, 0xFE42, 0x80);
-
-               /*  0xE5 = 0x91 */
-               rtl8723au_write8(Adapter, 0xFE40, 0xE5);
-               rtl8723au_write8(Adapter, 0xFE41, 0x91);
-               rtl8723au_write8(Adapter, 0xFE42, 0x80);
-
-               /*  0xE2 = 0x81 */
-               rtl8723au_write8(Adapter, 0xFE40, 0xE2);
-               rtl8723au_write8(Adapter, 0xFE41, 0x81);
-               rtl8723au_write8(Adapter, 0xFE42, 0x80);
-
-       }
-
-/*     _InitPABias(Adapter); */
-
-       /*  Init BT hw config. */
-       rtl8723a_BT_init_hwconfig(Adapter);
-
-       rtl8723a_InitHalDm(Adapter);
-
-       val8 = DIV_ROUND_UP(WiFiNavUpperUs, HAL_8723A_NAV_UPPER_UNIT);
-       rtl8723au_write8(Adapter, REG_NAV_UPPER, val8);
-
-       /*  2011/03/09 MH debug only, UMC-B cut pass 2500 S5 test, but we need to fin root cause. */
-       if (((rtl8723au_read32(Adapter, rFPGA0_RFMOD) & 0xFF000000) !=
-            0x83000000)) {
-               PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT(24), 1);
-               RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
-                        "%s: IQK fail recover\n", __func__);
-       }
-
-       /* ack for xmit mgmt frames. */
-       rtl8723au_write32(Adapter, REG_FWHW_TXQ_CTRL,
-                         rtl8723au_read32(Adapter, REG_FWHW_TXQ_CTRL)|BIT(12));
-
-exit:
-       if (status == _SUCCESS) {
-               Adapter->hw_init_completed = true;
-
-               if (Adapter->registrypriv.notch_filter == 1)
-                       rtl8723a_notch_filter(Adapter, 1);
-       }
-
-       DBG_8723A("%s in %dms\n", __func__,
-                 jiffies_to_msecs(jiffies - init_start_time));
-       return status;
-}
-
-static void phy_SsPwrSwitch92CU(struct rtw_adapter *Adapter,
-                               enum rt_rf_power_state eRFPowerState)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 sps0;
-
-       sps0 = rtl8723au_read8(Adapter, REG_SPS0_CTRL);
-
-       switch (eRFPowerState) {
-       case rf_on:
-               /*  1. Enable MAC Clock. Can not be enabled now. */
-               /* WriteXBYTE(REG_SYS_CLKR+1,
-                  ReadXBYTE(REG_SYS_CLKR+1) | BIT(3)); */
-
-               /*  2. Force PWM, Enable SPS18_LDO_Marco_Block */
-               rtl8723au_write8(Adapter, REG_SPS0_CTRL,
-                                sps0 | BIT(0) | BIT(3));
-
-               /*  3. restore BB, AFE control register. */
-               /* RF */
-               if (pHalData->rf_type ==  RF_2T2R)
-                       PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter,
-                                    0x380038, 1);
-               else
-                       PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter,
-                                    0x38, 1);
-               PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, 0xf0, 1);
-               PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT(1), 0);
-
-               /* AFE */
-               if (pHalData->rf_type ==  RF_2T2R)
-                       rtl8723au_write32(Adapter, rRx_Wait_CCA, 0x63DB25A0);
-               else if (pHalData->rf_type ==  RF_1T1R)
-                       rtl8723au_write32(Adapter, rRx_Wait_CCA, 0x631B25A0);
-
-               /*  4. issue 3-wire command that RF set to Rx idle
-                   mode. This is used to re-write the RX idle mode. */
-               /*  We can only prvide a usual value instead and then
-                   HW will modify the value by itself. */
-               PHY_SetRFReg(Adapter, RF_PATH_A, RF_AC,
-                            bRFRegOffsetMask, 0x32D95);
-               if (pHalData->rf_type ==  RF_2T2R) {
-                       PHY_SetRFReg(Adapter, RF_PATH_B, RF_AC,
-                                    bRFRegOffsetMask, 0x32D95);
-               }
-               break;
-       case rf_sleep:
-       case rf_off:
-               if (IS_81xxC_VENDOR_UMC_B_CUT(pHalData->VersionID))
-                       sps0 &= ~BIT(0);
-               else
-                       sps0 &= ~(BIT(0) | BIT(3));
-
-               RT_TRACE(_module_hal_init_c_, _drv_err_, "SS LVL1\n");
-               /*  Disable RF and BB only for SelectSuspend. */
-
-               /*  1. Set BB/RF to shutdown. */
-               /*      (1) Reg878[5:3]= 0      RF rx_code for
-                                               preamble power saving */
-               /*      (2)Reg878[21:19]= 0     Turn off RF-B */
-               /*      (3) RegC04[7:4]= 0      Turn off all paths
-                                               for packet detection */
-               /*      (4) Reg800[1] = 1       enable preamble power saving */
-               Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF0] =
-                       rtl8723au_read32(Adapter, rFPGA0_XAB_RFParameter);
-               Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF1] =
-                       rtl8723au_read32(Adapter, rOFDM0_TRxPathEnable);
-               Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_RF2] =
-                       rtl8723au_read32(Adapter, rFPGA0_RFMOD);
-               if (pHalData->rf_type ==  RF_2T2R)
-                       PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter,
-                                    0x380038, 0);
-               else if (pHalData->rf_type ==  RF_1T1R)
-                       PHY_SetBBReg(Adapter, rFPGA0_XAB_RFParameter, 0x38, 0);
-               PHY_SetBBReg(Adapter, rOFDM0_TRxPathEnable, 0xf0, 0);
-               PHY_SetBBReg(Adapter, rFPGA0_RFMOD, BIT(1), 1);
-
-               /*  2 .AFE control register to power down. bit[30:22] */
-               Adapter->pwrctrlpriv.PS_BBRegBackup[PSBBREG_AFE0] =
-                       rtl8723au_read32(Adapter, rRx_Wait_CCA);
-               if (pHalData->rf_type ==  RF_2T2R)
-                       rtl8723au_write32(Adapter, rRx_Wait_CCA, 0x00DB25A0);
-               else if (pHalData->rf_type ==  RF_1T1R)
-                       rtl8723au_write32(Adapter, rRx_Wait_CCA, 0x001B25A0);
-
-               /*  3. issue 3-wire command that RF set to power down.*/
-               PHY_SetRFReg(Adapter, RF_PATH_A, RF_AC, bRFRegOffsetMask, 0);
-               if (pHalData->rf_type ==  RF_2T2R)
-                       PHY_SetRFReg(Adapter, RF_PATH_B, RF_AC,
-                                    bRFRegOffsetMask, 0);
-
-               /*  4. Force PFM , disable SPS18_LDO_Marco_Block */
-               rtl8723au_write8(Adapter, REG_SPS0_CTRL, sps0);
-               break;
-       default:
-               break;
-       }
-}
-
-static void CardDisableRTL8723U(struct rtw_adapter *Adapter)
-{
-       u8              u1bTmp;
-
-       DBG_8723A("CardDisableRTL8723U\n");
-       /*  USB-MF Card Disable Flow */
-       /*  1. Run LPS WL RFOFF flow */
-       HalPwrSeqCmdParsing23a(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
-                           PWR_INTF_USB_MSK, rtl8723AU_enter_lps_flow);
-
-       /*  2. 0x1F[7:0] = 0            turn off RF */
-       rtl8723au_write8(Adapter, REG_RF_CTRL, 0x00);
-
-       /*      ==== Reset digital sequence   ====== */
-       if ((rtl8723au_read8(Adapter, REG_MCUFWDL) & BIT(7)) &&
-           Adapter->bFWReady) /* 8051 RAM code */
-               rtl8723a_FirmwareSelfReset(Adapter);
-
-       /*  Reset MCU. Suggested by Filen. 2011.01.26. by tynli. */
-       u1bTmp = rtl8723au_read8(Adapter, REG_SYS_FUNC_EN+1);
-       rtl8723au_write8(Adapter, REG_SYS_FUNC_EN+1, u1bTmp & ~BIT(2));
-
-       /*  g.  MCUFWDL 0x80[1:0]= 0            reset MCU ready status */
-       rtl8723au_write8(Adapter, REG_MCUFWDL, 0x00);
-
-       /*      ==== Reset digital sequence end ====== */
-       /*  Card disable power action flow */
-       HalPwrSeqCmdParsing23a(Adapter, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK,
-                              PWR_INTF_USB_MSK,
-                              rtl8723AU_card_disable_flow);
-
-       /*  Reset MCU IO Wrapper, added by Roger, 2011.08.30. */
-       u1bTmp = rtl8723au_read8(Adapter, REG_RSV_CTRL + 1);
-       rtl8723au_write8(Adapter, REG_RSV_CTRL+1, u1bTmp & ~BIT(0));
-       u1bTmp = rtl8723au_read8(Adapter, REG_RSV_CTRL + 1);
-       rtl8723au_write8(Adapter, REG_RSV_CTRL+1, u1bTmp | BIT(0));
-
-       /*  7. RSV_CTRL 0x1C[7:0] = 0x0E  lock ISO/CLK/Power control register */
-       rtl8723au_write8(Adapter, REG_RSV_CTRL, 0x0e);
-}
-
-int rtl8723au_hal_deinit(struct rtw_adapter *padapter)
-{
-       DBG_8723A("==> %s\n", __func__);
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-       BT_HaltProcess(padapter);
-#endif
-       /*  2011/02/18 To Fix RU LNA  power leakage problem. We need to
-           execute below below in Adapter init and halt sequence.
-           According to EEchou's opinion, we can enable the ability for all */
-       /*  IC. Accord to johnny's opinion, only RU need the support. */
-       CardDisableRTL8723U(padapter);
-
-       padapter->hw_init_completed = false;
-
-       return _SUCCESS;
-}
-
-int rtl8723au_inirp_init(struct rtw_adapter *Adapter)
-{
-       u8 i;
-       struct recv_buf *precvbuf;
-       int status;
-       struct recv_priv *precvpriv = &Adapter->recvpriv;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-
-       status = _SUCCESS;
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_, "===> usb_inirp_init\n");
-
-       /* issue Rx irp to receive data */
-       precvbuf = (struct recv_buf *)precvpriv->precv_buf;
-       for (i = 0; i < NR_RECVBUFF; i++) {
-               if (rtl8723au_read_port(Adapter, 0, precvbuf) == _FAIL) {
-                       RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
-                                "usb_rx_init: usb_read_port error\n");
-                       status = _FAIL;
-                       goto exit;
-               }
-               precvbuf++;
-       }
-       if (rtl8723au_read_interrupt(Adapter) == _FAIL) {
-               RT_TRACE(_module_hci_hal_init_c_, _drv_err_,
-                        "%s: usb_read_interrupt error\n", __func__);
-               status = _FAIL;
-       }
-       pHalData->IntrMask[0] = rtl8723au_read32(Adapter, REG_USB_HIMR);
-       MSG_8723A("pHalData->IntrMask = 0x%04x\n", pHalData->IntrMask[0]);
-       pHalData->IntrMask[0] |= UHIMR_C2HCMD|UHIMR_CPWM;
-       rtl8723au_write32(Adapter, REG_USB_HIMR, pHalData->IntrMask[0]);
-exit:
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "<=== usb_inirp_init\n");
-       return status;
-}
-
-int rtl8723au_inirp_deinit(struct rtw_adapter *Adapter)
-{
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(Adapter);
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "===> usb_rx_deinit\n");
-       rtl8723au_read_port_cancel(Adapter);
-       pHalData->IntrMask[0] = rtl8723au_read32(Adapter, REG_USB_HIMR);
-       MSG_8723A("%s pHalData->IntrMask = 0x%04x\n", __func__,
-                 pHalData->IntrMask[0]);
-       pHalData->IntrMask[0] = 0x0;
-       rtl8723au_write32(Adapter, REG_USB_HIMR, pHalData->IntrMask[0]);
-       RT_TRACE(_module_hci_hal_init_c_, _drv_info_,
-                "<=== usb_rx_deinit\n");
-       return _SUCCESS;
-}
-
-static void _ReadBoardType(struct rtw_adapter *Adapter, u8 *PROMContent,
-                          bool AutoloadFail)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       u8 boardType = BOARD_USB_DONGLE;
-
-       if (AutoloadFail) {
-               if (IS_8723_SERIES(pHalData->VersionID))
-                       pHalData->rf_type = RF_1T1R;
-               else
-                       pHalData->rf_type = RF_2T2R;
-               pHalData->BoardType = boardType;
-               return;
-       }
-
-       boardType = PROMContent[EEPROM_NORMAL_BoardType];
-       boardType &= BOARD_TYPE_NORMAL_MASK;/* bit[7:5] */
-       boardType >>= 5;
-
-       pHalData->BoardType = boardType;
-       MSG_8723A("_ReadBoardType(%x)\n", pHalData->BoardType);
-
-       if (boardType == BOARD_USB_High_PA)
-               pHalData->ExternalPA = 1;
-}
-
-static void Hal_EfuseParseMACAddr_8723AU(struct rtw_adapter *padapter,
-                                        u8 *hwinfo, bool AutoLoadFail)
-{
-       u16 i;
-       u8 sMacAddr[ETH_ALEN] = {0x00, 0xE0, 0x4C, 0x87, 0x23, 0x00};
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-
-       if (AutoLoadFail) {
-               for (i = 0; i < 6; i++)
-                       pEEPROM->mac_addr[i] = sMacAddr[i];
-       } else {
-               /* Read Permanent MAC address */
-               memcpy(pEEPROM->mac_addr, &hwinfo[EEPROM_MAC_ADDR_8723AU],
-                      ETH_ALEN);
-       }
-
-       RT_TRACE(_module_hci_hal_init_c_, _drv_notice_,
-                "Hal_EfuseParseMACAddr_8723AU: Permanent Address =%pM\n",
-                pEEPROM->mac_addr);
-}
-
-static void readAdapterInfo(struct rtw_adapter *padapter)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(padapter);
-       /* struct hal_data_8723a * pHalData = GET_HAL_DATA(padapter); */
-       u8 hwinfo[HWSET_MAX_SIZE];
-
-       Hal_InitPGData(padapter, hwinfo);
-       Hal_EfuseParseIDCode(padapter, hwinfo);
-       Hal_EfuseParseEEPROMVer(padapter, hwinfo,
-                               pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseMACAddr_8723AU(padapter, hwinfo,
-                                    pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParsetxpowerinfo_8723A(padapter, hwinfo,
-                                       pEEPROM->bautoload_fail_flag);
-       _ReadBoardType(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseBTCoexistInfo_8723A(padapter, hwinfo,
-                                         pEEPROM->bautoload_fail_flag);
-
-       rtl8723a_EfuseParseChnlPlan(padapter, hwinfo,
-                                   pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseThermalMeter_8723A(padapter, hwinfo,
-                                        pEEPROM->bautoload_fail_flag);
-/*     _ReadRFSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag); */
-/*     _ReadPSSetting(Adapter, PROMContent, pEEPROM->bautoload_fail_flag); */
-       Hal_EfuseParseAntennaDiversity(padapter, hwinfo,
-                                      pEEPROM->bautoload_fail_flag);
-
-       Hal_EfuseParseEEPROMVer(padapter, hwinfo, pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseCustomerID(padapter, hwinfo,
-                                pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseRateIndicationOption(padapter, hwinfo,
-                                          pEEPROM->bautoload_fail_flag);
-       Hal_EfuseParseXtal_8723A(padapter, hwinfo,
-                                pEEPROM->bautoload_fail_flag);
-
-       /* hal_CustomizedBehavior_8723U(Adapter); */
-
-/*     Adapter->bDongle = (PROMContent[EEPROM_EASY_REPLACEMENT] == 1)? 0: 1; */
-       DBG_8723A("%s(): REPLACEMENT = %x\n", __func__, padapter->bDongle);
-}
-
-static void _ReadPROMContent(struct rtw_adapter *Adapter)
-{
-       struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-       u8 eeValue;
-
-       eeValue = rtl8723au_read8(Adapter, REG_9346CR);
-       /*  To check system boot selection. */
-       pEEPROM->EepromOrEfuse = (eeValue & BOOT_FROM_EEPROM) ? true : false;
-       pEEPROM->bautoload_fail_flag = (eeValue & EEPROM_EN) ? false : true;
-
-       DBG_8723A("Boot from %s, Autoload %s !\n",
-                 (pEEPROM->EepromOrEfuse ? "EEPROM" : "EFUSE"),
-                 (pEEPROM->bautoload_fail_flag ? "Fail" : "OK"));
-
-       readAdapterInfo(Adapter);
-}
-
-/*  */
-/*     Description: */
-/*             We should set Efuse cell selection to WiFi cell in default. */
-/*  */
-/*     Assumption: */
-/*             PASSIVE_LEVEL */
-/*  */
-/*     Added by Roger, 2010.11.23. */
-/*  */
-static void hal_EfuseCellSel(struct rtw_adapter *Adapter)
-{
-       u32 value32;
-
-       value32 = rtl8723au_read32(Adapter, EFUSE_TEST);
-       value32 = (value32 & ~EFUSE_SEL_MASK) | EFUSE_SEL(EFUSE_WIFI_SEL_0);
-       rtl8723au_write32(Adapter, EFUSE_TEST, value32);
-}
-
-void rtl8723a_read_adapter_info(struct rtw_adapter *Adapter)
-{
-       unsigned long start = jiffies;
-
-       /*  Read EEPROM size before call any EEPROM function */
-       Adapter->EepromAddressSize = GetEEPROMSize8723A(Adapter);
-
-       MSG_8723A("====> _ReadAdapterInfo8723AU\n");
-
-       hal_EfuseCellSel(Adapter);
-
-       _ReadPROMContent(Adapter);
-
-       MSG_8723A("<==== _ReadAdapterInfo8723AU in %d ms\n",
-                 jiffies_to_msecs(jiffies - start));
-}
-
-/*  */
-/*     Description: */
-/*             Query setting of specified variable. */
-/*  */
-int GetHalDefVar8192CUsb(struct rtw_adapter *Adapter,
-                        enum hal_def_variable eVariable, void *pValue)
-{
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(Adapter);
-       int bResult = _SUCCESS;
-
-       switch (eVariable) {
-       case HAL_DEF_UNDERCORATEDSMOOTHEDPWDB:
-               *((int *)pValue) = pHalData->dmpriv.UndecoratedSmoothedPWDB;
-               break;
-       case HAL_DEF_IS_SUPPORT_ANT_DIV:
-               break;
-       case HAL_DEF_CURRENT_ANTENNA:
-               break;
-       case HAL_DEF_DRVINFO_SZ:
-               *((u32 *)pValue) = DRVINFO_SZ;
-               break;
-       case HAL_DEF_MAX_RECVBUF_SZ:
-               *((u32 *)pValue) = MAX_RECVBUF_SZ;
-               break;
-       case HAL_DEF_RX_PACKET_OFFSET:
-               *((u32 *)pValue) = RXDESC_SIZE + DRVINFO_SZ;
-               break;
-       case HAL_DEF_DBG_DUMP_RXPKT:
-               *((u8 *)pValue) = pHalData->bDumpRxPkt;
-               break;
-       case HAL_DEF_DBG_DM_FUNC:
-               *((u32 *)pValue) = pHalData->odmpriv.SupportAbility;
-               break;
-       case HW_VAR_MAX_RX_AMPDU_FACTOR:
-               *((u32 *)pValue) = IEEE80211_HT_MAX_AMPDU_64K;
-               break;
-       case HW_DEF_ODM_DBG_FLAG:
-       {
-               struct dm_odm_t *pDM_Odm = &pHalData->odmpriv;
-               printk("pDM_Odm->DebugComponents = 0x%llx\n",
-                      pDM_Odm->DebugComponents);
-       }
-               break;
-       default:
-               bResult = _FAIL;
-               break;
-       }
-
-       return bResult;
-}
-
-void rtl8723a_update_ramask(struct rtw_adapter *padapter,
-                           u32 mac_id, u8 rssi_level)
-{
-       struct sta_info *psta;
-       struct FW_Sta_Info *fw_sta;
-       struct hal_data_8723a *pHalData = GET_HAL_DATA(padapter);
-       struct dm_priv *pdmpriv = &pHalData->dmpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
-       u8 init_rate, networkType, raid, arg;
-       u32 mask, rate_bitmap;
-       u8 shortGIrate = false;
-       int supportRateNum;
-
-       if (mac_id >= NUM_STA) /* CAM_SIZE */
-               return;
-
-       psta = pmlmeinfo->FW_sta_info[mac_id].psta;
-       if (psta == NULL)
-               return;
-
-       switch (mac_id) {
-       case 0:/*  for infra mode */
-               supportRateNum =
-                       rtw_get_rateset_len23a(cur_network->SupportedRates);
-               networkType = judge_network_type23a(padapter,
-                                                cur_network->SupportedRates,
-                                                supportRateNum) & 0xf;
-               /* pmlmeext->cur_wireless_mode = networkType; */
-               raid = networktype_to_raid23a(networkType);
-
-               mask = update_supported_rate23a(cur_network->SupportedRates,
-                                            supportRateNum);
-               mask |= (pmlmeinfo->HT_enable) ?
-                       update_MSC_rate23a(&pmlmeinfo->ht_cap) : 0;
-
-               if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
-                       shortGIrate = true;
-               break;
-
-       case 1:/* for broadcast/multicast */
-               fw_sta = &pmlmeinfo->FW_sta_info[mac_id]; 
-               supportRateNum = rtw_get_rateset_len23a(fw_sta->SupportedRates);
-               if (pmlmeext->cur_wireless_mode & WIRELESS_11B)
-                       networkType = WIRELESS_11B;
-               else
-                       networkType = WIRELESS_11G;
-               raid = networktype_to_raid23a(networkType);
-
-               mask = update_basic_rate23a(cur_network->SupportedRates,
-                                        supportRateNum);
-               break;
-
-       default: /* for each sta in IBSS */
-               fw_sta = &pmlmeinfo->FW_sta_info[mac_id]; 
-               supportRateNum = rtw_get_rateset_len23a(fw_sta->SupportedRates);
-               networkType = judge_network_type23a(padapter,
-                                                   fw_sta->SupportedRates,
-                                                   supportRateNum) & 0xf;
-               /* pmlmeext->cur_wireless_mode = networkType; */
-               raid = networktype_to_raid23a(networkType);
-
-               mask = update_supported_rate23a(cur_network->SupportedRates,
-                                               supportRateNum);
-
-               /* todo: support HT in IBSS */
-               break;
-       }
-
-       /* mask &= 0x0fffffff; */
-       rate_bitmap = ODM_Get_Rate_Bitmap23a(pHalData, mac_id, mask,
-                                            rssi_level);
-       DBG_8723A("%s => mac_id:%d, networkType:0x%02x, "
-                 "mask:0x%08x\n\t ==> rssi_level:%d, rate_bitmap:0x%08x\n",
-                 __func__, mac_id, networkType, mask, rssi_level, rate_bitmap);
-
-       mask &= rate_bitmap;
-       mask |= ((raid << 28) & 0xf0000000);
-
-       init_rate = get_highest_rate_idx23a(mask) & 0x3f;
-
-       arg = mac_id & 0x1f;/* MACID */
-       arg |= BIT(7);
-
-       if (shortGIrate == true)
-               arg |= BIT(5);
-
-       DBG_8723A("update raid entry, mask = 0x%x, arg = 0x%x\n", mask, arg);
-
-       rtl8723a_set_raid_cmd(padapter, mask, arg);
-
-       /* set ra_id */
-       psta->raid = raid;
-       psta->init_rate = init_rate;
-
-       /* set correct initial date rate for each mac_id */
-       pdmpriv->INIDATA_RATE[mac_id] = init_rate;
-}
diff --git a/drivers/staging/rtl8723au/hal/usb_ops_linux.c b/drivers/staging/rtl8723au/hal/usb_ops_linux.c
deleted file mode 100644 (file)
index 5c81ff4..0000000
+++ /dev/null
@@ -1,690 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _HCI_OPS_OS_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <osdep_intf.h>
-#include <usb_ops.h>
-#include <recv_osdep.h>
-#include <rtl8723a_hal.h>
-#include <rtl8723a_recv.h>
-
-u8 rtl8723au_read8(struct rtw_adapter *padapter, u16 addr)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int len;
-       u8 data;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ,
-                             addr, 0, &pdvobjpriv->usb_buf.val8, sizeof(data),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       data = pdvobjpriv->usb_buf.val8;
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-
-       return data;
-}
-
-u16 rtl8723au_read16(struct rtw_adapter *padapter, u16 addr)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int len;
-       u16 data;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ,
-                             addr, 0, &pdvobjpriv->usb_buf.val16, sizeof(data),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       data = le16_to_cpu(pdvobjpriv->usb_buf.val16);
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-
-       return data;
-}
-
-u32 rtl8723au_read32(struct rtw_adapter *padapter, u16 addr)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int len;
-       u32 data;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       len = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ, REALTEK_USB_VENQT_READ,
-                             addr, 0, &pdvobjpriv->usb_buf.val32, sizeof(data),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       data = le32_to_cpu(pdvobjpriv->usb_buf.val32);
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-
-       return data;
-}
-
-int rtl8723au_write8(struct rtw_adapter *padapter, u16 addr, u8 val)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int ret;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       pdvobjpriv->usb_buf.val8 = val;
-
-       ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ,
-                             REALTEK_USB_VENQT_WRITE,
-                             addr, 0, &pdvobjpriv->usb_buf.val8, sizeof(val),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       if (ret != sizeof(val))
-               ret = _FAIL;
-       else
-               ret = _SUCCESS;
-
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-       return ret;
-}
-
-int rtl8723au_write16(struct rtw_adapter *padapter, u16 addr, u16 val)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int ret;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       pdvobjpriv->usb_buf.val16 = cpu_to_le16(val);
-
-       ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ,
-                             REALTEK_USB_VENQT_WRITE,
-                             addr, 0, &pdvobjpriv->usb_buf.val16, sizeof(val),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       if (ret != sizeof(val))
-               ret = _FAIL;
-       else
-               ret = _SUCCESS;
-
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-       return ret;
-}
-
-int rtl8723au_write32(struct rtw_adapter *padapter, u16 addr, u32 val)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int ret;
-
-       mutex_lock(&pdvobjpriv->usb_vendor_req_mutex);
-       pdvobjpriv->usb_buf.val32 = cpu_to_le32(val);
-
-       ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ,
-                             REALTEK_USB_VENQT_WRITE,
-                             addr, 0, &pdvobjpriv->usb_buf.val32, sizeof(val),
-                             RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       if (ret != sizeof(val))
-               ret = _FAIL;
-       else
-               ret = _SUCCESS;
-
-       mutex_unlock(&pdvobjpriv->usb_vendor_req_mutex);
-       return ret;
-}
-
-int rtl8723au_writeN(struct rtw_adapter *padapter, u16 addr, u16 len, u8 *buf)
-{
-       struct dvobj_priv *pdvobjpriv = adapter_to_dvobj(padapter);
-       struct usb_device *udev = pdvobjpriv->pusbdev;
-       int ret;
-
-       ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
-                             REALTEK_USB_VENQT_CMD_REQ,
-                             REALTEK_USB_VENQT_WRITE,
-                             addr, 0, buf, len, RTW_USB_CONTROL_MSG_TIMEOUT);
-
-       if (ret != len)
-               return _FAIL;
-       return _SUCCESS;
-}
-
-/*
- * Description:
- *     Recognize the interrupt content by reading the interrupt
- *     register or content and masking interrupt mask (IMR)
- *     if it is our NIC's interrupt. After recognizing, we may clear
- *     the all interrupts (ISR).
- * Arguments:
- *     [in] Adapter -
- *             The adapter context.
- *     [in] pContent -
- *             Under PCI interface, this field is ignord.
- *             Under USB interface, the content is the interrupt
- *             content pointer.
- *             Under SDIO interface, this is the interrupt type which
- *             is Local interrupt or system interrupt.
- *     [in] ContentLen -
- *             The length in byte of pContent.
- * Return:
- *     If any interrupt matches the mask (IMR), return true, and
- *     return false otherwise.
- */
-static bool
-InterruptRecognized8723AU(struct rtw_adapter *Adapter, void *pContent,
-                         u32 ContentLen)
-{
-       struct hal_data_8723a   *pHalData = GET_HAL_DATA(Adapter);
-       u8 *buffer = (u8 *)pContent;
-       struct reportpwrstate_parm report;
-
-       memcpy(&pHalData->IntArray[0], &buffer[USB_INTR_CONTENT_HISR_OFFSET],
-              4);
-       pHalData->IntArray[0] &= pHalData->IntrMask[0];
-
-       /* For HISR extension. Added by tynli. 2009.10.07. */
-       memcpy(&pHalData->IntArray[1],
-              &buffer[USB_INTR_CONTENT_HISRE_OFFSET], 4);
-       pHalData->IntArray[1] &= pHalData->IntrMask[1];
-
-       /* We sholud remove this function later because DDK suggest
-        * not to executing too many operations in MPISR  */
-
-       memcpy(&report.state, &buffer[USB_INTR_CPWM_OFFSET], 1);
-
-       return (pHalData->IntArray[0] & pHalData->IntrMask[0]) != 0 ||
-               (pHalData->IntArray[1] & pHalData->IntrMask[1]) != 0;
-}
-
-static void usb_read_interrupt_complete(struct urb *purb)
-{
-       int err;
-       struct rtw_adapter *padapter = (struct rtw_adapter *)purb->context;
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped ||
-           padapter->bReadPortCancel) {
-               DBG_8723A("%s() RX Warning! bDriverStopped(%d) OR "
-                         "bSurpriseRemoved(%d) bReadPortCancel(%d)\n",
-                         __func__, padapter->bDriverStopped,
-                         padapter->bSurpriseRemoved,
-                         padapter->bReadPortCancel);
-               return;
-       }
-
-       if (purb->status == 0) {
-               struct c2h_evt_hdr *c2h_evt;
-
-               c2h_evt = (struct c2h_evt_hdr *)purb->transfer_buffer;
-
-               if (purb->actual_length > USB_INTR_CONTENT_LENGTH) {
-                       DBG_8723A("usb_read_interrupt_complete: purb->actual_"
-                                 "length > USB_INTR_CONTENT_LENGTH\n");
-                       goto urb_submit;
-               }
-
-               InterruptRecognized8723AU(padapter, purb->transfer_buffer,
-                                         purb->actual_length);
-
-               if (c2h_evt_exist(c2h_evt)) {
-                       if (c2h_id_filter_ccx_8723a(c2h_evt->id)) {
-                               /* Handle CCX report here */
-                               handle_txrpt_ccx_8723a(padapter, (void *)
-                                                      c2h_evt->payload);
-                               schedule_work(&padapter->evtpriv.irq_wk);
-                       } else {
-                               struct evt_work *c2w;
-                               int res;
-
-                               c2w = kmalloc(sizeof(struct evt_work),
-                                               GFP_ATOMIC);
-
-                               if (!c2w)
-                                       goto urb_submit;
-
-                               c2w->adapter = padapter;
-                               INIT_WORK(&c2w->work, rtw_evt_work);
-                               memcpy(c2w->u.buf, purb->transfer_buffer, 16);
-
-                               res = queue_work(padapter->evtpriv.wq,
-                                                &c2w->work);
-
-                               if (!res) {
-                                       printk(KERN_ERR "%s: Call to "
-                                              "queue_work() failed\n",
-                                              __func__);
-                                       kfree(c2w);
-                                       goto urb_submit;
-                               }
-                       }
-               }
-
-urb_submit:
-               err = usb_submit_urb(purb, GFP_ATOMIC);
-               if (err && (err != -EPERM)) {
-                       DBG_8723A("cannot submit interrupt in-token(err = "
-                                 "0x%08x), urb_status = %d\n",
-                                 err, purb->status);
-               }
-       } else {
-               DBG_8723A("###=> usb_read_interrupt_complete => urb "
-                         "status(%d)\n", purb->status);
-
-               switch (purb->status) {
-               case -EINVAL:
-               case -EPIPE:
-               case -ENODEV:
-               case -ESHUTDOWN:
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_read_port_complete:bSurpriseRemoved =true\n");
-                       /* Fall Through here */
-               case -ENOENT:
-                       padapter->bDriverStopped = true;
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_read_port_complete:bDriverStopped =true\n");
-                       break;
-               case -EPROTO:
-                       break;
-               case -EINPROGRESS:
-                       DBG_8723A("ERROR: URB IS IN PROGRESS!\n");
-                       break;
-               default:
-                       break;
-               }
-       }
-}
-
-int rtl8723au_read_interrupt(struct rtw_adapter *adapter)
-{
-       int err;
-       unsigned int pipe;
-       int ret = _SUCCESS;
-       struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
-       struct recv_priv *precvpriv = &adapter->recvpriv;
-       struct usb_device *pusbd = pdvobj->pusbdev;
-
-       /* translate DMA FIFO addr to pipehandle */
-       pipe = usb_rcvintpipe(pusbd, pdvobj->RtInPipe[1]);
-
-       usb_fill_int_urb(precvpriv->int_in_urb, pusbd, pipe,
-                        precvpriv->int_in_buf, USB_INTR_CONTENT_LENGTH,
-                        usb_read_interrupt_complete, adapter, 1);
-
-       err = usb_submit_urb(precvpriv->int_in_urb, GFP_ATOMIC);
-       if (err && (err != -EPERM)) {
-               DBG_8723A("cannot submit interrupt in-token(err = 0x%08x),"
-                         "urb_status = %d\n", err,
-                         precvpriv->int_in_urb->status);
-               ret = _FAIL;
-       }
-
-       return ret;
-}
-
-static int recvbuf2recvframe(struct rtw_adapter *padapter, struct sk_buff *pskb)
-{
-       u8      *pbuf;
-       u8      shift_sz = 0;
-       u16     pkt_cnt;
-       u32     pkt_offset, skb_len, alloc_sz;
-       int     transfer_len;
-       struct recv_stat *prxstat;
-       struct phy_stat *pphy_info;
-       struct sk_buff *pkt_copy;
-       struct recv_frame *precvframe;
-       struct rx_pkt_attrib *pattrib;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-       struct rtw_queue *pfree_recv_queue = &precvpriv->free_recv_queue;
-
-       transfer_len = (int)pskb->len;
-       pbuf = pskb->data;
-
-       prxstat = (struct recv_stat *)pbuf;
-       pkt_cnt = (le32_to_cpu(prxstat->rxdw2) >> 16) & 0xff;
-
-       do {
-               RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                        "recvbuf2recvframe: rxdesc = offsset 0:0x%08x, 4:0x%08x, 8:0x%08x, C:0x%08x\n",
-                        prxstat->rxdw0, prxstat->rxdw1,
-                        prxstat->rxdw2, prxstat->rxdw4);
-
-               prxstat = (struct recv_stat *)pbuf;
-
-               precvframe = rtw_alloc_recvframe23a(pfree_recv_queue);
-               if (!precvframe) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "recvbuf2recvframe: precvframe == NULL\n");
-                       DBG_8723A("%s()-%d: rtw_alloc_recvframe23a() failed! RX "
-                                 "Drop!\n", __func__, __LINE__);
-                       goto _exit_recvbuf2recvframe;
-               }
-
-               INIT_LIST_HEAD(&precvframe->list);
-
-               update_recvframe_attrib(precvframe, prxstat);
-
-               pattrib = &precvframe->attrib;
-
-               if (pattrib->crc_err) {
-                       DBG_8723A("%s()-%d: RX Warning! rx CRC ERROR !!\n",
-                                 __func__, __LINE__);
-                       rtw_free_recvframe23a(precvframe);
-                       goto _exit_recvbuf2recvframe;
-               }
-
-               pkt_offset = RXDESC_SIZE + pattrib->drvinfo_sz +
-                       pattrib->shift_sz + pattrib->pkt_len;
-
-               if (pattrib->pkt_len <= 0 || pkt_offset > transfer_len) {
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-                                "recvbuf2recvframe: pkt_len<= 0\n");
-                       DBG_8723A("%s()-%d: RX Warning!\n",
-                                 __func__, __LINE__);
-                       rtw_free_recvframe23a(precvframe);
-                       goto _exit_recvbuf2recvframe;
-               }
-
-               /*      Modified by Albert 20101213 */
-               /*      For 8 bytes IP header alignment. */
-               /*      Qos data, wireless lan header length is 26 */
-               if (pattrib->qos)
-                       shift_sz = 6;
-               else
-                       shift_sz = 0;
-
-               skb_len = pattrib->pkt_len;
-
-               /* for first fragment packet, driver need allocate
-                * 1536+drvinfo_sz+RXDESC_SIZE to defrag packet.
-                * modify alloc_sz for recvive crc error packet
-                * by thomas 2011-06-02 */
-               if (pattrib->mfrag == 1 && pattrib->frag_num == 0) {
-                       /* alloc_sz = 1664;     1664 is 128 alignment. */
-                       if (skb_len <= 1650)
-                               alloc_sz = 1664;
-                       else
-                               alloc_sz = skb_len + 14;
-               } else {
-                       alloc_sz = skb_len;
-               /*  6 is for IP header 8 bytes alignment in QoS packet case. */
-               /*  8 is for skb->data 4 bytes alignment. */
-                       alloc_sz += 14;
-               }
-
-               pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-               if (pkt_copy) {
-                       pkt_copy->dev = padapter->pnetdev;
-                       precvframe->pkt = pkt_copy;
-                       /* force pkt_copy->data at 8-byte alignment address */
-                       skb_reserve(pkt_copy, 8 -
-                                   ((unsigned long)(pkt_copy->data) & 7));
-                       /*force ip_hdr at 8-byte alignment address
-                         according to shift_sz. */
-                       skb_reserve(pkt_copy, shift_sz);
-                       memcpy(pkt_copy->data, pbuf + pattrib->shift_sz +
-                              pattrib->drvinfo_sz + RXDESC_SIZE, skb_len);
-                       skb_put(pkt_copy, skb_len);
-               } else {
-                       if (pattrib->mfrag == 1 && pattrib->frag_num == 0) {
-                               DBG_8723A("recvbuf2recvframe: alloc_skb fail, "
-                                         "drop frag frame \n");
-                               rtw_free_recvframe23a(precvframe);
-                               goto _exit_recvbuf2recvframe;
-                       }
-
-                       precvframe->pkt = skb_clone(pskb, GFP_ATOMIC);
-                       if (!precvframe->pkt) {
-                               DBG_8723A("recvbuf2recvframe: skb_clone "
-                                         "fail\n");
-                               rtw_free_recvframe23a(precvframe);
-                               goto _exit_recvbuf2recvframe;
-                       }
-               }
-
-               if (pattrib->physt) {
-                       pphy_info = (struct phy_stat *)(pbuf + RXDESC_OFFSET);
-                       update_recvframe_phyinfo(precvframe, pphy_info);
-               }
-
-               if (rtw_recv_entry23a(precvframe) != _SUCCESS)
-                       RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-                                "recvbuf2recvframe: rtw_recv_entry23a(precvframe) != _SUCCESS\n");
-
-               pkt_cnt--;
-               transfer_len -= pkt_offset;
-               pbuf += pkt_offset;
-               precvframe = NULL;
-               pkt_copy = NULL;
-
-               if (transfer_len > 0 && pkt_cnt == 0)
-                       pkt_cnt = (le32_to_cpu(prxstat->rxdw2)>>16) & 0xff;
-
-       } while (transfer_len > 0 && pkt_cnt > 0);
-
-_exit_recvbuf2recvframe:
-
-       return _SUCCESS;
-}
-
-void rtl8723au_recv_tasklet(void *priv)
-{
-       struct sk_buff *pskb;
-       struct rtw_adapter *padapter = (struct rtw_adapter *)priv;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       while (NULL != (pskb = skb_dequeue(&precvpriv->rx_skb_queue))) {
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved) {
-                       DBG_8723A("recv_tasklet => bDriverStopped or "
-                                 "bSurpriseRemoved \n");
-                       dev_kfree_skb_any(pskb);
-                       break;
-               }
-
-               recvbuf2recvframe(padapter, pskb);
-               skb_reset_tail_pointer(pskb);
-
-               pskb->len = 0;
-
-               skb_queue_tail(&precvpriv->free_recv_skb_queue, pskb);
-       }
-}
-
-static void usb_read_port_complete(struct urb *purb)
-{
-       struct recv_buf *precvbuf = (struct recv_buf *)purb->context;
-       struct rtw_adapter *padapter = (struct rtw_adapter *)precvbuf->adapter;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                "usb_read_port_complete!!!\n");
-
-       precvpriv->rx_pending_cnt--;
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped ||
-           padapter->bReadPortCancel) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_read_port_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n",
-                        padapter->bDriverStopped, padapter->bSurpriseRemoved);
-
-               DBG_8723A("%s()-%d: RX Warning! bDriverStopped(%d) OR "
-                         "bSurpriseRemoved(%d) bReadPortCancel(%d)\n",
-                         __func__, __LINE__, padapter->bDriverStopped,
-                         padapter->bSurpriseRemoved, padapter->bReadPortCancel);
-               return;
-       }
-
-       if (purb->status == 0) {
-               if (purb->actual_length > MAX_RECVBUF_SZ ||
-                   purb->actual_length < RXDESC_SIZE) {
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_read_port_complete: (purb->actual_length > MAX_RECVBUF_SZ) || (purb->actual_length < RXDESC_SIZE)\n");
-                       rtl8723au_read_port(padapter, 0, precvbuf);
-                       DBG_8723A("%s()-%d: RX Warning!\n",
-                                 __func__, __LINE__);
-               } else {
-                       rtw_reset_continual_urb_error(
-                               adapter_to_dvobj(padapter));
-
-                       skb_put(precvbuf->pskb, purb->actual_length);
-                       skb_queue_tail(&precvpriv->rx_skb_queue,
-                                      precvbuf->pskb);
-
-                       if (skb_queue_len(&precvpriv->rx_skb_queue) <= 1)
-                               tasklet_schedule(&precvpriv->recv_tasklet);
-
-                       precvbuf->pskb = NULL;
-                       rtl8723au_read_port(padapter, 0, precvbuf);
-               }
-       } else {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_read_port_complete : purb->status(%d) != 0\n",
-                        purb->status);
-               skb_put(precvbuf->pskb, purb->actual_length);
-               precvbuf->pskb = NULL;
-
-               DBG_8723A("###=> usb_read_port_complete => urb status(%d)\n",
-                         purb->status);
-
-               if (rtw_inc_and_chk_continual_urb_error(
-                           adapter_to_dvobj(padapter))) {
-                       padapter->bSurpriseRemoved = true;
-               }
-
-               switch (purb->status) {
-               case -EINVAL:
-               case -EPIPE:
-               case -ENODEV:
-               case -ESHUTDOWN:
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_read_port_complete:bSurpriseRemoved = true\n");
-                       /* Intentional fall through here */
-               case -ENOENT:
-                       padapter->bDriverStopped = true;
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_read_port_complete:bDriverStopped = true\n");
-                       break;
-               case -EPROTO:
-               case -EOVERFLOW:
-                       rtl8723au_read_port(padapter, 0, precvbuf);
-                       break;
-               case -EINPROGRESS:
-                       DBG_8723A("ERROR: URB IS IN PROGRESS!\n");
-                       break;
-               default:
-                       break;
-               }
-       }
-}
-
-int rtl8723au_read_port(struct rtw_adapter *adapter, u32 cnt,
-                       struct recv_buf *precvbuf)
-{
-       struct urb *purb;
-       struct dvobj_priv *pdvobj = adapter_to_dvobj(adapter);
-       struct recv_priv *precvpriv = &adapter->recvpriv;
-       struct usb_device *pusbd = pdvobj->pusbdev;
-       int err;
-       unsigned int pipe;
-       unsigned long tmpaddr;
-       unsigned long alignment;
-       int ret = _SUCCESS;
-
-       if (adapter->bDriverStopped || adapter->bSurpriseRemoved) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_read_port:(padapter->bDriverStopped ||padapter->bSurpriseRemoved)!!!\n");
-               return _FAIL;
-       }
-
-       if (!precvbuf) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_read_port:precvbuf == NULL\n");
-               return _FAIL;
-       }
-
-       if (!precvbuf->pskb)
-               precvbuf->pskb = skb_dequeue(&precvpriv->free_recv_skb_queue);
-
-       /* re-assign for linux based on skb */
-       if (!precvbuf->pskb) {
-               precvbuf->pskb = netdev_alloc_skb(adapter->pnetdev, MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
-               if (precvbuf->pskb == NULL) {
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "init_recvbuf(): alloc_skb fail!\n");
-                       return _FAIL;
-               }
-
-               tmpaddr = (unsigned long)precvbuf->pskb->data;
-               alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
-               skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
-       }
-
-       precvpriv->rx_pending_cnt++;
-
-       purb = precvbuf->purb;
-
-       /* translate DMA FIFO addr to pipehandle */
-       pipe = usb_rcvbulkpipe(pusbd, pdvobj->RtInPipe[0]);
-
-       usb_fill_bulk_urb(purb, pusbd, pipe, precvbuf->pskb->data,
-                         MAX_RECVBUF_SZ, usb_read_port_complete,
-                         precvbuf);/* context is precvbuf */
-
-       err = usb_submit_urb(purb, GFP_ATOMIC);
-       if ((err) && (err != -EPERM)) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "cannot submit rx in-token(err = 0x%.8x), URB_STATUS = 0x%.8x\n",
-                        err, purb->status);
-               DBG_8723A("cannot submit rx in-token(err = 0x%08x), urb_status "
-                         "= %d\n", err, purb->status);
-               ret = _FAIL;
-       }
-       return ret;
-}
-
-void rtl8723au_xmit_tasklet(void *priv)
-{
-       int ret;
-       struct rtw_adapter *padapter = (struct rtw_adapter *)priv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-
-       if (check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY))
-               return;
-
-       while (1) {
-               if (padapter->bDriverStopped || padapter->bSurpriseRemoved ||
-                   padapter->bWritePortCancel) {
-                       DBG_8723A("xmit_tasklet => bDriverStopped or "
-                                 "bSurpriseRemoved or bWritePortCancel\n");
-                       break;
-               }
-
-               ret = rtl8723au_xmitframe_complete(padapter, pxmitpriv, NULL);
-
-               if (!ret)
-                       break;
-       }
-}
-
-void rtl8723au_set_hw_type(struct rtw_adapter *padapter)
-{
-       padapter->chip_type = RTL8723A;
-       padapter->HardwareType = HARDWARE_TYPE_RTL8723AU;
-       DBG_8723A("CHIP TYPE: RTL8723A\n");
-}
diff --git a/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h b/drivers/staging/rtl8723au/include/Hal8723APhyCfg.h
deleted file mode 100644 (file)
index bcf3657..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8723PHYCFG_H__
-#define __INC_HAL8723PHYCFG_H__
-
-/*------------------------------Define structure----------------------------*/
-enum RF_RADIO_PATH {
-       RF_PATH_A = 0,                  /* Radio Path A */
-       RF_PATH_B = 1,                  /* Radio Path B */
-       RF_PATH_MAX                     /* Max RF number 90 support */
-};
-
-#define CHANNEL_MAX_NUMBER             14      /*  14 is the max channel number */
-
-enum WIRELESS_MODE {
-       WIRELESS_MODE_UNKNOWN   = 0x00,
-       WIRELESS_MODE_A         = BIT(2),
-       WIRELESS_MODE_B         = BIT(0),
-       WIRELESS_MODE_G         = BIT(1),
-       WIRELESS_MODE_AUTO      = BIT(5),
-       WIRELESS_MODE_N_24G     = BIT(3),
-       WIRELESS_MODE_N_5G      = BIT(4),
-       WIRELESS_MODE_AC        = BIT(6)
-};
-
-struct bb_reg_define {
-       u32 rfintfs;            /*  set software control: */
-                               /*              0x870~0x877[8 bytes] */
-       u32 rfintfi;            /*  readback data: */
-                               /*              0x8e0~0x8e7[8 bytes] */
-       u32 rfintfo;            /*  output data: */
-                               /*              0x860~0x86f [16 bytes] */
-       u32 rfintfe;            /*  output enable: */
-                               /*              0x860~0x86f [16 bytes] */
-       u32 rf3wireOffset;      /*  LSSI data: */
-                               /*              0x840~0x84f [16 bytes] */
-       u32 rfLSSI_Select;      /*  BB Band Select: */
-                               /*              0x878~0x87f [8 bytes] */
-       u32 rfTxGainStage;      /*  Tx gain stage: */
-                               /*              0x80c~0x80f [4 bytes] */
-       u32 rfHSSIPara1;        /*  wire parameter control1 : */
-                               /*              0x820~0x823, 0x828~0x82b, 0x830~0x833, 0x838~0x83b [16 bytes] */
-       u32 rfHSSIPara2;        /*  wire parameter control2 : */
-                               /*              0x824~0x827, 0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes] */
-       u32 rfSwitchControl; /* Tx Rx antenna control : */
-                               /*              0x858~0x85f [16 bytes] */
-       u32 rfAGCControl1;      /* AGC parameter control1 : */
-                               /*      0xc50~0xc53, 0xc58~0xc5b, 0xc60~0xc63, 0xc68~0xc6b [16 bytes] */
-       u32 rfAGCControl2;      /* AGC parameter control2 : */
-                               /*              0xc54~0xc57, 0xc5c~0xc5f, 0xc64~0xc67, 0xc6c~0xc6f [16 bytes] */
-       u32 rfRxIQImbalance; /* OFDM Rx IQ imbalance matrix : */
-                               /*              0xc14~0xc17, 0xc1c~0xc1f, 0xc24~0xc27, 0xc2c~0xc2f [16 bytes] */
-       u32 rfRxAFE;            /* Rx IQ DC ofset and Rx digital filter, Rx DC notch filter : */
-                               /*      0xc10~0xc13, 0xc18~0xc1b, 0xc20~0xc23, 0xc28~0xc2b [16 bytes] */
-       u32 rfTxIQImbalance; /* OFDM Tx IQ imbalance matrix */
-                               /*      0xc80~0xc83, 0xc88~0xc8b, 0xc90~0xc93, 0xc98~0xc9b [16 bytes] */
-       u32 rfTxAFE;            /* Tx IQ DC Offset and Tx DFIR type */
-                               /*      0xc84~0xc87, 0xc8c~0xc8f, 0xc94~0xc97, 0xc9c~0xc9f [16 bytes] */
-       u32 rfLSSIReadBack;     /* LSSI RF readback data SI mode */
-                               /*      0x8a0~0x8af [16 bytes] */
-       u32 rfLSSIReadBackPi;   /* LSSI RF readback data PI mode 0x8b8-8bc for Path A and B */
-};
-
-struct r_antenna_sel_ofdm {
-       u32                     r_tx_antenna:4;
-       u32                     r_ant_l:4;
-       u32                     r_ant_non_ht:4;
-       u32                     r_ant_ht1:4;
-       u32                     r_ant_ht2:4;
-       u32                     r_ant_ht_s1:4;
-       u32                     r_ant_non_ht_s1:4;
-       u32                     OFDM_TXSC:2;
-       u32                     Reserved:2;
-};
-
-struct r_antenna_sel_cck {
-       u8                      r_cckrx_enable_2:2;
-       u8                      r_cckrx_enable:2;
-       u8                      r_ccktx_enable:4;
-};
-
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-
-
-/*------------------------Export Macro Definition---------------------------*/
-/*------------------------Export Macro Definition---------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-/*  */
-/*  BB and RF register read/write */
-/*  */
-u32    PHY_QueryBBReg(struct rtw_adapter *Adapter, u32 RegAddr,
-                      u32 BitMask);
-void   PHY_SetBBReg(struct rtw_adapter *Adapter, u32 RegAddr,
-                    u32 BitMask, u32 Data);
-u32    PHY_QueryRFReg(struct rtw_adapter *Adapter,
-                      enum RF_RADIO_PATH       eRFPath, u32 RegAddr,
-                      u32 BitMask);
-void   PHY_SetRFReg(struct rtw_adapter *Adapter,
-                    enum RF_RADIO_PATH eRFPath, u32 RegAddr,
-                    u32 BitMask,  u32  Data);
-
-/*  */
-/*  BB TX Power R/W */
-/*  */
-void PHY_SetTxPowerLevel8723A(struct rtw_adapter *Adapter, u8 channel);
-
-/*  */
-/*  Switch bandwidth for 8723A */
-/*  */
-void   PHY_SetBWMode23a8723A(struct rtw_adapter *pAdapter,
-                          enum ht_channel_width ChnlWidth,
-                          unsigned char Offset);
-
-/*  */
-/*  channel switch related funciton */
-/*  */
-void   PHY_SwChnl8723A(struct rtw_adapter *pAdapter, u8 channel);
-                               /*  Call after initialization */
-void ChkFwCmdIoDone(struct rtw_adapter *Adapter);
-
-/*  */
-/*  Modify the value of the hw register when beacon interval be changed. */
-/*  */
-void
-rtl8192c_PHY_SetBeaconHwReg(struct rtw_adapter *Adapter, u16 BeaconInterval);
-
-
-void PHY_SwitchEphyParameter(struct rtw_adapter *Adapter);
-
-void PHY_EnableHostClkReq(struct rtw_adapter *Adapter);
-
-bool
-SetAntennaConfig92C(struct rtw_adapter *Adapter, u8 DefaultAnt);
-
-/*--------------------------Exported Function prototype---------------------*/
-
-#define PHY_SetMacReg  PHY_SetBBReg
-
-/* MAC/BB/RF HAL config */
-int PHY_BBConfig8723A(struct rtw_adapter *Adapter);
-s32 PHY_MACConfig8723A(struct rtw_adapter *padapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/Hal8723APhyReg.h b/drivers/staging/rtl8723au/include/Hal8723APhyReg.h
deleted file mode 100644 (file)
index 759928f..0000000
+++ /dev/null
@@ -1,1078 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __INC_HAL8723APHYREG_H__
-#define __INC_HAL8723APHYREG_H__
-
-/*  1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF */
-/*  1. Page1(0x100) */
-#define rPMAC_Reset                            0x100
-#define rPMAC_TxStart                          0x104
-#define rPMAC_TxLegacySIG                      0x108
-#define rPMAC_TxHTSIG1                         0x10c
-#define rPMAC_TxHTSIG2                         0x110
-#define rPMAC_PHYDebug                         0x114
-#define rPMAC_TxPacketNum                      0x118
-#define rPMAC_TxIdle                           0x11c
-#define rPMAC_TxMACHeader0                     0x120
-#define rPMAC_TxMACHeader1                     0x124
-#define rPMAC_TxMACHeader2                     0x128
-#define rPMAC_TxMACHeader3                     0x12c
-#define rPMAC_TxMACHeader4                     0x130
-#define rPMAC_TxMACHeader5                     0x134
-#define rPMAC_TxDataType                       0x138
-#define rPMAC_TxRandomSeed                     0x13c
-#define rPMAC_CCKPLCPPreamble                  0x140
-#define rPMAC_CCKPLCPHeader                    0x144
-#define rPMAC_CCKCRC16                         0x148
-#define rPMAC_OFDMRxCRC32OK                    0x170
-#define rPMAC_OFDMRxCRC32Er                    0x174
-#define rPMAC_OFDMRxParityEr                   0x178
-#define rPMAC_OFDMRxCRC8Er                     0x17c
-#define rPMAC_CCKCRxRC16Er                     0x180
-#define rPMAC_CCKCRxRC32Er                     0x184
-#define rPMAC_CCKCRxRC32OK                     0x188
-#define rPMAC_TxStatus                         0x18c
-
-/*  2. Page2(0x200) */
-/*  The following two definition are only used for USB interface. */
-#define RF_BB_CMD_ADDR         0x02c0  /*  RF/BB read/write command address. */
-#define RF_BB_CMD_DATA         0x02c4  /*  RF/BB read/write command data. */
-
-/*  3. Page8(0x800) */
-#define rFPGA0_RFMOD           0x800   /* RF mode & CCK TxSC  RF BW Setting?? */
-
-#define rFPGA0_TxInfo          0x804   /*  Status report?? */
-#define rFPGA0_PSDFunction     0x808
-
-#define rFPGA0_TxGainStage     0x80c   /*  Set TX PWR init gain? */
-
-#define rFPGA0_RFTiming1       0x810   /*  Useless now */
-#define rFPGA0_RFTiming2       0x814
-
-#define rFPGA0_XA_HSSIParameter1       0x820   /*  RF 3 wire register */
-#define rFPGA0_XA_HSSIParameter2       0x824
-#define rFPGA0_XB_HSSIParameter1       0x828
-#define rFPGA0_XB_HSSIParameter2       0x82c
-#define rTxAGC_B_Rate18_06             0x830
-#define rTxAGC_B_Rate54_24             0x834
-#define rTxAGC_B_CCK1_55_Mcs32         0x838
-#define rTxAGC_B_Mcs03_Mcs00           0x83c
-
-#define rTxAGC_B_Mcs07_Mcs04           0x848
-#define rTxAGC_B_Mcs11_Mcs08           0x84c
-
-#define rFPGA0_XA_LSSIParameter                0x840
-#define rFPGA0_XB_LSSIParameter                0x844
-
-#define rFPGA0_RFWakeUpParameter       0x850   /*  Useless now */
-#define rFPGA0_RFSleepUpParameter      0x854
-
-#define rFPGA0_XAB_SwitchControl       0x858   /*  RF Channel switch */
-#define rFPGA0_XCD_SwitchControl       0x85c
-
-#define rFPGA0_XA_RFInterfaceOE                0x860   /*  RF Channel switch */
-#define rFPGA0_XB_RFInterfaceOE                0x864
-
-#define rTxAGC_B_Mcs15_Mcs12           0x868
-#define rTxAGC_B_CCK11_A_CCK2_11       0x86c
-
-#define rFPGA0_XAB_RFInterfaceSW       0x870   /*  RF Interface Software Control */
-#define rFPGA0_XCD_RFInterfaceSW       0x874
-
-#define rFPGA0_XAB_RFParameter         0x878   /*  RF Parameter */
-#define rFPGA0_XCD_RFParameter         0x87c
-
-#define rFPGA0_AnalogParameter1                0x880   /*  Crystal cap setting RF-R/W protection for parameter4?? */
-#define rFPGA0_AnalogParameter2                0x884
-#define rFPGA0_AnalogParameter3                0x888   /*  Useless now */
-#define rFPGA0_AnalogParameter4                0x88c
-
-#define rFPGA0_XA_LSSIReadBack         0x8a0   /*  Tranceiver LSSI Readback */
-#define rFPGA0_XB_LSSIReadBack         0x8a4
-#define rFPGA0_XC_LSSIReadBack         0x8a8
-#define rFPGA0_XD_LSSIReadBack         0x8ac
-
-#define rFPGA0_PSDReport               0x8b4   /*  Useless now */
-#define TransceiverA_HSPI_Readback     0x8b8   /*  Transceiver A HSPI Readback */
-#define TransceiverB_HSPI_Readback     0x8bc   /*  Transceiver B HSPI Readback */
-#define rFPGA0_XAB_RFInterfaceRB       0x8e0   /*  Useless now RF Interface Readback Value */
-#define rFPGA0_XCD_RFInterfaceRB       0x8e4   /*  Useless now */
-
-/*  4. Page9(0x900) */
-#define rFPGA1_RFMOD                   0x900   /* RF mode & OFDM TxSC RF BW Setting?? */
-
-#define rFPGA1_TxBlock                 0x904   /*  Useless now */
-#define rFPGA1_DebugSelect             0x908   /*  Useless now */
-#define rFPGA1_TxInfo                  0x90c   /*  Useless now Status report?? */
-
-/*  5. PageA(0xA00) */
-/*  Set Control channel to upper or lower. These settings are required only for 40MHz */
-#define rCCK0_System                   0xa00
-
-#define rCCK0_AFESetting               0xa04   /*  Disable init gain now Select RX path by RSSI */
-#define rCCK0_CCA                      0xa08   /*  Disable init gain now Init gain */
-
-#define rCCK0_RxAGC1                   0xa0c   /* AGC default value, saturation level Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series */
-#define rCCK0_RxAGC2                   0xa10   /* AGC & DAGC */
-
-#define rCCK0_RxHP                     0xa14
-
-#define rCCK0_DSPParameter1            0xa18   /* Timing recovery & Channel estimation threshold */
-#define rCCK0_DSPParameter2            0xa1c   /* SQ threshold */
-
-#define rCCK0_TxFilter1                        0xa20
-#define rCCK0_TxFilter2                        0xa24
-#define rCCK0_DebugPort                        0xa28   /* debug port and Tx filter3 */
-#define rCCK0_FalseAlarmReport         0xa2c   /* 0xa2d        useless now 0xa30-a4f channel report */
-#define rCCK0_TRSSIReport              0xa50
-#define rCCK0_RxReport                 0xa54  /* 0xa57 */
-#define rCCK0_FACounterLower           0xa5c  /* 0xa5b */
-#define rCCK0_FACounterUpper           0xa58  /* 0xa5c */
-/*  PageB(0xB00) */
-#define rPdp_AntA                      0xb00
-#define rPdp_AntA_4                    0xb04
-#define rConfig_Pmpd_AntA              0xb28
-#define rConfig_AntA                   0xb68
-#define rConfig_AntB                   0xb6c
-#define rPdp_AntB                      0xb70
-#define rPdp_AntB_4                    0xb74
-#define rConfig_Pmpd_AntB              0xb98
-#define rAPK                           0xbd8
-
-/*  6. PageC(0xC00) */
-#define rOFDM0_LSTF                    0xc00
-
-#define rOFDM0_TRxPathEnable           0xc04
-#define rOFDM0_TRMuxPar                        0xc08
-#define rOFDM0_TRSWIsolation           0xc0c
-
-#define rOFDM0_XARxAFE                 0xc10  /* RxIQ DC offset, Rx digital filter, DC notch filter */
-#define rOFDM0_XARxIQImbalance         0xc14  /* RxIQ imblance matrix */
-#define rOFDM0_XBRxAFE                 0xc18
-#define rOFDM0_XBRxIQImbalance         0xc1c
-#define rOFDM0_XCRxAFE                 0xc20
-#define rOFDM0_XCRxIQImbalance         0xc24
-#define rOFDM0_XDRxAFE                 0xc28
-#define rOFDM0_XDRxIQImbalance         0xc2c
-
-#define rOFDM0_RxDetector1             0xc30  /* PD,BW & SBD   DM tune init gain */
-#define rOFDM0_RxDetector2             0xc34  /* SBD & Fame Sync. */
-#define rOFDM0_RxDetector3             0xc38  /* Frame Sync. */
-#define rOFDM0_RxDetector4             0xc3c  /* PD, SBD, Frame Sync & Short-GI */
-
-#define rOFDM0_RxDSP                   0xc40  /* Rx Sync Path */
-#define rOFDM0_CFOandDAGC              0xc44  /* CFO & DAGC */
-#define rOFDM0_CCADropThreshold        0xc48 /* CCA Drop threshold */
-#define rOFDM0_ECCAThreshold           0xc4c /*  energy CCA */
-
-#define rOFDM0_XAAGCCore1              0xc50   /*  DIG */
-#define rOFDM0_XAAGCCore2              0xc54
-#define rOFDM0_XBAGCCore1              0xc58
-#define rOFDM0_XBAGCCore2              0xc5c
-#define rOFDM0_XCAGCCore1              0xc60
-#define rOFDM0_XCAGCCore2              0xc64
-#define rOFDM0_XDAGCCore1              0xc68
-#define rOFDM0_XDAGCCore2              0xc6c
-
-#define rOFDM0_AGCParameter1           0xc70
-#define rOFDM0_AGCParameter2           0xc74
-#define rOFDM0_AGCRSSITable            0xc78
-#define rOFDM0_HTSTFAGC                        0xc7c
-
-#define rOFDM0_XATxIQImbalance         0xc80   /*  TX PWR TRACK and DIG */
-#define rOFDM0_XATxAFE                 0xc84
-#define rOFDM0_XBTxIQImbalance         0xc88
-#define rOFDM0_XBTxAFE                 0xc8c
-#define rOFDM0_XCTxIQImbalance         0xc90
-#define rOFDM0_XCTxAFE                 0xc94
-#define rOFDM0_XDTxIQImbalance         0xc98
-#define rOFDM0_XDTxAFE                 0xc9c
-
-#define rOFDM0_RxIQExtAnta             0xca0
-#define rOFDM0_TxCoeff1                        0xca4
-#define rOFDM0_TxCoeff2                        0xca8
-#define rOFDM0_TxCoeff3                        0xcac
-#define rOFDM0_TxCoeff4                        0xcb0
-#define rOFDM0_TxCoeff5                        0xcb4
-#define rOFDM0_TxCoeff6                        0xcb8
-#define rOFDM0_RxHPParameter           0xce0
-#define rOFDM0_TxPseudoNoiseWgt                0xce4
-#define rOFDM0_FrameSync               0xcf0
-#define rOFDM0_DFSReport               0xcf4
-
-/*  7. PageD(0xD00) */
-#define rOFDM1_LSTF                    0xd00
-#define rOFDM1_TRxPathEnable           0xd04
-
-#define rOFDM1_CFO                     0xd08   /*  No setting now */
-#define rOFDM1_CSI1                    0xd10
-#define rOFDM1_SBD                     0xd14
-#define rOFDM1_CSI2                    0xd18
-#define rOFDM1_CFOTracking             0xd2c
-#define rOFDM1_TRxMesaure1             0xd34
-#define rOFDM1_IntfDet                 0xd3c
-#define rOFDM1_PseudoNoiseStateAB      0xd50
-#define rOFDM1_PseudoNoiseStateCD      0xd54
-#define rOFDM1_RxPseudoNoiseWgt                0xd58
-
-#define rOFDM_PHYCounter1              0xda0  /* cca, parity fail */
-#define rOFDM_PHYCounter2              0xda4  /* rate illegal, crc8 fail */
-#define rOFDM_PHYCounter3              0xda8  /* MCS not support */
-
-#define rOFDM_ShortCFOAB               0xdac   /*  No setting now */
-#define rOFDM_ShortCFOCD               0xdb0
-#define rOFDM_LongCFOAB                        0xdb4
-#define rOFDM_LongCFOCD                        0xdb8
-#define rOFDM_TailCFOAB                        0xdbc
-#define rOFDM_TailCFOCD                        0xdc0
-#define rOFDM_PWMeasure1               0xdc4
-#define rOFDM_PWMeasure2               0xdc8
-#define rOFDM_BWReport                 0xdcc
-#define rOFDM_AGCReport                        0xdd0
-#define rOFDM_RxSNR                    0xdd4
-#define rOFDM_RxEVMCSI                 0xdd8
-#define rOFDM_SIGReport                        0xddc
-
-
-/*  8. PageE(0xE00) */
-#define rTxAGC_A_Rate18_06             0xe00
-#define rTxAGC_A_Rate54_24             0xe04
-#define rTxAGC_A_CCK1_Mcs32            0xe08
-#define rTxAGC_A_Mcs03_Mcs00           0xe10
-#define rTxAGC_A_Mcs07_Mcs04           0xe14
-#define rTxAGC_A_Mcs11_Mcs08           0xe18
-#define rTxAGC_A_Mcs15_Mcs12           0xe1c
-
-#define rFPGA0_IQK                     0xe28
-#define rTx_IQK_Tone_A                 0xe30
-#define rRx_IQK_Tone_A                 0xe34
-#define rTx_IQK_PI_A                   0xe38
-#define rRx_IQK_PI_A                   0xe3c
-
-#define rTx_IQK                                0xe40
-#define rRx_IQK                                0xe44
-#define rIQK_AGC_Pts                   0xe48
-#define rIQK_AGC_Rsp                   0xe4c
-#define rTx_IQK_Tone_B                 0xe50
-#define rRx_IQK_Tone_B                 0xe54
-#define rTx_IQK_PI_B                   0xe58
-#define rRx_IQK_PI_B                   0xe5c
-#define rIQK_AGC_Cont                  0xe60
-
-#define rBlue_Tooth                    0xe6c
-#define rRx_Wait_CCA                   0xe70
-#define rTx_CCK_RFON                   0xe74
-#define rTx_CCK_BBON                   0xe78
-#define rTx_OFDM_RFON                  0xe7c
-#define rTx_OFDM_BBON                  0xe80
-#define rTx_To_Rx                      0xe84
-#define rTx_To_Tx                      0xe88
-#define rRx_CCK                                0xe8c
-
-#define rTx_Power_Before_IQK_A         0xe94
-#define rTx_Power_After_IQK_A          0xe9c
-
-#define rRx_Power_Before_IQK_A         0xea0
-#define rRx_Power_Before_IQK_A_2       0xea4
-#define rRx_Power_After_IQK_A          0xea8
-#define rRx_Power_After_IQK_A_2                0xeac
-
-#define rTx_Power_Before_IQK_B         0xeb4
-#define rTx_Power_After_IQK_B          0xebc
-
-#define rRx_Power_Before_IQK_B         0xec0
-#define rRx_Power_Before_IQK_B_2       0xec4
-#define rRx_Power_After_IQK_B          0xec8
-#define rRx_Power_After_IQK_B_2                0xecc
-
-#define rRx_OFDM                       0xed0
-#define rRx_Wait_RIFS                  0xed4
-#define rRx_TO_Rx                      0xed8
-#define rStandby                       0xedc
-#define rSleep                         0xee0
-#define rPMPD_ANAEN                    0xeec
-
-/*  7. RF Register 0x00-0x2E (RF 8256) */
-/*     RF-0222D 0x00-3F */
-/* Zebra1 */
-#define rZebra1_HSSIEnable             0x0     /*  Useless now */
-#define rZebra1_TRxEnable1             0x1
-#define rZebra1_TRxEnable2             0x2
-#define rZebra1_AGC                    0x4
-#define rZebra1_ChargePump             0x5
-#define rZebra1_Channel                        0x7     /*  RF channel switch */
-
-#define rZebra1_TxGain                 0x8     /*  Useless now */
-#define rZebra1_TxLPF                  0x9
-#define rZebra1_RxLPF                  0xb
-#define rZebra1_RxHPFCorner            0xc
-
-/* Zebra4 */
-#define rGlobalCtrl                    0       /*  Useless now */
-#define rRTL8256_TxLPF                 19
-#define rRTL8256_RxLPF                 11
-
-/* RTL8258 */
-#define rRTL8258_TxLPF                 0x11    /*  Useless now */
-#define rRTL8258_RxLPF                 0x13
-#define rRTL8258_RSSILPF               0xa
-
-/*  RL6052 Register definition */
-#define RF_AC                          0x00
-#define RF_IQADJ_G1                    0x01
-#define RF_IQADJ_G2                    0x02
-#define RF_BS_PA_APSET_G1_G4           0x03
-#define RF_BS_PA_APSET_G5_G8           0x04
-#define RF_POW_TRSW                    0x05
-#define RF_GAIN_RX                     0x06
-#define RF_GAIN_TX                     0x07
-#define RF_TXM_IDAC                    0x08
-#define RF_IPA_G                       0x09
-#define RF_TXBIAS_G                    0x0A
-#define RF_TXPA_AG                     0x0B
-#define RF_IPA_A                       0x0C
-#define RF_TXBIAS_A                    0x0D
-#define RF_BS_PA_APSET_G9_G11          0x0E
-#define RF_BS_IQGEN                    0x0F
-#define RF_MODE1                       0x10
-#define RF_MODE2                       0x11
-#define RF_RX_AGC_HP                   0x12
-#define RF_TX_AGC                      0x13
-#define RF_BIAS                                0x14
-#define RF_IPA                         0x15
-#define RF_TXBIAS                      0x16
-#define RF_POW_ABILITY                 0x17
-#define RF_MODE_AG                     0x18
-#define rRfChannel                     0x18    /*  RF channel and BW switch */
-#define RF_CHNLBW                      0x18    /*  RF channel and BW switch */
-#define RF_TOP                         0x19
-#define RF_RX_G1                       0x1A
-#define RF_RX_G2                       0x1B
-#define RF_RX_BB2                      0x1C
-#define RF_RX_BB1                      0x1D
-#define RF_RCK1                                0x1E
-#define RF_RCK2                                0x1F
-#define RF_TX_G1                       0x20
-#define RF_TX_G2                       0x21
-#define RF_TX_G3                       0x22
-#define RF_TX_BB1                      0x23
-#define RF_T_METER                     0x24
-#define RF_SYN_G1                      0x25    /*  RF TX Power control */
-#define RF_SYN_G2                      0x26    /*  RF TX Power control */
-#define RF_SYN_G3                      0x27    /*  RF TX Power control */
-#define RF_SYN_G4                      0x28    /*  RF TX Power control */
-#define RF_SYN_G5                      0x29    /*  RF TX Power control */
-#define RF_SYN_G6                      0x2A    /*  RF TX Power control */
-#define RF_SYN_G7                      0x2B    /*  RF TX Power control */
-#define RF_SYN_G8                      0x2C    /*  RF TX Power control */
-
-#define RF_RCK_OS                      0x30    /*  RF TX PA control */
-
-#define RF_TXPA_G1                     0x31    /*  RF TX PA control */
-#define RF_TXPA_G2                     0x32    /*  RF TX PA control */
-#define RF_TXPA_G3                     0x33    /*  RF TX PA control */
-
-/* Bit Mask */
-/*  1. Page1(0x100) */
-#define bBBResetB                      0x100   /*  Useless now? */
-#define bGlobalResetB                  0x200
-#define bOFDMTxStart                   0x4
-#define bCCKTxStart                    0x8
-#define bCRC32Debug                    0x100
-#define bPMACLoopback                  0x10
-#define bTxLSIG                                0xffffff
-#define bOFDMTxRate                    0xf
-#define bOFDMTxReserved                        0x10
-#define bOFDMTxLength                  0x1ffe0
-#define bOFDMTxParity                  0x20000
-#define bTxHTSIG1                      0xffffff
-#define bTxHTMCSRate                   0x7f
-#define bTxHTBW                                0x80
-#define bTxHTLength                    0xffff00
-#define bTxHTSIG2                      0xffffff
-#define bTxHTSmoothing                 0x1
-#define bTxHTSounding                  0x2
-#define bTxHTReserved                  0x4
-#define bTxHTAggreation                        0x8
-#define bTxHTSTBC                      0x30
-#define bTxHTAdvanceCoding             0x40
-#define bTxHTShortGI                   0x80
-#define bTxHTNumberHT_LTF              0x300
-#define bTxHTCRC8                      0x3fc00
-#define bCounterReset                  0x10000
-#define bNumOfOFDMTx                   0xffff
-#define bNumOfCCKTx                    0xffff0000
-#define bTxIdleInterval                        0xffff
-#define bOFDMService                   0xffff0000
-#define bTxMACHeader                   0xffffffff
-#define bTxDataInit                    0xff
-#define bTxHTMode                      0x100
-#define bTxDataType                    0x30000
-#define bTxRandomSeed                  0xffffffff
-#define bCCKTxPreamble                 0x1
-#define bCCKTxSFD                      0xffff0000
-#define bCCKTxSIG                      0xff
-#define bCCKTxService                  0xff00
-#define bCCKLengthExt                  0x8000
-#define bCCKTxLength                   0xffff0000
-#define bCCKTxCRC16                    0xffff
-#define bCCKTxStatus                   0x1
-#define bOFDMTxStatus                  0x2
-
-#define IS_BB_REG_OFFSET_92S(_Offset)                  \
-       ((_Offset >= 0x800) && (_Offset <= 0xfff))
-
-/*  2. Page8(0x800) */
-#define bRFMOD                         0x1     /*  Reg 0x800 rFPGA0_RFMOD */
-#define bJapanMode                     0x2
-#define bCCKTxSC                       0x30
-#define bCCKEn                         0x1000000
-#define bOFDMEn                                0x2000000
-
-#define bOFDMRxADCPhase                        0x10000 /*  Useless now */
-#define bOFDMTxDACPhase                        0x40000
-#define bXATxAGC                       0x3f
-
-#define bAntennaSelect                 0x0300
-
-#define bXBTxAGC                       0xf00   /*  Reg 80c rFPGA0_TxGainStage */
-#define bXCTxAGC                       0xf000
-#define bXDTxAGC                       0xf0000
-
-#define bPAStart                       0xf0000000      /*  Useless now */
-#define bTRStart                       0x00f00000
-#define bRFStart                       0x0000f000
-#define bBBStart                       0x000000f0
-#define bBBCCKStart                    0x0000000f
-#define bPAEnd                         0xf          /* Reg0x814 */
-#define bTREnd                         0x0f000000
-#define bRFEnd                         0x000f0000
-#define bCCAMask                       0x000000f0   /* T2R */
-#define bR2RCCAMask                    0x00000f00
-#define bHSSI_R2TDelay                 0xf8000000
-#define bHSSI_T2RDelay                 0xf80000
-#define bContTxHSSI                    0x400     /* chane gain at continue Tx */
-#define bIGFromCCK                     0x200
-#define bAGCAddress                    0x3f
-#define bRxHPTx                                0x7000
-#define bRxHPT2R                       0x38000
-#define bRxHPCCKIni                    0xc0000
-#define bAGCTxCode                     0xc00000
-#define bAGCRxCode                     0x300000
-
-#define b3WireDataLength               0x800   /*  Reg 0x820~84f rFPGA0_XA_HSSIParameter1 */
-#define b3WireAddressLength            0x400
-
-#define b3WireRFPowerDown              0x1     /*  Useless now */
-/* define bHWSISelect                  0x8 */
-#define b5GPAPEPolarity                        0x40000000
-#define b2GPAPEPolarity                        0x80000000
-#define bRFSW_TxDefaultAnt             0x3
-#define bRFSW_TxOptionAnt              0x30
-#define bRFSW_RxDefaultAnt             0x300
-#define bRFSW_RxOptionAnt              0x3000
-#define bRFSI_3WireData                        0x1
-#define bRFSI_3WireClock               0x2
-#define bRFSI_3WireLoad                        0x4
-#define bRFSI_3WireRW                  0x8
-#define bRFSI_3Wire                    0xf
-
-#define bRFSI_RFENV                    0x10    /*  Reg 0x870 rFPGA0_XAB_RFInterfaceSW */
-
-#define bRFSI_TRSW                     0x20    /*  Useless now */
-#define bRFSI_TRSWB                    0x40
-#define bRFSI_ANTSW                    0x100
-#define bRFSI_ANTSWB                   0x200
-#define bRFSI_PAPE                     0x400
-#define bRFSI_PAPE5G                   0x800
-#define bBandSelect                    0x1
-#define bHTSIG2_GI                     0x80
-#define bHTSIG2_Smoothing              0x01
-#define bHTSIG2_Sounding               0x02
-#define bHTSIG2_Aggreaton              0x08
-#define bHTSIG2_STBC                   0x30
-#define bHTSIG2_AdvCoding              0x40
-#define bHTSIG2_NumOfHTLTF             0x300
-#define bHTSIG2_CRC8                   0x3fc
-#define bHTSIG1_MCS                    0x7f
-#define bHTSIG1_BandWidth              0x80
-#define bHTSIG1_HTLength               0xffff
-#define bLSIG_Rate                     0xf
-#define bLSIG_Reserved                 0x10
-#define bLSIG_Length                   0x1fffe
-#define bLSIG_Parity                   0x20
-#define bCCKRxPhase                    0x4
-
-#define bLSSIReadAddress               0x7f800000   /*  T65 RF */
-
-#define bLSSIReadEdge                  0x80000000   /* LSSI "Read" edge signal */
-
-#define bLSSIReadBackData              0xfffff         /*  T65 RF */
-
-#define bLSSIReadOKFlag                        0x1000  /*  Useless now */
-#define bCCKSampleRate                 0x8       /* 0: 44MHz, 1:88MHz */
-#define bRegulator0Standby             0x1
-#define bRegulatorPLLStandby           0x2
-#define bRegulator1Standby             0x4
-#define bPLLPowerUp                    0x8
-#define bDPLLPowerUp                   0x10
-#define bDA10PowerUp                   0x20
-#define bAD7PowerUp                    0x200
-#define bDA6PowerUp                    0x2000
-#define bXtalPowerUp                   0x4000
-#define b40MDClkPowerUP                        0x8000
-#define bDA6DebugMode                  0x20000
-#define bDA6Swing                      0x380000
-
-#define bADClkPhase                    0x4000000       /*  Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ */
-
-#define b80MClkDelay                   0x18000000      /*  Useless */
-#define bAFEWatchDogEnable             0x20000000
-
-#define bXtalCap01                     0xc0000000      /*  Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap */
-#define bXtalCap23                     0x3
-#define bXtalCap92x                    0x0f000000
-#define                bXtalCap                0x0f000000
-
-#define bIntDifClkEnable               0x400   /*  Useless */
-#define bExtSigClkEnable               0x800
-#define bBandgapMbiasPowerUp           0x10000
-#define bAD11SHGain                    0xc0000
-#define bAD11InputRange                        0x700000
-#define bAD11OPCurrent                 0x3800000
-#define bIPathLoopback                 0x4000000
-#define bQPathLoopback                 0x8000000
-#define bAFELoopback                   0x10000000
-#define bDA10Swing                     0x7e0
-#define bDA10Reverse                   0x800
-#define bDAClkSource                   0x1000
-#define bAD7InputRange                 0x6000
-#define bAD7Gain                       0x38000
-#define bAD7OutputCMMode               0x40000
-#define bAD7InputCMMode                        0x380000
-#define bAD7Current                    0xc00000
-#define bRegulatorAdjust               0x7000000
-#define bAD11PowerUpAtTx               0x1
-#define bDA10PSAtTx                    0x10
-#define bAD11PowerUpAtRx               0x100
-#define bDA10PSAtRx                    0x1000
-#define bCCKRxAGCFormat                        0x200
-#define bPSDFFTSamplepPoint            0xc000
-#define bPSDAverageNum                 0x3000
-#define bIQPathControl                 0xc00
-#define bPSDFreq                       0x3ff
-#define bPSDAntennaPath                        0x30
-#define bPSDIQSwitch                   0x40
-#define bPSDRxTrigger                  0x400000
-#define bPSDTxTrigger                  0x80000000
-#define bPSDSineToneScale              0x7f000000
-#define bPSDReport                     0xffff
-
-/*  3. Page9(0x900) */
-#define bOFDMTxSC                      0x30000000      /*  Useless */
-#define bCCKTxOn                       0x1
-#define bOFDMTxOn                      0x2
-#define bDebugPage                     0xfff  /* reset debug page and also HWord, LWord */
-#define bDebugItem                     0xff   /* reset debug page and LWord */
-#define bAntL                          0x10
-#define bAntNonHT                      0x100
-#define bAntHT1                                0x1000
-#define bAntHT2                                0x10000
-#define bAntHT1S1                      0x100000
-#define bAntNonHTS1                    0x1000000
-
-/*  4. PageA(0xA00) */
-#define bCCKBBMode                     0x3     /*  Useless */
-#define bCCKTxPowerSaving              0x80
-#define bCCKRxPowerSaving              0x40
-
-#define bCCKSideBand                   0x10    /*  Reg 0xa00 rCCK0_System 20/40 switch */
-
-#define bCCKScramble                   0x8     /*  Useless */
-#define bCCKAntDiversity               0x8000
-#define bCCKCarrierRecovery            0x4000
-#define bCCKTxRate                     0x3000
-#define bCCKDCCancel                   0x0800
-#define bCCKISICancel                  0x0400
-#define bCCKMatchFilter                        0x0200
-#define bCCKEqualizer                  0x0100
-#define bCCKPreambleDetect             0x800000
-#define bCCKFastFalseCCA               0x400000
-#define bCCKChEstStart                 0x300000
-#define bCCKCCACount                   0x080000
-#define bCCKcs_lim                     0x070000
-#define bCCKBistMode                   0x80000000
-#define bCCKCCAMask                    0x40000000
-#define bCCKTxDACPhase                 0x4
-#define bCCKRxADCPhase                 0x20000000   /* r_rx_clk */
-#define bCCKr_cp_mode0                 0x0100
-#define bCCKTxDCOffset                 0xf0
-#define bCCKRxDCOffset                 0xf
-#define bCCKCCAMode                    0xc000
-#define bCCKFalseCS_lim                        0x3f00
-#define bCCKCS_ratio                   0xc00000
-#define bCCKCorgBit_sel                        0x300000
-#define bCCKPD_lim                     0x0f0000
-#define bCCKNewCCA                     0x80000000
-#define bCCKRxHPofIG                   0x8000
-#define bCCKRxIG                       0x7f00
-#define bCCKLNAPolarity                        0x800000
-#define bCCKRx1stGain                  0x7f0000
-#define bCCKRFExtend                   0x20000000 /* CCK Rx Iinital gain polarity */
-#define bCCKRxAGCSatLevel              0x1f000000
-#define bCCKRxAGCSatCount              0xe0
-#define bCCKRxRFSettle                 0x1f       /* AGCsamp_dly */
-#define bCCKFixedRxAGC                 0x8000
-/* define bCCKRxAGCFormat              0x4000   remove to HSSI register 0x824 */
-#define bCCKAntennaPolarity            0x2000
-#define bCCKTxFilterType               0x0c00
-#define bCCKRxAGCReportType            0x0300
-#define bCCKRxDAGCEn                   0x80000000
-#define bCCKRxDAGCPeriod               0x20000000
-#define bCCKRxDAGCSatLevel             0x1f000000
-#define bCCKTimingRecovery             0x800000
-#define bCCKTxC0                       0x3f0000
-#define bCCKTxC1                       0x3f000000
-#define bCCKTxC2                       0x3f
-#define bCCKTxC3                       0x3f00
-#define bCCKTxC4                       0x3f0000
-#define bCCKTxC5                       0x3f000000
-#define bCCKTxC6                       0x3f
-#define bCCKTxC7                       0x3f00
-#define bCCKDebugPort                  0xff0000
-#define bCCKDACDebug                   0x0f000000
-#define bCCKFalseAlarmEnable           0x8000
-#define bCCKFalseAlarmRead             0x4000
-#define bCCKTRSSI                      0x7f
-#define bCCKRxAGCReport                        0xfe
-#define bCCKRxReport_AntSel            0x80000000
-#define bCCKRxReport_MFOff             0x40000000
-#define bCCKRxRxReport_SQLoss          0x20000000
-#define bCCKRxReport_Pktloss           0x10000000
-#define bCCKRxReport_Lockedbit         0x08000000
-#define bCCKRxReport_RateError         0x04000000
-#define bCCKRxReport_RxRate            0x03000000
-#define bCCKRxFACounterLower           0xff
-#define bCCKRxFACounterUpper           0xff000000
-#define bCCKRxHPAGCStart               0xe000
-#define bCCKRxHPAGCFinal               0x1c00
-#define bCCKRxFalseAlarmEnable         0x8000
-#define bCCKFACounterFreeze            0x4000
-#define bCCKTxPathSel                  0x10000000
-#define bCCKDefaultRxPath              0xc000000
-#define bCCKOptionRxPath               0x3000000
-
-/*  5. PageC(0xC00) */
-#define bNumOfSTF                      0x3     /*  Useless */
-#define bShift_L                       0xc0
-#define bGI_TH                         0xc
-#define bRxPathA                       0x1
-#define bRxPathB                       0x2
-#define bRxPathC                       0x4
-#define bRxPathD                       0x8
-#define bTxPathA                       0x1
-#define bTxPathB                       0x2
-#define bTxPathC                       0x4
-#define bTxPathD                       0x8
-#define bTRSSIFreq                     0x200
-#define bADCBackoff                    0x3000
-#define bDFIRBackoff                   0xc000
-#define bTRSSILatchPhase               0x10000
-#define bRxIDCOffset                   0xff
-#define bRxQDCOffset                   0xff00
-#define bRxDFIRMode                    0x1800000
-#define bRxDCNFType                    0xe000000
-#define bRXIQImb_A                     0x3ff
-#define bRXIQImb_B                     0xfc00
-#define bRXIQImb_C                     0x3f0000
-#define bRXIQImb_D                     0xffc00000
-#define bDC_dc_Notch                   0x60000
-#define bRxNBINotch                    0x1f000000
-#define bPD_TH                         0xf
-#define bPD_TH_Opt2                    0xc000
-#define bPWED_TH                       0x700
-#define bIfMF_Win_L                    0x800
-#define bPD_Option                     0x1000
-#define bMF_Win_L                      0xe000
-#define bBW_Search_L                   0x30000
-#define bwin_enh_L                     0xc0000
-#define bBW_TH                         0x700000
-#define bED_TH2                                0x3800000
-#define bBW_option                     0x4000000
-#define bRatio_TH                      0x18000000
-#define bWindow_L                      0xe0000000
-#define bSBD_Option                    0x1
-#define bFrame_TH                      0x1c
-#define bFS_Option                     0x60
-#define bDC_Slope_check                        0x80
-#define bFGuard_Counter_DC_L           0xe00
-#define bFrame_Weight_Short            0x7000
-#define bSub_Tune                      0xe00000
-#define bFrame_DC_Length               0xe000000
-#define bSBD_start_offset              0x30000000
-#define bFrame_TH_2                    0x7
-#define bFrame_GI2_TH                  0x38
-#define bGI2_Sync_en                   0x40
-#define bSarch_Short_Early             0x300
-#define bSarch_Short_Late              0xc00
-#define bSarch_GI2_Late                        0x70000
-#define bCFOAntSum                     0x1
-#define bCFOAcc                                0x2
-#define bCFOStartOffset                        0xc
-#define bCFOLookBack                   0x70
-#define bCFOSumWeight                  0x80
-#define bDAGCEnable                    0x10000
-#define bTXIQImb_A                     0x3ff
-#define bTXIQImb_B                     0xfc00
-#define bTXIQImb_C                     0x3f0000
-#define bTXIQImb_D                     0xffc00000
-#define bTxIDCOffset                   0xff
-#define bTxQDCOffset                   0xff00
-#define bTxDFIRMode                    0x10000
-#define bTxPesudoNoiseOn               0x4000000
-#define bTxPesudoNoise_A               0xff
-#define bTxPesudoNoise_B               0xff00
-#define bTxPesudoNoise_C               0xff0000
-#define bTxPesudoNoise_D               0xff000000
-#define bCCADropOption                 0x20000
-#define bCCADropThres                  0xfff00000
-#define bEDCCA_H                       0xf
-#define bEDCCA_L                       0xf0
-#define bLambda_ED                     0x300
-#define bRxInitialGain                 0x7f
-#define bRxAntDivEn                    0x80
-#define bRxAGCAddressForLNA            0x7f00
-#define bRxHighPowerFlow               0x8000
-#define bRxAGCFreezeThres              0xc0000
-#define bRxFreezeStep_AGC1             0x300000
-#define bRxFreezeStep_AGC2             0xc00000
-#define bRxFreezeStep_AGC3             0x3000000
-#define bRxFreezeStep_AGC0             0xc000000
-#define bRxRssi_Cmp_En                 0x10000000
-#define bRxQuickAGCEn                  0x20000000
-#define bRxAGCFreezeThresMode          0x40000000
-#define bRxOverFlowCheckType           0x80000000
-#define bRxAGCShift                    0x7f
-#define bTRSW_Tri_Only                 0x80
-#define bPowerThres                    0x300
-#define bRxAGCEn                       0x1
-#define bRxAGCTogetherEn               0x2
-#define bRxAGCMin                      0x4
-#define bRxHP_Ini                      0x7
-#define bRxHP_TRLNA                    0x70
-#define bRxHP_RSSI                     0x700
-#define bRxHP_BBP1                     0x7000
-#define bRxHP_BBP2                     0x70000
-#define bRxHP_BBP3                     0x700000
-#define bRSSI_H                                0x7f0000     /* the threshold for high power */
-#define bRSSI_Gen                      0x7f000000   /* the threshold for ant diversity */
-#define bRxSettle_TRSW                 0x7
-#define bRxSettle_LNA                  0x38
-#define bRxSettle_RSSI                 0x1c0
-#define bRxSettle_BBP                  0xe00
-#define bRxSettle_RxHP                 0x7000
-#define bRxSettle_AntSW_RSSI           0x38000
-#define bRxSettle_AntSW                        0xc0000
-#define bRxProcessTime_DAGC            0x300000
-#define bRxSettle_HSSI                 0x400000
-#define bRxProcessTime_BBPPW           0x800000
-#define bRxAntennaPowerShift           0x3000000
-#define bRSSITableSelect               0xc000000
-#define bRxHP_Final                    0x7000000
-#define bRxHTSettle_BBP                        0x7
-#define bRxHTSettle_HSSI               0x8
-#define bRxHTSettle_RxHP               0x70
-#define bRxHTSettle_BBPPW              0x80
-#define bRxHTSettle_Idle               0x300
-#define bRxHTSettle_Reserved           0x1c00
-#define bRxHTRxHPEn                    0x8000
-#define bRxHTAGCFreezeThres            0x30000
-#define bRxHTAGCTogetherEn             0x40000
-#define bRxHTAGCMin                    0x80000
-#define bRxHTAGCEn                     0x100000
-#define bRxHTDAGCEn                    0x200000
-#define bRxHTRxHP_BBP                  0x1c00000
-#define bRxHTRxHP_Final                        0xe0000000
-#define bRxPWRatioTH                   0x3
-#define bRxPWRatioEn                   0x4
-#define bRxMFHold                      0x3800
-#define bRxPD_Delay_TH1                        0x38
-#define bRxPD_Delay_TH2                        0x1c0
-#define bRxPD_DC_COUNT_MAX             0x600
-/* define bRxMF_Hold                       0x3800 */
-#define bRxPD_Delay_TH                 0x8000
-#define bRxProcess_Delay               0xf0000
-#define bRxSearchrange_GI2_Early       0x700000
-#define bRxFrame_Guard_Counter_L       0x3800000
-#define bRxSGI_Guard_L                 0xc000000
-#define bRxSGI_Search_L                        0x30000000
-#define bRxSGI_TH                      0xc0000000
-#define bDFSCnt0                       0xff
-#define bDFSCnt1                       0xff00
-#define bDFSFlag                       0xf0000
-#define bMFWeightSum                   0x300000
-#define bMinIdxTH                      0x7f000000
-#define bDAFormat                      0x40000
-#define bTxChEmuEnable                 0x01000000
-#define bTRSWIsolation_A               0x7f
-#define bTRSWIsolation_B               0x7f00
-#define bTRSWIsolation_C               0x7f0000
-#define bTRSWIsolation_D               0x7f000000
-#define bExtLNAGain                    0x7c00
-
-/*  6. PageE(0xE00) */
-#define bSTBCEn                                0x4     /*  Useless */
-#define bAntennaMapping                        0x10
-#define bNss                           0x20
-#define bCFOAntSumD                    0x200
-#define bPHYCounterReset               0x8000000
-#define bCFOReportGet                  0x4000000
-#define bOFDMContinueTx                        0x10000000
-#define bOFDMSingleCarrier             0x20000000
-#define bOFDMSingleTone                        0x40000000
-/* define bRxPath1                 0x01 */
-/* define bRxPath2                 0x02 */
-/* define bRxPath3                 0x04 */
-/* define bRxPath4                 0x08 */
-/* define bTxPath1                 0x10 */
-/* define bTxPath2                 0x20 */
-#define bHTDetect                      0x100
-#define bCFOEn                         0x10000
-#define bCFOValue                      0xfff00000
-#define bSigTone_Re                    0x3f
-#define bSigTone_Im                    0x7f00
-#define bCounter_CCA                   0xffff
-#define bCounter_ParityFail            0xffff0000
-#define bCounter_RateIllegal           0xffff
-#define bCounter_CRC8Fail              0xffff0000
-#define bCounter_MCSNoSupport          0xffff
-#define bCounter_FastSync              0xffff
-#define bShortCFO                      0xfff
-#define bShortCFOTLength               12   /* total */
-#define bShortCFOFLength               11   /* fraction */
-#define bLongCFO                       0x7ff
-#define bLongCFOTLength                        11
-#define bLongCFOFLength                        11
-#define bTailCFO                       0x1fff
-#define bTailCFOTLength                        13
-#define bTailCFOFLength                        12
-#define bmax_en_pwdB                   0xffff
-#define bCC_power_dB                   0xffff0000
-#define bnoise_pwdB                    0xffff
-#define bPowerMeasTLength              10
-#define bPowerMeasFLength              3
-#define bRx_HT_BW                      0x1
-#define bRxSC                          0x6
-#define bRx_HT                         0x8
-#define bNB_intf_det_on                        0x1
-#define bIntf_win_len_cfg              0x30
-#define bNB_Intf_TH_cfg                        0x1c0
-#define bRFGain                                0x3f
-#define bTableSel                      0x40
-#define bTRSW                          0x80
-#define bRxSNR_A                       0xff
-#define bRxSNR_B                       0xff00
-#define bRxSNR_C                       0xff0000
-#define bRxSNR_D                       0xff000000
-#define bSNREVMTLength                 8
-#define bSNREVMFLength                 1
-#define bCSI1st                                0xff
-#define bCSI2nd                                0xff00
-#define bRxEVM1st                      0xff0000
-#define bRxEVM2nd                      0xff000000
-#define bSIGEVM                                0xff
-#define bPWDB                          0xff00
-#define bSGIEN                         0x10000
-
-#define bSFactorQAM1                   0xf     /*  Useless */
-#define bSFactorQAM2                   0xf0
-#define bSFactorQAM3                   0xf00
-#define bSFactorQAM4                   0xf000
-#define bSFactorQAM5                   0xf0000
-#define bSFactorQAM6                   0xf0000
-#define bSFactorQAM7                   0xf00000
-#define bSFactorQAM8                   0xf000000
-#define bSFactorQAM9                   0xf0000000
-#define bCSIScheme                     0x100000
-
-#define bNoiseLvlTopSet                        0x3     /*  Useless */
-#define bChSmooth                      0x4
-#define bChSmoothCfg1                  0x38
-#define bChSmoothCfg2                  0x1c0
-#define bChSmoothCfg3                  0xe00
-#define bChSmoothCfg4                  0x7000
-#define bMRCMode                       0x800000
-#define bTHEVMCfg                      0x7000000
-
-#define bLoopFitType                   0x1     /*  Useless */
-#define bUpdCFO                                0x40
-#define bUpdCFOOffData                 0x80
-#define bAdvUpdCFO                     0x100
-#define bAdvTimeCtrl                   0x800
-#define bUpdClko                       0x1000
-#define bFC                            0x6000
-#define bTrackingMode                  0x8000
-#define bPhCmpEnable                   0x10000
-#define bUpdClkoLTF                    0x20000
-#define bComChCFO                      0x40000
-#define bCSIEstiMode                   0x80000
-#define bAdvUpdEqz                     0x100000
-#define bUChCfg                                0x7000000
-#define bUpdEqz                                0x8000000
-
-/* Rx Pseduo noise */
-#define bRxPesudoNoiseOn               0x20000000      /*  Useless */
-#define bRxPesudoNoise_A               0xff
-#define bRxPesudoNoise_B               0xff00
-#define bRxPesudoNoise_C               0xff0000
-#define bRxPesudoNoise_D               0xff000000
-#define bPesudoNoiseState_A            0xffff
-#define bPesudoNoiseState_B            0xffff0000
-#define bPesudoNoiseState_C            0xffff
-#define bPesudoNoiseState_D            0xffff0000
-
-/* 7. RF Register */
-/* Zebra1 */
-#define bZebra1_HSSIEnable             0x8             /*  Useless */
-#define bZebra1_TRxControl             0xc00
-#define bZebra1_TRxGainSetting         0x07f
-#define bZebra1_RxCorner               0xc00
-#define bZebra1_TxChargePump           0x38
-#define bZebra1_RxChargePump           0x7
-#define bZebra1_ChannelNum             0xf80
-#define bZebra1_TxLPFBW                        0x400
-#define bZebra1_RxLPFBW                        0x600
-
-/* Zebra4 */
-#define bRTL8256RegModeCtrl1           0x100   /*  Useless */
-#define bRTL8256RegModeCtrl0           0x40
-#define bRTL8256_TxLPFBW               0x18
-#define bRTL8256_RxLPFBW               0x600
-
-/* RTL8258 */
-#define bRTL8258_TxLPFBW               0xc     /*  Useless */
-#define bRTL8258_RxLPFBW               0xc00
-#define bRTL8258_RSSILPFBW             0xc0
-
-
-/*  Other Definition */
-
-/* byte endable for sb_write */
-#define bByte0                         0x1     /*  Useless */
-#define bByte1                         0x2
-#define bByte2                         0x4
-#define bByte3                         0x8
-#define bWord0                         0x3
-#define bWord1                         0xc
-#define bDWord                         0xf
-
-/* for PutRegsetting & GetRegSetting BitMask */
-#define bMaskByte0                     0xff    /*  Reg 0xc50 rOFDM0_XAAGCCore~0xC6f */
-#define bMaskByte1                     0xff00
-#define bMaskByte2                     0xff0000
-#define bMaskByte3                     0xff000000
-#define bMaskHWord                     0xffff0000
-#define bMaskLWord                     0x0000ffff
-#define bMaskDWord                     0xffffffff
-#define bMask12Bits                    0xfff
-#define bMaskH4Bits                    0xf0000000
-#define bMaskOFDM_D                    0xffc00000
-#define bMaskCCK                       0x3f3f3f3f
-
-/* for PutRFRegsetting & GetRFRegSetting BitMask */
-#define                bRFRegOffsetMask        0xfffff
-
-#define bDisable                       0x0
-
-#define LeftAntenna                    0x0     /*  Useless */
-#define RightAntenna                   0x1
-
-#define tCheckTxStatus                 500   /* 500ms Useless */
-#define tUpdateRxCounter               100   /* 100ms */
-
-#define rateCCK                                0       /*  Useless */
-#define rateOFDM                       1
-#define rateHT                         2
-
-/* define Register-End */
-#define bPMAC_End                      0x1ff   /*  Useless */
-#define bFPGAPHY0_End                  0x8ff
-#define bFPGAPHY1_End                  0x9ff
-#define bCCKPHY0_End                   0xaff
-#define bOFDMPHY0_End                  0xcff
-#define bOFDMPHY1_End                  0xdff
-
-/* define max debug item in each debug page */
-/* define bMaxItem_FPGA_PHY0        0x9 */
-/* define bMaxItem_FPGA_PHY1        0x3 */
-/* define bMaxItem_PHY_11B          0x16 */
-/* define bMaxItem_OFDM_PHY0        0x29 */
-/* define bMaxItem_OFDM_PHY1        0x0 */
-
-#define bPMACControl                   0x0     /*  Useless */
-#define bWMACControl                   0x1
-#define bWNICControl                   0x2
-
-#define PathA                          0x0     /*  Useless */
-#define PathB                          0x1
-#define PathC                          0x2
-#define PathD                          0x3
-
-/*  PageB(0xB00) */
-#define rPdp_AntA                      0xb00
-#define rPdp_AntA_4                    0xb04
-#define rPdp_AntA_8                    0xb08
-#define rPdp_AntA_C                    0xb0c
-#define rPdp_AntA_18                   0xb18
-#define rPdp_AntA_1C                   0xb1c
-#define rPdp_AntA_20                   0xb20
-#define rPdp_AntA_24                   0xb24
-
-#define rConfig_Pmpd_AntA              0xb28
-#define rConfig_ram64x16               0xb2c
-
-#define rBndA                          0xb30
-#define rHssiPar                       0xb34
-
-#define rConfig_AntA                   0xb68
-#define rConfig_AntB                   0xb6c
-
-#define rPdp_AntB                      0xb70
-#define rPdp_AntB_4                    0xb74
-#define rPdp_AntB_8                    0xb78
-#define rPdp_AntB_C                    0xb7c
-#define rPdp_AntB_10                   0xb80
-#define rPdp_AntB_14                   0xb84
-#define rPdp_AntB_18                   0xb88
-#define rPdp_AntB_1C                   0xb8c
-#define rPdp_AntB_20                   0xb90
-#define rPdp_AntB_24                   0xb94
-
-#define rConfig_Pmpd_AntB              0xb98
-
-#define rBndB                          0xba0
-
-#define rAPK                           0xbd8
-#define rPm_Rx0_AntA                   0xbdc
-#define rPm_Rx1_AntA                   0xbe0
-#define rPm_Rx2_AntA                   0xbe4
-#define rPm_Rx3_AntA                   0xbe8
-#define rPm_Rx0_AntB                   0xbec
-#define rPm_Rx1_AntB                   0xbf0
-#define rPm_Rx2_AntB                   0xbf4
-#define rPm_Rx3_AntB                   0xbf8
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/Hal8723PwrSeq.h b/drivers/staging/rtl8723au/include/Hal8723PwrSeq.h
deleted file mode 100644 (file)
index 3771d6b..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-#ifndef __HAL8723PWRSEQ_H__
-#define __HAL8723PWRSEQ_H__
-/*
-       Check document WM-20110607-Paul-RTL8723A_Power_Architecture-R02.vsd
-       There are 6 HW Power States:
-       0: POFF--Power Off
-       1: PDN--Power Down
-       2: CARDEMU--Card Emulation
-       3: ACT--Active Mode
-       4: LPS--Low Power State
-       5: SUS--Suspend
-
-       The transision from different states are defined below
-       TRANS_CARDEMU_TO_ACT
-       TRANS_ACT_TO_CARDEMU
-       TRANS_CARDEMU_TO_SUS
-       TRANS_SUS_TO_CARDEMU
-       TRANS_CARDEMU_TO_PDN
-       TRANS_ACT_TO_LPS
-       TRANS_LPS_TO_ACT
-
-       TRANS_END
-*/
-#include "HalPwrSeqCmd.h"
-#include "rtl8723a_spec.h"
-
-#define        RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS     15
-#define        RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS     15
-#define        RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS     15
-#define        RTL8723A_TRANS_SUS_TO_CARDEMU_STEPS     15
-#define        RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS     15
-#define        RTL8723A_TRANS_PDN_TO_CARDEMU_STEPS     15
-#define        RTL8723A_TRANS_ACT_TO_LPS_STEPS 15
-#define        RTL8723A_TRANS_LPS_TO_ACT_STEPS 15
-#define        RTL8723A_TRANS_END_STEPS        1
-
-
-/* format
- * { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value },  comments here
- */
-#define RTL8723A_TRANS_CARDEMU_TO_ACT                                                                                                          \
-       {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \
-       {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/    \
-       {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/   \
-       {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), 0}, /*0x00[5] = 1b'0 release analog Ips to digital , 1:isolation*/   \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(2), 0},/* disable SW LPS 0x04[10]= 0*/        \
-       {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), BIT(1)},/* wait till 0x04[17] = 1    power ready*/      \
-       {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* release WLON reset  0x04[16]= 1*/ \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/* disable HWPDN 0x04[15]= 0*/ \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, (BIT(4)|BIT(3)), 0},/* disable WL suspend*/       \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)},/* polling until return 0*/       \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(0), 0},/**/ \
-       {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 1},/*0x4C[23] = 0x4E[7] = 1, switch DPDT_SEL_P output from WL BB */\
-
-#define RTL8723A_TRANS_ACT_TO_CARDEMU                                                                                                  \
-       {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/    \
-       {0x004E, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/*0x4C[23] = 0x4E[7] = 0, switch DPDT_SEL_P output from register 0x65[2] */\
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(1), 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \
-       {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)}, /*0x00[5] = 1b'1 analog Ips to digital , 1:isolation*/   \
-       {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/   \
-
-
-#define RTL8723A_TRANS_CARDEMU_TO_SUS                                                                                                  \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/
-
-#define RTL8723A_TRANS_SUS_TO_CARDEMU                                                                                                  \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0}, /*clear suspend enable and power down enable*/       \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8723A_TRANS_CARDEMU_TO_CARDDIS                                                                                                      \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), BIT(3)}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \
-       {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), BIT(0)}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/
-
-#define RTL8723A_TRANS_CARDDIS_TO_CARDEMU                                                                                                      \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3) | BIT(7), 0}, /*clear suspend enable and power down enable*/       \
-       {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/   \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(3)|BIT(4), 0}, /*0x04[12:11] = 2b'01enable WL suspend*/
-
-#define RTL8723A_TRANS_CARDEMU_TO_PDN                                                                                          \
-       {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/   \
-       {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/* 0x04[16] = 0*/\
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), BIT(7)},/* 0x04[15] = 1*/
-
-#define RTL8723A_TRANS_PDN_TO_CARDEMU                                                                                          \
-       {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(7), 0},/* 0x04[15] = 0*/
-
-#define RTL8723A_TRANS_ACT_TO_LPS                                                                                                              \
-       {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/  \
-       {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/        \
-       {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/        \
-       {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/        \
-       {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/        \
-       {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(0), 0},/*CCK and OFDM are disabled, and clock are gated*/     \
-       {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \
-       {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*Whole BB is reset*/  \
-       {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/     \
-       {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), 0},/*check if removed later*/     \
-       {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(5), BIT(5)},/*Respond TxOK to scheduler*/
-
-#define RTL8723A_TRANS_LPS_TO_ACT                                                                                                                      \
-       {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\
-       {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\
-       {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(4), 0}, /*.   0x08[4] = 0              switch TSF to 40M*/\
-       {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_POLLING, BIT(7), 0}, /*Polling 0x109[7]= 0  TSF in 40M*/\
-       {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(6)|BIT(7), 0}, /*.    0x29[7:6] = 2b'00        enable BB clock*/\
-       {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1), BIT(1)}, /*.      0x101[1] = 1*/\
-       {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0xFF}, /*.  0x100[7:0] = 0xFF        enable WMAC TRX*/\
-       {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, BIT(1)|BIT(0), BIT(1)|BIT(0)}, /*.        0x02[1:0] = 2b'11        enable BB macro*/\
-       {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, PWR_BASEADDR_MAC, PWR_CMD_WRITE, 0xFF, 0}, /*.     0x522 = 0*/
-
-#define RTL8723A_TRANS_END                                                                                                                     \
-       {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK, 0, PWR_CMD_END, 0, 0},
-
-
-extern struct wlan_pwr_cfg rtl8723AU_power_on_flow[RTL8723A_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_radio_off_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_card_disable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_card_enable_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_suspend_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_resume_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_hwpdn_flow[RTL8723A_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723A_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_enter_lps_flow[RTL8723A_TRANS_ACT_TO_LPS_STEPS+RTL8723A_TRANS_END_STEPS];
-extern struct wlan_pwr_cfg rtl8723AU_leave_lps_flow[RTL8723A_TRANS_LPS_TO_ACT_STEPS+RTL8723A_TRANS_END_STEPS];
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/Hal8723UHWImg_CE.h b/drivers/staging/rtl8723au/include/Hal8723UHWImg_CE.h
deleted file mode 100644 (file)
index c834b3a..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef __INC_HAL8723U_FW_IMG_H
-#define __INC_HAL8723U_FW_IMG_H
-
-/*Created on  2013/01/14, 15:51*/
-
-/* FW v16 enable usb interrupt */
-#define Rtl8723UImgArrayLength 22172
-extern u8 Rtl8723UFwImgArray[Rtl8723UImgArrayLength];
-#define Rtl8723UBTImgArrayLength 1
-extern u8 Rtl8723UFwBTImgArray[Rtl8723UBTImgArrayLength];
-
-#define Rtl8723UUMCBCutImgArrayWithBTLength 24118
-#define Rtl8723UUMCBCutImgArrayWithoutBTLength 19200
-
-extern u8 Rtl8723UFwUMCBCutImgArrayWithBT[Rtl8723UUMCBCutImgArrayWithBTLength];
-extern u8 Rtl8723UFwUMCBCutImgArrayWithoutBT[Rtl8723UUMCBCutImgArrayWithoutBTLength];
-
-#define Rtl8723SUMCBCutMPImgArrayLength 24174
-extern const u8 Rtl8723SFwUMCBCutMPImgArray[Rtl8723SUMCBCutMPImgArrayLength];
-
-#define Rtl8723EBTImgArrayLength 15276
-extern u8 Rtl8723EFwBTImgArray[Rtl8723EBTImgArrayLength];
-
-#define Rtl8723UPHY_REG_Array_PGLength 336
-extern u32 Rtl8723UPHY_REG_Array_PG[Rtl8723UPHY_REG_Array_PGLength];
-#define Rtl8723UMACPHY_Array_PGLength 1
-extern u32 Rtl8723UMACPHY_Array_PG[Rtl8723UMACPHY_Array_PGLength];
-
-#endif /* ifndef __INC_HAL8723U_FW_IMG_H */
diff --git a/drivers/staging/rtl8723au/include/HalDMOutSrc8723A.h b/drivers/staging/rtl8723au/include/HalDMOutSrc8723A.h
deleted file mode 100644 (file)
index d7651f7..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef        __RTL8723A_ODM_H__
-#define __RTL8723A_ODM_H__
-/*  */
-
-#define        RSSI_CCK        0
-#define        RSSI_OFDM       1
-#define        RSSI_DEFAULT    2
-
-#define IQK_MAC_REG_NUM                4
-#define IQK_ADDA_REG_NUM               16
-#define IQK_BB_REG_NUM                 9
-#define HP_THERMAL_NUM         8
-
-
-/*  */
-/*  structure and define */
-/*  */
-
-
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export Marco Definition---------------------------*/
-/* define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;} */
-
-
-/*  */
-/*  function prototype */
-/*  */
-
-/*  */
-/*  IQ calibrate */
-/*  */
-void rtl8723a_phy_iq_calibrate(struct rtw_adapter *pAdapter, bool bReCovery);
-
-/*  */
-/*  LC calibrate */
-/*  */
-void rtl8723a_phy_lc_calibrate(struct rtw_adapter *pAdapter);
-
-/*  */
-/*  AP calibrate */
-/*  */
-void rtl8723a_phy_ap_calibrate(struct rtw_adapter *pAdapter, char delta);
-
-void rtl8723a_odm_check_tx_power_tracking(struct rtw_adapter *Adapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h b/drivers/staging/rtl8723au/include/HalHWImg8723A_BB.h
deleted file mode 100644 (file)
index 1276094..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-*
-******************************************************************************/
-
-#ifndef __INC_BB_8723A_HW_IMG_H
-#define __INC_BB_8723A_HW_IMG_H
-
-/******************************************************************************
-*                           AGC_TAB_1T.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_AGC_TAB_1T_8723A(struct dm_odm_t *pDM_Odm);
-
-/******************************************************************************
-*                           PHY_REG_1T.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_PHY_REG_1T_8723A(struct dm_odm_t *pDM_Odm);
-
-/******************************************************************************
-*                           PHY_REG_MP.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_PHY_REG_MP_8723A(struct dm_odm_t *pDM_Odm);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/rtl8723au/include/HalHWImg8723A_FW.h b/drivers/staging/rtl8723au/include/HalHWImg8723A_FW.h
deleted file mode 100644 (file)
index 7ee363b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-*
-******************************************************************************/
-
-#ifndef __INC_FW_8723A_HW_IMG_H
-#define __INC_FW_8723A_HW_IMG_H
-
-
-/******************************************************************************
-*                           rtl8723fw_B.TXT
-******************************************************************************/
-
-void ODM_ReadFirmware_8723A_rtl8723fw_B(struct dm_odm_t *pDM_Odm,
-                                       u8 *pFirmware, u32 *pFirmwareSize);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/rtl8723au/include/HalHWImg8723A_MAC.h b/drivers/staging/rtl8723au/include/HalHWImg8723A_MAC.h
deleted file mode 100644 (file)
index 201be1f..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-*
-******************************************************************************/
-
-#ifndef __INC_MAC_8723A_HW_IMG_H
-#define __INC_MAC_8723A_HW_IMG_H
-
-/******************************************************************************
-*                           MAC_REG.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_MAC_REG_8723A(struct dm_odm_t *pDM_Odm);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/rtl8723au/include/HalHWImg8723A_RF.h b/drivers/staging/rtl8723au/include/HalHWImg8723A_RF.h
deleted file mode 100644 (file)
index c9af1c3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-/******************************************************************************
-*
-* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
-*
-* This program is free software; you can redistribute it and/or modify it
-* under the terms of version 2 of the GNU General Public License as
-* published by the Free Software Foundation.
-*
-* This program is distributed in the hope that it will be useful, but WITHOUT
-* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
-* more details.
-*
-******************************************************************************/
-
-#ifndef __INC_RF_8723A_HW_IMG_H
-#define __INC_RF_8723A_HW_IMG_H
-
-/******************************************************************************
-*                           RadioA_1T.TXT
-******************************************************************************/
-
-void ODM_ReadAndConfig_RadioA_1T_8723A(struct dm_odm_t *pDM_Odm);
-
-#endif /*  end of HWIMG_SUPPORT */
diff --git a/drivers/staging/rtl8723au/include/HalPwrSeqCmd.h b/drivers/staging/rtl8723au/include/HalPwrSeqCmd.h
deleted file mode 100644 (file)
index 12e03a3..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __HALPWRSEQCMD_H__
-#define __HALPWRSEQCMD_H__
-
-#include <drv_types.h>
-
-/*---------------------------------------------*/
-/*---------------------------------------------*/
-#define PWR_CMD_READ                   0x00
-     /*  offset: the read register offset */
-     /*  msk: the mask of the read value */
-     /*  value: N/A, left by 0 */
-     /*  note: dirver shall implement this function by read & msk */
-
-#define PWR_CMD_WRITE                  0x01
-     /*  offset: the read register offset */
-     /*  msk: the mask of the write bits */
-     /*  value: write value */
-     /*  note: driver shall implement this cmd by read & msk after write */
-
-#define PWR_CMD_POLLING                        0x02
-     /*  offset: the read register offset */
-     /*  msk: the mask of the polled value */
-     /*  value: the value to be polled, masked by the msd field. */
-     /*  note: driver shall implement this cmd by */
-     /*  do{ */
-     /*  if( (Read(offset) & msk) == (value & msk) ) */
-     /*  break; */
-     /*  } while(not timeout); */
-
-#define PWR_CMD_DELAY                  0x03
-     /*  offset: the value to delay */
-     /*  msk: N/A */
-     /*  value: the unit of delay, 0: us, 1: ms */
-
-#define PWR_CMD_END                            0x04
-     /*  offset: N/A */
-     /*  msk: N/A */
-     /*  value: N/A */
-
-/*---------------------------------------------*/
-/* 3 The value of base: 4 bits */
-/*---------------------------------------------*/
-   /*  define the base address of each block */
-#define PWR_BASEADDR_MAC               0x00
-#define PWR_BASEADDR_USB               0x01
-#define PWR_BASEADDR_PCIE              0x02
-#define PWR_BASEADDR_SDIO              0x03
-
-/*---------------------------------------------*/
-/* 3 The value of interface_msk: 4 bits */
-/*---------------------------------------------*/
-#define        PWR_INTF_SDIO_MSK               BIT(0)
-#define        PWR_INTF_USB_MSK                BIT(1)
-#define        PWR_INTF_PCI_MSK                BIT(2)
-#define        PWR_INTF_ALL_MSK                (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-/* 3 The value of fab_msk: 4 bits */
-/*---------------------------------------------*/
-#define        PWR_FAB_TSMC_MSK                BIT(0)
-#define        PWR_FAB_UMC_MSK                 BIT(1)
-#define        PWR_FAB_ALL_MSK                 (BIT(0)|BIT(1)|BIT(2)|BIT(3))
-
-/*---------------------------------------------*/
-/* 3 The value of cut_msk: 8 bits */
-/*---------------------------------------------*/
-#define        PWR_CUT_TESTCHIP_MSK    BIT(0)
-#define        PWR_CUT_A_MSK                   BIT(1)
-#define        PWR_CUT_B_MSK                   BIT(2)
-#define        PWR_CUT_C_MSK                   BIT(3)
-#define        PWR_CUT_D_MSK                   BIT(4)
-#define        PWR_CUT_E_MSK                   BIT(5)
-#define        PWR_CUT_F_MSK                   BIT(6)
-#define        PWR_CUT_G_MSK                   BIT(7)
-#define        PWR_CUT_ALL_MSK                 0xFF
-
-
-enum pwrseq_delay_unit {
-       PWRSEQ_DELAY_US,
-       PWRSEQ_DELAY_MS,
-};
-
-struct wlan_pwr_cfg {
-       u16 offset;
-       u8 cut_msk;
-       u8 fab_msk:4;
-       u8 interface_msk:4;
-       u8 base:4;
-       u8 cmd:4;
-       u8 msk;
-       u8 value;
-};
-
-
-#define GET_PWR_CFG_OFFSET(__PWR_CMD)          __PWR_CMD.offset
-#define GET_PWR_CFG_CUT_MASK(__PWR_CMD)                __PWR_CMD.cut_msk
-#define GET_PWR_CFG_FAB_MASK(__PWR_CMD)                __PWR_CMD.fab_msk
-#define GET_PWR_CFG_INTF_MASK(__PWR_CMD)       __PWR_CMD.interface_msk
-#define GET_PWR_CFG_BASE(__PWR_CMD)                    __PWR_CMD.base
-#define GET_PWR_CFG_CMD(__PWR_CMD)                     __PWR_CMD.cmd
-#define GET_PWR_CFG_MASK(__PWR_CMD)                    __PWR_CMD.msk
-#define GET_PWR_CFG_VALUE(__PWR_CMD)           __PWR_CMD.value
-
-
-/*  */
-/*     Prototype of protected function. */
-/*  */
-u8 HalPwrSeqCmdParsing23a(
-       struct rtw_adapter              *padapter,
-       u8                              CutVersion,
-       u8                              FabVersion,
-       u8                              InterfaceType,
-       struct wlan_pwr_cfg     PwrCfgCmd[]);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/HalVerDef.h b/drivers/staging/rtl8723au/include/HalVerDef.h
deleted file mode 100644 (file)
index 2a0e4ea..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __HAL_VERSION_DEF_H__
-#define __HAL_VERSION_DEF_H__
-
-enum hal_ic_type {
-       CHIP_8192S              =       0,
-       CHIP_8188C      =       1,
-       CHIP_8192C      =       2,
-       CHIP_8192D      =       3,
-       CHIP_8723A      =       4,
-       CHIP_8188E      =       5,
-       CHIP_8881A      =       6,
-       CHIP_8812A      =       7,
-       CHIP_8821A      =       8,
-       CHIP_8723B      =       9,
-       CHIP_8192E              =       10,
-};
-
-enum hal_chip_type {
-       TEST_CHIP               =       0,
-       NORMAL_CHIP             =       1,
-       FPGA                    =       2,
-};
-
-enum hal_cut_version {
-       A_CUT_VERSION           =       0,
-       B_CUT_VERSION           =       1,
-       C_CUT_VERSION           =       2,
-       D_CUT_VERSION           =       3,
-       E_CUT_VERSION           =       4,
-       F_CUT_VERSION           =       5,
-       G_CUT_VERSION           =       6,
-};
-
-/*  HAL_Manufacturer */
-enum hal_vendor {
-       CHIP_VENDOR_TSMC        =       0,
-       CHIP_VENDOR_UMC         =       1,
-};
-
-struct hal_version {
-       enum hal_ic_type        ICType;
-       enum hal_chip_type      ChipType;
-       enum hal_cut_version    CUTVersion;
-       enum hal_vendor         VendorType;
-       u8                      ROMVer;
-};
-
-/*  Get element */
-#define GET_CVID_IC_TYPE(version)      ((version).ICType)
-#define GET_CVID_CHIP_TYPE(version)    ((version).ChipType)
-#define GET_CVID_MANUFACTUER(version)  ((version).VendorType)
-#define GET_CVID_CUT_VERSION(version)  ((version).CUTVersion)
-#define GET_CVID_ROM_VERSION(version)  (((version).ROMVer) & ROM_VERSION_MASK)
-
-/* Common Macro. -- */
-
-#define IS_81XXC(version)                      \
-       (((GET_CVID_IC_TYPE(version) == CHIP_8192C) ||  \
-        (GET_CVID_IC_TYPE(version) == CHIP_8188C)) ? true : false)
-#define IS_8723_SERIES(version)                        \
-       ((GET_CVID_IC_TYPE(version) == CHIP_8723A) ? true : false)
-
-#define IS_TEST_CHIP(version)                  \
-       ((GET_CVID_CHIP_TYPE(version) == TEST_CHIP) ? true : false)
-#define IS_NORMAL_CHIP(version)                        \
-       ((GET_CVID_CHIP_TYPE(version) == NORMAL_CHIP) ? true : false)
-
-#define IS_A_CUT(version)                      \
-       ((GET_CVID_CUT_VERSION(version) == A_CUT_VERSION) ? true : false)
-#define IS_B_CUT(version)                      \
-       ((GET_CVID_CUT_VERSION(version) == B_CUT_VERSION) ? true : false)
-#define IS_C_CUT(version)                      \
-       ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? true : false)
-#define IS_D_CUT(version)                      \
-       ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? true : false)
-#define IS_E_CUT(version)                      \
-       ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? true : false)
-
-#define IS_CHIP_VENDOR_TSMC(version)           \
-       ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_TSMC) ? true : false)
-#define IS_CHIP_VENDOR_UMC(version)            \
-       ((GET_CVID_MANUFACTUER(version) == CHIP_VENDOR_UMC) ? true : false)
-
-/* Chip version Macro. -- */
-
-#define IS_81xxC_VENDOR_UMC_A_CUT(version)                     \
-       (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ?       \
-       (IS_A_CUT(version) ? true : false) : false) : false)
-#define IS_81xxC_VENDOR_UMC_B_CUT(version)                     \
-       (IS_81XXC(version) ? (IS_CHIP_VENDOR_UMC(version) ?     \
-        (IS_B_CUT(version) ? true : false) : false): false)
-#define IS_81xxC_VENDOR_UMC_C_CUT(version)                     \
-       (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ?       \
-       (IS_C_CUT(version) ? true : false) : false) : false)
-#define IS_8723A_A_CUT(version)                                \
-       ((IS_8723_SERIES(version)) ? (IS_A_CUT(version) ? true : false) : false)
-#define IS_8723A_B_CUT(version)                                        \
-       ((IS_8723_SERIES(version)) ? (IS_B_CUT(version) ? true : false) : false)
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h
deleted file mode 100644 (file)
index e83463a..0000000
+++ /dev/null
@@ -1,274 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/*-----------------------------------------------------------------------------
-
-       For type defines and data structure defines
-
-------------------------------------------------------------------------------*/
-
-
-#ifndef __DRV_TYPES_H__
-#define __DRV_TYPES_H__
-
-#include <osdep_service.h>
-#include <wlan_bssdef.h>
-
-
-enum _NIC_VERSION {
-       RTL8711_NIC,
-       RTL8712_NIC,
-       RTL8713_NIC,
-       RTL8716_NIC
-
-};
-
-
-#include <rtw_ht.h>
-
-#include <rtw_cmd.h>
-#include <rtw_xmit.h>
-#include <rtw_recv.h>
-#include <hal_intf.h>
-#include <hal_com.h>
-#include <rtw_security.h>
-#include <rtw_pwrctrl.h>
-#include <rtw_io.h>
-#include <rtw_eeprom.h>
-#include <sta_info.h>
-#include <rtw_mlme.h>
-#include <rtw_debug.h>
-#include <rtw_rf.h>
-#include <rtw_event.h>
-#include <rtw_mlme_ext.h>
-#include <rtw_ap.h>
-
-#include "ioctl_cfg80211.h"
-
-struct registry_priv {
-       u8      chip_version;
-       u8      rfintfs;
-       struct  cfg80211_ssid ssid;
-       u8      channel;/* ad-hoc support requirement */
-       u8      wireless_mode;/* A, B, G, auto */
-       u8      scan_mode;/* active, passive */
-       u8      preamble;/* long, short, auto */
-       u8      vrtl_carrier_sense;/* Enable, Disable, Auto */
-       u8      vcs_type;/* RTS/CTS, CTS-to-self */
-       u16     rts_thresh;
-       u16  frag_thresh;
-       u8      adhoc_tx_pwr;
-       u8      soft_ap;
-       u8      power_mgnt;
-       u8      ips_mode;
-       u8      smart_ps;
-       u8      long_retry_lmt;
-       u8      short_retry_lmt;
-       u16     busy_thresh;
-       u8      ack_policy;
-       u8      software_encrypt;
-       u8      software_decrypt;
-       u8      acm_method;
-         /* UAPSD */
-       u8      wmm_enable;
-       u8      uapsd_enable;
-
-       struct wlan_bssid_ex    dev_network;
-
-       u8      ht_enable;
-       u8      cbw40_enable;
-       u8      ampdu_enable;/* for tx */
-       u8      rx_stbc;
-       u8      ampdu_amsdu;/* A-MPDU Supports A-MSDU is permitted */
-       u8      lowrate_two_xmit;
-
-       u8      rf_config;
-       u8      low_power;
-
-       u8      wifi_spec;/*  !turbo_mode */
-
-       u8      channel_plan;
-#ifdef CONFIG_8723AU_BT_COEXIST
-       u8      btcoex;
-       u8      bt_iso;
-       u8      bt_sco;
-       u8      bt_ampdu;
-#endif
-       bool    bAcceptAddbaReq;
-
-       u8      antdiv_cfg;
-       u8      antdiv_type;
-
-       u8      hwpdn_mode;/* 0:disable,1:enable,2:decide by EFUSE config */
-       u8      hwpwrp_detect;/* 0:disable,1:enable */
-
-       u8      hw_wps_pbc;/* 0:disable,1:enable */
-
-       u8      max_roaming_times; /* max number driver will try to roaming */
-
-       u8 enable80211d;
-
-       u8 ifname[16];
-       u8 if2name[16];
-
-       u8 notch_filter;
-
-       u8 regulatory_tid;
-};
-
-
-#define MAX_CONTINUAL_URB_ERR 4
-
-#define GET_PRIMARY_ADAPTER(padapter)                                  \
-       (((struct rtw_adapter *)padapter)->dvobj->if1)
-
-enum _IFACE_ID {
-       IFACE_ID0, /* maping to PRIMARY_ADAPTER */
-       IFACE_ID1, /* maping to SECONDARY_ADAPTER */
-       IFACE_ID2,
-       IFACE_ID3,
-       IFACE_ID_MAX,
-};
-
-struct dvobj_priv {
-       struct rtw_adapter *if1; /* PRIMARY_ADAPTER */
-       struct rtw_adapter *if2; /* SECONDARY_ADAPTER */
-
-       /* for local/global synchronization */
-       struct mutex hw_init_mutex;
-       struct mutex h2c_fwcmd_mutex;
-       struct mutex setch_mutex;
-       struct mutex setbw_mutex;
-
-       unsigned char   oper_channel; /* saved chan info when set chan bw */
-       unsigned char   oper_bwmode;
-       unsigned char   oper_ch_offset;/* PRIME_CHNL_OFFSET */
-
-       struct rtw_adapter *padapters[IFACE_ID_MAX];
-       u8 iface_nums; /*  total number of ifaces used runtime */
-
-       /* For 92D, DMDP have 2 interface. */
-       u8      InterfaceNumber;
-       u8      NumInterfaces;
-
-       /* In /Out Pipe information */
-       int     RtInPipe[2];
-       int     RtOutPipe[3];
-       u8      Queue2Pipe[HW_QUEUE_ENTRY];/* for out pipe mapping */
-
-/*-------- below is for USB INTERFACE --------*/
-
-       u8      nr_endpoint;
-       u8      ishighspeed;
-       u8      RtNumInPipes;
-       u8      RtNumOutPipes;
-       int     ep_num[5]; /* endpoint number */
-
-       struct mutex usb_vendor_req_mutex;
-
-       union {
-               __le32 val32;
-               __le16 val16;
-               u8 val8;
-       } usb_buf;
-
-       struct usb_interface *pusbintf;
-       struct usb_device *pusbdev;
-       atomic_t continual_urb_error;
-
-/*-------- below is for PCIE INTERFACE --------*/
-
-};
-
-static inline struct device *dvobj_to_dev(struct dvobj_priv *dvobj)
-{
-       /* todo: get interface type from dvobj and the return the dev accordingly */
-       return &dvobj->pusbintf->dev;
-}
-
-enum _IFACE_TYPE {
-       IFACE_PORT0, /* mapping to port0 for C/D series chips */
-       IFACE_PORT1, /* mapping to port1 for C/D series chip */
-       MAX_IFACE_PORT,
-};
-
-enum _ADAPTER_TYPE {
-       PRIMARY_ADAPTER,
-       SECONDARY_ADAPTER,
-       MAX_ADAPTER,
-};
-
-struct rtw_adapter {
-       int     pid[3];/* process id from UI, 0:wps, 1:hostapd, 2:dhcpcd */
-       int     bDongle;/* build-in module or external dongle */
-       u16     chip_type;
-       u16     HardwareType;
-
-       struct dvobj_priv *dvobj;
-       struct  mlme_priv mlmepriv;
-       struct  mlme_ext_priv mlmeextpriv;
-       struct  cmd_priv        cmdpriv;
-       struct  evt_priv        evtpriv;
-       struct  xmit_priv       xmitpriv;
-       struct  recv_priv       recvpriv;
-       struct  sta_priv        stapriv;
-       struct  security_priv   securitypriv;
-       struct  registry_priv   registrypriv;
-       struct  pwrctrl_priv    pwrctrlpriv;
-       struct  eeprom_priv eeprompriv;
-
-       u32     setband;
-
-       void *HalData;
-
-       s32     bDriverStopped;
-       s32     bSurpriseRemoved;
-       s32  bCardDisableWOHSM;
-
-       u32     IsrContent;
-       u32     ImrContent;
-
-       u8      EepromAddressSize;
-       u8      hw_init_completed;
-       u8      bDriverIsGoingToUnload;
-       u8      init_adpt_in_progress;
-       u8      bHaltInProgress;
-
-       struct net_device *pnetdev;
-
-       /*  used by rtw_rereg_nd_name related function */
-       int bup;
-       struct net_device_stats stats;
-
-       struct wireless_dev *rtw_wdev;
-       int net_closed;
-
-       u8 bFWReady;
-       u8 bReadPortCancel;
-       u8 bWritePortCancel;
-
-       /* extend to support multi interface */
-       /* IFACE_ID0 is equals to PRIMARY_ADAPTER */
-       /* IFACE_ID1 is equals to SECONDARY_ADAPTER */
-       u8 iface_id;
-};
-
-#define adapter_to_dvobj(adapter) (adapter->dvobj)
-
-static inline u8 *myid(struct eeprom_priv *peepriv)
-{
-       return peepriv->mac_addr;
-}
-
-#endif /* __DRV_TYPES_H__ */
diff --git a/drivers/staging/rtl8723au/include/hal_com.h b/drivers/staging/rtl8723au/include/hal_com.h
deleted file mode 100644 (file)
index 9c50320..0000000
+++ /dev/null
@@ -1,182 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __HAL_COMMON_H__
-#define __HAL_COMMON_H__
-
-/*  */
-/*        Rate Definition */
-/*  */
-/* CCK */
-#define        RATR_1M                                 0x00000001
-#define        RATR_2M                                 0x00000002
-#define        RATR_55M                                0x00000004
-#define        RATR_11M                                0x00000008
-/* OFDM */
-#define        RATR_6M                                 0x00000010
-#define        RATR_9M                                 0x00000020
-#define        RATR_12M                                0x00000040
-#define        RATR_18M                                0x00000080
-#define        RATR_24M                                0x00000100
-#define        RATR_36M                                0x00000200
-#define        RATR_48M                                0x00000400
-#define        RATR_54M                                0x00000800
-/* MCS 1 Spatial Stream */
-#define        RATR_MCS0                               0x00001000
-#define        RATR_MCS1                               0x00002000
-#define        RATR_MCS2                               0x00004000
-#define        RATR_MCS3                               0x00008000
-#define        RATR_MCS4                               0x00010000
-#define        RATR_MCS5                               0x00020000
-#define        RATR_MCS6                               0x00040000
-#define        RATR_MCS7                               0x00080000
-/* MCS 2 Spatial Stream */
-#define        RATR_MCS8                               0x00100000
-#define        RATR_MCS9                               0x00200000
-#define        RATR_MCS10                              0x00400000
-#define        RATR_MCS11                              0x00800000
-#define        RATR_MCS12                              0x01000000
-#define        RATR_MCS13                              0x02000000
-#define        RATR_MCS14                              0x04000000
-#define        RATR_MCS15                              0x08000000
-
-/* CCK */
-#define RATE_1M                                        BIT(0)
-#define RATE_2M                                        BIT(1)
-#define RATE_5_5M                              BIT(2)
-#define RATE_11M                               BIT(3)
-/* OFDM */
-#define RATE_6M                                        BIT(4)
-#define RATE_9M                                        BIT(5)
-#define RATE_12M                               BIT(6)
-#define RATE_18M                               BIT(7)
-#define RATE_24M                               BIT(8)
-#define RATE_36M                               BIT(9)
-#define RATE_48M                               BIT(10)
-#define RATE_54M                               BIT(11)
-
-/*------------------------------ Tx Desc definition Macro ------------------------*/
-/* pragma mark -- Tx Desc related definition. -- */
-/*  */
-/*  */
-/*     Rate */
-/*  */
-/*  CCK Rates, TxHT = 0 */
-#define DESC_RATE1M                            0x00
-#define DESC_RATE2M                            0x01
-#define DESC_RATE5_5M                          0x02
-#define DESC_RATE11M                           0x03
-
-/*  OFDM Rates, TxHT = 0 */
-#define DESC_RATE6M                            0x04
-#define DESC_RATE9M                            0x05
-#define DESC_RATE12M                           0x06
-#define DESC_RATE18M                           0x07
-#define DESC_RATE24M                           0x08
-#define DESC_RATE36M                           0x09
-#define DESC_RATE48M                           0x0a
-#define DESC_RATE54M                           0x0b
-
-/*  MCS Rates, TxHT = 1 */
-#define DESC_RATEMCS0                          0x0c
-#define DESC_RATEMCS1                          0x0d
-#define DESC_RATEMCS2                          0x0e
-#define DESC_RATEMCS3                          0x0f
-#define DESC_RATEMCS4                          0x10
-#define DESC_RATEMCS5                          0x11
-#define DESC_RATEMCS6                          0x12
-#define DESC_RATEMCS7                          0x13
-#define DESC_RATEMCS8                          0x14
-#define DESC_RATEMCS9                          0x15
-#define DESC_RATEMCS10                         0x16
-#define DESC_RATEMCS11                         0x17
-#define DESC_RATEMCS12                         0x18
-#define DESC_RATEMCS13                         0x19
-#define DESC_RATEMCS14                         0x1a
-#define DESC_RATEMCS15                         0x1b
-#define DESC_RATEMCS15_SG                      0x1c
-#define DESC_RATEMCS32                         0x20
-
-#define REG_P2P_CTWIN                                  0x0572 /*  1 Byte long (in unit of TU) */
-#define REG_NOA_DESC_SEL                               0x05CF
-#define REG_NOA_DESC_DURATION          0x05E0
-#define REG_NOA_DESC_INTERVAL                  0x05E4
-#define REG_NOA_DESC_START                     0x05E8
-#define REG_NOA_DESC_COUNT                     0x05EC
-
-#include "HalVerDef.h"
-
-
-u8     /* return the final channel plan decision */
-hal_com_get_channel_plan23a(
-       struct rtw_adapter      *padapter,
-       u8                      hw_channel_plan,        /* channel plan from HW (efuse/eeprom) */
-       u8                      sw_channel_plan,        /* channel plan from SW (registry/module param) */
-       u8                      def_channel_plan,       /* channel plan used when the former two is invalid */
-       bool            AutoLoadFail
-       );
-
-u8     MRateToHwRate23a(u8 rate);
-
-void HalSetBrateCfg23a(struct rtw_adapter *padapter, u8 *mBratesOS);
-
-bool
-Hal_MappingOutPipe23a(struct rtw_adapter *pAdapter, u8 NumOutPipe);
-
-void c2h_evt_clear23a(struct rtw_adapter *adapter);
-s32 c2h_evt_read23a(struct rtw_adapter *adapter, u8 *buf);
-
-void rtl8723a_set_ampdu_min_space(struct rtw_adapter *padapter, u8 MinSpacingToSet);
-void rtl8723a_set_ampdu_factor(struct rtw_adapter *padapter, u8 FactorToSet);
-void rtl8723a_set_acm_ctrl(struct rtw_adapter *padapter, u8 ctrl);
-void rtl8723a_set_media_status(struct rtw_adapter *padapter, u8 status);
-void rtl8723a_set_media_status1(struct rtw_adapter *padapter, u8 status);
-void rtl8723a_set_bcn_func(struct rtw_adapter *padapter, u8 val);
-void rtl8723a_check_bssid(struct rtw_adapter *padapter, u8 val);
-void rtl8723a_mlme_sitesurvey(struct rtw_adapter *padapter, u8 flag);
-void rtl8723a_on_rcr_am(struct rtw_adapter *padapter);
-void rtl8723a_off_rcr_am(struct rtw_adapter *padapter);
-void rtl8723a_set_slot_time(struct rtw_adapter *padapter, u8 slottime);
-void rtl8723a_ack_preamble(struct rtw_adapter *padapter, u8 bShortPreamble);
-void rtl8723a_set_sec_cfg(struct rtw_adapter *padapter, u8 sec);
-void rtl8723a_cam_empty_entry(struct rtw_adapter *padapter, u8 ucIndex);
-void rtl8723a_cam_invalidate_all(struct rtw_adapter *padapter);
-void rtl8723a_cam_write(struct rtw_adapter *padapter,
-                       u8 entry, u16 ctrl, const u8 *mac, const u8 *key);
-void rtl8723a_fifo_cleanup(struct rtw_adapter *padapter);
-void rtl8723a_set_apfm_on_mac(struct rtw_adapter *padapter, u8 val);
-void rtl8723a_bcn_valid(struct rtw_adapter *padapter);
-bool rtl8723a_get_bcn_valid(struct rtw_adapter *padapter);
-void rtl8723a_set_beacon_interval(struct rtw_adapter *padapter, u16 interval);
-void rtl8723a_set_resp_sifs(struct rtw_adapter *padapter,
-                           u8 r2t1, u8 r2t2, u8 t2t1, u8 t2t2);
-void rtl8723a_set_ac_param_vo(struct rtw_adapter *padapter, u32 vo);
-void rtl8723a_set_ac_param_vi(struct rtw_adapter *padapter, u32 vi);
-void rtl8723a_set_ac_param_be(struct rtw_adapter *padapter, u32 be);
-void rtl8723a_set_ac_param_bk(struct rtw_adapter *padapter, u32 bk);
-void rtl8723a_set_rxdma_agg_pg_th(struct rtw_adapter *padapter, u8 val);
-void rtl8723a_set_initial_gain(struct rtw_adapter *padapter, u32 rx_gain);
-
-void rtl8723a_odm_support_ability_write(struct rtw_adapter *padapter, u32 val);
-void rtl8723a_odm_support_ability_backup(struct rtw_adapter *padapter);
-void rtl8723a_odm_support_ability_restore(struct rtw_adapter *padapter);
-void rtl8723a_odm_support_ability_set(struct rtw_adapter *padapter, u32 val);
-void rtl8723a_odm_support_ability_clr(struct rtw_adapter *padapter, u32 val);
-
-void rtl8723a_set_rpwm(struct rtw_adapter *padapter, u8 val);
-u8 rtl8723a_get_rf_type(struct rtw_adapter *padapter);
-bool rtl8723a_get_fwlps_rf_on(struct rtw_adapter *padapter);
-bool rtl8723a_chk_hi_queue_empty(struct rtw_adapter *padapter);
-
-#endif /* __HAL_COMMON_H__ */
diff --git a/drivers/staging/rtl8723au/include/hal_intf.h b/drivers/staging/rtl8723au/include/hal_intf.h
deleted file mode 100644 (file)
index b924d47..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __HAL_INTF_H__
-#define __HAL_INTF_H__
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-enum _CHIP_TYPE {
-       NULL_CHIP_TYPE,
-       RTL8712_8188S_8191S_8192S,
-       RTL8188C_8192C,
-       RTL8192D,
-       RTL8723A,
-       RTL8188E,
-       MAX_CHIP_TYPE
-};
-
-enum hal_def_variable {
-       HAL_DEF_UNDERCORATEDSMOOTHEDPWDB,
-       HAL_DEF_IS_SUPPORT_ANT_DIV,
-       HAL_DEF_CURRENT_ANTENNA,
-       HAL_DEF_DRVINFO_SZ,
-       HAL_DEF_MAX_RECVBUF_SZ,
-       HAL_DEF_RX_PACKET_OFFSET,
-       HAL_DEF_DBG_DUMP_RXPKT,/* for dbg */
-       HAL_DEF_DBG_DM_FUNC,/* for dbg */
-       HAL_DEF_RA_DECISION_RATE,
-       HAL_DEF_RA_SGI,
-       HAL_DEF_PT_PWR_STATUS,
-       HW_VAR_MAX_RX_AMPDU_FACTOR,
-       HW_DEF_RA_INFO_DUMP,
-       HAL_DEF_DBG_DUMP_TXPKT,
-       HW_DEF_FA_CNT_DUMP,
-       HW_DEF_ODM_DBG_FLAG,
-};
-
-enum hal_odm_variable {
-       HAL_ODM_STA_INFO,
-       HAL_ODM_P2P_STATE,
-       HAL_ODM_WIFI_DISPLAY_STATE,
-};
-
-enum rt_eeprom_type {
-       EEPROM_93C46,
-       EEPROM_93C56,
-       EEPROM_BOOT_EFUSE,
-};
-
-
-
-#define RF_CHANGE_BY_INIT      0
-#define RF_CHANGE_BY_IPS       BIT(28)
-#define RF_CHANGE_BY_PS                BIT(29)
-#define RF_CHANGE_BY_HW                BIT(30)
-#define RF_CHANGE_BY_SW                BIT(31)
-
-enum hardware_type {
-       HARDWARE_TYPE_RTL8180,
-       HARDWARE_TYPE_RTL8185,
-       HARDWARE_TYPE_RTL8187,
-       HARDWARE_TYPE_RTL8188,
-       HARDWARE_TYPE_RTL8190P,
-       HARDWARE_TYPE_RTL8192E,
-       HARDWARE_TYPE_RTL819xU,
-       HARDWARE_TYPE_RTL8192SE,
-       HARDWARE_TYPE_RTL8192SU,
-       HARDWARE_TYPE_RTL8192CE,
-       HARDWARE_TYPE_RTL8192CU,
-       HARDWARE_TYPE_RTL8192DE,
-       HARDWARE_TYPE_RTL8192DU,
-       HARDWARE_TYPE_RTL8723AE,
-       HARDWARE_TYPE_RTL8723AU,
-       HARDWARE_TYPE_RTL8723AS,
-       HARDWARE_TYPE_RTL8188EE,
-       HARDWARE_TYPE_RTL8188EU,
-       HARDWARE_TYPE_RTL8188ES,
-       HARDWARE_TYPE_MAX,
-};
-
-#define GET_EEPROM_EFUSE_PRIV(adapter) (&adapter->eeprompriv)
-
-void rtw_hal_def_value_init23a(struct rtw_adapter *padapter);
-int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal);
-
-int rtl8723au_hal_init(struct rtw_adapter *padapter);
-int rtl8723au_hal_deinit(struct rtw_adapter *padapter);
-void rtw_hal_stop(struct rtw_adapter *padapter);
-
-void rtw_hal_update_ra_mask23a(struct sta_info *psta, u8 rssi_level);
-void   rtw_hal_clone_data(struct rtw_adapter *dst_padapter, struct rtw_adapter *src_padapter);
-
-void hw_var_set_correct_tsf(struct rtw_adapter *padapter);
-void hw_var_set_mlme_disconnect(struct rtw_adapter *padapter);
-void hw_var_set_opmode(struct rtw_adapter *padapter, u8 mode);
-void hw_var_set_macaddr(struct rtw_adapter *padapter, u8 *val);
-void hw_var_set_bssid(struct rtw_adapter *padapter, u8 *val);
-void hw_var_set_mlme_join(struct rtw_adapter *padapter, u8 type);
-
-int GetHalDefVar8192CUsb(struct rtw_adapter *Adapter,
-                        enum hal_def_variable eVariable, void *pValue);
-
-#endif /* __HAL_INTF_H__ */
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
deleted file mode 100644 (file)
index 634102e..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __IEEE80211_H
-#define __IEEE80211_H
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include "linux/ieee80211.h"
-#include "wifi.h"
-
-#include <linux/wireless.h>
-
-#if (WIRELESS_EXT < 22)
-#error "Obsolete pre 2007 wireless extensions are not supported"
-#endif
-
-
-#ifdef CONFIG_8723AU_AP_MODE
-
-/* STA flags */
-#define WLAN_STA_AUTH BIT(0)
-#define WLAN_STA_ASSOC BIT(1)
-#define WLAN_STA_PS BIT(2)
-#define WLAN_STA_TIM BIT(3)
-#define WLAN_STA_PERM BIT(4)
-#define WLAN_STA_AUTHORIZED BIT(5)
-#define WLAN_STA_PENDING_POLL BIT(6) /* pending activity poll not ACKed */
-#define WLAN_STA_SHORT_PREAMBLE BIT(7)
-#define WLAN_STA_PREAUTH BIT(8)
-#define WLAN_STA_WME BIT(9)
-#define WLAN_STA_MFP BIT(10)
-#define WLAN_STA_HT BIT(11)
-#define WLAN_STA_WPS BIT(12)
-#define WLAN_STA_MAYBE_WPS BIT(13)
-#define WLAN_STA_NONERP BIT(31)
-
-#endif
-
-#define WPA_CIPHER_NONE                BIT(0)
-#define WPA_CIPHER_WEP40       BIT(1)
-#define WPA_CIPHER_WEP104      BIT(2)
-#define WPA_CIPHER_TKIP                BIT(3)
-#define WPA_CIPHER_CCMP                BIT(4)
-
-
-
-#define WPA_SELECTOR_LEN 4
-extern u8 RTW_WPA_OUI23A_TYPE[] ;
-extern u16 RTW_WPA_VERSION23A ;
-extern u8 WPA_AUTH_KEY_MGMT_NONE23A[];
-extern u8 WPA_AUTH_KEY_MGMT_UNSPEC_802_1X23A[];
-extern u8 WPA_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[];
-extern u8 WPA_CIPHER_SUITE_NONE23A[];
-extern u8 WPA_CIPHER_SUITE_WEP4023A[];
-extern u8 WPA_CIPHER_SUITE_TKIP23A[];
-extern u8 WPA_CIPHER_SUITE_WRAP23A[];
-extern u8 WPA_CIPHER_SUITE_CCMP23A[];
-extern u8 WPA_CIPHER_SUITE_WEP10423A[];
-
-
-#define RSN_HEADER_LEN 4
-#define RSN_SELECTOR_LEN 4
-
-extern u8 RSN_AUTH_KEY_MGMT_UNSPEC_802_1X23A[];
-extern u8 RSN_AUTH_KEY_MGMT_PSK_OVER_802_1X23A[];
-extern u8 RSN_CIPHER_SUITE_NONE23A[];
-extern u8 RSN_CIPHER_SUITE_WEP4023A[];
-extern u8 RSN_CIPHER_SUITE_TKIP23A[];
-extern u8 RSN_CIPHER_SUITE_WRAP23A[];
-extern u8 RSN_CIPHER_SUITE_CCMP23A[];
-extern u8 RSN_CIPHER_SUITE_WEP10423A[];
-
-enum ratr_table_mode {
-       RATR_INX_WIRELESS_NGB = 0,      /*  BGN 40 Mhz 2SS 1SS */
-       RATR_INX_WIRELESS_NG = 1,       /*  GN or N */
-       RATR_INX_WIRELESS_NB = 2,       /*  BGN 20 Mhz 2SS 1SS  or BN */
-       RATR_INX_WIRELESS_N = 3,
-       RATR_INX_WIRELESS_GB = 4,
-       RATR_INX_WIRELESS_G = 5,
-       RATR_INX_WIRELESS_B = 6,
-       RATR_INX_WIRELESS_MC = 7,
-       RATR_INX_WIRELESS_AC_N = 8,
-};
-
-enum NETWORK_TYPE
-{
-       WIRELESS_INVALID = 0,
-       /* Sub-Element */
-       /*  tx: cck only , rx: cck only, hw: cck */
-       WIRELESS_11B = BIT(0),
-       /*  tx: ofdm only, rx: ofdm & cck, hw: cck & ofdm */
-       WIRELESS_11G = BIT(1),
-       /*  tx: ofdm only, rx: ofdm only, hw: ofdm only */
-       WIRELESS_11A = BIT(2),
-       /*  tx: MCS only, rx: MCS & cck, hw: MCS & cck */
-       WIRELESS_11_24N = BIT(3),
-       /*  tx: MCS only, rx: MCS & ofdm, hw: ofdm only */
-       WIRELESS_11_5N = BIT(4),
-       /* WIRELESS_AUTO                = BIT(5), */
-       WIRELESS_AC = BIT(6),
-
-       /* Combination */
-        /*  tx: cck & ofdm, rx: cck & ofdm & MCS, hw: cck & ofdm */
-       WIRELESS_11BG = WIRELESS_11B|WIRELESS_11G,
-       /*  tx: ofdm & MCS, rx: ofdm & cck & MCS, hw: cck & ofdm */
-       WIRELESS_11G_24N = WIRELESS_11G | WIRELESS_11_24N,
-       /*  tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only */
-       WIRELESS_11A_5N = WIRELESS_11A | WIRELESS_11_5N,
-       /*  tx: ofdm & cck & MCS, rx: ofdm & cck & MCS, hw: ofdm & cck */
-       WIRELESS_11BG_24N = WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N,
-       /*  tx: ofdm & MCS, rx: ofdm & MCS, hw: ofdm only */
-       WIRELESS_11AGN = WIRELESS_11A | WIRELESS_11G | WIRELESS_11_24N |
-                               WIRELESS_11_5N,
-       WIRELESS_11ABGN = WIRELESS_11A | WIRELESS_11B | WIRELESS_11G |
-                               WIRELESS_11_24N | WIRELESS_11_5N,
-};
-
-#define SUPPORTED_24G_NETTYPE_MSK (WIRELESS_11B | WIRELESS_11G | WIRELESS_11_24N)
-#define SUPPORTED_5G_NETTYPE_MSK (WIRELESS_11A | WIRELESS_11_5N)
-
-#define IsSupported24G(NetType) (NetType & SUPPORTED_24G_NETTYPE_MSK ? true : false)
-#define IsSupported5G(NetType) (NetType & SUPPORTED_5G_NETTYPE_MSK ? true : false)
-
-#define IsEnableHWCCK(NetType) IsSupported24G(NetType)
-#define IsEnableHWOFDM(NetType) (NetType & (WIRELESS_11G|WIRELESS_11_24N|SUPPORTED_5G_NETTYPE_MSK) ? true : false)
-
-#define IsSupportedRxCCK(NetType) IsEnableHWCCK(NetType)
-#define IsSupportedRxOFDM(NetType) IsEnableHWOFDM(NetType)
-#define IsSupportedRxMCS(NetType) IsEnableHWOFDM(NetType)
-
-#define IsSupportedTxCCK(NetType) (NetType & (WIRELESS_11B) ? true : false)
-#define IsSupportedTxOFDM(NetType) (NetType & (WIRELESS_11G|WIRELESS_11A) ? true : false)
-#define IsSupportedTxMCS(NetType) (NetType & (WIRELESS_11_24N|WIRELESS_11_5N) ? true : false)
-
-
-#define MIN_FRAG_THRESHOLD     256U
-#define        MAX_FRAG_THRESHOLD     2346U
-
-/* QoS,QOS */
-#define NORMAL_ACK                     0
-#define NO_ACK                         1
-#define NON_EXPLICIT_ACK               2
-#define BLOCK_ACK                      3
-
-/* IEEE 802.11 defines */
-
-#define P80211_OUI_LEN 3
-
-struct ieee80211_snap_hdr {
-       u8    dsap;   /* always 0xAA */
-       u8    ssap;   /* always 0xAA */
-       u8    ctrl;   /* always 0x03 */
-       u8    oui[P80211_OUI_LEN];    /* organizational universal id */
-} __attribute__ ((packed));
-
-
-#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
-
-#define WLAN_REASON_JOIN_WRONG_CHANNEL       65534
-#define WLAN_REASON_EXPIRATION_CHK 65535
-
-#define IEEE80211_CCK_RATE_LEN                 4
-#define IEEE80211_NUM_OFDM_RATESLEN    8
-
-
-#define IEEE80211_CCK_RATE_1MB                 0x02
-#define IEEE80211_CCK_RATE_2MB                 0x04
-#define IEEE80211_CCK_RATE_5MB                 0x0B
-#define IEEE80211_CCK_RATE_11MB                        0x16
-#define IEEE80211_OFDM_RATE_LEN                        8
-#define IEEE80211_OFDM_RATE_6MB                        0x0C
-#define IEEE80211_OFDM_RATE_9MB                        0x12
-#define IEEE80211_OFDM_RATE_12MB               0x18
-#define IEEE80211_OFDM_RATE_18MB               0x24
-#define IEEE80211_OFDM_RATE_24MB               0x30
-#define IEEE80211_OFDM_RATE_36MB               0x48
-#define IEEE80211_OFDM_RATE_48MB               0x60
-#define IEEE80211_OFDM_RATE_54MB               0x6C
-#define IEEE80211_BASIC_RATE_MASK              0x80
-
-#define IEEE80211_CCK_RATE_1MB_MASK            (1<<0)
-#define IEEE80211_CCK_RATE_2MB_MASK            (1<<1)
-#define IEEE80211_CCK_RATE_5MB_MASK            (1<<2)
-#define IEEE80211_CCK_RATE_11MB_MASK           (1<<3)
-#define IEEE80211_OFDM_RATE_6MB_MASK           (1<<4)
-#define IEEE80211_OFDM_RATE_9MB_MASK           (1<<5)
-#define IEEE80211_OFDM_RATE_12MB_MASK          (1<<6)
-#define IEEE80211_OFDM_RATE_18MB_MASK          (1<<7)
-#define IEEE80211_OFDM_RATE_24MB_MASK          (1<<8)
-#define IEEE80211_OFDM_RATE_36MB_MASK          (1<<9)
-#define IEEE80211_OFDM_RATE_48MB_MASK          (1<<10)
-#define IEEE80211_OFDM_RATE_54MB_MASK          (1<<11)
-
-#define IEEE80211_CCK_RATES_MASK               0x0000000F
-#define IEEE80211_CCK_BASIC_RATES_MASK (IEEE80211_CCK_RATE_1MB_MASK | \
-       IEEE80211_CCK_RATE_2MB_MASK)
-#define IEEE80211_CCK_DEFAULT_RATES_MASK       (IEEE80211_CCK_BASIC_RATES_MASK | \
-       IEEE80211_CCK_RATE_5MB_MASK | \
-       IEEE80211_CCK_RATE_11MB_MASK)
-
-#define IEEE80211_OFDM_RATES_MASK              0x00000FF0
-#define IEEE80211_OFDM_BASIC_RATES_MASK        (IEEE80211_OFDM_RATE_6MB_MASK | \
-       IEEE80211_OFDM_RATE_12MB_MASK | \
-       IEEE80211_OFDM_RATE_24MB_MASK)
-#define IEEE80211_OFDM_DEFAULT_RATES_MASK      (IEEE80211_OFDM_BASIC_RATES_MASK | \
-       IEEE80211_OFDM_RATE_9MB_MASK  | \
-       IEEE80211_OFDM_RATE_18MB_MASK | \
-       IEEE80211_OFDM_RATE_36MB_MASK | \
-       IEEE80211_OFDM_RATE_48MB_MASK | \
-       IEEE80211_OFDM_RATE_54MB_MASK)
-#define IEEE80211_DEFAULT_RATES_MASK (IEEE80211_OFDM_DEFAULT_RATES_MASK | \
-                                     IEEE80211_CCK_DEFAULT_RATES_MASK)
-
-#define IEEE80211_NUM_OFDM_RATES           8
-#define IEEE80211_NUM_CCK_RATES                    4
-#define IEEE80211_OFDM_SHIFT_MASK_A         4
-
-#define WEP_KEYS 4
-
-
-/* MAX_RATES_LENGTH needs to be 12.  The spec says 8, and many APs
- * only use 8, and then use extended rates for the remaining supported
- * rates.  Other APs, however, stick all of their supported rates on the
- * main rates information element... */
-#define MAX_RATES_LENGTH       12
-#define MAX_RATES_EX_LENGTH    16
-#define MAX_CHANNEL_NUMBER     161
-#define RTW_CH_MAX_2G_CHANNEL  14      /* Max channel in 2G band */
-
-#define MAX_WPA_IE_LEN         256
-#define MAX_WPS_IE_LEN         256
-#define MAX_P2P_IE_LEN         256
-#define MAX_WFD_IE_LEN         128
-
-/*
-join_res:
--1: authentication fail
--2: association fail
-> 0: TID
-*/
-
-#define MAXTID 16
-
-#define WME_OUI_TYPE 2
-#define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
-#define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
-#define WME_OUI_SUBTYPE_TSPEC_ELEMENT 2
-#define WME_VERSION 1
-
-
-#define OUI_BROADCOM 0x00904c /* Broadcom (Epigram) */
-
-#define VENDOR_HT_CAPAB_OUI_TYPE 0x33 /* 00-90-4c:0x33 */
-
-/* Represent channel details, subset of ieee80211_channel */
-struct rtw_ieee80211_channel {
-       /* enum nl80211_band band; */
-       /* u16 center_freq; */
-       u16 hw_value;
-       u32 flags;
-       /* int max_antenna_gain; */
-       /* int max_power; */
-       /* int max_reg_power; */
-       /* bool beacon_found; */
-       /* u32 orig_flags; */
-       /* int orig_mag; */
-       /* int orig_mpwr; */
-};
-
-#define CHAN_FMT \
-       /*"band:%d, "*/ \
-       /*"center_freq:%u, "*/ \
-       "hw_value:%u, " \
-       "flags:0x%08x" \
-       /*"max_antenna_gain:%d\n"*/ \
-       /*"max_power:%d\n"*/ \
-       /*"max_reg_power:%d\n"*/ \
-       /*"beacon_found:%u\n"*/ \
-       /*"orig_flags:0x%08x\n"*/ \
-       /*"orig_mag:%d\n"*/ \
-       /*"orig_mpwr:%d\n"*/
-
-#define CHAN_ARG(channel) \
-       /*(channel)->band*/ \
-       /*, (channel)->center_freq*/ \
-       (channel)->hw_value \
-       , (channel)->flags \
-       /*, (channel)->max_antenna_gain*/ \
-       /*, (channel)->max_power*/ \
-       /*, (channel)->max_reg_power*/ \
-       /*, (channel)->beacon_found*/ \
-       /*, (channel)->orig_flags*/ \
-       /*, (channel)->orig_mag*/ \
-       /*, (channel)->orig_mpwr*/ \
-
-u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen);
-
-u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset);
-u8 *rtw_set_ie23a_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode, u8 new_ch, u8 ch_switch_cnt);
-u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset);
-
-u8 *rtw_get_ie23a(u8*pbuf, int index, int *len, int limit);
-u8 *rtw_get_ie23a_ex(u8 *in_ie, uint in_len, u8 eid, u8 *oui, u8 oui_len, u8 *ie, uint *ielen);
-int rtw_ies_remove_ie23a(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u8 oui_len);
-
-void rtw_set_supported_rate23a(u8 *SupportedRates, uint mode);
-
-int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);
-int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);
-
-const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
-const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content);
-
-uint   rtw_get_rateset_len23a(u8       *rateset);
-
-struct registry_priv;
-int rtw_generate_ie23a(struct registry_priv *pregistrypriv);
-
-
-int rtw_get_bit_value_from_ieee_value23a(u8 val);
-
-int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel);
-
-void rtw_get_bcn_info23a(struct wlan_network *pnetwork);
-
-u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
-                   struct ieee80211_mcs_info *mcs);
-
-#endif /* IEEE80211_H */
diff --git a/drivers/staging/rtl8723au/include/ioctl_cfg80211.h b/drivers/staging/rtl8723au/include/ioctl_cfg80211.h
deleted file mode 100644 (file)
index 3a4ead5..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __IOCTL_CFG80211_H__
-#define __IOCTL_CFG80211_H__
-
-struct rtw_wdev_priv {
-       struct wireless_dev *rtw_wdev;
-
-       struct rtw_adapter *padapter;
-
-       struct cfg80211_scan_request *scan_request;
-       spinlock_t scan_req_lock;
-
-       struct net_device *pmon_ndev;/* for monitor interface */
-       char ifname_mon[IFNAMSIZ + 1]; /* name for monitor interface */
-
-       u8 p2p_enabled;
-
-       bool power_mgmt;
-};
-
-#define wdev_to_priv(w) ((struct rtw_wdev_priv *)(wdev_priv(w)))
-
-#define wiphy_to_adapter(x)                                    \
-       (struct rtw_adapter *)(((struct rtw_wdev_priv *)        \
-       wiphy_priv(x))->padapter)
-
-#define wiphy_to_wdev(x)                                       \
-       (struct wireless_dev *)(((struct rtw_wdev_priv *)       \
-       wiphy_priv(x))->rtw_wdev)
-
-int rtw_wdev_alloc(struct rtw_adapter *padapter, struct device *dev);
-void rtw_wdev_free(struct wireless_dev *wdev);
-void rtw_wdev_unregister(struct wireless_dev *wdev);
-
-void rtw_cfg80211_init_wiphy(struct rtw_adapter *padapter);
-
-void rtw_cfg80211_surveydone_event_callback(struct rtw_adapter *padapter);
-
-void rtw_cfg80211_indicate_connect(struct rtw_adapter *padapter);
-void rtw_cfg80211_indicate_disconnect(struct rtw_adapter *padapter);
-void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv,
-                                    bool aborted);
-
-#ifdef CONFIG_8723AU_AP_MODE
-void rtw_cfg80211_indicate_sta_assoc(struct rtw_adapter *padapter,
-                                    u8 *pmgmt_frame, uint frame_len);
-void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
-                                       unsigned char *da, unsigned short reason);
-#endif /* CONFIG_8723AU_AP_MODE */
-
-bool rtw_cfg80211_pwr_mgmt(struct rtw_adapter *adapter);
-
-#endif /* __IOCTL_CFG80211_H__ */
diff --git a/drivers/staging/rtl8723au/include/mlme_osdep.h b/drivers/staging/rtl8723au/include/mlme_osdep.h
deleted file mode 100644 (file)
index 4bb5525..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef        __MLME_OSDEP_H_
-#define __MLME_OSDEP_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-void rtw_os_indicate_disconnect23a(struct rtw_adapter *adapter);
-void rtw_reset_securitypriv23a(struct rtw_adapter *adapter);
-
-#endif /* _MLME_OSDEP_H_ */
diff --git a/drivers/staging/rtl8723au/include/odm.h b/drivers/staging/rtl8723au/include/odm.h
deleted file mode 100644 (file)
index 24f2f28..0000000
+++ /dev/null
@@ -1,860 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-
-#ifndef        __HALDMOUTSRC_H__
-#define __HALDMOUTSRC_H__
-
-/*  */
-/*  Definition */
-/*  */
-/*  */
-/*  2011/09/22 MH Define all team supprt ability. */
-/*  */
-
-/*  */
-/*  2011/09/22 MH Define for all teams. Please Define the constan in your precomp header. */
-/*  */
-/* define              DM_ODM_SUPPORT_AP                       0 */
-/* define              DM_ODM_SUPPORT_ADSL                     0 */
-/* define              DM_ODM_SUPPORT_CE                       0 */
-/* define              DM_ODM_SUPPORT_MP                       1 */
-
-#define        TP_MODE         0
-#define        RSSI_MODE               1
-#define        TRAFFIC_LOW     0
-#define        TRAFFIC_HIGH    1
-
-
-/*  */
-/* 3 Tx Power Tracking */
-/* 3============================================================ */
-#define                DPK_DELTA_MAPPING_NUM   13
-#define                index_mapping_HP_NUM    15
-
-
-/*  */
-/* 3 PSD Handler */
-/* 3============================================================ */
-
-#define        AFH_PSD         1       /* 0:normal PSD scan, 1: only do 20 pts PSD */
-#define        MODE_40M                0       /* 0:20M, 1:40M */
-#define        PSD_TH2         3
-#define        PSD_CHMIN               20   /*  Minimum channel number for BT AFH */
-#define        SIR_STEP_SIZE   3
-#define   Smooth_Size_1                5
-#define        Smooth_TH_1     3
-#define   Smooth_Size_2                10
-#define        Smooth_TH_2     4
-#define   Smooth_Size_3                20
-#define        Smooth_TH_3     4
-#define   Smooth_Step_Size 5
-#define        Adaptive_SIR    1
-#define        PSD_RESCAN              4
-#define        PSD_SCAN_INTERVAL       700 /* ms */
-
-/* 8723A High Power IGI Setting */
-#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND        0x22
-#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28
-#define DM_DIG_HIGH_PWR_THRESHOLD      0x3a
-
-/*  LPS define */
-#define DM_DIG_FA_TH0_LPS                              4 /*  4 in lps */
-#define DM_DIG_FA_TH1_LPS                              15 /*  15 lps */
-#define DM_DIG_FA_TH2_LPS                              30 /*  30 lps */
-#define RSSI_OFFSET_DIG                                        0x05;
-
-/* ANT Test */
-#define                        ANTTESTALL              0x00            /* Ant A or B will be Testing */
-#define                ANTTESTA                0x01            /* Ant A will be Testing */
-#define                ANTTESTB                0x02            /* Ant B will be testing */
-
-
-/*  */
-/*  structure and define */
-/*  */
-
-struct  dig_t {
-       u8              Dig_Enable_Flag;
-       u8              Dig_Ext_Port_Stage;
-
-       int             RssiLowThresh;
-       int             RssiHighThresh;
-
-       u32             FALowThresh;
-       u32             FAHighThresh;
-
-       u8              CurSTAConnectState;
-       u8              PreSTAConnectState;
-       u8              CurMultiSTAConnectState;
-
-       u8              PreIGValue;
-       u8              CurIGValue;
-       u8              BackupIGValue;
-
-       s8              BackoffVal;
-       s8              BackoffVal_range_max;
-       s8              BackoffVal_range_min;
-       u8              rx_gain_range_max;
-       u8              rx_gain_range_min;
-       u8              Rssi_val_min;
-
-       u8              PreCCK_CCAThres;
-       u8              CurCCK_CCAThres;
-       u8              PreCCKPDState;
-       u8              CurCCKPDState;
-
-       u8              LargeFAHit;
-       u8              ForbiddenIGI;
-       u32             Recover_cnt;
-
-       u8              DIG_Dynamic_MIN_0;
-       u8              DIG_Dynamic_MIN_1;
-       bool            bMediaConnect_0;
-       bool            bMediaConnect_1;
-
-       u32             RSSI_max;
-};
-
-struct dynamic_pwr_sav {
-       u8              PreCCAState;
-       u8              CurCCAState;
-
-       u8              PreRFState;
-       u8              CurRFState;
-
-       int                 Rssi_val_min;
-
-       u8              initialize;
-       u32             Reg874, RegC70, Reg85C, RegA74;
-};
-
-struct false_alarm_stats {
-       u32     Cnt_Parity_Fail;
-       u32     Cnt_Rate_Illegal;
-       u32     Cnt_Crc8_fail;
-       u32     Cnt_Mcs_fail;
-       u32     Cnt_Ofdm_fail;
-       u32     Cnt_Cck_fail;
-       u32     Cnt_all;
-       u32     Cnt_Fast_Fsync;
-       u32     Cnt_SB_Search_fail;
-       u32     Cnt_OFDM_CCA;
-       u32     Cnt_CCK_CCA;
-       u32     Cnt_CCA_all;
-       u32     Cnt_BW_USC;     /* Gary */
-       u32     Cnt_BW_LSC;     /* Gary */
-};
-
-#define ASSOCIATE_ENTRY_NUM                                    32 /*  Max size of AsocEntry[]. */
-#define        ODM_ASSOCIATE_ENTRY_NUM                         ASSOCIATE_ENTRY_NUM
-
-/*  This indicates two different the steps. */
-/*  In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. */
-/*  In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK */
-/*  with original RSSI to determine if it is necessary to switch antenna. */
-#define SWAW_STEP_PEAK         0
-#define SWAW_STEP_DETERMINE    1
-
-#define        TP_MODE         0
-#define        RSSI_MODE               1
-#define        TRAFFIC_LOW     0
-#define        TRAFFIC_HIGH    1
-
-struct sw_ant_sw {
-       u8              try_flag;
-       s32             PreRSSI;
-       u8              CurAntenna;
-       u8              PreAntenna;
-       u8              RSSI_Trying;
-       u8              TestMode;
-       u8              bTriggerAntennaSwitch;
-       u8              SelectAntennaMap;
-       u8              RSSI_target;
-
-       /*  Before link Antenna Switch check */
-       u8              SWAS_NoLink_State;
-       u32             SWAS_NoLink_BK_Reg860;
-       bool            ANTA_ON;        /* To indicate Ant A is or not */
-       bool            ANTB_ON;        /* To indicate Ant B is on or not */
-
-       s32             RSSI_sum_A;
-       s32             RSSI_sum_B;
-       s32             RSSI_cnt_A;
-       s32             RSSI_cnt_B;
-
-       u64             lastTxOkCnt;
-       u64             lastRxOkCnt;
-       u64             TXByteCnt_A;
-       u64             TXByteCnt_B;
-       u64             RXByteCnt_A;
-       u64             RXByteCnt_B;
-       u8              TrafficLoad;
-};
-
-struct edca_turbo {
-       bool bCurrentTurboEDCA;
-       u32     prv_traffic_idx; /*  edca turbo */
-};
-
-struct odm_rate_adapt {
-       u8      Type;           /*  DM_Type_ByFW/DM_Type_ByDriver */
-       u8      HighRSSIThresh; /*  if RSSI > HighRSSIThresh    => RATRState is DM_RATR_STA_HIGH */
-       u8      LowRSSIThresh;  /*  if RSSI <= LowRSSIThresh    => RATRState is DM_RATR_STA_LOW */
-       u8      RATRState;      /*  Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW */
-       u32     LastRATR;       /*  RATR Register Content */
-};
-
-#define IQK_MAC_REG_NUM                4
-#define IQK_ADDA_REG_NUM               16
-#define IQK_BB_REG_NUM_MAX     10
-#define IQK_BB_REG_NUM         9
-#define HP_THERMAL_NUM         8
-
-#define AVG_THERMAL_NUM                8
-#define IQK_Matrix_REG_NUM     8
-#define IQK_Matrix_Settings_NUM        1+24+21
-
-#define                DM_Type_ByFW                    0
-#define                DM_Type_ByDriver                1
-
-/*  Declare for common info */
-
-struct odm_phy_dbg_info {
-       /* ODM Write,debug info */
-       s8              RxSNRdB[RF_PATH_MAX];
-       u64             NumQryPhyStatus;
-       u64             NumQryPhyStatusCCK;
-       u64             NumQryPhyStatusOFDM;
-       /* Others */
-       s32             RxEVM[RF_PATH_MAX];
-
-};
-
-struct odm_packet_info {
-       u8              Rate;
-       u8              StationID;
-       bool            bPacketMatchBSSID;
-       bool            bPacketToSelf;
-       bool            bPacketBeacon;
-};
-
-
-enum {
-       /*  BB Team */
-       ODM_DIG                 = 0x00000001,
-       ODM_HIGH_POWER          = 0x00000002,
-       ODM_CCK_CCA_TH          = 0x00000004,
-       ODM_FA_STATISTICS       = 0x00000008,
-       ODM_RAMASK              = 0x00000010,
-       ODM_RSSI_MONITOR        = 0x00000020,
-       ODM_SW_ANTDIV           = 0x00000040,
-       ODM_HW_ANTDIV           = 0x00000080,
-       ODM_BB_PWRSV            = 0x00000100,
-       ODM_2TPATHDIV           = 0x00000200,
-       ODM_1TPATHDIV           = 0x00000400,
-       ODM_PSD2AFH             = 0x00000800
-};
-
-/*  */
-/*  2011/10/20 MH Define Common info enum for all team. */
-/*  */
-
-enum odm_cmninfo {
-       /*  Fixed value: */
-       /*  */
-
-       ODM_CMNINFO_MP_TEST_CHIP = 2,
-       ODM_CMNINFO_IC_TYPE,                    /*  enum odm_ic_type_def */
-       ODM_CMNINFO_CUT_VER,                    /*  enum odm_cut_version */
-       ODM_CMNINFO_FAB_VER,                    /*  enum odm_fab_version */
-       ODM_CMNINFO_BOARD_TYPE,                 /*  enum odm_board_type */
-       ODM_CMNINFO_EXT_LNA,                    /*  true */
-       ODM_CMNINFO_EXT_PA,
-       ODM_CMNINFO_EXT_TRSW,
-       ODM_CMNINFO_BINHCT_TEST,
-       ODM_CMNINFO_BWIFI_TEST,
-       ODM_CMNINFO_SMART_CONCURRENT,
-
-
-       /*  */
-       /*  Dynamic value: */
-       /*  */
-       ODM_CMNINFO_MP_MODE,
-
-       ODM_CMNINFO_WIFI_DIRECT,
-       ODM_CMNINFO_WIFI_DISPLAY,
-       ODM_CMNINFO_LINK,
-       ODM_CMNINFO_RSSI_MIN,
-       ODM_CMNINFO_DBG_COMP,                           /*  u64 */
-       ODM_CMNINFO_DBG_LEVEL,                          /*  u32 */
-       ODM_CMNINFO_RA_THRESHOLD_HIGH,          /*  u8 */
-       ODM_CMNINFO_RA_THRESHOLD_LOW,           /*  u8 */
-       ODM_CMNINFO_RF_ANTENNA_TYPE,            /*  u8 */
-       ODM_CMNINFO_BT_DISABLED,
-       ODM_CMNINFO_BT_OPERATION,
-       ODM_CMNINFO_BT_DIG,
-       ODM_CMNINFO_BT_BUSY,                                    /* Check Bt is using or not */
-       ODM_CMNINFO_BT_DISABLE_EDCA,
-
-       /*  */
-       /*  Dynamic ptr array hook itms. */
-       /*  */
-       ODM_CMNINFO_STA_STATUS,
-       ODM_CMNINFO_PHY_STATUS,
-       ODM_CMNINFO_MAC_STATUS,
-
-       ODM_CMNINFO_MAX,
-};
-
-/*  Define ODM support ability.  ODM_CMNINFO_ABILITY */
-enum {
-       /*  BB ODM section BIT 0-15 */
-       ODM_BB_ANT_DIV                          = BIT(6),
-};
-
-/*     ODM_CMNINFO_INTERFACE */
-enum odm_interface_def {
-       ODM_ITRF_PCIE   =       0x1,
-       ODM_ITRF_USB    =       0x2,
-       ODM_ITRF_SDIO   =       0x4,
-       ODM_ITRF_ALL    =       0x7,
-};
-
-/*  ODM_CMNINFO_IC_TYPE */
-enum odm_ic_type_def {
-       ODM_RTL8192S    =       BIT(0),
-       ODM_RTL8192C    =       BIT(1),
-       ODM_RTL8192D    =       BIT(2),
-       ODM_RTL8723A    =       BIT(3),
-       ODM_RTL8188E    =       BIT(4),
-       ODM_RTL8812     =       BIT(5),
-       ODM_RTL8821     =       BIT(6),
-};
-
-/* ODM_CMNINFO_CUT_VER */
-enum odm_cut_version {
-       ODM_CUT_A               =       1,
-       ODM_CUT_B               =       2,
-       ODM_CUT_C               =       3,
-       ODM_CUT_D               =       4,
-       ODM_CUT_E               =       5,
-       ODM_CUT_F               =       6,
-       ODM_CUT_TEST            =       7,
-};
-
-/*  ODM_CMNINFO_FAB_VER */
-enum odm_fab_version {
-       ODM_TSMC        =       0,
-       ODM_UMC         =       1,
-};
-
-/*  For example 1T2R (A+AB = BIT0|BIT4|BIT5) */
-enum rf_path_def {
-       ODM_RF_TX_A     =       BIT(0),
-       ODM_RF_TX_B     =       BIT(1),
-       ODM_RF_TX_C     =       BIT(2),
-       ODM_RF_TX_D     =       BIT(3),
-       ODM_RF_RX_A     =       BIT(4),
-       ODM_RF_RX_B     =       BIT(5),
-       ODM_RF_RX_C     =       BIT(6),
-       ODM_RF_RX_D     =       BIT(7),
-};
-
-/*  ODM Dynamic common info value definition */
-
-enum odm_mac_phy_mode {
-       ODM_SMSP        = 0,
-       ODM_DMSP        = 1,
-       ODM_DMDP        = 2,
-};
-
-
-enum odm_bt_coexist {
-       ODM_BT_BUSY             = 1,
-       ODM_BT_ON               = 2,
-       ODM_BT_OFF              = 3,
-       ODM_BT_NONE             = 4,
-};
-
-/*  ODM_CMNINFO_OP_MODE */
-enum odm_operation_mode {
-       ODM_NO_LINK             = BIT(0),
-       ODM_LINK                = BIT(1),
-       ODM_SCAN                = BIT(2),
-       ODM_POWERSAVE           = BIT(3),
-       ODM_AP_MODE             = BIT(4),
-       ODM_CLIENT_MODE         = BIT(5),
-       ODM_AD_HOC              = BIT(6),
-       ODM_WIFI_DIRECT         = BIT(7),
-       ODM_WIFI_DISPLAY        = BIT(8),
-};
-
-/*  ODM_CMNINFO_WM_MODE */
-enum odm_wireless_mode {
-       ODM_WM_UNKNOW           = 0x0,
-       ODM_WM_B                = BIT(0),
-       ODM_WM_G                = BIT(1),
-       ODM_WM_A                = BIT(2),
-       ODM_WM_N24G             = BIT(3),
-       ODM_WM_N5G              = BIT(4),
-       ODM_WM_AUTO             = BIT(5),
-       ODM_WM_AC               = BIT(6),
-};
-
-/*  ODM_CMNINFO_BAND */
-enum odm_band_type {
-       ODM_BAND_2_4G           = BIT(0),
-       ODM_BAND_5G             = BIT(1),
-
-};
-
-/*  ODM_CMNINFO_SEC_CHNL_OFFSET */
-enum odm_sec_chnl_offset {
-       ODM_DONT_CARE           = 0,
-       ODM_BELOW               = 1,
-       ODM_ABOVE               = 2
-};
-
-/*  ODM_CMNINFO_CHNL */
-
-/*  ODM_CMNINFO_BOARD_TYPE */
-enum odm_board_type {
-       ODM_BOARD_NORMAL        = 0,
-       ODM_BOARD_HIGHPWR       = 1,
-       ODM_BOARD_MINICARD      = 2,
-       ODM_BOARD_SLIM          = 3,
-       ODM_BOARD_COMBO         = 4,
-
-};
-
-/*  ODM_CMNINFO_ONE_PATH_CCA */
-enum odm_cca_path {
-       ODM_CCA_2R                      = 0,
-       ODM_CCA_1R_A                    = 1,
-       ODM_CCA_1R_B                    = 2,
-};
-
-struct iqk_matrix_regs_set {
-       bool    bIQKDone;
-       s32     Value[1][IQK_Matrix_REG_NUM];
-};
-
-struct odm_rf_cal_t {
-       /* for tx power tracking */
-
-       u32     RegA24; /*  for TempCCK */
-       s32     RegE94;
-       s32     RegE9C;
-       s32     RegEB4;
-       s32     RegEBC;
-
-       /* u8 bTXPowerTracking; */
-       u8              TXPowercount;
-       bool bTXPowerTrackingInit;
-       bool bTXPowerTracking;
-       u8              TxPowerTrackControl; /* for mp mode, turn off txpwrtracking as default */
-       u8              TM_Trigger;
-       u8              InternalPA5G[2];        /* pathA / pathB */
-
-       u8              ThermalMeter[2];    /*  ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 */
-       u8              ThermalValue;
-       u8              ThermalValue_LCK;
-       u8              ThermalValue_IQK;
-       u8      ThermalValue_DPK;
-       u8      ThermalValue_AVG[AVG_THERMAL_NUM];
-       u8      ThermalValue_AVG_index;
-       u8      ThermalValue_RxGain;
-       u8      ThermalValue_Crystal;
-       u8      ThermalValue_DPKstore;
-       u8      ThermalValue_DPKtrack;
-       bool    TxPowerTrackingInProgress;
-       bool    bDPKenable;
-
-       bool    bReloadtxpowerindex;
-       u8      bRfPiEnable;
-       u32     TXPowerTrackingCallbackCnt; /* cosa add for debug */
-
-       u8      bCCKinCH14;
-       u8      CCK_index;
-       u8      OFDM_index[2];
-       bool bDoneTxpower;
-
-       u8      ThermalValue_HP[HP_THERMAL_NUM];
-       u8      ThermalValue_HP_index;
-       struct iqk_matrix_regs_set IQKMatrixRegSetting[IQK_Matrix_Settings_NUM];
-
-       u8      Delta_IQK;
-       u8      Delta_LCK;
-
-       /* for IQK */
-       u32     RegC04;
-       u32     Reg874;
-       u32     RegC08;
-       u32     RegB68;
-       u32     RegB6C;
-       u32     Reg870;
-       u32     Reg860;
-       u32     Reg864;
-
-       bool    bIQKInitialized;
-       bool bLCKInProgress;
-       bool    bAntennaDetected;
-       u32     ADDA_backup[IQK_ADDA_REG_NUM];
-       u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
-       u32     IQK_BB_backup_recover[9];
-       u32     IQK_BB_backup[IQK_BB_REG_NUM];
-
-       /* for APK */
-       u32     APKoutput[2][2]; /* path A/B; output1_1a/output1_2a */
-       u8      bAPKdone;
-       u8      bAPKThermalMeterIgnore;
-       u8      bDPdone;
-       u8      bDPPathAOK;
-       u8      bDPPathBOK;
-};
-
-enum ant_dif_type {
-       NO_ANTDIV                       = 0xFF,
-       CG_TRX_HW_ANTDIV                = 0x01,
-       CGCS_RX_HW_ANTDIV               = 0x02,
-       FIXED_HW_ANTDIV                 = 0x03,
-       CG_TRX_SMART_ANTDIV             = 0x04,
-       CGCS_RX_SW_ANTDIV               = 0x05,
-};
-
-/*  2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration. */
-struct dm_odm_t {
-       /*  */
-       /*      Add for different team use temporarily */
-       /*  */
-       struct rtw_adapter      *Adapter;               /*  For CE/NIC team */
-
-       u64                     DebugComponents;
-       u32                     DebugLevel;
-
-/*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
-       bool                    bCckHighPower;
-       u8                      RFPathRxEnable;         /*  ODM_CMNINFO_RFPATH_ENABLE */
-/*  ODM HANDLE, DRIVER NEEDS NOT TO HOOK------ */
-
-/* 1  COMMON INFORMATION */
-
-       /*  Init Value */
-/* HOOK BEFORE REG INIT----------- */
-       /*  ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ¡K¡K = 1/2/3/¡K */
-       u32                     SupportAbility;
-       /*  ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/... */
-       u32                     SupportICType;
-       /*  Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/... */
-       u8                      CutVersion;
-       /*  Fab Version TSMC/UMC = 0/1 */
-       u8                      FabVersion;
-       /*  Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/... */
-       u8                      BoardType;
-       /*  with external LNA  NO/Yes = 0/1 */
-       u8                      ExtLNA;
-       /*  with external PA  NO/Yes = 0/1 */
-       u8                      ExtPA;
-       /*  with external TRSW  NO/Yes = 0/1 */
-       u8                      ExtTRSW;
-       bool                    bInHctTest;
-       bool                    bWIFITest;
-
-       bool                    bDualMacSmartConcurrent;
-       u32                     BK_SupportAbility;
-/* HOOK BEFORE REG INIT----------- */
-
-       /*  */
-       /*  Dynamic Value */
-       /*  */
-/*  POINTER REFERENCE----------- */
-
-       u8                      u8_temp;
-       bool                    bool_temp;
-       struct rtw_adapter      *PADAPTER_temp;
-
-/*  POINTER REFERENCE----------- */
-       /*  */
-/* CALL BY VALUE------------- */
-       bool                    bWIFI_Direct;
-       bool                    bWIFI_Display;
-       bool                    bLinked;
-       u8                      RSSI_Min;
-       u8                      InterfaceIndex; /*  Add for 92D  dual MAC: 0--Mac0 1--Mac1 */
-       bool            bIsMPChip;
-       bool                    bOneEntryOnly;
-       /*  Common info for BTDM */
-       bool                    bBtDisabled;                    /*  BT is disabled */
-       bool                    bBtHsOperation;         /*  BT HS mode is under progress */
-       u8                      btHsDigVal;                     /*  use BT rssi to decide the DIG value */
-       bool                    bBtDisableEdcaTurbo;    /*  Under some condition, don't enable the EDCA Turbo */
-       bool                    bBtBusy;                        /*  BT is busy. */
-/* CALL BY VALUE------------- */
-
-       /* 2 Define STA info. */
-       /*  _ODM_STA_INFO */
-       /*  2012/01/12 MH For MP, we need to reduce one array pointer for default port.?? */
-       struct sta_info *               pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM];
-
-       /*  Latest packet phy info (ODM write) */
-       struct odm_phy_dbg_info  PhyDbgInfo;
-       /* PHY_INFO_88E         PhyInfo; */
-
-       /*  Latest packet phy info (ODM write) */
-       /* MAC_INFO_88E         MacInfo; */
-
-       /*  Different Team independt structure?? */
-
-       /*  */
-       /* TX_RTP_CMN           TX_retrpo; */
-       /* TX_RTP_88E           TX_retrpo; */
-       /* TX_RTP_8195          TX_retrpo; */
-
-       /*  */
-       /* ODM Structure */
-       /*  */
-       struct dig_t    DM_DigTable;
-       struct dynamic_pwr_sav          DM_PSTable;
-       struct false_alarm_stats        FalseAlmCnt;
-       struct false_alarm_stats        FlaseAlmCntBuddyAdapter;
-       struct sw_ant_sw                DM_SWAT_Table;
-
-       struct edca_turbo               DM_EDCA_Table;
-       u32             WMMEDCA_BE;
-       /*  Copy from SD4 structure */
-       /*  */
-       /*  ================================================== */
-       /*  */
-
-       /* PSD */
-       u8                      RSSI_BT;                /* come from BT */
-       struct odm_rate_adapt   RateAdaptive;
-
-
-       struct odm_rf_cal_t     RFCalibrateInfo;
-};     /*  DM_Dynamic_Mechanism_Structure */
-
-enum odm_rf_content {
-       odm_radioa_txt = 0x1000,
-       odm_radiob_txt = 0x1001,
-       odm_radioc_txt = 0x1002,
-       odm_radiod_txt = 0x1003
-};
-
-/*  Status code */
-enum rt_status {
-       RT_STATUS_SUCCESS,
-       RT_STATUS_FAILURE,
-       RT_STATUS_PENDING,
-       RT_STATUS_RESOURCE,
-       RT_STATUS_INVALID_CONTEXT,
-       RT_STATUS_INVALID_PARAMETER,
-       RT_STATUS_NOT_SUPPORT,
-       RT_STATUS_OS_API_FAILED,
-};
-
-/* include "odm_function.h" */
-
-/* 3=========================================================== */
-/* 3 DIG */
-/* 3=========================================================== */
-
-enum dm_dig_op {
-       DIG_TYPE_THRESH_HIGH    = 0,
-       DIG_TYPE_THRESH_LOW     = 1,
-       DIG_TYPE_BACKOFF                = 2,
-       DIG_TYPE_RX_GAIN_MIN    = 3,
-       DIG_TYPE_RX_GAIN_MAX    = 4,
-       DIG_TYPE_ENABLE                 = 5,
-       DIG_TYPE_DISABLE                = 6,
-       DIG_OP_TYPE_MAX
-};
-
-#define                DM_DIG_THRESH_HIGH                      40
-#define                DM_DIG_THRESH_LOW                       35
-
-#define                DM_SCAN_RSSI_TH                         0x14 /* scan return issue for LC */
-
-
-#define                DM_FALSEALARM_THRESH_LOW        400
-#define                DM_FALSEALARM_THRESH_HIGH       1000
-
-#define                DM_DIG_MAX_NIC                          0x4e
-#define                DM_DIG_MIN_NIC                          0x1e
-
-#define                DM_DIG_MAX_AP                           0x32
-#define                DM_DIG_MIN_AP                           0x20
-
-#define                DM_DIG_MAX_NIC_HP                       0x46
-#define                DM_DIG_MIN_NIC_HP                       0x2e
-
-#define                DM_DIG_MAX_AP_HP                                0x42
-#define                DM_DIG_MIN_AP_HP                                0x30
-
-/* vivi 92c&92d has different definition, 20110504 */
-/* this is for 92c */
-#define                DM_DIG_FA_TH0                           0x200
-#define                DM_DIG_FA_TH1                           0x300
-#define                DM_DIG_FA_TH2                           0x400
-/* this is for 92d */
-#define                DM_DIG_FA_TH0_92D                       0x100
-#define                DM_DIG_FA_TH1_92D                       0x400
-#define                DM_DIG_FA_TH2_92D                       0x600
-
-#define                DM_DIG_BACKOFF_MAX                      12
-#define                DM_DIG_BACKOFF_MIN                      -4
-#define                DM_DIG_BACKOFF_DEFAULT          10
-
-/* 3=========================================================== */
-/* 3 AGC RX High Power Mode */
-/* 3=========================================================== */
-#define          LNA_Low_Gain_1                      0x64
-#define          LNA_Low_Gain_2                      0x5A
-#define          LNA_Low_Gain_3                      0x58
-
-#define          FA_RXHP_TH1                           5000
-#define          FA_RXHP_TH2                           1500
-#define          FA_RXHP_TH3                             800
-#define          FA_RXHP_TH4                             600
-#define          FA_RXHP_TH5                             500
-
-/* 3=========================================================== */
-/* 3 EDCA */
-/* 3=========================================================== */
-
-/* 3=========================================================== */
-/* 3 Dynamic Tx Power */
-/* 3=========================================================== */
-/* Dynamic Tx Power Control Threshold */
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL2 74
-#define                TX_POWER_NEAR_FIELD_THRESH_LVL1 67
-#define                TX_POWER_NEAR_FIELD_THRESH_AP           0x3F
-
-#define                TxHighPwrLevel_Normal           0
-#define                TxHighPwrLevel_Level1           1
-#define                TxHighPwrLevel_Level2           2
-#define                TxHighPwrLevel_BT1                      3
-#define                TxHighPwrLevel_BT2                      4
-#define                TxHighPwrLevel_15                       5
-#define                TxHighPwrLevel_35                       6
-#define                TxHighPwrLevel_50                       7
-#define                TxHighPwrLevel_70                       8
-#define                TxHighPwrLevel_100                      9
-
-/* 3=========================================================== */
-/* 3 Rate Adaptive */
-/* 3=========================================================== */
-#define                DM_RATR_STA_INIT                        0
-#define                DM_RATR_STA_HIGH                        1
-#define                        DM_RATR_STA_MIDDLE              2
-#define                        DM_RATR_STA_LOW                 3
-
-/* 3=========================================================== */
-/* 3 BB Power Save */
-/* 3=========================================================== */
-
-
-enum dm_1r_cca {
-       CCA_1R =0,
-       CCA_2R = 1,
-       CCA_MAX = 2,
-};
-
-enum dm_rf_def {
-       RF_Save =0,
-       RF_Normal = 1,
-       RF_MAX = 2,
-};
-
-/* 3=========================================================== */
-/* 3 Antenna Diversity */
-/* 3=========================================================== */
-enum dm_swas {
-       Antenna_A = 1,
-       Antenna_B = 2,
-       Antenna_MAX = 3,
-};
-
-/*  Maximal number of antenna detection mechanism needs to perform, added by Roger, 2011.12.28. */
-#define        MAX_ANTENNA_DETECTION_CNT       10
-
-/*  */
-/*  Extern Global Variables. */
-/*  */
-#define        OFDM_TABLE_SIZE_92C     37
-#define        OFDM_TABLE_SIZE_92D     43
-#define        CCK_TABLE_SIZE          33
-
-extern u32 OFDMSwingTable23A[OFDM_TABLE_SIZE_92D];
-extern u8 CCKSwingTable_Ch1_Ch1323A[CCK_TABLE_SIZE][8];
-extern u8 CCKSwingTable_Ch1423A [CCK_TABLE_SIZE][8];
-
-
-
-/*  20100514 Joseph: Add definition for antenna switching test after link. */
-/*  This indicates two different the steps. */
-/*  In SWAW_STEP_PEAK, driver needs to switch antenna and listen to the signal on the air. */
-/*  In SWAW_STEP_DETERMINE, driver just compares the signal captured in SWAW_STEP_PEAK */
-/*  with original RSSI to determine if it is necessary to switch antenna. */
-#define SWAW_STEP_PEAK         0
-#define SWAW_STEP_DETERMINE    1
-
-struct hal_data_8723a;
-
-void ODM_Write_DIG23a(struct dm_odm_t *pDM_Odm,        u8      CurrentIGI);
-void ODM_Write_CCK_CCA_Thres23a(struct dm_odm_t *pDM_Odm, u8   CurCCK_CCAThres);
-
-void ODM_SetAntenna(struct dm_odm_t *pDM_Odm, u8 Antenna);
-
-
-#define dm_RF_Saving   ODM_RF_Saving23a
-void ODM_RF_Saving23a(struct dm_odm_t *pDM_Odm, u8 bForceInNormal);
-
-#define dm_CheckTXPowerTracking                ODM_TXPowerTrackingCheck23a
-void ODM_TXPowerTrackingCheck23a(struct dm_odm_t *pDM_Odm);
-
-bool ODM_RAStateCheck23a(struct dm_odm_t *pDM_Odm, s32 RSSI, bool bForceUpdate,
-                     u8 *pRATRState);
-
-
-u32 ConvertTo_dB23a(u32 Value);
-
-u32 GetPSDData(struct dm_odm_t *pDM_Odm, unsigned int point, u8 initial_gain_psd);
-
-void odm_DIG23abyRSSI_LPS(struct dm_odm_t *pDM_Odm);
-
-u32 ODM_Get_Rate_Bitmap23a(struct hal_data_8723a *pHalData, u32 macid, u32 ra_mask, u8 rssi_level);
-
-
-void ODM23a_DMInit(struct dm_odm_t *pDM_Odm);
-
-void ODM_DMWatchdog23a(struct rtw_adapter *adapter);
-
-void ODM_CmnInfoInit23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo     CmnInfo, u32 Value);
-
-void ODM_CmnInfoPtrArrayHook23a(struct dm_odm_t *pDM_Odm, enum odm_cmninfo     CmnInfo, u16 Index, void *pValue);
-
-void ODM_CmnInfoUpdate23a(struct dm_odm_t *pDM_Odm, u32 CmnInfo, u64 Value);
-
-void ODM_ResetIQKResult(struct dm_odm_t *pDM_Odm);
-
-void ODM_AntselStatistics_88C(struct dm_odm_t *pDM_Odm, u8 MacId, u32 PWDBAll, bool isCCKrate);
-
-void ODM_SingleDualAntennaDefaultSetting(struct dm_odm_t *pDM_Odm);
-
-bool ODM_SingleDualAntennaDetection(struct dm_odm_t *pDM_Odm, u8 mode);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/odm_HWConfig.h b/drivers/staging/rtl8723au/include/odm_HWConfig.h
deleted file mode 100644 (file)
index c748d5f..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-
-#ifndef        __HALHWOUTSRC_H__
-#define __HALHWOUTSRC_H__
-
-#include <Hal8723APhyCfg.h>
-
-/*  */
-/*  Definition */
-/*  */
-/*  */
-/*  */
-/*  CCK Rates, TxHT = 0 */
-#define DESC92C_RATE1M                                 0x00
-#define DESC92C_RATE2M                                 0x01
-#define DESC92C_RATE5_5M                               0x02
-#define DESC92C_RATE11M                                0x03
-
-/*  OFDM Rates, TxHT = 0 */
-#define DESC92C_RATE6M                                 0x04
-#define DESC92C_RATE9M                                 0x05
-#define DESC92C_RATE12M                                0x06
-#define DESC92C_RATE18M                                0x07
-#define DESC92C_RATE24M                                0x08
-#define DESC92C_RATE36M                                0x09
-#define DESC92C_RATE48M                                0x0a
-#define DESC92C_RATE54M                                0x0b
-
-/*  MCS Rates, TxHT = 1 */
-#define DESC92C_RATEMCS0                               0x0c
-#define DESC92C_RATEMCS1                               0x0d
-#define DESC92C_RATEMCS2                               0x0e
-#define DESC92C_RATEMCS3                               0x0f
-#define DESC92C_RATEMCS4                               0x10
-#define DESC92C_RATEMCS5                               0x11
-#define DESC92C_RATEMCS6                               0x12
-#define DESC92C_RATEMCS7                               0x13
-#define DESC92C_RATEMCS8                               0x14
-#define DESC92C_RATEMCS9                               0x15
-#define DESC92C_RATEMCS10                              0x16
-#define DESC92C_RATEMCS11                              0x17
-#define DESC92C_RATEMCS12                              0x18
-#define DESC92C_RATEMCS13                              0x19
-#define DESC92C_RATEMCS14                              0x1a
-#define DESC92C_RATEMCS15                              0x1b
-#define DESC92C_RATEMCS15_SG                   0x1c
-#define DESC92C_RATEMCS32                              0x20
-
-
-/*  */
-/*  structure and define */
-/*  */
-
-struct phy_rx_agc_info {
-       #ifdef __LITTLE_ENDIAN
-               u8      gain:7, trsw:1;
-       #else
-               u8      trsw:1, gain:7;
-       #endif
-};
-
-struct phy_status_rpt {
-       struct phy_rx_agc_info path_agc[RF_PATH_MAX];
-       u8      ch_corr[RF_PATH_MAX];
-       u8      cck_sig_qual_ofdm_pwdb_all;
-       u8      cck_agc_rpt_ofdm_cfosho_a;
-       u8      cck_rpt_b_ofdm_cfosho_b;
-       u8      rsvd_1;/* ch_corr_msb; */
-       u8      noise_power_db_msb;
-       u8      path_cfotail[RF_PATH_MAX];
-       u8      pcts_mask[RF_PATH_MAX];
-       s8      stream_rxevm[RF_PATH_MAX];
-       u8      path_rxsnr[RF_PATH_MAX];
-       u8      noise_power_db_lsb;
-       u8      rsvd_2[3];
-       u8      stream_csi[RF_PATH_MAX];
-       u8      stream_target_csi[RF_PATH_MAX];
-       s8      sig_evm;
-       u8      rsvd_3;
-
-#ifdef __LITTLE_ENDIAN
-       u8      antsel_rx_keep_2:1;     /* ex_intf_flg:1; */
-       u8      sgi_en:1;
-       u8      rxsc:2;
-       u8      idle_long:1;
-       u8      r_ant_train_en:1;
-       u8      ant_sel_b:1;
-       u8      ant_sel:1;
-#else  /*  _BIG_ENDIAN_ */
-       u8      ant_sel:1;
-       u8      ant_sel_b:1;
-       u8      r_ant_train_en:1;
-       u8      idle_long:1;
-       u8      rxsc:2;
-       u8      sgi_en:1;
-       u8      antsel_rx_keep_2:1;     /* ex_intf_flg:1; */
-#endif
-};
-
-
-struct phy_status_rpt_8195 {
-       struct phy_rx_agc_info path_agc[2];
-       u8      ch_num[2];
-       u8      cck_sig_qual_ofdm_pwdb_all;
-       u8      cck_agc_rpt_ofdm_cfosho_a;
-       u8      cck_bb_pwr_ofdm_cfosho_b;
-       u8    cck_rx_path;      /* CCK_RX_PATH [3:0] (with regA07[3:0] definition) */
-       u8      rsvd_1;
-       u8      path_cfotail[2];
-       u8      pcts_mask[2];
-       s8      stream_rxevm[2];
-       u8      path_rxsnr[2];
-       u8      rsvd_2[2];
-       u8      stream_snr[2];
-       u8      stream_csi[2];
-       u8      rsvd_3[2];
-       s8      sig_evm;
-       u8      rsvd_4;
-#ifdef __LITTLE_ENDIAN
-       u8      antidx_anta:3;
-       u8      antidx_antb:3;
-       u8      rsvd_5:2;
-#else  /*  _BIG_ENDIAN_ */
-       u8      rsvd_5:2;
-       u8      antidx_antb:3;
-       u8      antidx_anta:3;
-#endif
-};
-
-
-void
-ODM_PhyStatusQuery23a(
-       struct dm_odm_t *pDM_Odm,
-       struct phy_info *pPhyInfo,
-       u8 *                                            pPhyStatus,
-       struct odm_packet_info *pPktinfo
-       );
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h b/drivers/staging/rtl8723au/include/odm_RegConfig8723A.h
deleted file mode 100644 (file)
index f2a54d8..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __INC_ODM_REGCONFIG_H_8723A
-#define __INC_ODM_REGCONFIG_H_8723A
-
-void odm_ConfigRFReg_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u32 Data,
-                          enum RF_RADIO_PATH RF_PATH, u32 RegAddr);
-
-void odm_ConfigMAC_8723A(struct dm_odm_t *pDM_Odm, u32 Addr, u8 Data);
-
-void odm_ConfigBB_AGC_8723A(struct dm_odm_t *pDM_Odm, u32 addr, u32 data);
-
-void odm_ConfigBB_PHY_8723A(struct dm_odm_t *pDM_Odm, u32 addr, u32 data);
-
-#endif /*  end of SUPPORT */
diff --git a/drivers/staging/rtl8723au/include/odm_RegDefine11N.h b/drivers/staging/rtl8723au/include/odm_RegDefine11N.h
deleted file mode 100644 (file)
index 2778215..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#ifndef        __ODM_REGDEFINE11N_H__
-#define __ODM_REGDEFINE11N_H__
-
-
-/* 2 RF REG LIST */
-#define        ODM_REG_RF_MODE_11N                     0x00
-#define        ODM_REG_RF_0B_11N                       0x0B
-#define        ODM_REG_CHNBW_11N                       0x18
-#define        ODM_REG_T_METER_11N                     0x24
-#define        ODM_REG_RF_25_11N                       0x25
-#define        ODM_REG_RF_26_11N                       0x26
-#define        ODM_REG_RF_27_11N                       0x27
-#define        ODM_REG_RF_2B_11N                       0x2B
-#define        ODM_REG_RF_2C_11N                       0x2C
-#define        ODM_REG_RXRF_A3_11N                     0x3C
-#define        ODM_REG_T_METER_92D_11N                 0x42
-#define        ODM_REG_T_METER_88E_11N                 0x42
-
-
-
-/* 2 BB REG LIST */
-/* PAGE 8 */
-#define        ODM_REG_BB_CTRL_11N                     0x800
-#define        ODM_REG_RF_PIN_11N                      0x804
-#define        ODM_REG_PSD_CTRL_11N                    0x808
-#define        ODM_REG_TX_ANT_CTRL_11N                 0x80C
-#define        ODM_REG_BB_PWR_SAV5_11N                 0x818
-#define        ODM_REG_CCK_RPT_FORMAT_11N              0x824
-#define        ODM_REG_RX_DEFUALT_A_11N                0x858
-#define        ODM_REG_RX_DEFUALT_B_11N                0x85A
-#define        ODM_REG_BB_PWR_SAV3_11N                 0x85C
-#define        ODM_REG_ANTSEL_CTRL_11N                 0x860
-#define        ODM_REG_RX_ANT_CTRL_11N                 0x864
-#define        ODM_REG_PIN_CTRL_11N                    0x870
-#define        ODM_REG_BB_PWR_SAV1_11N                 0x874
-#define        ODM_REG_ANTSEL_PATH_11N                 0x878
-#define        ODM_REG_BB_3WIRE_11N                    0x88C
-#define        ODM_REG_SC_CNT_11N                      0x8C4
-#define        ODM_REG_PSD_DATA_11N                    0x8B4
-/* PAGE 9 */
-#define        ODM_REG_ANT_MAPPING1_11N                0x914
-#define        ODM_REG_ANT_MAPPING2_11N                0x918
-/* PAGE A */
-#define        ODM_REG_CCK_ANTDIV_PARA1_11N            0xA00
-#define        ODM_REG_CCK_CCA_11N                     0xA0A
-#define        ODM_REG_CCK_ANTDIV_PARA2_11N            0xA0C
-#define        ODM_REG_CCK_ANTDIV_PARA3_11N            0xA10
-#define        ODM_REG_CCK_ANTDIV_PARA4_11N            0xA14
-#define        ODM_REG_CCK_FILTER_PARA1_11N            0xA22
-#define        ODM_REG_CCK_FILTER_PARA2_11N            0xA23
-#define        ODM_REG_CCK_FILTER_PARA3_11N            0xA24
-#define        ODM_REG_CCK_FILTER_PARA4_11N            0xA25
-#define        ODM_REG_CCK_FILTER_PARA5_11N            0xA26
-#define        ODM_REG_CCK_FILTER_PARA6_11N            0xA27
-#define        ODM_REG_CCK_FILTER_PARA7_11N            0xA28
-#define        ODM_REG_CCK_FILTER_PARA8_11N            0xA29
-#define        ODM_REG_CCK_FA_RST_11N                  0xA2C
-#define        ODM_REG_CCK_FA_MSB_11N                  0xA58
-#define        ODM_REG_CCK_FA_LSB_11N                  0xA5C
-#define        ODM_REG_CCK_CCA_CNT_11N                 0xA60
-#define        ODM_REG_BB_PWR_SAV4_11N                 0xA74
-/* PAGE B */
-#define        ODM_REG_LNA_SWITCH_11N                  0xB2C
-#define        ODM_REG_PATH_SWITCH_11N                 0xB30
-#define        ODM_REG_RSSI_CTRL_11N                   0xB38
-#define        ODM_REG_CONFIG_ANTA_11N                 0xB68
-#define        ODM_REG_RSSI_BT_11N                     0xB9C
-/* PAGE C */
-#define        ODM_REG_OFDM_FA_HOLDC_11N               0xC00
-#define        ODM_REG_RX_PATH_11N                     0xC04
-#define        ODM_REG_TRMUX_11N                       0xC08
-#define        ODM_REG_OFDM_FA_RSTC_11N                0xC0C
-#define        ODM_REG_RXIQI_MATRIX_11N                0xC14
-#define        ODM_REG_TXIQK_MATRIX_LSB1_11N           0xC4C
-#define        ODM_REG_IGI_A_11N                       0xC50
-#define        ODM_REG_ANTDIV_PARA2_11N                0xC54
-#define        ODM_REG_IGI_B_11N                       0xC58
-#define        ODM_REG_ANTDIV_PARA3_11N                0xC5C
-#define        ODM_REG_BB_PWR_SAV2_11N                 0xC70
-#define        ODM_REG_RX_OFF_11N                      0xC7C
-#define        ODM_REG_TXIQK_MATRIXA_11N               0xC80
-#define        ODM_REG_TXIQK_MATRIXB_11N               0xC88
-#define        ODM_REG_TXIQK_MATRIXA_LSB2_11N          0xC94
-#define        ODM_REG_TXIQK_MATRIXB_LSB2_11N          0xC9C
-#define        ODM_REG_RXIQK_MATRIX_LSB_11N            0xCA0
-#define        ODM_REG_ANTDIV_PARA1_11N                0xCA4
-#define        ODM_REG_OFDM_FA_TYPE1_11N               0xCF0
-/* PAGE D */
-#define        ODM_REG_OFDM_FA_RSTD_11N                0xD00
-#define        ODM_REG_OFDM_FA_TYPE2_11N               0xDA0
-#define        ODM_REG_OFDM_FA_TYPE3_11N               0xDA4
-#define        ODM_REG_OFDM_FA_TYPE4_11N               0xDA8
-/* PAGE E */
-#define        ODM_REG_TXAGC_A_6_18_11N                0xE00
-#define        ODM_REG_TXAGC_A_24_54_11N               0xE04
-#define        ODM_REG_TXAGC_A_1_MCS32_11N             0xE08
-#define        ODM_REG_TXAGC_A_MCS0_3_11N              0xE10
-#define        ODM_REG_TXAGC_A_MCS4_7_11N              0xE14
-#define        ODM_REG_TXAGC_A_MCS8_11_11N             0xE18
-#define        ODM_REG_TXAGC_A_MCS12_15_11N            0xE1C
-#define        ODM_REG_FPGA0_IQK_11N                   0xE28
-#define        ODM_REG_TXIQK_TONE_A_11N                0xE30
-#define        ODM_REG_RXIQK_TONE_A_11N                0xE34
-#define        ODM_REG_TXIQK_PI_A_11N                  0xE38
-#define        ODM_REG_RXIQK_PI_A_11N                  0xE3C
-#define        ODM_REG_TXIQK_11N                       0xE40
-#define        ODM_REG_RXIQK_11N                       0xE44
-#define        ODM_REG_IQK_AGC_PTS_11N                 0xE48
-#define        ODM_REG_IQK_AGC_RSP_11N                 0xE4C
-#define        ODM_REG_BLUETOOTH_11N                   0xE6C
-#define        ODM_REG_RX_WAIT_CCA_11N                 0xE70
-#define        ODM_REG_TX_CCK_RFON_11N                 0xE74
-#define        ODM_REG_TX_CCK_BBON_11N                 0xE78
-#define        ODM_REG_OFDM_RFON_11N                   0xE7C
-#define        ODM_REG_OFDM_BBON_11N                   0xE80
-#define ODM_REG_TX2RX_11N                      0xE84
-#define        ODM_REG_TX2TX_11N                       0xE88
-#define        ODM_REG_RX_CCK_11N                      0xE8C
-#define        ODM_REG_RX_OFDM_11N                     0xED0
-#define        ODM_REG_RX_WAIT_RIFS_11N                0xED4
-#define        ODM_REG_RX2RX_11N                       0xED8
-#define        ODM_REG_STANDBY_11N                     0xEDC
-#define        ODM_REG_SLEEP_11N                       0xEE0
-#define        ODM_REG_PMPD_ANAEN_11N                  0xEEC
-
-
-
-
-
-
-
-/* 2 MAC REG LIST */
-#define        ODM_REG_BB_RST_11N                      0x02
-#define        ODM_REG_ANTSEL_PIN_11N                  0x4C
-#define        ODM_REG_EARLY_MODE_11N                  0x4D0
-#define        ODM_REG_RSSI_MONITOR_11N                0x4FE
-#define        ODM_REG_EDCA_VO_11N                     0x500
-#define        ODM_REG_EDCA_VI_11N                     0x504
-#define        ODM_REG_EDCA_BE_11N                     0x508
-#define        ODM_REG_EDCA_BK_11N                     0x50C
-#define        ODM_REG_TXPAUSE_11N                     0x522
-#define        ODM_REG_RESP_TX_11N                     0x6D8
-#define        ODM_REG_ANT_TRAIN_PARA1_11N             0x7b0
-#define        ODM_REG_ANT_TRAIN_PARA2_11N             0x7b4
-
-
-/* DIG Related */
-#define        ODM_BIT_IGI_11N                         0x0000007F
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/odm_debug.h b/drivers/staging/rtl8723au/include/odm_debug.h
deleted file mode 100644 (file)
index c4b375a..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-
-#ifndef        __ODM_DBG_H__
-#define __ODM_DBG_H__
-
-
-/*  */
-/*     Define the debug levels */
-/*  */
-/*     1.      DBG_TRACE and DBG_LOUD are used for normal cases. */
-/*     So that, they can help SW engineer to develop or trace states changed */
-/*     and also help HW enginner to trace every operation to and from HW, */
-/*     e.g IO, Tx, Rx. */
-/*  */
-/*     2.      DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, */
-/*     which help us to debug SW or HW. */
-/*  */
-/*  */
-/*  */
-/*     Never used in a call to ODM_RT_TRACE()! */
-/*  */
-#define ODM_DBG_OFF                                    1
-
-/*  */
-/*     Fatal bug. */
-/*     For example, Tx/Rx/IO locked up, OS hangs, memory access violation, */
-/*     resource allocation failed, unexpected HW behavior, HW BUG and so on. */
-/*  */
-#define ODM_DBG_SERIOUS                                2
-
-/*  */
-/*     Abnormal, rare, or unexpeted cases. */
-/*     For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. */
-/*  */
-#define ODM_DBG_WARNING                                3
-
-/*  */
-/*     Normal case with useful information about current SW or HW state. */
-/*     For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, */
-/*     SW protocol state change, dynamic mechanism state change and so on. */
-/*  */
-#define ODM_DBG_LOUD                                   4
-
-/*  */
-/*     Normal case with detail execution flow or information. */
-/*  */
-#define ODM_DBG_TRACE                                  5
-
-/*  */
-/*  Define the tracing components */
-/*  */
-/*  */
-/* BB Functions */
-#define ODM_COMP_DIG                           BIT(0)
-#define ODM_COMP_RA_MASK                       BIT(1)
-#define ODM_COMP_DYNAMIC_TXPWR                 BIT(2)
-#define ODM_COMP_FA_CNT                                BIT(3)
-#define ODM_COMP_RSSI_MONITOR                  BIT(4)
-#define ODM_COMP_CCK_PD                                BIT(5)
-#define ODM_COMP_ANT_DIV                       BIT(6)
-#define ODM_COMP_PWR_SAVE                      BIT(7)
-#define ODM_COMP_PWR_TRAIN                     BIT(8)
-#define ODM_COMP_RATE_ADAPTIVE                 BIT(9)
-#define ODM_COMP_PATH_DIV                      BIT(10)
-#define ODM_COMP_PSD                           BIT(11)
-#define ODM_COMP_DYNAMIC_PRICCA                        BIT(12)
-#define ODM_COMP_RXHP                          BIT(13)
-/* MAC Functions */
-#define ODM_COMP_EDCA_TURBO                    BIT(16)
-#define ODM_COMP_EARLY_MODE                    BIT(17)
-/* RF Functions */
-#define ODM_COMP_TX_PWR_TRACK                  BIT(24)
-#define ODM_COMP_RX_GAIN_TRACK                 BIT(25)
-#define ODM_COMP_CALIBRATION                   BIT(26)
-/* Common Functions */
-#define ODM_COMP_COMMON                                BIT(30)
-#define ODM_COMP_INIT                          BIT(31)
-
-/*------------------------Export Macro Definition---------------------------*/
-       #define RT_PRINTK(fmt, args...) printk("%s(): " fmt, __func__, ## args);
-
-#ifndef ASSERT
-       #define ASSERT(expr)
-#endif
-
-#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt)                                                        \
-               if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel))       \
-               {                                                                               \
-                       printk("[ODM-8723A] ");                                         \
-                       RT_PRINTK fmt;                                                          \
-               }
-
-#define ODM_RT_ASSERT(pDM_Odm, expr, fmt)                                                      \
-               if(!(expr)) {                                                                   \
-                       printk("Assertion failed! %s at ......\n", #expr);                      \
-                       printk("      ......%s,%s,line=%d\n", __FILE__, __func__, __LINE__);\
-                       RT_PRINTK fmt;                                                          \
-                       ASSERT(false);                                                          \
-               }
-
-void ODM_InitDebugSetting23a(struct dm_odm_t *pDM_Odm);
-
-#endif /*  __ODM_DBG_H__ */
diff --git a/drivers/staging/rtl8723au/include/odm_interface.h b/drivers/staging/rtl8723au/include/odm_interface.h
deleted file mode 100644 (file)
index 1d3bf03..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-
-#ifndef        __ODM_INTERFACE_H__
-#define __ODM_INTERFACE_H__
-
-
-/*  _cat: implemented by Token-Pasting Operator. */
-
-/*===================================
-
-#define ODM_REG_DIG_11N                0xC50
-#define ODM_REG_DIG_11AC       0xDDD
-
-ODM_REG(DIG,_pDM_Odm)
-=====================================*/
-
-#define _reg_11N(_name)                        ODM_REG_##_name##_11N
-#define _reg_11AC(_name)               ODM_REG_##_name##_11AC
-#define _bit_11N(_name)                        ODM_BIT_##_name##_11N
-#define _bit_11AC(_name)               ODM_BIT_##_name##_11AC
-
-#define _cat(_name, _func)                                     \
-       (                                                       \
-               _func##_11N(_name)                              \
-       )
-
-/*  _name: name of register or bit. */
-/*  Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" */
-/*         gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType. */
-#define ODM_REG(_name, _pDM_Odm)       _cat(_name, _reg)
-#define ODM_BIT(_name, _pDM_Odm)       _cat(_name, _bit)
-
-/*  */
-/*  2012/02/17 MH For non-MP compile pass only. Linux does not support workitem. */
-/*  Suggest HW team to use thread instead of workitem. Windows also support the feature. */
-/*  */
-typedef void (*RT_WORKITEM_CALL_BACK)(struct work_struct *pContext);
-
-/*  */
-/*  =========== EXtern Function Prototype */
-/*  */
-
-void ODM_SetRFReg(struct dm_odm_t *pDM_Odm, enum RF_RADIO_PATH eRFPath,
-                 u32 RegAddr, u32 BitMask, u32 Data);
-u32 ODM_GetRFReg(struct dm_odm_t *pDM_Odm, enum RF_RADIO_PATH eRFPath,
-                u32 RegAddr, u32 BitMask);
-
-#endif /*  __ODM_INTERFACE_H__ */
diff --git a/drivers/staging/rtl8723au/include/odm_precomp.h b/drivers/staging/rtl8723au/include/odm_precomp.h
deleted file mode 100644 (file)
index fb793c8..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#ifndef        __ODM_PRECOMP_H__
-#define __ODM_PRECOMP_H__
-
-/* 2 Config Flags and Structs - defined by each ODM Type */
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <hal_intf.h>
-
-
-/* 2 Hardware Parameter Files */
-#include "Hal8723UHWImg_CE.h"
-
-
-/* 2 OutSrc Header Files */
-
-#include "odm.h"
-#include "odm_HWConfig.h"
-#include "odm_debug.h"
-#include "odm_RegDefine11N.h"
-
-#include "HalDMOutSrc8723A.h" /* for IQK,LCK,Power-tracking */
-#include "rtl8723a_hal.h"
-
-#include "odm_interface.h"
-#include "odm_reg.h"
-
-#include "HalHWImg8723A_MAC.h"
-#include "HalHWImg8723A_RF.h"
-#include "HalHWImg8723A_BB.h"
-#include "HalHWImg8723A_FW.h"
-#include "odm_RegConfig8723A.h"
-
-#endif /*  __ODM_PRECOMP_H__ */
diff --git a/drivers/staging/rtl8723au/include/odm_reg.h b/drivers/staging/rtl8723au/include/odm_reg.h
deleted file mode 100644 (file)
index c184331..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-/*  */
-/*  File Name: odm_reg.h */
-/*  */
-/*  Description: */
-/*  */
-/*  This file is for general register definition. */
-/*  */
-/*  */
-/*  */
-#ifndef        __HAL_ODM_REG_H__
-#define __HAL_ODM_REG_H__
-
-/*  */
-/*  Register Definition */
-/*  */
-
-/* MAC REG */
-#define        ODM_BB_RESET                                    0x002
-#define        ODM_DUMMY                                               0x4fe
-#define        ODM_EDCA_VO_PARAM                       0x500
-#define        ODM_EDCA_VI_PARAM                       0x504
-#define        ODM_EDCA_BE_PARAM                       0x508
-#define        ODM_EDCA_BK_PARAM                       0x50C
-#define        ODM_TXPAUSE                                     0x522
-
-/* BB REG */
-#define        ODM_FPGA_PHY0_PAGE8                     0x800
-#define        ODM_PSD_SETTING                         0x808
-#define        ODM_AFE_SETTING                         0x818
-#define        ODM_TXAGC_B_6_18                                0x830
-#define        ODM_TXAGC_B_24_54                       0x834
-#define        ODM_TXAGC_B_MCS32_5                     0x838
-#define        ODM_TXAGC_B_MCS0_MCS3           0x83c
-#define        ODM_TXAGC_B_MCS4_MCS7           0x848
-#define        ODM_TXAGC_B_MCS8_MCS11          0x84c
-#define        ODM_ANALOG_REGISTER                     0x85c
-#define        ODM_RF_INTERFACE_OUTPUT         0x860
-#define        ODM_TXAGC_B_MCS12_MCS15 0x868
-#define        ODM_TXAGC_B_11_A_2_11           0x86c
-#define        ODM_AD_DA_LSB_MASK                      0x874
-#define        ODM_ENABLE_3_WIRE                       0x88c
-#define        ODM_PSD_REPORT                          0x8b4
-#define        ODM_R_ANT_SELECT                                0x90c
-#define        ODM_CCK_ANT_SELECT                      0xa07
-#define        ODM_CCK_PD_THRESH                       0xa0a
-#define        ODM_CCK_RF_REG1                         0xa11
-#define        ODM_CCK_MATCH_FILTER                    0xa20
-#define        ODM_CCK_RAKE_MAC                                0xa2e
-#define        ODM_CCK_CNT_RESET                       0xa2d
-#define        ODM_CCK_TX_DIVERSITY                    0xa2f
-#define        ODM_CCK_FA_CNT_MSB                      0xa5b
-#define        ODM_CCK_FA_CNT_LSB                      0xa5c
-#define        ODM_CCK_NEW_FUNCTION            0xa75
-#define        ODM_OFDM_PHY0_PAGE_C            0xc00
-#define        ODM_OFDM_RX_ANT                         0xc04
-#define        ODM_R_A_RXIQI                                   0xc14
-#define        ODM_R_A_AGC_CORE1                       0xc50
-#define        ODM_R_A_AGC_CORE2                       0xc54
-#define        ODM_R_B_AGC_CORE1                       0xc58
-#define        ODM_R_AGC_PAR                                   0xc70
-#define        ODM_R_HTSTF_AGC_PAR                     0xc7c
-#define        ODM_TX_PWR_TRAINING_A           0xc90
-#define        ODM_TX_PWR_TRAINING_B           0xc98
-#define        ODM_OFDM_FA_CNT1                                0xcf0
-#define        ODM_OFDM_PHY0_PAGE_D            0xd00
-#define        ODM_OFDM_FA_CNT2                                0xda0
-#define        ODM_OFDM_FA_CNT3                                0xda4
-#define        ODM_OFDM_FA_CNT4                                0xda8
-#define        ODM_TXAGC_A_6_18                                0xe00
-#define        ODM_TXAGC_A_24_54                       0xe04
-#define        ODM_TXAGC_A_1_MCS32                     0xe08
-#define        ODM_TXAGC_A_MCS0_MCS3           0xe10
-#define        ODM_TXAGC_A_MCS4_MCS7           0xe14
-#define        ODM_TXAGC_A_MCS8_MCS11          0xe18
-#define        ODM_TXAGC_A_MCS12_MCS15         0xe1c
-
-/* RF REG */
-#define        ODM_GAIN_SETTING                                0x00
-#define        ODM_CHANNEL                                     0x18
-
-/* Ant Detect Reg */
-#define        ODM_DPDT                                                0x300
-
-/* PSD Init */
-#define        ODM_PSDREG                                      0x808
-
-/* 92D Path Div */
-#define        PATHDIV_REG                                     0xB30
-#define        PATHDIV_TRI                                     0xBA0
-
-/*  */
-/*  Bitmap Definition */
-/*  */
-
-#define        BIT_FA_RESET                                    BIT(0)
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/osdep_intf.h b/drivers/staging/rtl8723au/include/osdep_intf.h
deleted file mode 100644 (file)
index a157eb2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#ifndef __OSDEP_INTF_H_
-#define __OSDEP_INTF_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-int rtw_init_drv_sw23a(struct rtw_adapter *padapter);
-int rtw_free_drv_sw23a(struct rtw_adapter *padapter);
-int rtw_reset_drv_sw23a(struct rtw_adapter *padapter);
-
-void rtw_cancel_all_timer23a(struct rtw_adapter *padapter);
-
-int rtw_init_netdev23a_name23a(struct net_device *pnetdev, const char *ifname);
-struct net_device *rtw_init_netdev23a(struct rtw_adapter *padapter);
-
-u16 rtw_recv_select_queue23a(struct sk_buff *skb);
-
-void rtw_ips_dev_unload23a(struct rtw_adapter *padapter);
-
-int rtw_ips_pwr_up23a(struct rtw_adapter *padapter);
-void rtw_ips_pwr_down23a(struct rtw_adapter *padapter);
-
-int rtw_drv_register_netdev(struct rtw_adapter *padapter);
-void rtw_ndev_destructor(struct net_device *ndev);
-
-int rtl8723au_inirp_init(struct rtw_adapter *Adapter);
-int rtl8723au_inirp_deinit(struct rtw_adapter *Adapter);
-void rtl8723a_usb_intf_stop(struct rtw_adapter *padapter);
-
-#endif /* _OSDEP_INTF_H_ */
diff --git a/drivers/staging/rtl8723au/include/osdep_service.h b/drivers/staging/rtl8723au/include/osdep_service.h
deleted file mode 100644 (file)
index 98250b1..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __OSDEP_SERVICE_H_
-#define __OSDEP_SERVICE_H_
-
-#define _FAIL          0
-#define _SUCCESS       1
-#define RTW_RX_HANDLED 2
-
-#include <linux/spinlock.h>
-#include <linux/compiler.h>
-#include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/slab.h>
-#include <linux/module.h>
-#include <linux/kref.h>
-#include <linux/netdevice.h>
-#include <linux/skbuff.h>
-#include <linux/uaccess.h>
-#include <asm/byteorder.h>
-#include <linux/atomic.h>
-#include <linux/io.h>
-#include <linux/semaphore.h>
-#include <linux/sem.h>
-#include <linux/sched.h>
-#include <linux/etherdevice.h>
-#include <linux/wireless.h>
-#include <linux/if_arp.h>
-#include <linux/rtnetlink.h>
-#include <linux/delay.h>
-#include <linux/interrupt.h>   /*  for struct tasklet_struct */
-#include <linux/ip.h>
-
-#include <net/ieee80211_radiotap.h>
-#include <net/cfg80211.h>
-
-struct rtw_queue {
-       struct  list_head       queue;
-       spinlock_t              lock;
-};
-
-static inline struct list_head *get_list_head(struct rtw_queue *queue)
-{
-       return &queue->queue;
-}
-
-static inline int rtw_netif_queue_stopped(struct net_device *pnetdev)
-{
-       return (netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 0)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 1)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 2)) &&
-               netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3)));
-}
-
-static inline u32 CHKBIT(u32 x)
-{
-       WARN_ON(x >= 32);
-       if (x >= 32)
-               return 0;
-       return BIT(x);
-}
-
-extern unsigned char MCS_rate_2R23A[16];
-
-extern unsigned char   MCS_rate_2R23A[16];
-extern unsigned char   MCS_rate_1R23A[16];
-
-void   _rtw_init_queue23a(struct rtw_queue *pqueue);
-
-/* Macros for handling unaligned memory accesses */
-
-#define RTW_GET_BE24(a) ((((u32) (a)[0]) << 16) | (((u32) (a)[1]) << 8) | \
-                        ((u32) (a)[2]))
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/recv_osdep.h b/drivers/staging/rtl8723au/include/recv_osdep.h
deleted file mode 100644 (file)
index c2d3f1b..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RECV_OSDEP_H_
-#define __RECV_OSDEP_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-int _rtw_init_recv_priv23a(struct recv_priv *precvpriv, struct rtw_adapter *padapter);
-void _rtw_free_recv_priv23a (struct recv_priv *precvpriv);
-
-int rtw_recv_entry23a(struct recv_frame *precv_frame);
-int rtw_recv_indicatepkt23a(struct rtw_adapter *adapter, struct recv_frame *precv_frame);
-
-void rtw_handle_tkip_mic_err23a(struct rtw_adapter *padapter, u8 bgroup);
-
-int    rtw_init_recv_priv(struct recv_priv *precvpriv, struct rtw_adapter *padapter);
-void rtw_free_recv_priv (struct recv_priv *precvpriv);
-
-int rtw_os_recv_resource_init(struct recv_priv *precvpriv, struct rtw_adapter *padapter);
-
-void rtw_init_recv_timer23a(struct recv_reorder_ctrl *preorder_ctrl);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_bt-coexist.h b/drivers/staging/rtl8723au/include/rtl8723a_bt-coexist.h
deleted file mode 100644 (file)
index 7add5df..0000000
+++ /dev/null
@@ -1,1627 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_BT_COEXIST_H__
-#define __RTL8723A_BT_COEXIST_H__
-
-#include <drv_types.h>
-#include "odm_precomp.h"
-
-
-/*  HEADER/PlatformDef.h */
-enum rt_media_status {
-       RT_MEDIA_DISCONNECT     = 0,
-       RT_MEDIA_CONNECT        = 1
-};
-
-/*  ===== Below this line is sync from SD7 driver COMMON/BT.h ===== */
-
-#define        BT_TMP_BUF_SIZE         100
-
-void BT_SignalCompensation(struct rtw_adapter *padapter,
-                          u8 *rssi_wifi, u8 *rssi_bt);
-void BT_HaltProcess(struct rtw_adapter *padapter);
-void BT_LpsLeave(struct rtw_adapter *padapter);
-
-
-#define        BT_HsConnectionEstablished(Adapter)             false
-/*  ===== End of sync from SD7 driver COMMON/BT.h ===== */
-
-/*  HEADER/SecurityType.h */
-#define TKIP_ENC_KEY_POS               32              /* KEK_LEN+KEK_LEN) */
-#define MAXRSNIELEN                            256
-
-/*  COMMON/Protocol802_11.h */
-/*  */
-/*       802.11 Management frame Status Code field */
-/*  */
-struct octet_string {
-       u8              *Octet;
-       u16             Length;
-};
-
-
-/*  AES_CCMP specific */
-enum {
-       AESCCMP_BLK_SIZE                =   16,     /*  # octets in an AES block */
-       AESCCMP_MAX_PACKET              =   4*512,  /*  largest packet size */
-       AESCCMP_N_RESERVED              =   0,      /*  reserved nonce octet value */
-       AESCCMP_A_DATA                  =   0x40,   /*  the Adata bit in the flags */
-       AESCCMP_M_SHIFT                 =   3,      /*  how much to shift the 3-bit M field */
-       AESCCMP_L_SHIFT                 =   0,      /*  how much to shift the 3-bit L field */
-       AESCCMP_L_SIZE                  =   2,       /*  size of the l(m) length field (in octets) */
-       AESCCMP_OFFSET_SC               =       22,
-       AESCCMP_OFFSET_DURATION =       4,
-       AESCCMP_OFFSET_A2               =       10,
-       AESCCMP_OFFSET_A4               =       24,
-       AESCCMP_QC_TID_MASK             =       0x0f,
-       AESCCMP_BLK_SIZE_TOTAL  =   16*16,     /*  Added by Annie for CKIP AES MIC BSOD, 2006-08-17. */
-                                                                                       /*  16*8 < 4*60  Resove to 16*16 */
-};
-
-/*  Key Length */
-#define PMK_LEN                                32
-#define PTK_LEN_TKIP                   64
-#define GTK_LEN                                32
-#define KEY_NONCE_LEN                  32
-
-
-/*  COMMON/Dot11d.h */
-struct chnl_txpower_triple {
-       u8 FirstChnl;
-       u8 NumChnls;
-       s8 MaxTxPowerInDbm;
-};
-
-
-/*  ===== Below this line is sync from SD7 driver COMMON/bt_hci.h ===== */
-/*  The following is for BT 3.0 + HS HCI COMMAND ERRORS CODES */
-
-#define Max80211PALPDUSize                     1492
-#define Max80211AMPASSOCLen                    672
-#define MinGUserPrio                                   4
-#define MaxGUserPrio                                   7
-#define BEUserPrio0                                            0
-#define BEUserPrio1                                            3
-#define Max80211BeaconPeriod           2000
-#define ShortRangeModePowerMax         4
-
-#define BT_Default_Chnl                                        10
-#define ACLDataHeaderLen                               4
-
-#define BTTotalDataBlockNum                    0x100
-#define BTLocalBufNum                                  0x200
-#define BTMaxDataBlockLen                              0x800
-#define BTTOTALBANDWIDTH                               0x7530
-#define BTMAXBANDGUBANDWIDTH           0x4e20
-#define TmpLocalBufSize                                        0x100
-#define BTSynDataPacketLength                  0xff
-/*  */
-
-#define BTMaxAuthCount                                 5
-#define BTMaxAsocCount                                 5
-
-#define MAX_LOGICAL_LINK_NUM                   2       /* temporarily define */
-#define MAX_BT_ASOC_ENTRY_NUM          2       /* temporarily define */
-
-#define INVALID_PL_HANDLE                              0xff
-#define INVALID_ENTRY_NUM                              0xff
-/*  */
-
-#define CAM_BT_START_INDEX             (HALF_CAM_ENTRY - 4)   /*  MAX_BT_ASOC_ENTRY_NUM : 4 !!! */
-#define BT_HWCAM_STAR                  CAM_BT_START_INDEX  /*  We used  HALF_CAM_ENTRY ~ HALF_CAM_ENTRY -MAX_BT_ASOC_ENTRY_NUM */
-
-enum hci_status {
-       HCI_STATUS_SUCCESS                      = 0x00, /* Success */
-       HCI_STATUS_UNKNOW_HCI_CMD               = 0x01, /* Unknown HCI Command */
-       HCI_STATUS_UNKNOW_CONNECT_ID            = 0X02, /* Unknown Connection Identifier */
-       HCI_STATUS_HW_FAIL                      = 0X03, /* Hardware Failure */
-       HCI_STATUS_PAGE_TIMEOUT                 = 0X04, /* Page Timeout */
-       HCI_STATUS_AUTH_FAIL                    = 0X05, /* Authentication Failure */
-       HCI_STATUS_PIN_OR_KEY_MISSING           = 0X06, /* PIN or Key Missing */
-       HCI_STATUS_MEM_CAP_EXCEED               = 0X07, /* Memory Capacity Exceeded */
-       HCI_STATUS_CONNECT_TIMEOUT              = 0X08, /* Connection Timeout */
-       HCI_STATUS_CONNECT_LIMIT                = 0X09, /* Connection Limit Exceeded */
-       HCI_STATUS_SYN_CONNECT_LIMIT            = 0X0a, /* Synchronous Connection Limit To A Device Exceeded */
-       HCI_STATUS_ACL_CONNECT_EXISTS           = 0X0b, /* ACL Connection Already Exists */
-       HCI_STATUS_CMD_DISALLOW                 = 0X0c, /* Command Disallowed */
-       HCI_STATUS_CONNECT_RJT_LIMIT_RESOURCE   = 0X0d, /* Connection Rejected due to Limited Resources */
-       HCI_STATUS_CONNECT_RJT_SEC_REASON       = 0X0e, /* Connection Rejected Due To Security Reasons */
-       HCI_STATUS_CONNECT_RJT_UNACCEPT_BD_ADDR = 0X0f, /* Connection Rejected due to Unacceptable BD_ADDR */
-       HCI_STATUS_CONNECT_ACCEPT_TIMEOUT       = 0X10, /* Connection Accept Timeout Exceeded */
-       HCI_STATUS_UNSUPPORT_FEATURE_PARA_VALUE = 0X11, /* Unsupported Feature or Parameter Value */
-       HCI_STATUS_INVALID_HCI_CMD_PARA_VALUE   = 0X12, /* Invalid HCI Command Parameters */
-       HCI_STATUS_REMOTE_USER_TERMINATE_CONNECT = 0X13, /* Remote User Terminated Connection */
-       HCI_STATUS_REMOTE_DEV_TERMINATE_LOW_RESOURCE = 0X14, /* Remote Device Terminated Connection due to Low Resources */
-       HCI_STATUS_REMOTE_DEV_TERMINATE_CONNECT_POWER_OFF = 0X15, /* Remote Device Terminated Connection due to Power Off */
-       HCI_STATUS_CONNECT_TERMINATE_LOCAL_HOST = 0X16, /* Connection Terminated By Local Host */
-       HCI_STATUS_REPEATE_ATTEMPT              = 0X17, /* Repeated Attempts */
-       HCI_STATUS_PAIR_NOT_ALLOW               = 0X18, /* Pairing Not Allowed */
-       HCI_STATUS_UNKNOW_LMP_PDU               = 0X19, /* Unknown LMP PDU */
-       HCI_STATUS_UNSUPPORT_REMOTE_LMP_FEATURE = 0X1a, /* Unsupported Remote Feature / Unsupported LMP Feature */
-       HCI_STATUS_SOC_OFFSET_REJECT            = 0X1b, /* SCO Offset Rejected */
-       HCI_STATUS_SOC_INTERVAL_REJECT          = 0X1c, /* SCO Interval Rejected */
-       HCI_STATUS_SOC_AIR_MODE_REJECT          = 0X1d,/* SCO Air Mode Rejected */
-       HCI_STATUS_INVALID_LMP_PARA             = 0X1e, /* Invalid LMP Parameters */
-       HCI_STATUS_UNSPECIFIC_ERROR             = 0X1f, /* Unspecified Error */
-       HCI_STATUS_UNSUPPORT_LMP_PARA_VALUE     = 0X20, /* Unsupported LMP Parameter Value */
-       HCI_STATUS_ROLE_CHANGE_NOT_ALLOW        = 0X21, /* Role Change Not Allowed */
-       HCI_STATUS_LMP_RESPONSE_TIMEOUT         = 0X22, /* LMP Response Timeout */
-       HCI_STATUS_LMP_ERROR_TRANSACTION_COLLISION = 0X23, /* LMP Error Transaction Collision */
-       HCI_STATUS_LMP_PDU_NOT_ALLOW            = 0X24, /* LMP PDU Not Allowed */
-       HCI_STATUS_ENCRYPTION_MODE_NOT_ALLOW    = 0X25, /* Encryption Mode Not Acceptable */
-       HCI_STATUS_LINK_KEY_CAN_NOT_CHANGE      = 0X26, /* Link Key Can Not be Changed */
-       HCI_STATUS_REQUEST_QOS_NOT_SUPPORT      = 0X27, /* Requested QoS Not Supported */
-       HCI_STATUS_INSTANT_PASSED               = 0X28, /* Instant Passed */
-       HCI_STATUS_PAIRING_UNIT_KEY_NOT_SUPPORT = 0X29, /* Pairing With Unit Key Not Supported */
-       HCI_STATUS_DIFFERENT_TRANSACTION_COLLISION = 0X2a, /* Different Transaction Collision */
-       HCI_STATUS_RESERVE_1                    = 0X2b, /* Reserved */
-       HCI_STATUS_QOS_UNACCEPT_PARA            = 0X2c, /* QoS Unacceptable Parameter */
-       HCI_STATUS_QOS_REJECT                   = 0X2d, /* QoS Rejected */
-       HCI_STATUS_CHNL_CLASSIFICATION_NOT_SUPPORT = 0X2e, /* Channel Classification Not Supported */
-       HCI_STATUS_INSUFFICIENT_SECURITY        = 0X2f, /* Insufficient Security */
-       HCI_STATUS_PARA_OUT_OF_RANGE            = 0x30, /* Parameter Out Of Mandatory Range */
-       HCI_STATUS_RESERVE_2                    = 0X31, /* Reserved */
-       HCI_STATUS_ROLE_SWITCH_PENDING          = 0X32, /* Role Switch Pending */
-       HCI_STATUS_RESERVE_3                    = 0X33, /* Reserved */
-       HCI_STATUS_RESERVE_SOLT_VIOLATION       = 0X34, /* Reserved Slot Violation */
-       HCI_STATUS_ROLE_SWITCH_FAIL             = 0X35, /* Role Switch Failed */
-       HCI_STATUS_EXTEND_INQUIRY_RSP_TOO_LARGE = 0X36, /* Extended Inquiry Response Too Large */
-       HCI_STATUS_SEC_SIMPLE_PAIRING_NOT_SUPPORT = 0X37, /* Secure Simple Pairing Not Supported By Host. */
-       HCI_STATUS_HOST_BUSY_PAIRING            = 0X38, /* Host Busy - Pairing */
-       HCI_STATUS_CONNECT_REJ_NOT_SUIT_CHNL_FOUND = 0X39, /* Connection Rejected due to No Suitable Channel Found */
-       HCI_STATUS_CONTROLLER_BUSY              = 0X3a  /* CONTROLLER BUSY */
-};
-
-/*  */
-/*  The following is for BT 3.0 + HS HCI COMMAND */
-/*  */
-
-/* bit 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 */
-/*      |      OCF                                  |     OGF       | */
-/*  */
-
-/* OGF 0x01 */
-#define LINK_CONTROL_COMMANDS                  0x01
-enum link_control_commands {
-       HCI_INQUIRY                                     = 0x0001,
-       HCI_INQUIRY_CANCEL                              = 0x0002,
-       HCI_PERIODIC_INQUIRY_MODE                       = 0x0003,
-       HCI_EXIT_PERIODIC_INQUIRY_MODE                  = 0x0004,
-       HCI_CREATE_CONNECTION                           = 0x0005,
-       HCI_DISCONNECT                                  = 0x0006,
-       HCI_CREATE_CONNECTION_CANCEL                    = 0x0008,
-       HCI_ACCEPT_CONNECTIONREQUEST                    = 0x0009,
-       HCI_REJECT_CONNECTION_REQUEST                   = 0x000a,
-       HCI_LINK_KEY_REQUEST_REPLY                      = 0x000b,
-       HCI_LINK_KEY_REQUEST_NEGATIVE_REPLY             = 0x000c,
-       HCI_PIN_CODE_REQUEST_REPLY                      = 0x000d,
-       HCI_PIN_CODE_REQUEST_NEGATIVE_REPLY             = 0x000e,
-       HCI_CHANGE_CONNECTION_PACKET_TYPE               = 0x000f,
-       HCI_AUTHENTICATION_REQUESTED                    = 0x0011,
-       HCI_SET_CONNECTION_ENCRYPTION                   = 0x0013,
-       HCI_CHANGE_CONNECTION_LINK_KEY                  = 0x0015,
-       HCI_MASTER_LINK_KEY                             = 0x0017,
-       HCI_REMOTE_NAME_REQUEST                         = 0x0019,
-       HCI_REMOTE_NAME_REQUEST_CANCEL                  = 0x001a,
-       HCI_READ_REMOTE_SUPPORTED_FEATURES              = 0x001b,
-       HCI_READ_REMOTE_EXTENDED_FEATURES               = 0x001c,
-       HCI_READ_REMOTE_VERSION_INFORMATION             = 0x001d,
-       HCI_READ_CLOCK_OFFSET                           = 0x001f,
-       HCI_READ_LMP_HANDLE                             = 0x0020,
-       HCI_SETUP_SYNCHRONOUS_CONNECTION                = 0x0028,
-       HCI_ACCEPT_SYNCHRONOUS_CONNECTION_REQUEST       = 0x0029,
-       HCI_REJECT_SYNCHRONOUS_CONNECTION_REQUEST       = 0x002a,
-       HCI_IO_CAPABILITY_REQUEST_REPLY                 = 0x002b,
-       HCI_USER_CONFIRMATION_REQUEST_REPLY             = 0x002c,
-       HCI_USER_CONFIRMATION_REQUEST_NEGATIVE_REPLY    = 0x002d,
-       HCI_USER_PASSKEY_REQUEST_REPLY                  = 0x002e,
-       HCI_USER_PASSKEY_REQUESTNEGATIVE_REPLY          = 0x002f,
-       HCI_REMOTE_OOB_DATA_REQUEST_REPLY               = 0x0030,
-       HCI_REMOTE_OOB_DATA_REQUEST_NEGATIVE_REPLY      = 0x0033,
-       HCI_IO_CAPABILITY_REQUEST_NEGATIVE_REPLY        = 0x0034,
-       HCI_CREATE_PHYSICAL_LINK                        = 0x0035,
-       HCI_ACCEPT_PHYSICAL_LINK                        = 0x0036,
-       HCI_DISCONNECT_PHYSICAL_LINK                    = 0x0037,
-       HCI_CREATE_LOGICAL_LINK                         = 0x0038,
-       HCI_ACCEPT_LOGICAL_LINK                         = 0x0039,
-       HCI_DISCONNECT_LOGICAL_LINK                     = 0x003a,
-       HCI_LOGICAL_LINK_CANCEL                         = 0x003b,
-       HCI_FLOW_SPEC_MODIFY                            = 0x003c
-};
-
-/* OGF 0x02 */
-#define HOLD_MODE_COMMAND                              0x02
-enum hold_mode_command {
-       HCI_HOLD_MODE                                   = 0x0001,
-       HCI_SNIFF_MODE                                  = 0x0002,
-       HCI_EXIT_SNIFF_MODE                             = 0x0003,
-       HCI_PARK_STATE                                  = 0x0005,
-       HCI_EXIT_PARK_STATE                             = 0x0006,
-       HCI_QOS_SETUP                                   = 0x0007,
-       HCI_ROLE_DISCOVERY                              = 0x0009,
-       HCI_SWITCH_ROLE                                 = 0x000b,
-       HCI_READ_LINK_POLICY_SETTINGS                   = 0x000c,
-       HCI_WRITE_LINK_POLICY_SETTINGS                  = 0x000d,
-       HCI_READ_DEFAULT_LINK_POLICY_SETTINGS           = 0x000e,
-       HCI_WRITE_DEFAULT_LINK_POLICY_SETTINGS          = 0x000f,
-       HCI_FLOW_SPECIFICATION                          = 0x0010,
-       HCI_SNIFF_SUBRATING                             = 0x0011
-};
-
-/* OGF 0x03 */
-#define OGF_SET_EVENT_MASK_COMMAND                     0x03
-enum set_event_mask_command {
-       HCI_SET_EVENT_MASK                              = 0x0001,
-       HCI_RESET                                       = 0x0003,
-       HCI_SET_EVENT_FILTER                            = 0x0005,
-       HCI_FLUSH                                       = 0x0008,
-       HCI_READ_PIN_TYPE                               = 0x0009,
-       HCI_WRITE_PIN_TYPE                              = 0x000a,
-       HCI_CREATE_NEW_UNIT_KEY                         = 0x000b,
-       HCI_READ_STORED_LINK_KEY                        = 0x000d,
-       HCI_WRITE_STORED_LINK_KEY                       = 0x0011,
-       HCI_DELETE_STORED_LINK_KEY                      = 0x0012,
-       HCI_WRITE_LOCAL_NAME                            = 0x0013,
-       HCI_READ_LOCAL_NAME                             = 0x0014,
-       HCI_READ_CONNECTION_ACCEPT_TIMEOUT              = 0x0015,
-       HCI_WRITE_CONNECTION_ACCEPT_TIMEOUT             = 0x0016,
-       HCI_READ_PAGE_TIMEOUT                           = 0x0017,
-       HCI_WRITE_PAGE_TIMEOUT                          = 0x0018,
-       HCI_READ_SCAN_ENABLE                            = 0x0019,
-       HCI_WRITE_SCAN_ENABLE                           = 0x001a,
-       HCI_READ_PAGE_SCAN_ACTIVITY                     = 0x001b,
-       HCI_WRITE_PAGE_SCAN_ACTIVITY                    = 0x001c,
-       HCI_READ_INQUIRY_SCAN_ACTIVITY                  = 0x001d,
-       HCI_WRITE_INQUIRY_SCAN_ACTIVITY                 = 0x001e,
-       HCI_READ_AUTHENTICATION_ENABLE                  = 0x001f,
-       HCI_WRITE_AUTHENTICATION_ENABLE                 = 0x0020,
-       HCI_READ_CLASS_OF_DEVICE                        = 0x0023,
-       HCI_WRITE_CLASS_OF_DEVICE                       = 0x0024,
-       HCI_READ_VOICE_SETTING                          = 0x0025,
-       HCI_WRITE_VOICE_SETTING                         = 0x0026,
-       HCI_READ_AUTOMATIC_FLUSH_TIMEOUT                = 0x0027,
-       HCI_WRITE_AUTOMATIC_FLUSH_TIMEOUT               = 0x0028,
-       HCI_READ_NUM_BROADCAST_RETRANSMISSIONS          = 0x0029,
-       HCI_WRITE_NUM_BROADCAST_RETRANSMISSIONS         = 0x002a,
-       HCI_READ_HOLD_MODE_ACTIVITY                     = 0x002b,
-       HCI_WRITE_HOLD_MODE_ACTIVITY                    = 0x002c,
-       HCI_READ_SYNCHRONOUS_FLOW_CONTROL_ENABLE        = 0x002e,
-       HCI_WRITE_SYNCHRONOUS_FLOW_CONTROL_ENABLE       = 0x002f,
-       HCI_SET_CONTROLLER_TO_HOST_FLOW_CONTROL         = 0x0031,
-       HCI_HOST_BUFFER_SIZE                            = 0x0033,
-       HCI_HOST_NUMBER_OF_COMPLETED_PACKETS            = 0x0035,
-       HCI_READ_LINK_SUPERVISION_TIMEOUT               = 0x0036,
-       HCI_WRITE_LINK_SUPERVISION_TIMEOUT              = 0x0037,
-       HCI_READ_NUMBER_OF_SUPPORTED_IAC                = 0x0038,
-       HCI_READ_CURRENT_IAC_LAP                        = 0x0039,
-       HCI_WRITE_CURRENT_IAC_LAP                       = 0x003a,
-       HCI_READ_PAGE_SCAN_MODE                         = 0x003d,
-       HCI_WRITE_PAGE_SCAN_MODE                        = 0x003e,
-       HCI_SET_AFH_HOST_CHANNEL_CLASSIFICATION         = 0x003f,
-       HCI_READ_INQUIRY_SCAN_TYPE                      = 0x0042,
-       HCI_WRITE_INQUIRY_SCAN_TYPE                     = 0x0043,
-       HCI_READ_INQUIRY_MODE                           = 0x0044,
-       HCI_WRITE_INQUIRY_MODE                          = 0x0045,
-       HCI_READ_PAGE_SCAN_TYPE                         = 0x0046,
-       HCI_WRITE_PAGE_SCAN_TYPE                        = 0x0047,
-       HCI_READ_AFH_CHANNEL_ASSESSMENT_MODE            = 0x0048,
-       HCI_WRITE_AFH_CHANNEL_ASSESSMENT_MODE           = 0x0049,
-       HCI_READ_EXTENDED_INQUIRY_RESPONSE              = 0x0051,
-       HCI_WRITE_EXTENDED_INQUIRY_RESPONSE             = 0x0052,
-       HCI_REFRESH_ENCRYPTION_KEY                      = 0x0053,
-       HCI_READ_SIMPLE_PAIRING_MODE                    = 0x0055,
-       HCI_WRITE_SIMPLE_PAIRING_MODE                   = 0x0056,
-       HCI_READ_LOCAL_OOB_DATA                         = 0x0057,
-       HCI_READ_INQUIRY_RESPONSE_TRANSMIT_POWER_LEVEL  = 0x0058,
-       HCI_WRITE_INQUIRY_TRANSMIT_POWER_LEVEL          = 0x0059,
-       HCI_READ_DEFAULT_ERRONEOUS_DATA_REPORTING       = 0x005a,
-       HCI_WRITE_DEFAULT_ERRONEOUS_DATA_REPORTING      = 0x005b,
-       HCI_ENHANCED_FLUSH                              = 0x005f,
-       HCI_SEND_KEYPRESS_NOTIFICATION                  = 0x0060,
-       HCI_READ_LOGICAL_LINK_ACCEPT_TIMEOUT            = 0x0061,
-       HCI_WRITE_LOGICAL_LINK_ACCEPT_TIMEOUT           = 0x0062,
-       HCI_SET_EVENT_MASK_PAGE_2                       = 0x0063,
-       HCI_READ_LOCATION_DATA                          = 0x0064,
-       HCI_WRITE_LOCATION_DATA                         = 0x0065,
-       HCI_READ_FLOW_CONTROL_MODE                      = 0x0066,
-       HCI_WRITE_FLOW_CONTROL_MODE                     = 0x0067,
-       HCI_READ_ENHANCE_TRANSMIT_POWER_LEVEL           = 0x0068,
-       HCI_READ_BEST_EFFORT_FLUSH_TIMEOUT              = 0x0069,
-       HCI_WRITE_BEST_EFFORT_FLUSH_TIMEOUT             = 0x006a,
-       HCI_SHORT_RANGE_MODE                            = 0x006b
-};
-
-/* OGF 0x04 */
-#define OGF_INFORMATIONAL_PARAMETERS                   0x04
-enum informational_params {
-       HCI_READ_LOCAL_VERSION_INFORMATION              = 0x0001,
-       HCI_READ_LOCAL_SUPPORTED_COMMANDS               = 0x0002,
-       HCI_READ_LOCAL_SUPPORTED_FEATURES               = 0x0003,
-       HCI_READ_LOCAL_EXTENDED_FEATURES                = 0x0004,
-       HCI_READ_BUFFER_SIZE                            = 0x0005,
-       HCI_READ_BD_ADDR                                = 0x0009,
-       HCI_READ_DATA_BLOCK_SIZE                        = 0x000a
-};
-
-/* OGF 0x05 */
-#define OGF_STATUS_PARAMETERS                          0x05
-enum status_params {
-       HCI_READ_FAILED_CONTACT_COUNTER                 = 0x0001,
-       HCI_RESET_FAILED_CONTACT_COUNTER                = 0x0002,
-       HCI_READ_LINK_QUALITY                           = 0x0003,
-       HCI_READ_RSSI                                   = 0x0005,
-       HCI_READ_AFH_CHANNEL_MAP                        = 0x0006,
-       HCI_READ_CLOCK                                  = 0x0007,
-       HCI_READ_ENCRYPTION_KEY_SIZE                    = 0x0008,
-       HCI_READ_LOCAL_AMP_INFO                         = 0x0009,
-       HCI_READ_LOCAL_AMP_ASSOC                        = 0x000a,
-       HCI_WRITE_REMOTE_AMP_ASSOC                      = 0x000b
-};
-
-/* OGF 0x06 */
-#define OGF_TESTING_COMMANDS                           0x06
-enum testing_commands {
-       HCI_READ_LOOPBACK_MODE                          = 0x0001,
-       HCI_WRITE_LOOPBACK_MODE                         = 0x0002,
-       HCI_ENABLE_DEVICE_UNDER_TEST_MODE               = 0x0003,
-       HCI_WRITE_SIMPLE_PAIRING_DEBUG_MODE             = 0x0004,
-       HCI_ENABLE_AMP_RECEIVER_REPORTS                 = 0x0007,
-       HCI_AMP_TEST_END                                = 0x0008,
-       HCI_AMP_TEST_COMMAND                            = 0x0009
-};
-
-/* OGF 0x3f */
-#define OGF_EXTENSION                                  0X3f
-enum hci_extension_commands {
-       HCI_SET_ACL_LINK_DATA_FLOW_MODE                 = 0x0010,
-       HCI_SET_ACL_LINK_STATUS                         = 0x0020,
-       HCI_SET_SCO_LINK_STATUS                         = 0x0030,
-       HCI_SET_RSSI_VALUE                              = 0x0040,
-       HCI_SET_CURRENT_BLUETOOTH_STATUS                = 0x0041,
-
-       /* The following is for RTK8723 */
-       HCI_EXTENSION_VERSION_NOTIFY                    = 0x0100,
-       HCI_LINK_STATUS_NOTIFY                          = 0x0101,
-       HCI_BT_OPERATION_NOTIFY                         = 0x0102,
-       HCI_ENABLE_WIFI_SCAN_NOTIFY                     = 0x0103,
-
-
-       /* The following is for IVT */
-       HCI_WIFI_CURRENT_CHANNEL                        = 0x0300,
-       HCI_WIFI_CURRENT_BANDWIDTH                      = 0x0301,
-       HCI_WIFI_CONNECTION_STATUS                      = 0x0302,
-};
-
-enum bt_spec {
-       BT_SPEC_1_0_b                                   = 0x00,
-       BT_SPEC_1_1                                     = 0x01,
-       BT_SPEC_1_2                                     = 0x02,
-       BT_SPEC_2_0_EDR                                 = 0x03,
-       BT_SPEC_2_1_EDR                                 = 0x04,
-       BT_SPEC_3_0_HS                                  = 0x05,
-       BT_SPEC_4_0                                     = 0x06
-};
-
-/*  The following is for BT 3.0 + HS EVENTS */
-enum hci_event {
-       HCI_EVENT_INQUIRY_COMPLETE                      = 0x01,
-       HCI_EVENT_INQUIRY_RESULT                        = 0x02,
-       HCI_EVENT_CONNECTION_COMPLETE                   = 0x03,
-       HCI_EVENT_CONNECTION_REQUEST                    = 0x04,
-       HCI_EVENT_DISCONNECTION_COMPLETE                = 0x05,
-       HCI_EVENT_AUTHENTICATION_COMPLETE               = 0x06,
-       HCI_EVENT_REMOTE_NAME_REQUEST_COMPLETE          = 0x07,
-       HCI_EVENT_ENCRYPTION_CHANGE                     = 0x08,
-       HCI_EVENT_CHANGE_LINK_KEY_COMPLETE              = 0x09,
-       HCI_EVENT_MASTER_LINK_KEY_COMPLETE              = 0x0a,
-       HCI_EVENT_READ_REMOTE_SUPPORT_FEATURES_COMPLETE = 0x0b,
-       HCI_EVENT_READ_REMOTE_VER_INFO_COMPLETE         = 0x0c,
-       HCI_EVENT_QOS_SETUP_COMPLETE                    = 0x0d,
-       HCI_EVENT_COMMAND_COMPLETE                      = 0x0e,
-       HCI_EVENT_COMMAND_STATUS                        = 0x0f,
-       HCI_EVENT_HARDWARE_ERROR                        = 0x10,
-       HCI_EVENT_FLUSH_OCCRUED                         = 0x11,
-       HCI_EVENT_ROLE_CHANGE                           = 0x12,
-       HCI_EVENT_NUMBER_OF_COMPLETE_PACKETS            = 0x13,
-       HCI_EVENT_MODE_CHANGE                           = 0x14,
-       HCI_EVENT_RETURN_LINK_KEYS                      = 0x15,
-       HCI_EVENT_PIN_CODE_REQUEST                      = 0x16,
-       HCI_EVENT_LINK_KEY_REQUEST                      = 0x17,
-       HCI_EVENT_LINK_KEY_NOTIFICATION                 = 0x18,
-       HCI_EVENT_LOOPBACK_COMMAND                      = 0x19,
-       HCI_EVENT_DATA_BUFFER_OVERFLOW                  = 0x1a,
-       HCI_EVENT_MAX_SLOTS_CHANGE                      = 0x1b,
-       HCI_EVENT_READ_CLOCK_OFFSET_COMPLETE            = 0x1c,
-       HCI_EVENT_CONNECT_PACKET_TYPE_CHANGE            = 0x1d,
-       HCI_EVENT_QOS_VIOLATION                         = 0x1e,
-       HCI_EVENT_PAGE_SCAN_REPETITION_MODE_CHANGE      = 0x20,
-       HCI_EVENT_FLOW_SEPC_COMPLETE                    = 0x21,
-       HCI_EVENT_INQUIRY_RESULT_WITH_RSSI              = 0x22,
-       HCI_EVENT_READ_REMOTE_EXT_FEATURES_COMPLETE     = 0x23,
-       HCI_EVENT_SYNC_CONNECT_COMPLETE                 = 0x2c,
-       HCI_EVENT_SYNC_CONNECT_CHANGE                   = 0x2d,
-       HCI_EVENT_SNIFFER_SUBRATING                     = 0x2e,
-       HCI_EVENT_EXTENTED_INQUIRY_RESULT               = 0x2f,
-       HCI_EVENT_ENCRYPTION_KEY_REFLASH_COMPLETE       = 0x30,
-       HCI_EVENT_IO_CAPIBILITY_COMPLETE                = 0x31,
-       HCI_EVENT_IO_CAPIBILITY_RESPONSE                = 0x32,
-       HCI_EVENT_USER_CONFIRMTION_REQUEST              = 0x33,
-       HCI_EVENT_USER_PASSKEY_REQUEST                  = 0x34,
-       HCI_EVENT_REMOTE_OOB_DATA_REQUEST               = 0x35,
-       HCI_EVENT_SIMPLE_PAIRING_COMPLETE               = 0x36,
-       HCI_EVENT_LINK_SUPERVISION_TIMEOUT_CHANGE       = 0x38,
-       HCI_EVENT_ENHANCED_FLUSH_COMPLETE               = 0x39,
-       HCI_EVENT_USER_PASSKEY_NOTIFICATION             = 0x3b,
-       HCI_EVENT_KEYPRESS_NOTIFICATION                 = 0x3c,
-       HCI_EVENT_REMOTE_HOST_SUPPORT_FEATURES_NOTIFICATION     = 0x3d,
-       HCI_EVENT_PHY_LINK_COMPLETE                     = 0x40,
-       HCI_EVENT_CHANNEL_SELECT                        = 0x41,
-       HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE          = 0x42,
-       HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING           = 0x43,
-       HCI_EVENT_PHY_LINK_RECOVER                      = 0x44,
-       HCI_EVENT_LOGICAL_LINK_COMPLETE                 = 0x45,
-       HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE      = 0x46,
-       HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE             = 0x47,
-       HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS           = 0x48,
-       HCI_EVENT_AMP_START_TEST                        = 0x49,
-       HCI_EVENT_AMP_TEST_END                          = 0x4a,
-       HCI_EVENT_AMP_RECEIVER_REPORT                   = 0x4b,
-       HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE      = 0x4c,
-       HCI_EVENT_AMP_STATUS_CHANGE                     = 0x4d,
-       HCI_EVENT_EXTENSION_RTK                         = 0xfe,
-       HCI_EVENT_EXTENSION_MOTO                        = 0xff,
-};
-
-enum hci_extension_event_moto {
-       HCI_EVENT_GET_BT_RSSI                           = 0x01,
-};
-
-enum hci_extension_event {
-       HCI_EVENT_EXT_WIFI_SCAN_NOTIFY                  = 0x01,
-};
-
-enum hci_event_mask_page_2 {
-       EMP2_HCI_EVENT_PHY_LINK_COMPLETE                = 0x0000000000000001,
-       EMP2_HCI_EVENT_CHANNEL_SELECT                   = 0x0000000000000002,
-       EMP2_HCI_EVENT_DISCONNECT_PHY_LINK_COMPLETE     = 0x0000000000000004,
-       EMP2_HCI_EVENT_PHY_LINK_LOSS_EARLY_WARNING      = 0x0000000000000008,
-       EMP2_HCI_EVENT_PHY_LINK_RECOVER                 = 0x0000000000000010,
-       EMP2_HCI_EVENT_LOGICAL_LINK_COMPLETE            = 0x0000000000000020,
-       EMP2_HCI_EVENT_DISCONNECT_LOGICAL_LINK_COMPLETE = 0x0000000000000040,
-       EMP2_HCI_EVENT_FLOW_SPEC_MODIFY_COMPLETE        = 0x0000000000000080,
-       EMP2_HCI_EVENT_NUM_OF_COMPLETE_DATA_BLOCKS      = 0x0000000000000100,
-       EMP2_HCI_EVENT_AMP_START_TEST                   = 0x0000000000000200,
-       EMP2_HCI_EVENT_AMP_TEST_END                     = 0x0000000000000400,
-       EMP2_HCI_EVENT_AMP_RECEIVER_REPORT              = 0x0000000000000800,
-       EMP2_HCI_EVENT_SHORT_RANGE_MODE_CHANGE_COMPLETE = 0x0000000000001000,
-       EMP2_HCI_EVENT_AMP_STATUS_CHANGE                = 0x0000000000002000,
-};
-
-enum hci_state_machine {
-       HCI_STATE_STARTING                      = 0x01,
-       HCI_STATE_CONNECTING                    = 0x02,
-       HCI_STATE_AUTHENTICATING                = 0x04,
-       HCI_STATE_CONNECTED                     = 0x08,
-       HCI_STATE_DISCONNECTING                 = 0x10,
-       HCI_STATE_DISCONNECTED                  = 0x20
-};
-
-enum amp_assoc_structure_type {
-       AMP_MAC_ADDR                            = 0x01,
-       AMP_PREFERRED_CHANNEL_LIST              = 0x02,
-       AMP_CONNECTED_CHANNEL                   = 0x03,
-       AMP_80211_PAL_CAP_LIST                  = 0x04,
-       AMP_80211_PAL_VISION                    = 0x05,
-       AMP_RESERVED_FOR_TESTING                = 0x33
-};
-
-enum amp_btap_type {
-       AMP_BTAP_NONE,
-       AMP_BTAP_CREATOR,
-       AMP_BTAP_JOINER
-};
-
-enum hci_state_with_cmd {
-       STATE_CMD_CREATE_PHY_LINK,
-       STATE_CMD_ACCEPT_PHY_LINK,
-       STATE_CMD_DISCONNECT_PHY_LINK,
-       STATE_CMD_CONNECT_ACCEPT_TIMEOUT,
-       STATE_CMD_MAC_START_COMPLETE,
-       STATE_CMD_MAC_START_FAILED,
-       STATE_CMD_MAC_CONNECT_COMPLETE,
-       STATE_CMD_MAC_CONNECT_FAILED,
-       STATE_CMD_MAC_DISCONNECT_INDICATE,
-       STATE_CMD_MAC_CONNECT_CANCEL_INDICATE,
-       STATE_CMD_4WAY_FAILED,
-       STATE_CMD_4WAY_SUCCESSED,
-       STATE_CMD_ENTER_STATE,
-       STATE_CMD_NO_SUCH_CMD,
-};
-
-enum hci_service_type {
-       SERVICE_NO_TRAFFIC,
-       SERVICE_BEST_EFFORT,
-       SERVICE_GUARANTEE
-};
-
-enum hci_traffic_mode {
-       TRAFFIC_MODE_BEST_EFFORT                        = 0x00,
-       TRAFFIC_MODE_GUARANTEED_LATENCY                 = 0x01,
-       TRAFFIC_MODE_GUARANTEED_BANDWIDTH               = 0x02,
-       TRAFFIC_MODE_GUARANTEED_LATENCY_AND_BANDWIDTH   = 0x03
-};
-
-#define HCIOPCODE(_OCF, _OGF)          (_OGF<<10|_OCF)
-#define HCIOPCODELOW(_OCF, _OGF)       (u8)(HCIOPCODE(_OCF, _OGF)&0x00ff)
-#define HCIOPCODEHIGHT(_OCF, _OGF)     (u8)(HCIOPCODE(_OCF, _OGF)>>8)
-
-#define TWOBYTE_HIGHTBYTE(_DATA)       (u8)(_DATA>>8)
-#define TWOBYTE_LOWBYTE(_DATA)         (u8)(_DATA)
-
-enum amp_status {
-       AMP_STATUS_AVA_PHY_PWR_DWN              = 0x0,
-       AMP_STATUS_BT_USE_ONLY                  = 0x1,
-       AMP_STATUS_NO_CAPACITY_FOR_BT           = 0x2,
-       AMP_STATUS_LOW_CAPACITY_FOR_BT          = 0x3,
-       AMP_STATUS_MEDIUM_CAPACITY_FOR_BT       = 0x4,
-       AMP_STATUS_HIGH_CAPACITY_FOR_BT         = 0x5,
-       AMP_STATUS_FULL_CAPACITY_FOR_BT         = 0x6
-};
-
-enum bt_wpa_msg_type {
-       Type_BT_4way1st = 0,
-       Type_BT_4way2nd = 1,
-       Type_BT_4way3rd = 2,
-       Type_BT_4way4th = 3,
-       Type_BT_unknow  = 4
-};
-
-enum bt_connect_type {
-       BT_CONNECT_AUTH_REQ                     = 0x00,
-       BT_CONNECT_AUTH_RSP                     = 0x01,
-       BT_CONNECT_ASOC_REQ                     = 0x02,
-       BT_CONNECT_ASOC_RSP                     = 0x03,
-       BT_DISCONNECT                           = 0x04
-};
-
-enum bt_ll_service_type {
-       BT_LL_BE = 0x01,
-       BT_LL_GU = 0x02
-};
-
-enum bt_ll_flowspec {
-       BT_TX_BE_FS,                    /* TX best effort flowspec */
-       BT_RX_BE_FS,                    /* RX best effort flowspec */
-       BT_TX_GU_FS,                    /* TX guaranteed latency flowspec */
-       BT_RX_GU_FS,                    /* RX guaranteed latency flowspec */
-       BT_TX_BE_AGG_FS,                /* TX aggregated best effort flowspec */
-       BT_RX_BE_AGG_FS,                /* RX aggregated best effort flowspec */
-       BT_TX_GU_BW_FS,                 /* TX guaranteed bandwidth flowspec */
-       BT_RX_GU_BW_FS,                 /* RX guaranteed bandwidth flowspec */
-       BT_TX_GU_LARGE_FS,              /* TX guaranteed latency flowspec, for testing only */
-       BT_RX_GU_LARGE_FS,              /* RX guaranteed latency flowspec, for testing only */
-};
-
-enum bt_traffic_mode {
-       BT_MOTOR_EXT_BE         = 0x00, /* Best Effort. Default. for HCRP, PAN, SDP, RFCOMM-based profiles like FTP, OPP, SPP, DUN, etc. */
-       BT_MOTOR_EXT_GUL        = 0x01, /* Guaranteed Latency. This type of traffic is used e.g. for HID and AVRCP. */
-       BT_MOTOR_EXT_GUB        = 0X02, /* Guaranteed Bandwidth. */
-       BT_MOTOR_EXT_GULB       = 0X03  /* Guaranteed Latency and Bandwidth. for A2DP and VDP. */
-};
-
-enum bt_traffic_mode_profile {
-       BT_PROFILE_NONE,
-       BT_PROFILE_A2DP,
-       BT_PROFILE_PAN,
-       BT_PROFILE_HID,
-       BT_PROFILE_SCO
-};
-
-enum bt_link_role {
-       BT_LINK_MASTER  = 0,
-       BT_LINK_SLAVE   = 1
-};
-
-enum bt_state_wpa_auth {
-       STATE_WPA_AUTH_UNINITIALIZED,
-       STATE_WPA_AUTH_WAIT_PACKET_1, /*  Join */
-       STATE_WPA_AUTH_WAIT_PACKET_2, /*  Creat */
-       STATE_WPA_AUTH_WAIT_PACKET_3,
-       STATE_WPA_AUTH_WAIT_PACKET_4,
-       STATE_WPA_AUTH_SUCCESSED
-};
-
-#define BT_WPA_AUTH_TIMEOUT_PERIOD             1000
-#define BTMaxWPAAuthReTransmitCoun             5
-
-#define MAX_AMP_ASSOC_FRAG_LEN                 248
-#define TOTAL_ALLOCIATE_ASSOC_LEN                      1000
-
-struct hci_flow_spec {
-       u8                              Identifier;
-       u8                              ServiceType;
-       u16                             MaximumSDUSize;
-       u32                             SDUInterArrivalTime;
-       u32                             AccessLatency;
-       u32                             FlushTimeout;
-};
-
-struct hci_log_link_cmd_data {
-       u8                              BtPhyLinkhandle;
-       u16                             BtLogLinkhandle;
-       u8                              BtTxFlowSpecID;
-       struct hci_flow_spec            Tx_Flow_Spec;
-       struct hci_flow_spec            Rx_Flow_Spec;
-       u32                             TxPacketCount;
-       u32                             BestEffortFlushTimeout;
-
-       u8                              bLLCompleteEventIsSet;
-
-       u8                              bLLCancelCMDIsSetandComplete;
-};
-
-struct hci_phy_link_cmd_data {
-       /* Physical_Link_Handle */
-       u8                              BtPhyLinkhandle;
-
-       u16                             LinkSuperversionTimeout;
-
-       /* u16                          SuperTimeOutCnt; */
-
-       /* Dedicated_AMP_Key_Length */
-       u8                              BtAMPKeyLen;
-       /* Dedicated_AMP_Key_Type */
-       u8                              BtAMPKeyType;
-       /* Dedicated_AMP_Key */
-       u8                              BtAMPKey[PMK_LEN];
-};
-
-struct amp_assoc_structure {
-       /* TYPE ID */
-       u8                              TypeID;
-       /* Length */
-       u16                             Length;
-       /* Value */
-       u8                              Data[1];
-};
-
-struct amp_pref_chnl_regulatory {
-       u8                              reXId;
-       u8                              regulatoryClass;
-       u8                              coverageClass;
-};
-
-struct amp_assoc_cmd_data {
-       /* Physical_Link_Handle */
-       u8                              BtPhyLinkhandle;
-       /* Length_So_Far */
-       u16                             LenSoFar;
-
-       u16                             MaxRemoteASSOCLen;
-       /* AMP_ASSOC_Remaining_Length */
-       u16                             AMPAssocRemLen;
-       /* AMP_ASSOC_fragment */
-       void                            *AMPAssocfragment;
-};
-
-struct hci_link_info {
-       u16                             ConnectHandle;
-       u8                              IncomingTrafficMode;
-       u8                              OutgoingTrafficMode;
-       u8                              BTProfile;
-       u8                              BTCoreSpec;
-       s8                              BT_RSSI;
-       u8                              TrafficProfile;
-       u8                              linkRole;
-};
-
-struct hci_ext_config {
-       struct hci_link_info            linkInfo[MAX_BT_ASOC_ENTRY_NUM];
-       u8                              btOperationCode;
-       u16                             CurrentConnectHandle;
-       u8                              CurrentIncomingTrafficMode;
-       u8                              CurrentOutgoingTrafficMode;
-       s8                              MIN_BT_RSSI;
-       u8                              NumberOfHandle;
-       u8                              NumberOfSCO;
-       u8                              CurrentBTStatus;
-       u16                             HCIExtensionVer;
-
-       /* Bt coexist related */
-       u8                              btProfileCase;
-       u8                              btProfileAction;
-       u8                              bManualControl;
-       u8                              bBTBusy;
-       u8                              bBTA2DPBusy;
-       u8                              bEnableWifiScanNotify;
-
-       u8                              bHoldForBtOperation;
-       u32                             bHoldPeriodCnt;
-};
-
-struct hci_acl_packet_data {
-       u16                             ACLDataPacketLen;
-       u8                              SyncDataPacketLen;
-       u16                             TotalNumACLDataPackets;
-       u16                             TotalSyncNumDataPackets;
-};
-
-struct hci_phy_link_bss_info {
-       u16                             bdCap;  /*  capability information */
-};
-
-struct packet_irp_hcicmd_data {
-       u16             OCF:10;
-       u16             OGF:6;
-       u8              Length;
-       u8              Data[20];
-};
-
-struct bt_asoc_entry {
-       u8                                              bUsed;
-       u8                                              mAssoc;
-       u8                                              b4waySuccess;
-       u8                                              Bssid[6];
-       struct hci_phy_link_cmd_data            PhyLinkCmdData;
-
-       struct hci_log_link_cmd_data            LogLinkCmdData[MAX_LOGICAL_LINK_NUM];
-
-       struct hci_acl_packet_data                      ACLPacketsData;
-
-       struct amp_assoc_cmd_data               AmpAsocCmdData;
-       struct octet_string                             BTSsid;
-       u8                                              BTSsidBuf[33];
-
-       enum hci_status                                         PhyLinkDisconnectReason;
-
-       u8                                              bSendSupervisionPacket;
-       /* u8                                           CurrentSuervisionPacketSendNum; */
-       /* u8                                           LastSuervisionPacketSendNum; */
-       u32                                             NoRxPktCnt;
-       /* Is Creator or Joiner */
-       enum amp_btap_type                              AMPRole;
-
-       /* BT current state */
-       u8                                              BtCurrentState;
-       /* BT next state */
-       u8                                              BtNextState;
-
-       u8                                              bNeedPhysLinkCompleteEvent;
-
-       enum hci_status                                 PhysLinkCompleteStatus;
-
-       u8                                              BTRemoteMACAddr[6];
-
-       u32                                             BTCapability;
-
-       u8                                              SyncDataPacketLen;
-
-       u16                                             TotalSyncNumDataPackets;
-       u16                                             TotalNumACLDataPackets;
-
-       u8                                              ShortRangeMode;
-
-       u8                                              PTK[PTK_LEN_TKIP];
-       u8                                              GTK[GTK_LEN];
-       u8                                              ANonce[KEY_NONCE_LEN];
-       u8                                              SNonce[KEY_NONCE_LEN];
-       u64                                             KeyReplayCounter;
-       u8                                              WPAAuthReplayCount;
-       u8                                              AESKeyBuf[AESCCMP_BLK_SIZE_TOTAL];
-       u8                                              PMK[PMK_LEN];
-       enum bt_state_wpa_auth                  BTWPAAuthState;
-       s32                                             UndecoratedSmoothedPWDB;
-
-       /*  Add for HW security !! */
-       u8                                              HwCAMIndex;  /*  Cam index */
-       u8                                              bPeerQosSta;
-
-       u32                                             rxSuvpPktCnt;
-};
-
-struct bt_traffic_statistics {
-       u8                              bTxBusyTraffic;
-       u8                              bRxBusyTraffic;
-       u8                              bIdle;
-       u32                             TxPktCntInPeriod;
-       u32                             RxPktCntInPeriod;
-       u64                             TxPktLenInPeriod;
-       u64                             RxPktLenInPeriod;
-};
-
-struct bt_mgnt {
-       u8                              bBTConnectInProgress;
-       u8                              bLogLinkInProgress;
-       u8                              bPhyLinkInProgress;
-       u8                              bPhyLinkInProgressStartLL;
-       u8                              BtCurrentPhyLinkhandle;
-       u16                             BtCurrentLogLinkhandle;
-       u8                              CurrentConnectEntryNum;
-       u8                              DisconnectEntryNum;
-       u8                              CurrentBTConnectionCnt;
-       enum bt_connect_type            BTCurrentConnectType;
-       enum bt_connect_type            BTReceiveConnectPkt;
-       u8                              BTAuthCount;
-       u8                              BTAsocCount;
-       u8                              bStartSendSupervisionPkt;
-       u8                              BtOperationOn;
-       u8                              BTNeedAMPStatusChg;
-       u8                              JoinerNeedSendAuth;
-       struct hci_phy_link_bss_info    bssDesc;
-       struct hci_ext_config           ExtConfig;
-       u8                              bNeedNotifyAMPNoCap;
-       u8                              bCreateSpportQos;
-       u8                              bSupportProfile;
-       u8                              BTChannel;
-       u8                              CheckChnlIsSuit;
-       u8                              bBtScan;
-       u8                              btLogoTest;
-};
-
-struct bt_hci_dgb_info {
-       u32                             hciCmdCnt;
-       u32                             hciCmdCntUnknown;
-       u32                             hciCmdCntCreatePhyLink;
-       u32                             hciCmdCntAcceptPhyLink;
-       u32                             hciCmdCntDisconnectPhyLink;
-       u32                             hciCmdPhyLinkStatus;
-       u32                             hciCmdCntCreateLogLink;
-       u32                             hciCmdCntAcceptLogLink;
-       u32                             hciCmdCntDisconnectLogLink;
-       u32                             hciCmdCntReadLocalAmpAssoc;
-       u32                             hciCmdCntWriteRemoteAmpAssoc;
-       u32                             hciCmdCntSetAclLinkStatus;
-       u32                             hciCmdCntSetScoLinkStatus;
-       u32                             hciCmdCntExtensionVersionNotify;
-       u32                             hciCmdCntLinkStatusNotify;
-};
-
-struct bt_irp_dgb_info {
-       u32                             irpMJCreate;
-       /*  Io Control */
-       u32                             irpIoControl;
-       u32                             irpIoCtrlHciCmd;
-       u32                             irpIoCtrlHciEvent;
-       u32                             irpIoCtrlHciTxData;
-       u32                             irpIoCtrlHciRxData;
-       u32                             irpIoCtrlUnknown;
-
-       u32                             irpIoCtrlHciTxData1s;
-};
-
-struct bt_packet_dgb_info {
-       u32                             btPktTxProbReq;
-       u32                             btPktRxProbReq;
-       u32                             btPktRxProbReqFail;
-       u32                             btPktTxProbRsp;
-       u32                             btPktRxProbRsp;
-       u32                             btPktTxAuth;
-       u32                             btPktRxAuth;
-       u32                             btPktRxAuthButDrop;
-       u32                             btPktTxAssocReq;
-       u32                             btPktRxAssocReq;
-       u32                             btPktRxAssocReqButDrop;
-       u32                             btPktTxAssocRsp;
-       u32                             btPktRxAssocRsp;
-       u32                             btPktTxDisassoc;
-       u32                             btPktRxDisassoc;
-       u32                             btPktRxDeauth;
-       u32                             btPktTx4way1st;
-       u32                             btPktRx4way1st;
-       u32                             btPktTx4way2nd;
-       u32                             btPktRx4way2nd;
-       u32                             btPktTx4way3rd;
-       u32                             btPktRx4way3rd;
-       u32                             btPktTx4way4th;
-       u32                             btPktRx4way4th;
-       u32                             btPktTxLinkSuperReq;
-       u32                             btPktRxLinkSuperReq;
-       u32                             btPktTxLinkSuperRsp;
-       u32                             btPktRxLinkSuperRsp;
-       u32                             btPktTxData;
-       u32                             btPktRxData;
-};
-
-struct bt_dgb {
-       u8                              dbgCtrl;
-       u32                             dbgProfile;
-       struct bt_hci_dgb_info          dbgHciInfo;
-       struct bt_irp_dgb_info          dbgIrpInfo;
-       struct bt_packet_dgb_info       dbgBtPkt;
-};
-
-struct bt_hci_info {
-       /* 802.11 Pal version specifier */
-       u8                              BTPalVersion;
-       u16                             BTPalCompanyID;
-       u16                             BTPalsubversion;
-
-       /* Connected channel list */
-       u16                             BTConnectChnlListLen;
-       u8                              BTConnectChnllist[64];
-
-       /* Fail contact counter */
-       u16                             FailContactCount;
-
-       /* Event mask */
-       u64                             BTEventMask;
-       u64                             BTEventMaskPage2;
-
-       /* timeout var */
-       u16                             ConnAcceptTimeout;
-       u16                             LogicalAcceptTimeout;
-       u16                             PageTimeout;
-
-       u8                              LocationDomainAware;
-       u16                             LocationDomain;
-       u8                              LocationDomainOptions;
-       u8                              LocationOptions;
-
-       u8                              FlowControlMode;
-
-       /* Preferred channel list */
-       u16                             BtPreChnlListLen;
-       u8                              BTPreChnllist[64];
-
-       u16                             enFlush_LLH;    /* enhanced flush handle */
-       u16                             FLTO_LLH;               /* enhanced flush handle */
-
-       /*  */
-       /* Test command only. */
-       u8                              bInTestMode;
-       u8                              bTestIsEnd;
-       u8                              bTestNeedReport;
-       u8                              TestScenario;
-       u8                              TestReportInterval;
-       u8                              TestCtrType;
-       u32                             TestEventType;
-       u16                             TestNumOfFrame;
-       u16                             TestNumOfErrFrame;
-       u16                             TestNumOfBits;
-       u16                             TestNumOfErrBits;
-       /*  */
-};
-
-struct bt_traffic {
-       /*  Add for check replay data */
-       u8                                      LastRxUniFragNum;
-       u16                                     LastRxUniSeqNum;
-
-       /* s32                                  EntryMaxUndecoratedSmoothedPWDB; */
-       /* s32                                  EntryMinUndecoratedSmoothedPWDB; */
-
-       struct bt_traffic_statistics            Bt30TrafficStatistics;
-};
-
-#define RT_WORK_ITEM struct work_struct
-
-struct bt_security {
-       /*  WPA auth state
-        *  May need to remove to BTSecInfo ... 
-        * enum bt_state_wpa_auth BTWPAAuthState;
-        */
-       struct octet_string     RSNIE;
-       u8                      RSNIEBuf[MAXRSNIELEN];
-       u8                      bRegNoEncrypt;
-       u8                      bUsedHwEncrypt;
-};
-
-struct bt_30info {
-       struct rtw_adapter      *padapter;
-       struct bt_asoc_entry            BtAsocEntry[MAX_BT_ASOC_ENTRY_NUM];
-       struct bt_mgnt                          BtMgnt;
-       struct bt_dgb                           BtDbg;
-       struct bt_hci_info                      BtHciInfo;
-       struct bt_traffic                       BtTraffic;
-       struct bt_security                      BtSec;
-       RT_WORK_ITEM            HCICmdWorkItem;
-       struct timer_list BTHCICmdTimer;
-       RT_WORK_ITEM            BTPsDisableWorkItem;
-       RT_WORK_ITEM            BTConnectWorkItem;
-       struct timer_list BTHCIDiscardAclDataTimer;
-       struct timer_list BTHCIJoinTimeoutTimer;
-       struct timer_list BTTestSendPacketTimer;
-       struct timer_list BTDisconnectPhyLinkTimer;
-       struct timer_list BTBeaconTimer;
-       u8                              BTBeaconTmrOn;
-
-       struct timer_list BTPsDisableTimer;
-
-       void *                          pBtChnlList;
-};
-
-struct packet_irp_acl_data {
-       u16             Handle:12;
-       u16             PB_Flag:2;
-       u16             BC_Flag:2;
-       u16             Length;
-       u8              Data[1];
-};
-
-struct packet_irp_hcievent_data {
-       u8              EventCode;
-       u8              Length;
-       u8              Data[20];
-};
-
-struct common_triple {
-       u8 byte_1st;
-       u8 byte_2nd;
-       u8 byte_3rd;
-};
-
-#define COUNTRY_STR_LEN                3       /*  country string len = 3 */
-
-#define LOCAL_PMK      0
-
-enum hci_wifi_connect_status {
-       HCI_WIFI_NOT_CONNECTED                  = 0x0,
-       HCI_WIFI_CONNECTED                      = 0x1,
-       HCI_WIFI_CONNECT_IN_PROGRESS            = 0x2,
-};
-
-enum hci_ext_bp_operation {
-       HCI_BT_OP_NONE                          = 0x0,
-       HCI_BT_OP_INQUIRY_START                 = 0x1,
-       HCI_BT_OP_INQUIRY_FINISH                = 0x2,
-       HCI_BT_OP_PAGING_START                  = 0x3,
-       HCI_BT_OP_PAGING_SUCCESS                = 0x4,
-       HCI_BT_OP_PAGING_UNSUCCESS              = 0x5,
-       HCI_BT_OP_PAIRING_START                 = 0x6,
-       HCI_BT_OP_PAIRING_FINISH                = 0x7,
-       HCI_BT_OP_BT_DEV_ENABLE                 = 0x8,
-       HCI_BT_OP_BT_DEV_DISABLE                = 0x9,
-       HCI_BT_OP_MAX
-};
-
-#define BTHCI_SM_WITH_INFO(_Adapter, _StateToEnter, _StateCmd, _EntryNum)      \
-{                                                                              \
-       RTPRINT(FIOCTL, IOCTL_STATE, ("[BT state change] caused by ""%s"", line =%d\n", __func__, __LINE__));                                                   \
-       BTHCI_StateMachine(_Adapter, _StateToEnter, _StateCmd, _EntryNum);\
-}
-
-void BTHCI_EventParse(struct rtw_adapter *padapter, void *pEvntData,
-                     u32 dataLen);
-#define BT_EventParse BTHCI_EventParse
-u8 BTHCI_HsConnectionEstablished(struct rtw_adapter *padapter);
-void BTHCI_UpdateBTProfileRTKToMoto(struct rtw_adapter *padapter);
-void BTHCI_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType);
-void BTHCI_StateMachine(struct rtw_adapter *padapter, u8 StateToEnter,
-                       enum hci_state_with_cmd StateCmd, u8 EntryNum);
-void BTHCI_DisconnectPeer(struct rtw_adapter *padapter, u8 EntryNum);
-void BTHCI_EventNumOfCompletedDataBlocks(struct rtw_adapter *padapter);
-void BTHCI_EventAMPStatusChange(struct rtw_adapter *padapter, u8 AMP_Status);
-void BTHCI_DisconnectAll(struct rtw_adapter *padapter);
-enum hci_status BTHCI_HandleHCICMD(struct rtw_adapter *padapter,
-                                  struct packet_irp_hcicmd_data *pHciCmd);
-
-/*  ===== End of sync from SD7 driver COMMON/bt_hci.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== */
-#define GET_BT_INFO(padapter)  (&GET_HAL_DATA(padapter)->BtInfo)
-
-#define        BTC_FOR_SCAN_START                              1
-#define        BTC_FOR_SCAN_FINISH                             0
-
-#define        BT_TXRX_CNT_THRES_1                             1200
-#define        BT_TXRX_CNT_THRES_2                             1400
-#define        BT_TXRX_CNT_THRES_3                             3000
-#define        BT_TXRX_CNT_LEVEL_0                             0       /*  < 1200 */
-#define        BT_TXRX_CNT_LEVEL_1                             1       /*  >= 1200 && < 1400 */
-#define        BT_TXRX_CNT_LEVEL_2                             2       /*  >= 1400 */
-#define        BT_TXRX_CNT_LEVEL_3                             3       /*  >= 3000 */
-
-enum bt_state_1ant {
-       BT_INFO_STATE_DISABLED                  = 0,
-       BT_INFO_STATE_NO_CONNECTION             = 1,
-       BT_INFO_STATE_CONNECT_IDLE              = 2,
-       BT_INFO_STATE_INQ_OR_PAG                = 3,
-       BT_INFO_STATE_ACL_ONLY_BUSY             = 4,
-       BT_INFO_STATE_SCO_ONLY_BUSY             = 5,
-       BT_INFO_STATE_ACL_SCO_BUSY              = 6,
-       BT_INFO_STATE_ACL_INQ_OR_PAG            = 7,
-       BT_INFO_STATE_MAX                       = 8
-};
-
-struct btdm_8723a_1ant {
-       u8              prePsTdma;
-       u8              curPsTdma;
-       u8              psTdmaDuAdjType;
-       u8              bPrePsTdmaOn;
-       u8              bCurPsTdmaOn;
-       u8              preWifiPara;
-       u8              curWifiPara;
-       u8              preCoexWifiCon;
-       u8              curCoexWifiCon;
-       u8              wifiRssiThresh;
-
-       u32             psTdmaMonitorCnt;
-       u32             psTdmaGlobalCnt;
-
-       /* DurationAdjust For SCO */
-       u32             psTdmaMonitorCntForSCO;
-       u8              psTdmaDuAdjTypeForSCO;
-       u8              RSSI_WiFi_Last;
-       u8              RSSI_BT_Last;
-
-       u8              bWiFiHalt;
-       u8              bRAChanged;
-};
-
-void BTDM_1AntSignalCompensation(struct rtw_adapter *padapter,
-                                u8 *rssi_wifi, u8 *rssi_bt);
-void BTDM_1AntForDhcp(struct rtw_adapter *padapter);
-void BTDM_1AntBtCoexist8723A(struct rtw_adapter *padapter);
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87231Ant.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== */
-enum bt_2ant_bt_status {
-       BT_2ANT_BT_STATUS_IDLE                  = 0x0,
-       BT_2ANT_BT_STATUS_CONNECTED_IDLE        = 0x1,
-       BT_2ANT_BT_STATUS_NON_IDLE              = 0x2,
-       BT_2ANT_BT_STATUS_MAX
-};
-
-enum bt_2ant_coex_algo {
-       BT_2ANT_COEX_ALGO_UNDEFINED                     = 0x0,
-       BT_2ANT_COEX_ALGO_SCO                           = 0x1,
-       BT_2ANT_COEX_ALGO_HID                           = 0x2,
-       BT_2ANT_COEX_ALGO_A2DP                          = 0x3,
-       BT_2ANT_COEX_ALGO_PANEDR                        = 0x4,
-       BT_2ANT_COEX_ALGO_PANHS                         = 0x5,
-       BT_2ANT_COEX_ALGO_PANEDR_A2DP           = 0x6,
-       BT_2ANT_COEX_ALGO_PANEDR_HID            = 0x7,
-       BT_2ANT_COEX_ALGO_HID_A2DP_PANEDR       = 0x8,
-       BT_2ANT_COEX_ALGO_HID_A2DP                      = 0x9,
-       BT_2ANT_COEX_ALGO_HID_A2DP_PANHS        = 0xA,
-       BT_2ANT_COEX_ALGO_MAX                           = 0xB,
-};
-
-struct btdm_8723a_2ant {
-       u8      bPreDecBtPwr;
-       u8      bCurDecBtPwr;
-
-       u8      preWlanActHi;
-       u8      curWlanActHi;
-       u8      preWlanActLo;
-       u8      curWlanActLo;
-
-       u8      preFwDacSwingLvl;
-       u8      curFwDacSwingLvl;
-
-       u8      bPreRfRxLpfShrink;
-       u8      bCurRfRxLpfShrink;
-
-       u8      bPreLowPenaltyRa;
-       u8      bCurLowPenaltyRa;
-
-       u8      preBtRetryIndex;
-       u8      curBtRetryIndex;
-
-       u8      bPreDacSwingOn;
-       u32     preDacSwingLvl;
-       u8      bCurDacSwingOn;
-       u32     curDacSwingLvl;
-
-       u8      bPreAdcBackOff;
-       u8      bCurAdcBackOff;
-
-       u8      bPreAgcTableEn;
-       u8      bCurAgcTableEn;
-
-       u32     preVal0x6c0;
-       u32     curVal0x6c0;
-       u32     preVal0x6c8;
-       u32     curVal0x6c8;
-       u8      preVal0x6cc;
-       u8      curVal0x6cc;
-
-       u8      bCurIgnoreWlanAct;
-       u8      bPreIgnoreWlanAct;
-
-       u8      prePsTdma;
-       u8      curPsTdma;
-       u8      psTdmaDuAdjType;
-       u8      bPrePsTdmaOn;
-       u8      bCurPsTdmaOn;
-
-       u8      preAlgorithm;
-       u8      curAlgorithm;
-       u8      bResetTdmaAdjust;
-
-       u8      btStatus;
-};
-
-void BTDM_2AntBtCoexist8723A(struct rtw_adapter *padapter);
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc87232Ant.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== */
-
-#define        BT_Q_PKT_OFF            0
-#define        BT_Q_PKT_ON             1
-
-#define        BT_TX_PWR_OFF           0
-#define        BT_TX_PWR_ON            1
-
-/*  TDMA mode definition */
-#define        TDMA_2ANT                       0
-#define        TDMA_1ANT                       1
-#define        TDMA_NAV_OFF            0
-#define        TDMA_NAV_ON             1
-#define        TDMA_DAC_SWING_OFF      0
-#define        TDMA_DAC_SWING_ON       1
-
-#define        BT_RSSI_LEVEL_H 0
-#define        BT_RSSI_LEVEL_M 1
-#define        BT_RSSI_LEVEL_L 2
-
-/*  PTA mode related definition */
-#define        BT_PTA_MODE_OFF         0
-#define        BT_PTA_MODE_ON          1
-
-/*  Penalty Tx Rate Adaptive */
-#define        BT_TX_RATE_ADAPTIVE_NORMAL                      0
-#define        BT_TX_RATE_ADAPTIVE_LOW_PENALTY 1
-
-/*  RF Corner */
-#define        BT_RF_RX_LPF_CORNER_RESUME                      0
-#define        BT_RF_RX_LPF_CORNER_SHRINK                      1
-
-#define BT_INFO_ACL                    BIT(0)
-#define BT_INFO_SCO                    BIT(1)
-#define BT_INFO_INQ_PAG                BIT(2)
-#define BT_INFO_ACL_BUSY       BIT(3)
-#define BT_INFO_SCO_BUSY       BIT(4)
-#define BT_INFO_HID                    BIT(5)
-#define BT_INFO_A2DP           BIT(6)
-#define BT_INFO_FTP                    BIT(7)
-
-
-
-struct bt_coexist_8723a {
-       u32                                     highPriorityTx;
-       u32                                     highPriorityRx;
-       u32                                     lowPriorityTx;
-       u32                                     lowPriorityRx;
-       u8                                      btRssi;
-       u8                                      TotalAntNum;
-       u8                                      bC2hBtInfoSupport;
-       u8                                      c2hBtInfo;
-       u8                                      c2hBtInfoOriginal;
-       u8                                      prec2hBtInfo; /*  for 1Ant */
-       u8                                      bC2hBtInquiryPage;
-       unsigned long                           btInqPageStartTime; /*  for 2Ant */
-       u8                                      c2hBtProfile; /*  for 1Ant */
-       u8                                      btRetryCnt;
-       u8                                      btInfoExt;
-       u8                                      bC2hBtInfoReqSent;
-       u8                                      bForceFwBtInfo;
-       u8                                      bForceA2dpSink;
-       struct btdm_8723a_2ant                  btdm2Ant;
-       struct btdm_8723a_1ant                  btdm1Ant;
-};
-
-void BTDM_SetFwChnlInfo(struct rtw_adapter *padapter,
-                       enum rt_media_status mstatus);
-u8 BTDM_IsWifiConnectionExist(struct rtw_adapter *padapter);
-void BTDM_SetFw3a(struct rtw_adapter *padapter, u8 byte1, u8 byte2, u8 byte3,
-                 u8 byte4, u8 byte5);
-void BTDM_QueryBtInformation(struct rtw_adapter *padapter);
-void BTDM_SetSwRfRxLpfCorner(struct rtw_adapter *padapter, u8 type);
-void BTDM_SetSwPenaltyTxRateAdaptive(struct rtw_adapter *padapter, u8 raType);
-void BTDM_SetFwDecBtPwr(struct rtw_adapter *padapter, u8 bDecBtPwr);
-u8 BTDM_BtProfileSupport(struct rtw_adapter *padapter);
-void BTDM_LpsLeave(struct rtw_adapter *padapter);
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtc8723.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== */
-
-enum BT_A2DP_INDEX{
-       BT_A2DP_INDEX0          = 0,                    /*  32, 12; the most critical for BT */
-       BT_A2DP_INDEX1,                                 /*  12, 24 */
-       BT_A2DP_INDEX2,                                 /*  0, 0 */
-       BT_A2DP_INDEX_MAX
-};
-
-#define BT_A2DP_STATE_NOT_ENTERED              0
-#define BT_A2DP_STATE_DETECTING                1
-#define BT_A2DP_STATE_DETECTED                 2
-
-#define BTDM_ANT_BT_IDLE                               0
-#define BTDM_ANT_WIFI                                  1
-#define BTDM_ANT_BT                                            2
-
-
-void BTDM_SingleAnt(struct rtw_adapter *padapter, u8 bSingleAntOn,
-                   u8 bInterruptOn, u8 bMultiNAVOn);
-void BTDM_CheckBTIdleChange1Ant(struct rtw_adapter *padapter);
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr1Ant.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== */
-
-/*  */
-/*  For old core stack before v251 */
-/*  */
-#define BT_RSSI_STATE_NORMAL_POWER     BIT(0)
-#define BT_RSSI_STATE_AMDPU_OFF                BIT(1)
-#define BT_RSSI_STATE_SPECIAL_LOW      BIT(2)
-#define BT_RSSI_STATE_BG_EDCA_LOW      BIT(3)
-#define BT_RSSI_STATE_TXPOWER_LOW      BIT(4)
-
-#define        BT_DACSWING_OFF                         0
-#define        BT_DACSWING_M4                          1
-#define        BT_DACSWING_M7                          2
-#define        BT_DACSWING_M10                         3
-
-void BTDM_DiminishWiFi(struct rtw_adapter *Adapter, u8 bDACOn, u8 bInterruptOn,
-                      u8 DACSwingLevel, u8 bNAVOn);
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtcCsr2Ant.h ===== */
-
-/*  HEADER/TypeDef.h */
-#define MAX_FW_SUPPORT_MACID_NUM                       64
-
-/*  ===== Below this line is sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== */
-
-#define        FW_VER_BT_REG                   62
-#define        FW_VER_BT_REG1          74
-#define        REG_BT_ACTIVE                   0x444
-#define        REG_BT_STATE                    0x448
-#define        REG_BT_POLLING1         0x44c
-#define        REG_BT_POLLING                  0x700
-
-#define        REG_BT_ACTIVE_OLD               0x488
-#define        REG_BT_STATE_OLD                0x48c
-#define        REG_BT_POLLING_OLD      0x490
-
-/*  The reg define is for 8723 */
-#define        REG_HIGH_PRIORITY_TXRX                  0x770
-#define        REG_LOW_PRIORITY_TXRX                   0x774
-
-#define BT_FW_COEX_THRESH_TOL                  6
-#define BT_FW_COEX_THRESH_20                           20
-#define BT_FW_COEX_THRESH_23                           23
-#define BT_FW_COEX_THRESH_25                           25
-#define BT_FW_COEX_THRESH_30                           30
-#define BT_FW_COEX_THRESH_35                           35
-#define BT_FW_COEX_THRESH_40                           40
-#define BT_FW_COEX_THRESH_45                           45
-#define BT_FW_COEX_THRESH_47                           47
-#define BT_FW_COEX_THRESH_50                           50
-#define BT_FW_COEX_THRESH_55                           55
-#define BT_FW_COEX_THRESH_65                           65
-
-#define BT_COEX_STATE_BT30                     BIT(0)
-#define BT_COEX_STATE_WIFI_HT20                        BIT(1)
-#define BT_COEX_STATE_WIFI_HT40                        BIT(2)
-#define BT_COEX_STATE_WIFI_LEGACY              BIT(3)
-
-#define BT_COEX_STATE_WIFI_RSSI_LOW            BIT(4)
-#define BT_COEX_STATE_WIFI_RSSI_MEDIUM         BIT(5)
-#define BT_COEX_STATE_WIFI_RSSI_HIGH           BIT(6)
-#define BT_COEX_STATE_DEC_BT_POWER             BIT(7)
-
-#define BT_COEX_STATE_WIFI_IDLE                        BIT(8)
-#define BT_COEX_STATE_WIFI_UPLINK              BIT(9)
-#define BT_COEX_STATE_WIFI_DOWNLINK            BIT(10)
-
-#define BT_COEX_STATE_BT_INQ_PAGE              BIT(11)
-#define BT_COEX_STATE_BT_IDLE                  BIT(12)
-#define BT_COEX_STATE_BT_UPLINK                        BIT(13)
-#define BT_COEX_STATE_BT_DOWNLINK              BIT(14)
-/*  */
-/*  Todo: Remove these definitions */
-#define BT_COEX_STATE_BT_PAN_IDLE              BIT(15)
-#define BT_COEX_STATE_BT_PAN_UPLINK            BIT(16)
-#define BT_COEX_STATE_BT_PAN_DOWNLINK          BIT(17)
-#define BT_COEX_STATE_BT_A2DP_IDLE             BIT(18)
-/*  */
-#define BT_COEX_STATE_BT_RSSI_LOW              BIT(19)
-
-#define BT_COEX_STATE_PROFILE_HID              BIT(20)
-#define BT_COEX_STATE_PROFILE_A2DP             BIT(21)
-#define BT_COEX_STATE_PROFILE_PAN              BIT(22)
-#define BT_COEX_STATE_PROFILE_SCO              BIT(23)
-
-#define BT_COEX_STATE_WIFI_RSSI_1_LOW          BIT(24)
-#define BT_COEX_STATE_WIFI_RSSI_1_MEDIUM       BIT(25)
-#define BT_COEX_STATE_WIFI_RSSI_1_HIGH         BIT(26)
-
-#define BT_COEX_STATE_WIFI_RSSI_BEACON_LOW     BIT(27)
-#define BT_COEX_STATE_WIFI_RSSI_BEACON_MEDIUM  BIT(28)
-#define BT_COEX_STATE_WIFI_RSSI_BEACON_HIGH    BIT(29)
-
-
-#define BT_COEX_STATE_BTINFO_COMMON            BIT(30)
-#define BT_COEX_STATE_BTINFO_B_HID_SCOESCO     BIT(31)
-#define BT_COEX_STATE_BTINFO_B_FTP_A2DP                BIT(32)
-
-#define BT_COEX_STATE_BT_CNT_LEVEL_0           BIT(33)
-#define BT_COEX_STATE_BT_CNT_LEVEL_1           BIT(34)
-#define BT_COEX_STATE_BT_CNT_LEVEL_2           BIT(35)
-#define BT_COEX_STATE_BT_CNT_LEVEL_3           BIT(36)
-
-#define BT_RSSI_STATE_HIGH                     0
-#define BT_RSSI_STATE_MEDIUM                   1
-#define BT_RSSI_STATE_LOW                      2
-#define BT_RSSI_STATE_STAY_HIGH                        3
-#define BT_RSSI_STATE_STAY_MEDIUM              4
-#define BT_RSSI_STATE_STAY_LOW                 5
-
-#define        BT_AGCTABLE_OFF                         0
-#define        BT_AGCTABLE_ON                          1
-
-#define        BT_BB_BACKOFF_OFF                       0
-#define        BT_BB_BACKOFF_ON                        1
-
-#define        BT_FW_NAV_OFF                           0
-#define        BT_FW_NAV_ON                            1
-
-#define        BT_COEX_MECH_NONE                       0
-#define        BT_COEX_MECH_SCO                        1
-#define        BT_COEX_MECH_HID                        2
-#define        BT_COEX_MECH_A2DP                       3
-#define        BT_COEX_MECH_PAN                        4
-#define        BT_COEX_MECH_HID_A2DP                   5
-#define        BT_COEX_MECH_HID_PAN                    6
-#define        BT_COEX_MECH_PAN_A2DP                   7
-#define        BT_COEX_MECH_HID_SCO_ESCO               8
-#define        BT_COEX_MECH_FTP_A2DP                   9
-#define        BT_COEX_MECH_COMMON                     10
-#define        BT_COEX_MECH_MAX                        11
-/*     BT Dbg Ctrl */
-#define        BT_DBG_PROFILE_NONE                     0
-#define        BT_DBG_PROFILE_SCO                      1
-#define        BT_DBG_PROFILE_HID                      2
-#define        BT_DBG_PROFILE_A2DP                     3
-#define        BT_DBG_PROFILE_PAN                      4
-#define        BT_DBG_PROFILE_HID_A2DP                 5
-#define        BT_DBG_PROFILE_HID_PAN                  6
-#define        BT_DBG_PROFILE_PAN_A2DP                 7
-#define        BT_DBG_PROFILE_MAX                      9
-
-struct bt_coexist_str {
-       u8                      BluetoothCoexist;
-       u8                      BT_Ant_Num;
-       u8                      BT_CoexistType;
-       u8                      BT_Ant_isolation;       /* 0:good, 1:bad */
-       u8                      bt_radiosharedtype;
-       u32                     Ratio_Tx;
-       u32                     Ratio_PRI;
-       u8                      bInitlized;
-       u32                     BtRfRegOrigin1E;
-       u32                     BtRfRegOrigin1F;
-       u8                      bBTBusyTraffic;
-       u8                      bBTTrafficModeSet;
-       u8                      bBTNonTrafficModeSet;
-       struct bt_traffic_statistics            BT21TrafficStatistics;
-       u64                     CurrentState;
-       u64                     PreviousState;
-       u8                      preRssiState;
-       u8                      preRssiState1;
-       u8                      preRssiStateBeacon;
-       u8                      bFWCoexistAllOff;
-       u8                      bSWCoexistAllOff;
-       u8                      bHWCoexistAllOff;
-       u8                      bBalanceOn;
-       u8                      bSingleAntOn;
-       u8                      bInterruptOn;
-       u8                      bMultiNAVOn;
-       u8                      PreWLANActH;
-       u8                      PreWLANActL;
-       u8                      WLANActH;
-       u8                      WLANActL;
-       u8                      A2DPState;
-       u8                      AntennaState;
-       u32                     lastBtEdca;
-       u16                     last_aggr_num;
-       u8                      bEDCAInitialized;
-       u8                      exec_cnt;
-       u8                      b8723aAgcTableOn;
-       u8                      b92DAgcTableOn;
-       struct bt_coexist_8723a halCoex8723;
-       u8                      btActiveZeroCnt;
-       u8                      bCurBtDisabled;
-       u8                      bPreBtDisabled;
-       u8                      bNeedToRoamForBtDisableEnable;
-       u8                      fw3aVal[5];
-};
-
-void BTDM_CheckAntSelMode(struct rtw_adapter *padapter);
-void BTDM_FwC2hBtRssi(struct rtw_adapter *padapter, u8 *tmpBuf);
-#define BT_FwC2hBtRssi BTDM_FwC2hBtRssi
-void BTDM_DisplayBtCoexInfo(struct rtw_adapter *padapter);
-#define BT_DisplayBtCoexInfo BTDM_DisplayBtCoexInfo
-void BTDM_RejectAPAggregatedPacket(struct rtw_adapter *padapter, u8 bReject);
-u8 BTDM_IsHT40(struct rtw_adapter *padapter);
-u8 BTDM_Legacy(struct rtw_adapter *padapter);
-void BTDM_CheckWiFiState(struct rtw_adapter *padapter);
-s32 BTDM_GetRxSS(struct rtw_adapter *padapter);
-u8 BTDM_CheckCoexBcnRssiState(struct rtw_adapter *padapter, u8 levelNum,
-                             u8 RssiThresh, u8 RssiThresh1);
-u8 BTDM_CheckCoexRSSIState1(struct rtw_adapter *padapter, u8 levelNum,
-                           u8 RssiThresh, u8 RssiThresh1);
-u8 BTDM_CheckCoexRSSIState(struct rtw_adapter *padapter, u8 levelNum,
-                          u8 RssiThresh, u8 RssiThresh1);
-void BTDM_Balance(struct rtw_adapter *padapter, u8 bBalanceOn, u8 ms0, u8 ms1);
-void BTDM_AGCTable(struct rtw_adapter *padapter, u8 type);
-void BTDM_BBBackOffLevel(struct rtw_adapter *padapter, u8 type);
-void BTDM_FWCoexAllOff(struct rtw_adapter *padapter);
-void BTDM_SWCoexAllOff(struct rtw_adapter *padapter);
-void BTDM_HWCoexAllOff(struct rtw_adapter *padapter);
-void BTDM_CoexAllOff(struct rtw_adapter *padapter);
-void BTDM_TurnOffBtCoexistBeforeEnterIPS(struct rtw_adapter *padapter);
-void BTDM_SignalCompensation(struct rtw_adapter *padapter, u8 *rssi_wifi,
-                            u8 *rssi_bt);
-void BTDM_UpdateCoexState(struct rtw_adapter *padapter);
-u8 BTDM_IsSameCoexistState(struct rtw_adapter *padapter);
-void BTDM_PWDBMonitor(struct rtw_adapter *padapter);
-u8 BTDM_IsBTBusy(struct rtw_adapter *padapter);
-#define BT_IsBtBusy BTDM_IsBTBusy
-u8 BTDM_IsWifiBusy(struct rtw_adapter *padapter);
-u8 BTDM_IsCoexistStateChanged(struct rtw_adapter *padapter);
-u8 BTDM_IsWifiUplink(struct rtw_adapter *padapter);
-u8 BTDM_IsWifiDownlink(struct rtw_adapter *padapter);
-u8 BTDM_IsBTHSMode(struct rtw_adapter *padapter);
-u8 BTDM_IsBTUplink(struct rtw_adapter *padapter);
-u8 BTDM_IsBTDownlink(struct rtw_adapter *padapter);
-void BTDM_AdjustForBtOperation(struct rtw_adapter *padapter);
-void BTDM_ForHalt(struct rtw_adapter *padapter);
-void BTDM_WifiScanNotify(struct rtw_adapter *padapter, u8 scanType);
-void BTDM_WifiAssociateNotify(struct rtw_adapter *padapter, u8 action);
-void BTDM_MediaStatusNotify(struct rtw_adapter *padapter,
-                           enum rt_media_status mstatus);
-void BTDM_ForDhcp(struct rtw_adapter *padapter);
-void BTDM_ResetActionProfileState(struct rtw_adapter *padapter);
-void BTDM_SetBtCoexCurrAntNum(struct rtw_adapter *padapter, u8 antNum);
-#define BT_SetBtCoexCurrAntNum BTDM_SetBtCoexCurrAntNum
-u8 BTDM_IsActionSCO(struct rtw_adapter *padapter);
-u8 BTDM_IsActionHID(struct rtw_adapter *padapter);
-u8 BTDM_IsActionA2DP(struct rtw_adapter *padapter);
-u8 BTDM_IsActionPAN(struct rtw_adapter *padapter);
-u8 BTDM_IsActionHIDA2DP(struct rtw_adapter *padapter);
-u8 BTDM_IsActionHIDPAN(struct rtw_adapter *padapter);
-u8 BTDM_IsActionPANA2DP(struct rtw_adapter *padapter);
-u32 BTDM_BtTxRxCounterH(struct rtw_adapter *padapter);
-u32 BTDM_BtTxRxCounterL(struct rtw_adapter *padapter);
-
-/*  ===== End of sync from SD7 driver HAL/BTCoexist/HalBtCoexist.h ===== */
-
-/*  ===== Below this line is sync from SD7 driver HAL/HalBT.h ===== */
-
-#define RTS_CTS_NO_LEN_LIMIT   0
-
-u8 HALBT_GetPGAntNum(struct rtw_adapter *padapter);
-#define BT_GetPGAntNum HALBT_GetPGAntNum
-void HALBT_SetKey(struct rtw_adapter *padapter, u8 EntryNum);
-void HALBT_RemoveKey(struct rtw_adapter *padapter, u8 EntryNum);
-u8 HALBT_IsBTExist(struct rtw_adapter *padapter);
-#define BT_IsBtExist HALBT_IsBTExist
-u8 HALBT_BTChipType(struct rtw_adapter *padapter);
-void HALBT_SetRtsCtsNoLenLimit(struct rtw_adapter *padapter);
-
-/*  ===== End of sync from SD7 driver HAL/HalBT.c ===== */
-
-#define _bt_dbg_off_           0
-#define _bt_dbg_on_            1
-
-extern u32 BTCoexDbgLevel;
-
-
-
-#endif /*  __RTL8723A_BT_COEXIST_H__ */
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_bt_intf.h b/drivers/staging/rtl8723au/include/rtl8723a_bt_intf.h
deleted file mode 100644 (file)
index 4733559..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- * Copyright(c) 2014, Jes Sorensen <Jes.Sorensen@redhat.com>
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_BT_INTF_H__
-#define __RTL8723A_BT_INTF_H__
-
-#include <drv_types.h>
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-enum rt_media_status;
-bool rtl8723a_BT_using_antenna_1(struct rtw_adapter *padapter);
-bool rtl8723a_BT_enabled(struct rtw_adapter *padapter);
-bool rtl8723a_BT_coexist(struct rtw_adapter *padapter);
-void rtl8723a_BT_do_coexist(struct rtw_adapter *padapter);
-void rtl8723a_BT_wifiscan_notify(struct rtw_adapter *padapter, u8 scanType);
-void rtl8723a_BT_mediastatus_notify(struct rtw_adapter *padapter,
-                                   enum rt_media_status mstatus);
-void rtl8723a_BT_specialpacket_notify(struct rtw_adapter *padapter);
-void rtl8723a_BT_lps_leave(struct rtw_adapter *padapter);
-void rtl8723a_BT_disable_coexist(struct rtw_adapter *padapter);
-bool rtl8723a_BT_disable_EDCA_turbo(struct rtw_adapter *padapter);
-void rtl8723a_dual_antenna_detection(struct rtw_adapter *padapter);
-void rtl8723a_BT_init_hwconfig(struct rtw_adapter *padapter);
-void rtl8723a_BT_wifiassociate_notify(struct rtw_adapter *padapter, u8 action);
-void rtl8723a_BT_init_hal_vars(struct rtw_adapter *padapter);
-void rtl8723a_fw_c2h_BT_info(struct rtw_adapter *padapter, u8 *tmpBuf, u8 length);
-#else
-static inline bool rtl8723a_BT_using_antenna_1(struct rtw_adapter *padapter)
-{
-       return false;
-}
-static inline bool rtl8723a_BT_enabled(struct rtw_adapter *padapter)
-{
-       return false;
-}
-static inline bool rtl8723a_BT_coexist(struct rtw_adapter *padapter)
-{
-       return false;
-}
-#define rtl8723a_BT_do_coexist(padapter)                       do {} while(0)
-#define rtl8723a_BT_wifiscan_notify(padapter, scanType)                do {} while(0)
-#define rtl8723a_BT_mediastatus_notify(padapter, mstatus)      do {} while(0)
-#define rtl8723a_BT_specialpacket_notify(padapter)             do {} while(0)
-#define rtl8723a_BT_lps_leave(padapter)                                do {} while(0)
-#define rtl8723a_BT_disable_coexist(padapter)                  do {} while(0)
-static inline bool rtl8723a_BT_disable_EDCA_turbo(struct rtw_adapter *padapter)
-{
-       return false;
-}
-#define rtl8723a_dual_antenna_detection(padapter)              do {} while(0)
-#define rtl8723a_BT_init_hwconfig(padapter)                    do {} while(0)
-#define rtl8723a_BT_wifiassociate_notify(padapter, action)     do {} while(0)
-#define rtl8723a_BT_init_hal_vars(padapter)                    do {} while(0)
-#define rtl8723a_fw_c2h_BT_info(padapter, tmpBuf, length)      do {} while(0)
-#endif
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h
deleted file mode 100644 (file)
index f95535a..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_CMD_H__
-#define __RTL8723A_CMD_H__
-
-
-#define H2C_BT_FW_PATCH_LEN            3
-#define H2C_BT_PWR_FORCE_LEN           3
-
-enum cmd_msg_element_id
-{
-       NONE_CMDMSG_EID,
-       AP_OFFLOAD_EID = 0,
-       SET_PWRMODE_EID = 1,
-       JOINBSS_RPT_EID = 2,
-       RSVD_PAGE_EID = 3,
-       RSSI_4_EID = 4,
-       RSSI_SETTING_EID = 5,
-       MACID_CONFIG_EID = 6,
-       MACID_PS_MODE_EID = 7,
-       P2P_PS_OFFLOAD_EID = 8,
-       SELECTIVE_SUSPEND_ROF_CMD = 9,
-       BT_QUEUE_PKT_EID = 17,
-       BT_ANT_TDMA_EID = 20,
-       BT_2ANT_HID_EID = 21,
-       P2P_PS_CTW_CMD_EID = 32,
-       FORCE_BT_TX_PWR_EID = 33,
-       SET_TDMA_WLAN_ACT_TIME_EID = 34,
-       SET_BT_TX_RETRY_INDEX_EID = 35,
-       HID_PROFILE_ENABLE_EID = 36,
-       BT_IGNORE_WLAN_ACT_EID = 37,
-       BT_PTA_MANAGER_UPDATE_ENABLE_EID = 38,
-       DAC_SWING_VALUE_EID = 41,
-       TRADITIONAL_TDMA_EN_EID = 51,
-       H2C_BT_FW_PATCH = 54,
-       B_TYPE_TDMA_EID = 58,
-       SCAN_EN_EID = 59,
-       LOWPWR_LPS_EID = 71,
-       H2C_RESET_TSF = 75,
-       MAX_CMDMSG_EID
-};
-
-struct cmd_msg_parm {
-       u8 eid; /* element id */
-       u8 sz; /*  sz */
-       u8 buf[6];
-};
-
-struct setpwrmode_parm {
-       u8 Mode;
-       u8 SmartPS;
-       u8 AwakeInterval;       /*  unit: beacon interval */
-       u8 bAllQueueUAPSD;
-
-#define SETPM_LOWRXBCN                 BIT(0)
-#define SETPM_AUTOANTSWITCH            BIT(1)
-#define SETPM_PSALLOWBTHIGHPRI BIT(2)
-       u8 BcnAntMode;
-} __packed;
-
-struct H2C_SS_RFOFF_PARAM{
-       u8 ROFOn; /*  1: on, 0:off */
-       u16 gpio_period; /*  unit: 1024 us */
-}__attribute__ ((packed));
-
-
-struct joinbssrpt_parm {
-       u8 OpMode;      /*  enum rt_media_status */
-};
-
-struct rsvdpage_loc {
-       u8 LocProbeRsp;
-       u8 LocPsPoll;
-       u8 LocNullData;
-       u8 LocQosNull;
-       u8 LocBTQosNull;
-};
-
-struct P2P_PS_Offload_t {
-       u8 Offload_En:1;
-       u8 role:1; /*  1: Owner, 0: Client */
-       u8 CTWindow_En:1;
-       u8 NoA0_En:1;
-       u8 NoA1_En:1;
-       u8 AllStaSleep:1; /*  Only valid in Owner */
-       u8 discovery:1;
-       u8 rsvd:1;
-};
-
-struct P2P_PS_CTWPeriod_t {
-       u8 CTWPeriod;   /* TU */
-};
-
-#define B_TDMA_EN                      BIT(0)
-#define B_TDMA_FIXANTINBT              BIT(1)
-#define B_TDMA_TXPSPOLL                        BIT(2)
-#define B_TDMA_VAL870                  BIT(3)
-#define B_TDMA_AUTOWAKEUP              BIT(4)
-#define B_TDMA_NOPS                    BIT(5)
-#define B_TDMA_WLANHIGHPRI             BIT(6)
-
-struct b_type_tdma_parm {
-       u8 option;
-
-       u8 TBTTOnPeriod;
-       u8 MedPeriod;
-       u8 rsvd30;
-} __packed;
-
-struct scan_en_parm {
-       u8 En;
-} __packed;
-
-/*  BT_PWR */
-#define SET_H2CCMD_BT_PWR_IDX(__pH2CCmd, __Value)                                                      SET_BITS_TO_LE_1BYTE_8BIT(__pH2CCmd, 0, 8, __Value)
-
-/*  BT_FW_PATCH */
-#define SET_H2CCMD_BT_FW_PATCH_ENABLE(__pH2CCmd, __Value)                                      SET_BITS_TO_LE_4BYTE(__pH2CCmd, 0, 8, __Value) /*       SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) */
-#define SET_H2CCMD_BT_FW_PATCH_SIZE(__pH2CCmd, __Value)                                                SET_BITS_TO_LE_4BYTE(__pH2CCmd, 8, 16, __Value) /*      SET_BITS_TO_LE_2BYTE((__pH2CCmd)+1, 0, 16, __Value) */
-
-struct lowpwr_lps_parm{
-       u8 bcn_count:4;
-       u8 tb_bcn_threshold:3;
-       u8 enable:1;
-       u8 bcn_interval;
-       u8 drop_threshold;
-       u8 max_early_period;
-       u8 max_bcn_timeout_period;
-} __packed;
-
-
-/*  host message to firmware cmd */
-void rtl8723a_set_FwPwrMode_cmd(struct rtw_adapter *padapter, u8 Mode);
-void rtl8723a_set_FwJoinBssReport_cmd(struct rtw_adapter *padapter, u8 mstatus);
-#ifdef CONFIG_8723AU_BT_COEXIST
-void rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(struct rtw_adapter *padapter);
-#else
-#define rtl8723a_set_BTCoex_AP_mode_FwRsvdPkt_cmd(padapter) do {} while(0)
-#endif
-int rtl8723a_set_rssi_cmd(struct rtw_adapter *padapter, u32 param);
-int rtl8723a_set_raid_cmd(struct rtw_adapter *padapter, u32 mask, u8 arg);
-void rtl8723a_add_rateatid(struct rtw_adapter *padapter, u32 bitmap, u8 arg, u8 rssi_level);
-
-int FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_dm.h b/drivers/staging/rtl8723au/include/rtl8723a_dm.h
deleted file mode 100644 (file)
index bf236e8..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_DM_H__
-#define __RTL8723A_DM_H__
-/*  */
-/*  Description: */
-/*  */
-/*  This file is for 8723A dynamic mechanism only */
-/*  */
-/*  */
-/*  */
-#define DYNAMIC_FUNC_BT BIT(0)
-
-enum{
-       UP_LINK,
-       DOWN_LINK,
-};
-/*  */
-/*  structure and define */
-/*  */
-
-/*  duplicate code,will move to ODM ######### */
-#define IQK_MAC_REG_NUM                4
-#define IQK_ADDA_REG_NUM               16
-#define IQK_BB_REG_NUM                 9
-#define HP_THERMAL_NUM         8
-/*  duplicate code,will move to ODM ######### */
-struct dm_priv {
-       u32     InitODMFlag;
-
-       /*  Upper and Lower Signal threshold for Rate Adaptive*/
-       int     UndecoratedSmoothedPWDB;
-       int     UndecoratedSmoothedCCK;
-       int     EntryMinUndecoratedSmoothedPWDB;
-       int     EntryMaxUndecoratedSmoothedPWDB;
-       int     MinUndecoratedPWDBForDM;
-       int     LastMinUndecoratedPWDBForDM;
-
-       s32     UndecoratedSmoothedBeacon;
-       #ifdef CONFIG_8723AU_BT_COEXIST
-       s32 BT_EntryMinUndecoratedSmoothedPWDB;
-       s32 BT_EntryMaxUndecoratedSmoothedPWDB;
-       #endif
-
-       /* for High Power */
-       u8 DynamicTxHighPowerLvl;/* Add by Jacken Tx Power Control for Near/Far Range 2008/03/06 */
-
-       /* for tx power tracking */
-       u8      bTXPowerTracking;
-       u8      TXPowercount;
-       u8      bTXPowerTrackingInit;
-       u8      TxPowerTrackControl;    /* for mp mode, turn off txpwrtracking as default */
-       u8      TM_Trigger;
-
-       u8      ThermalMeter[2];                                /*  ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 */
-       u8      ThermalValue;
-       u8      ThermalValue_LCK;
-       u8      ThermalValue_IQK;
-       u8      ThermalValue_DPK;
-
-       u8      bRfPiEnable;
-
-       /* for APK */
-       u32     APKoutput[2][2];        /* path A/B; output1_1a/output1_2a */
-       u8      bAPKdone;
-       u8      bAPKThermalMeterIgnore;
-       u8      bDPdone;
-       u8      bDPPathAOK;
-       u8      bDPPathBOK;
-
-       /* for IQK */
-       u32     RegC04;
-       u32     Reg874;
-       u32     RegC08;
-       u32     RegB68;
-       u32     RegB6C;
-       u32     Reg870;
-       u32     Reg860;
-       u32     Reg864;
-       u32     ADDA_backup[IQK_ADDA_REG_NUM];
-       u32     IQK_MAC_backup[IQK_MAC_REG_NUM];
-       u32     IQK_BB_backup_recover[9];
-       u32     IQK_BB_backup[IQK_BB_REG_NUM];
-       u8      PowerIndex_backup[6];
-
-       u8      bCCKinCH14;
-
-       u8      CCK_index;
-       u8      OFDM_index[2];
-
-       u8      bDoneTxpower;
-       u8      CCK_index_HP;
-       u8      OFDM_index_HP[2];
-       u8      ThermalValue_HP[HP_THERMAL_NUM];
-       u8      ThermalValue_HP_index;
-
-       /* for TxPwrTracking */
-       s32     RegE94;
-       s32     RegE9C;
-       s32     RegEB4;
-       s32     RegEBC;
-
-       u32     TXPowerTrackingCallbackCnt;     /* cosa add for debug */
-
-       u32     prv_traffic_idx; /*  edca turbo */
-
-       s32     OFDM_Pkt_Cnt;
-       u8      RSSI_Select;
-/*     u8      DIG_Dynamic_MIN ; */
-/*  duplicate code,will move to ODM ######### */
-       /*  Add for Reading Initial Data Rate SEL Register 0x484 during watchdog. Using for fill tx desc. 2011.3.21 by Thomas */
-       u8      INIDATA_RATE[32];
-};
-
-
-/*  */
-/*  function prototype */
-/*  */
-
-void rtl8723a_init_dm_priv(struct rtw_adapter *padapter);
-
-void rtl8723a_InitHalDm(struct rtw_adapter *padapter);
-void rtl8723a_HalDmWatchDog(struct rtw_adapter *padapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_hal.h b/drivers/staging/rtl8723au/include/rtl8723a_hal.h
deleted file mode 100644 (file)
index 77a0fd4..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_HAL_H__
-#define __RTL8723A_HAL_H__
-
-#include "rtl8723a_spec.h"
-#include "rtl8723a_pg.h"
-#include "Hal8723APhyReg.h"
-#include "Hal8723APhyCfg.h"
-#include "rtl8723a_rf.h"
-#include "rtl8723a_bt_intf.h"
-#ifdef CONFIG_8723AU_BT_COEXIST
-#include "rtl8723a_bt-coexist.h"
-#endif
-#include "rtl8723a_dm.h"
-#include "rtl8723a_recv.h"
-#include "rtl8723a_xmit.h"
-#include "rtl8723a_cmd.h"
-#include "rtl8723a_sreset.h"
-#include "rtw_efuse.h"
-#include "rtw_eeprom.h"
-
-#include "odm_precomp.h"
-#include "odm.h"
-
-
-/* 2TODO: We should define 8192S firmware related macro settings here!! */
-#define RTL819X_DEFAULT_RF_TYPE                        RF_1T2R
-#define RTL819X_TOTAL_RF_PATH                          2
-
-/*  */
-/*             RTL8723S From header */
-/*  */
-
-/*  Fw Array */
-#define Rtl8723_FwImageArray                           Rtl8723UFwImgArray
-#define Rtl8723_FwUMCBCutImageArrayWithBT              Rtl8723UFwUMCBCutImgArrayWithBT
-#define Rtl8723_FwUMCBCutImageArrayWithoutBT   Rtl8723UFwUMCBCutImgArrayWithoutBT
-
-#define Rtl8723_ImgArrayLength                         Rtl8723UImgArrayLength
-#define Rtl8723_UMCBCutImgArrayWithBTLength            Rtl8723UUMCBCutImgArrayWithBTLength
-#define Rtl8723_UMCBCutImgArrayWithoutBTLength Rtl8723UUMCBCutImgArrayWithoutBTLength
-
-#define Rtl8723_PHY_REG_Array_PG                       Rtl8723UPHY_REG_Array_PG
-#define Rtl8723_PHY_REG_Array_PGLength         Rtl8723UPHY_REG_Array_PGLength
-
-#define Rtl8723_FwUMCBCutMPImageArray          Rtl8723SFwUMCBCutMPImgAr
-#define Rtl8723_UMCBCutMPImgArrayLength                Rtl8723SUMCBCutMPImgArrayLength
-
-#define DRVINFO_SZ                             4 /*  unit is 8bytes */
-#define PageNum_128(_Len)              (u32)(((_Len)>>7) + ((_Len)&0x7F ? 1:0))
-
-#define FW_8723A_SIZE                  0x8000
-#define FW_8723A_START_ADDRESS 0x1000
-#define FW_8723A_END_ADDRESS           0x1FFF /* 0x5FFF */
-
-#define MAX_PAGE_SIZE                  4096    /*  @ page : 4k bytes */
-
-#define IS_FW_HEADER_EXIST(_pFwHdr)    ((le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x92C0 ||\
-                                                                       (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x88C0 ||\
-                                                                       (le16_to_cpu(_pFwHdr->Signature)&0xFFF0) == 0x2300)
-
-/*  */
-/*  This structure must be cared byte-ordering */
-/*  */
-/*  Added by tynli. 2009.12.04. */
-struct rt_8723a_firmware_hdr {
-       /*  8-byte alinment required */
-
-       /*  LONG WORD 0 ---- */
-       __le16          Signature;  /*
-                                    * 92C0: test chip; 92C, 88C0: test chip;
-                                    * 88C1: MP A-cut; 92C1: MP A-cut
-                                    */
-       u8              Category;       /*  AP/NIC and USB/PCI */
-       u8              Function;       /*  Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions */
-       __le16          Version;                /*  FW Version */
-       u8              Subversion;     /*  FW Subversion, default 0x00 */
-       u8              Rsvd1;
-
-
-       /*  LONG WORD 1 ---- */
-       u8              Month;  /*  Release time Month field */
-       u8              Date;   /*  Release time Date field */
-       u8              Hour;   /*  Release time Hour field */
-       u8              Minute; /*  Release time Minute field */
-       __le16          RamCodeSize;    /*  The size of RAM code */
-       __le16          Rsvd2;
-
-       /*  LONG WORD 2 ---- */
-       __le32          SvnIdx; /*  The SVN entry index */
-       __le32          Rsvd3;
-
-       /*  LONG WORD 3 ---- */
-       __le32          Rsvd4;
-       __le32          Rsvd5;
-};
-
-#define DRIVER_EARLY_INT_TIME          0x05
-#define BCN_DMA_ATIME_INT_TIME         0x02
-
-
-/*  BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON. */
-#define MAX_TX_QUEUE           9
-
-#define TX_SELE_HQ                     BIT(0)          /*  High Queue */
-#define TX_SELE_LQ                     BIT(1)          /*  Low Queue */
-#define TX_SELE_NQ                     BIT(2)          /*  Normal Queue */
-
-/*  Note: We will divide number of page equally for each queue other than public queue! */
-#define TX_TOTAL_PAGE_NUMBER   0xF8
-#define TX_PAGE_BOUNDARY               (TX_TOTAL_PAGE_NUMBER + 1)
-
-/*  For Normal Chip Setting */
-/*  (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER */
-#define NORMAL_PAGE_NUM_PUBQ   0xE7
-#define NORMAL_PAGE_NUM_HPQ            0x0C
-#define NORMAL_PAGE_NUM_LPQ            0x02
-#define NORMAL_PAGE_NUM_NPQ            0x02
-
-/*  For Test Chip Setting */
-/*  (HPQ + LPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER */
-#define TEST_PAGE_NUM_PUBQ             0x7E
-
-/*  For Test Chip Setting */
-#define WMM_TEST_TX_TOTAL_PAGE_NUMBER  0xF5
-#define WMM_TEST_TX_PAGE_BOUNDARY              (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) /* F6 */
-
-#define WMM_TEST_PAGE_NUM_PUBQ         0xA3
-#define WMM_TEST_PAGE_NUM_HPQ          0x29
-#define WMM_TEST_PAGE_NUM_LPQ          0x29
-
-/*  Note: For Normal Chip Setting, modify later */
-#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER        0xF5
-#define WMM_NORMAL_TX_PAGE_BOUNDARY            (WMM_TEST_TX_TOTAL_PAGE_NUMBER + 1) /* F6 */
-
-#define WMM_NORMAL_PAGE_NUM_PUBQ       0xB0
-#define WMM_NORMAL_PAGE_NUM_HPQ                0x29
-#define WMM_NORMAL_PAGE_NUM_LPQ                0x1C
-#define WMM_NORMAL_PAGE_NUM_NPQ                0x1C
-
-
-/*  */
-/*     Chip specific */
-/*  */
-#define CHIP_BONDING_IDENTIFIER(_value)        (((_value)>>22)&0x3)
-#define CHIP_BONDING_92C_1T2R                  0x1
-#define CHIP_BONDING_88C_USB_MCARD             0x2
-#define CHIP_BONDING_88C_USB_HP                        0x1
-
-#include "HalVerDef.h"
-#include "hal_com.h"
-
-/*  */
-/*     Channel Plan */
-/*  */
-enum ChannelPlan
-{
-       CHPL_FCC        = 0,
-       CHPL_IC         = 1,
-       CHPL_ETSI       = 2,
-       CHPL_SPAIN      = 3,
-       CHPL_FRANCE     = 4,
-       CHPL_MKK        = 5,
-       CHPL_MKK1       = 6,
-       CHPL_ISRAEL     = 7,
-       CHPL_TELEC      = 8,
-       CHPL_GLOBAL     = 9,
-       CHPL_WORLD      = 10,
-};
-
-#define EFUSE_REAL_CONTENT_LEN         512
-#define EFUSE_MAP_LEN                          128
-#define EFUSE_MAX_SECTION                      16
-#define EFUSE_IC_ID_OFFSET                     506     /* For some inferiority IC purpose. added by Roger, 2009.09.02. */
-#define AVAILABLE_EFUSE_ADDR(addr)     (addr < EFUSE_REAL_CONTENT_LEN)
-/*  */
-/*  <Roger_Notes> */
-/*  To prevent out of boundary programming case, */
-/*  leave 1byte and program full section */
-/*  9bytes + 1byt + 5bytes and pre 1byte. */
-/*  For worst case: */
-/*  | 1byte|----8bytes----|1byte|--5bytes--| */
-/*  |         |            Reserved(14bytes)         | */
-/*  */
-
-/*  PG data exclude header, dummy 6 bytes from CP test and reserved 1byte. */
-#define EFUSE_OOB_PROTECT_BYTES                        15
-
-#define EFUSE_REAL_CONTENT_LEN_8723A   512
-#define EFUSE_MAP_LEN_8723A                            256
-#define EFUSE_MAX_SECTION_8723A                        32
-
-/*  */
-/*                     EFUSE for BT definition */
-/*  */
-#define EFUSE_BT_REAL_BANK_CONTENT_LEN 512
-#define EFUSE_BT_REAL_CONTENT_LEN              1536    /*  512*3 */
-#define EFUSE_BT_MAP_LEN                               1024    /*  1k bytes */
-#define EFUSE_BT_MAX_SECTION                   128             /*  1024/8 */
-
-#define EFUSE_PROTECT_BYTES_BANK               16
-
-/*  */
-/*  <Roger_Notes> For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06. */
-/*  */
-enum RT_MULTI_FUNC {
-       RT_MULTI_FUNC_NONE = 0x00,
-       RT_MULTI_FUNC_WIFI = 0x01,
-       RT_MULTI_FUNC_BT = 0x02,
-       RT_MULTI_FUNC_GPS = 0x04,
-};
-
-/*  */
-/*  <Roger_Notes> For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08. */
-/*  */
-enum RT_POLARITY_CTL {
-       RT_POLARITY_LOW_ACT = 0,
-       RT_POLARITY_HIGH_ACT = 1,
-};
-
-/*  For RTL8723 regulator mode. by tynli. 2011.01.14. */
-enum RT_REGULATOR_MODE {
-       RT_SWITCHING_REGULATOR = 0,
-       RT_LDO_REGULATOR = 1,
-};
-
-/*  Description: Determine the types of C2H events that are the same in driver and Fw. */
-/*  Fisrt constructed by tynli. 2009.10.09. */
-enum {
-       C2H_DBG = 0,
-       C2H_TSF = 1,
-       C2H_AP_RPT_RSP = 2,
-       C2H_CCX_TX_RPT = 3,     /*  The FW notify the report of the specific tx packet. */
-       C2H_BT_RSSI = 4,
-       C2H_BT_OP_MODE = 5,
-       C2H_EXT_RA_RPT = 6,
-       C2H_HW_INFO_EXCH = 10,
-       C2H_C2H_H2C_TEST = 11,
-       C2H_BT_INFO = 12,
-       C2H_BT_MP_INFO = 15,
-       MAX_C2HEVENT
-};
-
-struct hal_data_8723a {
-       struct hal_version              VersionID;
-       enum rt_customer_id CustomerID;
-
-       u16     FirmwareVersion;
-       u16     FirmwareVersionRev;
-       u16     FirmwareSubVersion;
-       u16     FirmwareSignature;
-
-       /* current WIFI_PHY values */
-       u32     ReceiveConfig;
-       enum WIRELESS_MODE              CurrentWirelessMode;
-       enum ht_channel_width   CurrentChannelBW;
-       u8      CurrentChannel;
-       u8      nCur40MhzPrimeSC;/*  Control channel sub-carrier */
-
-       u16     BasicRateSet;
-
-       /* rf_ctrl */
-       u8      rf_type;
-       u8      NumTotalRFPath;
-
-       u8      BoardType;
-       u8      CrystalCap;
-       /*  */
-       /*  EEPROM setting. */
-       /*  */
-       u8      EEPROMVersion;
-       u8      EEPROMCustomerID;
-       u8      EEPROMSubCustomerID;
-       u8      EEPROMRegulatory;
-       u8      EEPROMThermalMeter;
-       u8      EEPROMBluetoothCoexist;
-       u8      EEPROMBluetoothType;
-       u8      EEPROMBluetoothAntNum;
-       u8      EEPROMBluetoothAntIsolation;
-       u8      EEPROMBluetoothRadioShared;
-
-       u8      bTXPowerDataReadFromEEPORM;
-       u8      bAPKThermalMeterIgnore;
-
-       u8      bIQKInitialized;
-       u8      bAntennaDetected;
-
-       u8      TxPwrLevelCck[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-       u8      TxPwrLevelHT40_1S[RF_PATH_MAX][CHANNEL_MAX_NUMBER];     /*  For HT 40MHZ pwr */
-       u8      TxPwrLevelHT40_2S[RF_PATH_MAX][CHANNEL_MAX_NUMBER];     /*  For HT 40MHZ pwr */
-       u8      TxPwrHt20Diff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];/*  HT 20<->40 Pwr diff */
-       u8      TxPwrLegacyHtDiff[RF_PATH_MAX][CHANNEL_MAX_NUMBER];/*  For HT<->legacy pwr diff */
-       /*  For power group */
-       u8      PwrGroupHT20[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-       u8      PwrGroupHT40[RF_PATH_MAX][CHANNEL_MAX_NUMBER];
-
-       u8      LegacyHTTxPowerDiff;/*  Legacy to HT rate power diff */
-
-       /*  Read/write are allow for following hardware information variables */
-       u8      framesync;
-       u32     framesyncC34;
-       u8      framesyncMonitor;
-       u8      pwrGroupCnt;
-       u32     MCSTxPowerLevelOriginalOffset[7][16];
-       u32     CCKTxPowerLevelOriginalOffset;
-
-       u32     AntennaTxPath;                                  /*  Antenna path Tx */
-       u32     AntennaRxPath;                                  /*  Antenna path Rx */
-       u8      ExternalPA;
-
-       u8      bLedOpenDrain; /*  Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. */
-
-       u8      b1x1RecvCombine;        /*  for 1T1R receive combining */
-
-       /*  For EDCA Turbo mode */
-
-       u32     AcParam_BE; /* Original parameter for BE, use for EDCA turbo. */
-
-       /* vivi, for tx power tracking, 20080407 */
-       /* u16  TSSI_13dBm; */
-       /* u32  Pwr_Track; */
-       /*  The current Tx Power Level */
-       u8      CurrentCckTxPwrIdx;
-       u8      CurrentOfdm24GTxPwrIdx;
-
-       struct bb_reg_define    PHYRegDef[4];   /* Radio A/B/C/D */
-
-       bool            bRFPathRxEnable[4];     /*  We support 4 RF path now. */
-
-       u32     RfRegChnlVal[2];
-
-       u8      bCckHighPower;
-
-       /* RDG enable */
-       bool     bRDGEnable;
-
-       /* for host message to fw */
-       u8      LastHMEBoxNum;
-
-       u8      RegTxPause;
-       /*  Beacon function related global variable. */
-       u8      RegFwHwTxQCtrl;
-       u8      RegReg542;
-
-       struct dm_priv  dmpriv;
-       struct dm_odm_t         odmpriv;
-       struct sreset_priv srestpriv;
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-       u8                              bBTMode;
-       /*  BT only. */
-       struct bt_30info                BtInfo;
-       /*  For bluetooth co-existance */
-       struct bt_coexist_str   bt_coexist;
-#endif
-
-       u8      bDumpRxPkt;/* for debug */
-       u8      FwRsvdPageStartOffset; /* 2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ. */
-
-       /*  2010/08/09 MH Add CU power down mode. */
-       u8      pwrdown;
-
-       u8      OutEpQueueSel;
-       u8      OutEpNumber;
-
-       /*  */
-       /*  Add For EEPROM Efuse switch and  Efuse Shadow map Setting */
-       /*  */
-       u8                      EepromOrEfuse;
-       u16                     EfuseUsedBytes;
-       u16                     BTEfuseUsedBytes;
-
-       /*  Interrupt relatd register information. */
-       u32                     SysIntrStatus;
-       u32                     SysIntrMask;
-
-       /*  */
-       /*  2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an */
-       /*  independent file in the future. */
-       /*  */
-       /* 8723-----------------------------------------*/
-       enum RT_MULTI_FUNC      MultiFunc; /*  For multi-function consideration. */
-       enum RT_POLARITY_CTL    PolarityCtl; /*  For Wifi PDn Polarity control. */
-       enum RT_REGULATOR_MODE  RegulatorMode; /*  switching regulator or LDO */
-       /* 8723-----------------------------------------
-        *  2011/02/23 MH Add for 8723 mylti function definition. The define should be moved to an */
-       /*  independent file in the future. */
-
-       /*  Interrupt related register information. */
-       u32     IntArray[2];
-       u32     IntrMask[2];
-};
-
-#define GET_HAL_DATA(__pAdapter)       ((struct hal_data_8723a *)((__pAdapter)->HalData))
-#define GET_RF_TYPE(priv)                      (GET_HAL_DATA(priv)->rf_type)
-
-#define INCLUDE_MULTI_FUNC_BT(_Adapter)                (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT)
-#define INCLUDE_MULTI_FUNC_GPS(_Adapter)       (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS)
-
-struct rxreport_8723a {
-       u32 pktlen:14;
-       u32 crc32:1;
-       u32 icverr:1;
-       u32 drvinfosize:4;
-       u32 security:3;
-       u32 qos:1;
-       u32 shift:2;
-       u32 physt:1;
-       u32 swdec:1;
-       u32 ls:1;
-       u32 fs:1;
-       u32 eor:1;
-       u32 own:1;
-
-       u32 macid:5;
-       u32 tid:4;
-       u32 hwrsvd:4;
-       u32 amsdu:1;
-       u32 paggr:1;
-       u32 faggr:1;
-       u32 a1fit:4;
-       u32 a2fit:4;
-       u32 pam:1;
-       u32 pwr:1;
-       u32 md:1;
-       u32 mf:1;
-       u32 type:2;
-       u32 mc:1;
-       u32 bc:1;
-
-       u32 seq:12;
-       u32 frag:4;
-       u32 nextpktlen:14;
-       u32 nextind:1;
-       u32 rsvd0831:1;
-
-       u32 rxmcs:6;
-       u32 rxht:1;
-       u32 gf:1;
-       u32 splcp:1;
-       u32 bw:1;
-       u32 htc:1;
-       u32 eosp:1;
-       u32 bssidfit:2;
-       u32 rsvd1214:16;
-       u32 unicastwake:1;
-       u32 magicwake:1;
-
-       u32 pattern0match:1;
-       u32 pattern1match:1;
-       u32 pattern2match:1;
-       u32 pattern3match:1;
-       u32 pattern4match:1;
-       u32 pattern5match:1;
-       u32 pattern6match:1;
-       u32 pattern7match:1;
-       u32 pattern8match:1;
-       u32 pattern9match:1;
-       u32 patternamatch:1;
-       u32 patternbmatch:1;
-       u32 patterncmatch:1;
-       u32 rsvd1613:19;
-
-       u32 tsfl;
-
-       u32 bassn:12;
-       u32 bavld:1;
-       u32 rsvd2413:19;
-};
-
-/*  rtl8723a_hal_init.c */
-s32 rtl8723a_FirmwareDownload(struct rtw_adapter *padapter);
-void rtl8723a_FirmwareSelfReset(struct rtw_adapter *padapter);
-void rtl8723a_InitializeFirmwareVars(struct rtw_adapter *padapter);
-
-void rtl8723a_InitAntenna_Selection(struct rtw_adapter *padapter);
-void rtl8723a_DeinitAntenna_Selection(struct rtw_adapter *padapter);
-void rtl8723a_CheckAntenna_Selection(struct rtw_adapter *padapter);
-void rtl8723a_init_default_value(struct rtw_adapter *padapter);
-
-s32 InitLLTTable23a(struct rtw_adapter *padapter, u32 boundary);
-
-s32 CardDisableHWSM(struct rtw_adapter *padapter, u8 resetMCU);
-s32 CardDisableWithoutHWSM(struct rtw_adapter *padapter);
-
-/*  EFuse */
-u8 GetEEPROMSize8723A(struct rtw_adapter *padapter);
-void Hal_InitPGData(struct rtw_adapter *padapter, u8 *PROMContent);
-void Hal_EfuseParseIDCode(struct rtw_adapter *padapter, u8 *hwinfo);
-void Hal_EfuseParsetxpowerinfo_8723A(struct rtw_adapter *padapter, u8 *PROMContent, bool AutoLoadFail);
-void Hal_EfuseParseBTCoexistInfo_8723A(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void Hal_EfuseParseEEPROMVer(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void rtl8723a_EfuseParseChnlPlan(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void Hal_EfuseParseCustomerID(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void Hal_EfuseParseAntennaDiversity(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void Hal_EfuseParseRateIndicationOption(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-void Hal_EfuseParseXtal_8723A(struct rtw_adapter *pAdapter, u8 *hwinfo, u8 AutoLoadFail);
-void Hal_EfuseParseThermalMeter_8723A(struct rtw_adapter *padapter, u8 *hwinfo, bool AutoLoadFail);
-
-/*  register */
-void SetBcnCtrlReg23a(struct rtw_adapter *padapter, u8 SetBits, u8 ClearBits);
-void rtl8723a_InitBeaconParameters(struct rtw_adapter *padapter);
-
-void rtl8723a_start_thread(struct rtw_adapter *padapter);
-void rtl8723a_stop_thread(struct rtw_adapter *padapter);
-
-bool c2h_id_filter_ccx_8723a(u8 id);
-int c2h_handler_8723a(struct rtw_adapter *padapter, struct c2h_evt_hdr *c2h_evt);
-
-void rtl8723a_read_adapter_info(struct rtw_adapter *Adapter);
-void rtl8723a_read_chip_version(struct rtw_adapter *padapter);
-void rtl8723a_notch_filter(struct rtw_adapter *adapter, bool enable);
-void rtl8723a_SetBeaconRelatedRegisters(struct rtw_adapter *padapter);
-void rtl8723a_SetHalODMVar(struct rtw_adapter *Adapter,
-                          enum hal_odm_variable eVariable,
-                          void *pValue1, bool bSet);
-void
-rtl8723a_readefuse(struct rtw_adapter *padapter,
-                  u8 efuseType, u16 _offset, u16 _size_byte, u8 *pbuf);
-u16 rtl8723a_EfuseGetCurrentSize_WiFi(struct rtw_adapter *padapter);
-u16 rtl8723a_EfuseGetCurrentSize_BT(struct rtw_adapter *padapter);
-void rtl8723a_update_ramask(struct rtw_adapter *padapter,
-                           u32 mac_id, u8 rssi_level);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_pg.h b/drivers/staging/rtl8723au/include/rtl8723a_pg.h
deleted file mode 100644 (file)
index 5c2ec44..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_PG_H__
-#define __RTL8723A_PG_H__
-
-/*                     EEPROM/Efuse PG Offset for 8723E/8723U/8723S */
-#define EEPROM_CCK_TX_PWR_INX_8723A                    0x10
-#define EEPROM_HT40_1S_TX_PWR_INX_8723A                0x16
-#define EEPROM_HT20_TX_PWR_INX_DIFF_8723A      0x1C
-#define EEPROM_OFDM_TX_PWR_INX_DIFF_8723A      0x1F
-#define EEPROM_HT40_MAX_PWR_OFFSET_8723A       0x22
-#define EEPROM_HT20_MAX_PWR_OFFSET_8723A       0x25
-
-#define EEPROM_ChannelPlan_8723A                       0x28
-#define EEPROM_TSSI_A_8723A                                    0x29
-#define EEPROM_THERMAL_METER_8723A                     0x2A
-#define RF_OPTION1_8723A                                       0x2B
-#define RF_OPTION2_8723A                                       0x2C
-#define RF_OPTION3_8723A                                       0x2D
-#define RF_OPTION4_8723A                                       0x2E
-#define EEPROM_VERSION_8723A                           0x30
-#define EEPROM_CustomID_8723A                          0x31
-#define EEPROM_SubCustomID_8723A                       0x32
-#define EEPROM_XTAL_K_8723A                                    0x33
-#define EEPROM_Chipset_8723A                           0x34
-
-/*  RTL8723AE */
-#define EEPROM_VID_8723AE                                      0x49
-#define EEPROM_DID_8723AE                                      0x4B
-#define EEPROM_SVID_8723AE                                     0x4D
-#define EEPROM_SMID_8723AE                                     0x4F
-#define EEPROM_MAC_ADDR_8723AE                         0x67
-
-/*  RTL8723AU */
-#define EEPROM_MAC_ADDR_8723AU                         0xC6
-#define EEPROM_VID_8723AU                                      0xB7
-#define EEPROM_PID_8723AU                                      0xB9
-
-/*  RTL8723AS */
-#define EEPROM_MAC_ADDR_8723AS                         0xAA
-
-/*                     EEPROM/Efuse Value Type */
-#define EETYPE_TX_PWR                                          0x0
-
-/*                     EEPROM/Efuse Default Value */
-#define EEPROM_Default_CrystalCap_8723A                0x20
-
-
-/*        EEPROM/EFUSE data structure definition. */
-#define        MAX_CHNL_GROUP          3+9
-
-struct txpowerinfo {
-       u8 CCKIndex[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 HT40_1SIndex[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 HT40_2SIndexDiff[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 HT20IndexDiff[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 OFDMIndexDiff[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 HT40MaxOffset[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 HT20MaxOffset[RF_PATH_MAX][MAX_CHNL_GROUP];
-       u8 TSSI_A[3];
-       u8 TSSI_B[3];
-       u8 TSSI_A_5G[3];                /* 5GL/5GM/5GH */
-       u8 TSSI_B_5G[3];
-};
-
-enum bt_ant_num {
-       Ant_x2  = 0,
-       Ant_x1  = 1
-};
-
-enum bt_cotype {
-       BT_2Wire                = 0,
-       BT_ISSC_3Wire           = 1,
-       BT_Accel                = 2,
-       BT_CSR_BC4              = 3,
-       BT_CSR_BC8              = 4,
-       BT_RTL8756              = 5,
-       BT_RTL8723A             = 6
-};
-
-enum bt_radioshared {
-       BT_Radio_Shared         = 0,
-       BT_Radio_Individual     = 1,
-};
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_recv.h b/drivers/staging/rtl8723au/include/rtl8723a_recv.h
deleted file mode 100644 (file)
index 875d37b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_RECV_H__
-#define __RTL8723A_RECV_H__
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define NR_RECVBUFF                    4
-
-#define NR_PREALLOC_RECV_SKB           8
-
-#define RECV_BLK_SZ                    512
-#define RECV_BLK_CNT                   16
-#define RECV_BLK_TH                    RECV_BLK_CNT
-
-#define MAX_RECVBUF_SZ                 15360 /*  15k < 16k */
-
-#define PHY_RSSI_SLID_WIN_MAX          100
-#define PHY_LINKQUALITY_SLID_WIN_MAX   20
-
-
-struct phy_stat {
-       unsigned int phydw0;
-       unsigned int phydw1;
-       unsigned int phydw2;
-       unsigned int phydw3;
-       unsigned int phydw4;
-       unsigned int phydw5;
-       unsigned int phydw6;
-       unsigned int phydw7;
-};
-
-/*  Rx smooth factor */
-#define        Rx_Smooth_Factor                20
-
-struct interrupt_msg_format {
-       unsigned int C2H_MSG0;
-       unsigned int C2H_MSG1;
-       unsigned int C2H_MSG2;
-       unsigned int C2H_MSG3;
-       unsigned int HISR; /*  from HISR Reg0x124, read to clear */
-       unsigned int HISRE;/*  from HISRE Reg0x12c, read to clear */
-       unsigned int  MSG_EX;
-};
-
-int rtl8723au_init_recv_priv(struct rtw_adapter *padapter);
-void rtl8723au_free_recv_priv(struct rtw_adapter *padapter);
-void rtl8723a_process_phy_info(struct rtw_adapter *padapter, void *prframe);
-void update_recvframe_attrib(struct recv_frame *precvframe, struct recv_stat *prxstat);
-void update_recvframe_phyinfo(struct recv_frame *precvframe, struct phy_stat *pphy_info);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_rf.h b/drivers/staging/rtl8723au/include/rtl8723a_rf.h
deleted file mode 100644 (file)
index 0432799..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_RF_H__
-#define __RTL8723A_RF_H__
-
-/*--------------------------Define Parameters-------------------------------*/
-
-/*  */
-/*  For RF 6052 Series */
-/*  */
-#define                RF6052_MAX_TX_PWR                       0x3F
-#define                RF6052_MAX_REG                          0x3F
-#define                RF6052_MAX_PATH                         2
-/*--------------------------Define Parameters-------------------------------*/
-
-
-/*------------------------------Define structure----------------------------*/
-
-/*------------------------------Define structure----------------------------*/
-
-
-/*------------------------Export global variable----------------------------*/
-/*------------------------Export global variable----------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-/*------------------------Export Marco Definition---------------------------*/
-
-
-/*--------------------------Exported Function prototype---------------------*/
-
-/*  */
-/*  RF RL6052 Series API */
-/*  */
-void rtl8723a_phy_rf6052set_bw(struct rtw_adapter *Adapter,
-                              enum ht_channel_width Bandwidth);
-void rtl823a_phy_rf6052setccktxpower(struct rtw_adapter *Adapter,
-                                     u8 *pPowerlevel);
-void rtl8723a_PHY_RF6052SetOFDMTxPower(struct rtw_adapter *Adapter,
-                                      u8 *pPowerLevel, u8 Channel);
-
-/*--------------------------Exported Function prototype---------------------*/
-
-int    PHY_RF6052_Config8723A(struct rtw_adapter *Adapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_spec.h b/drivers/staging/rtl8723au/include/rtl8723a_spec.h
deleted file mode 100644 (file)
index 2f18689..0000000
+++ /dev/null
@@ -1,2148 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *******************************************************************************/
-#ifndef __RTL8723A_SPEC_H__
-#define __RTL8723A_SPEC_H__
-
-/*  */
-/*  */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-/*  */
-/*  */
-#define REG_SYS_ISO_CTRL               0x0000
-#define REG_SYS_FUNC_EN                        0x0002
-#define REG_APS_FSMCO                  0x0004
-#define REG_SYS_CLKR                   0x0008
-#define REG_9346CR                     0x000A
-#define REG_EE_VPD                     0x000C
-#define REG_AFE_MISC                   0x0010
-#define REG_SPS0_CTRL                  0x0011
-#define REG_SPS_OCP_CFG                        0x0018
-#define REG_RSV_CTRL                   0x001C
-#define REG_RF_CTRL                    0x001F
-#define REG_LDOA15_CTRL                        0x0020
-#define REG_LDOV12D_CTRL               0x0021
-#define REG_LDOHCI12_CTRL              0x0022
-#define REG_LPLDO_CTRL                 0x0023
-#define REG_AFE_XTAL_CTRL              0x0024
-#define REG_AFE_PLL_CTRL               0x0028
-#define REG_MAC_PHY_CTRL               0x002c
-#define REG_EFUSE_CTRL                 0x0030
-#define REG_EFUSE_TEST                 0x0034
-#define REG_PWR_DATA                   0x0038
-#define REG_CAL_TIMER                  0x003C
-#define REG_ACLK_MON                   0x003E
-#define REG_GPIO_MUXCFG                        0x0040
-#define REG_GPIO_IO_SEL                        0x0042
-#define REG_MAC_PINMUX_CFG             0x0043
-#define REG_GPIO_PIN_CTRL              0x0044
-#define REG_GPIO_INTM                  0x0048
-#define REG_LEDCFG0                    0x004C
-#define REG_LEDCFG1                    0x004D
-#define REG_LEDCFG2                    0x004E
-#define REG_LEDCFG3                    0x004F
-#define REG_LEDCFG                     REG_LEDCFG2
-#define REG_FSIMR                      0x0050
-#define REG_FSISR                      0x0054
-#define REG_HSIMR                      0x0058
-#define REG_HSISR                      0x005c
- /*  RTL8723 WIFI/BT/GPS Multi-Function GPIO Pin Control. */
-#define REG_GPIO_PIN_CTRL_2            0x0060
- /*  RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. */
-#define REG_GPIO_IO_SEL_2              0x0062
- /*  RTL8723 WIFI/BT/GPS Multi-Function control source. */
-#define REG_MULTI_FUNC_CTRL            0x0068
-#define REG_MCUFWDL                    0x0080
-#define REG_HMEBOX_EXT_0               0x0088
-#define REG_HMEBOX_EXT_1               0x008A
-#define REG_HMEBOX_EXT_2               0x008C
-#define REG_HMEBOX_EXT_3               0x008E
-       /*  Host suspend counter on FPGA platform */
-#define REG_HOST_SUSP_CNT              0x00BC
-       /*  Efuse access protection for RTL8723 */
-#define REG_EFUSE_ACCESS               0x00CF
-#define REG_BIST_SCAN                  0x00D0
-#define REG_BIST_RPT                   0x00D4
-#define REG_BIST_ROM_RPT               0x00D8
-#define REG_USB_SIE_INTF               0x00E0
-#define REG_PCIE_MIO_INTF              0x00E4
-#define REG_PCIE_MIO_INTD              0x00E8
-#define REG_HPON_FSM                   0x00EC
-#define REG_SYS_CFG                    0x00F0
-#define REG_GPIO_OUTSTS                        0x00F4  /*  For RTL8723 only. */
-
-/*  */
-/*  */
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-/*  */
-/*  */
-#define REG_CR                         0x0100
-#define REG_PBP                                0x0104
-#define REG_TRXDMA_CTRL                        0x010C
-#define REG_TRXFF_BNDY                 0x0114
-#define REG_TRXFF_STATUS               0x0118
-#define REG_RXFF_PTR                   0x011C
-#define REG_HIMR                       0x0120
-#define REG_HISR                       0x0124
-#define REG_HIMRE                      0x0128
-#define REG_HISRE                      0x012C
-#define REG_CPWM                       0x012F
-#define REG_FWIMR                      0x0130
-#define REG_FWISR                      0x0134
-#define REG_PKTBUF_DBG_CTRL            0x0140
-#define REG_PKTBUF_DBG_DATA_L          0x0144
-#define REG_PKTBUF_DBG_DATA_H          0x0148
-
-#define REG_TC0_CTRL                   0x0150
-#define REG_TC1_CTRL                   0x0154
-#define REG_TC2_CTRL                   0x0158
-#define REG_TC3_CTRL                   0x015C
-#define REG_TC4_CTRL                   0x0160
-#define REG_TCUNIT_BASE                        0x0164
-#define REG_MBIST_START                        0x0174
-#define REG_MBIST_DONE                 0x0178
-#define REG_MBIST_FAIL                 0x017C
-#define REG_C2HEVT_MSG_NORMAL          0x01A0
-#define REG_C2HEVT_CLEAR               0x01AF
-#define REG_C2HEVT_MSG_TEST            0x01B8
-#define REG_MCUTST_1                   0x01c0
-#define REG_FMETHR                     0x01C8
-#define REG_HMETFR                     0x01CC
-#define REG_HMEBOX_0                   0x01D0
-#define REG_HMEBOX_1                   0x01D4
-#define REG_HMEBOX_2                   0x01D8
-#define REG_HMEBOX_3                   0x01DC
-
-#define REG_LLT_INIT                   0x01E0
-#define REG_BB_ACCEESS_CTRL            0x01E8
-#define REG_BB_ACCESS_DATA             0x01EC
-
-
-/*  */
-/*  */
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-/*  */
-/*  */
-#define REG_RQPN                       0x0200
-#define REG_FIFOPAGE                   0x0204
-#define REG_TDECTRL                    0x0208
-#define REG_TXDMA_OFFSET_CHK           0x020C
-#define REG_TXDMA_STATUS               0x0210
-#define REG_RQPN_NPQ                   0x0214
-
-/*  */
-/*  */
-/*     0x0280h ~ 0x02FFh       RXDMA Configuration */
-/*  */
-/*  */
-#define REG_RXDMA_AGG_PG_TH            0x0280
-#define REG_RXPKT_NUM                  0x0284
-#define REG_RXDMA_STATUS               0x0288
-
-
-/*  */
-/*  */
-/*     0x0300h ~ 0x03FFh       PCIe */
-/*  */
-/*  */
-#define        REG_PCIE_CTRL_REG               0x0300
-#define        REG_INT_MIG                     0x0304  /*  Interrupt Migration */
-       /*  TX Beacon Descriptor Address */
-#define        REG_BCNQ_DESA                   0x0308
-       /*  TX High Queue Descriptor Address */
-#define        REG_HQ_DESA                     0x0310
-       /*  TX Manage Queue Descriptor Address */
-#define        REG_MGQ_DESA                    0x0318
-       /*  TX VO Queue Descriptor Address */
-#define        REG_VOQ_DESA                    0x0320
-       /*  TX VI Queue Descriptor Address */
-#define        REG_VIQ_DESA                    0x0328
-       /*  TX BE Queue Descriptor Address */
-#define        REG_BEQ_DESA                    0x0330
-       /*  TX BK Queue Descriptor Address */
-#define        REG_BKQ_DESA                    0x0338
-       /*  RX Queue    Descriptor Address */
-#define        REG_RX_DESA                     0x0340
-       /*  Backdoor REG for Access Configuration */
-#define        REG_DBI                         0x0348
-       /*  MDIO for Access PCIE PHY */
-#define        REG_MDIO                        0x0354
-       /*  Debug Selection Register */
-#define        REG_DBG_SEL                     0x0360
-       /* PCIe RPWM */
-#define        REG_PCIE_HRPWM                  0x0361
-       /* PCIe CPWM */
-#define        REG_PCIE_HCPWM                  0x0363
-       /*  UART        Control */
-#define        REG_UART_CTRL                   0x0364
-       /*  UART TX Descriptor Address */
-#define        REG_UART_TX_DESA                0x0370
-       /*  UART Rx Descriptor Address */
-#define        REG_UART_RX_DESA                0x0378
-
-
-/*  spec version 11 */
-/*  */
-/*  */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-/*  */
-/*  */
-#define REG_VOQ_INFORMATION            0x0400
-#define REG_VIQ_INFORMATION            0x0404
-#define REG_BEQ_INFORMATION            0x0408
-#define REG_BKQ_INFORMATION            0x040C
-#define REG_MGQ_INFORMATION            0x0410
-#define REG_HGQ_INFORMATION            0x0414
-#define REG_BCNQ_INFORMATION           0x0418
-
-
-#define REG_CPU_MGQ_INFORMATION                0x041C
-#define REG_FWHW_TXQ_CTRL              0x0420
-#define REG_HWSEQ_CTRL                 0x0423
-#define REG_TXPKTBUF_BCNQ_BDNY         0x0424
-#define REG_TXPKTBUF_MGQ_BDNY          0x0425
-#define REG_LIFETIME_EN                        0x0426
-#define REG_MULTI_BCNQ_OFFSET          0x0427
-#define REG_SPEC_SIFS                  0x0428
-#define REG_RL                         0x042A
-#define REG_DARFRC                     0x0430
-#define REG_RARFRC                     0x0438
-#define REG_RRSR                       0x0440
-#define REG_ARFR0                      0x0444
-#define REG_ARFR1                      0x0448
-#define REG_ARFR2                      0x044C
-#define REG_ARFR3                      0x0450
-#define REG_AGGLEN_LMT                 0x0458
-#define REG_AMPDU_MIN_SPACE            0x045C
-#define REG_TXPKTBUF_WMAC_LBK_BF_HD    0x045D
-#define REG_FAST_EDCA_CTRL             0x0460
-#define REG_RD_RESP_PKT_TH             0x0463
-#define REG_INIRTS_RATE_SEL            0x0480
-#define REG_INIDATA_RATE_SEL           0x0484
-
-
-#define REG_POWER_STATUS               0x04A4
-#define REG_POWER_STAGE1               0x04B4
-#define REG_POWER_STAGE2               0x04B8
-#define REG_PKT_VO_VI_LIFE_TIME                0x04C0
-#define REG_PKT_BE_BK_LIFE_TIME                0x04C2
-#define REG_STBC_SETTING               0x04C4
-#define REG_PROT_MODE_CTRL             0x04C8
-#define REG_MAX_AGGR_NUM               0x04CA
-#define REG_RTS_MAX_AGGR_NUM           0x04CB
-#define REG_BAR_MODE_CTRL              0x04CC
-#define REG_RA_TRY_RATE_AGG_LMT                0x04CF
-#define REG_NQOS_SEQ                   0x04DC
-#define REG_QOS_SEQ                    0x04DE
-#define REG_NEED_CPU_HANDLE            0x04E0
-#define REG_PKT_LOSE_RPT               0x04E1
-#define REG_PTCL_ERR_STATUS            0x04E2
-#define REG_DUMMY                      0x04FC
-
-
-
-/*  */
-/*  */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-/*  */
-/*  */
-#define REG_EDCA_VO_PARAM              0x0500
-#define REG_EDCA_VI_PARAM              0x0504
-#define REG_EDCA_BE_PARAM              0x0508
-#define REG_EDCA_BK_PARAM              0x050C
-#define REG_BCNTCFG                    0x0510
-#define REG_PIFS                       0x0512
-#define REG_RDG_PIFS                   0x0513
-#define REG_SIFS_CCK                   0x0514
-#define REG_SIFS_OFDM                  0x0516
-#define REG_SIFS_CTX                   0x0514
-#define REG_SIFS_TRX                   0x0516
-#define REG_TSFTR_SYN_OFFSET           0x0518
-#define REG_AGGR_BREAK_TIME            0x051A
-#define REG_SLOT                       0x051B
-#define REG_TX_PTCL_CTRL               0x0520
-#define REG_TXPAUSE                    0x0522
-#define REG_DIS_TXREQ_CLR              0x0523
-#define REG_RD_CTRL                    0x0524
-#define REG_TBTT_PROHIBIT              0x0540
-#define REG_RD_NAV_NXT                 0x0544
-#define REG_NAV_PROT_LEN               0x0546
-#define REG_BCN_CTRL                   0x0550
-#define REG_BCN_CTRL_1                 0x0551
-#define REG_MBID_NUM                   0x0552
-#define REG_DUAL_TSF_RST               0x0553
-       /*  The same as REG_MBSSID_BCN_SPACE */
-#define REG_BCN_INTERVAL               0x0554
-#define REG_MBSSID_BCN_SPACE           0x0554
-#define REG_DRVERLYINT                 0x0558
-#define REG_BCNDMATIM                  0x0559
-#define REG_ATIMWND                    0x055A
-#define REG_BCN_MAX_ERR                        0x055D
-#define REG_RXTSF_OFFSET_CCK           0x055E
-#define REG_RXTSF_OFFSET_OFDM          0x055F
-#define REG_TSFTR                      0x0560
-#define REG_TSFTR1                     0x0568
-#define REG_INIT_TSFTR                 0x0564
-#define REG_ATIMWND_1                  0x0570
-#define REG_PSTIMER                    0x0580
-#define REG_TIMER0                     0x0584
-#define REG_TIMER1                     0x0588
-#define REG_ACMHWCTRL                  0x05C0
-#define REG_ACMRSTCTRL                 0x05C1
-#define REG_ACMAVG                     0x05C2
-#define REG_VO_ADMTIME                 0x05C4
-#define REG_VI_ADMTIME                 0x05C6
-#define REG_BE_ADMTIME                 0x05C8
-#define REG_EDCA_RANDOM_GEN            0x05CC
-#define REG_SCH_TXCMD                  0x05D0
-
-/* define REG_FW_TSF_SYNC_CNT          0x04A0 */
-#define REG_FW_RESET_TSF_CNT_1         0x05FC
-#define REG_FW_RESET_TSF_CNT_0         0x05FD
-#define REG_FW_BCN_DIS_CNT             0x05FE
-
-/*  */
-/*  */
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/*  */
-/*  */
-#define REG_APSD_CTRL                  0x0600
-#define REG_BWOPMODE                   0x0603
-#define REG_TCR                                0x0604
-#define REG_RCR                                0x0608
-#define REG_RX_PKT_LIMIT               0x060C
-#define REG_RX_DLK_TIME                        0x060D
-#define REG_RX_DRVINFO_SZ              0x060F
-
-#define REG_MACID                      0x0610
-#define REG_BSSID                      0x0618
-#define REG_MAR                                0x0620
-#define REG_MBIDCAMCFG                 0x0628
-
-#define REG_USTIME_EDCA                        0x0638
-#define REG_MAC_SPEC_SIFS              0x063A
-
-/*  20100719 Joseph: Hardware register definition change. (HW datasheet v54) */
-       /*  [15:8]SIFS_R2T_OFDM, [7:0]SIFS_R2T_CCK */
-#define REG_R2T_SIFS                   0x063C
-       /*  [15:8]SIFS_T2T_OFDM, [7:0]SIFS_T2T_CCK */
-#define REG_T2T_SIFS                   0x063E
-#define REG_ACKTO                      0x0640
-#define REG_CTS2TO                     0x0641
-#define REG_EIFS                       0x0642
-
-/* WMA, BA, CCX */
-#define REG_NAV_CTRL                   0x0650
-#define REG_BACAMCMD                   0x0654
-#define REG_BACAMCONTENT               0x0658
-#define REG_LBDLY                      0x0660
-#define REG_FWDLY                      0x0661
-#define REG_RXERR_RPT                  0x0664
-#define REG_WMAC_TRXPTCL_CTL           0x0668
-
-
-/*  Security */
-#define REG_CAMCMD                     0x0670
-#define REG_CAMWRITE                   0x0674
-#define REG_CAMREAD                    0x0678
-#define REG_CAMDBG                     0x067C
-#define REG_SECCFG                     0x0680
-
-/*  Power */
-#define REG_WOW_CTRL                   0x0690
-#define REG_PSSTATUS                   0x0691
-#define REG_PS_RX_INFO                 0x0692
-#define REG_LPNAV_CTRL                 0x0694
-#define REG_WKFMCAM_CMD                        0x0698
-#define REG_WKFMCAM_RWD                        0x069C
-#define REG_RXFLTMAP0                  0x06A0
-#define REG_RXFLTMAP1                  0x06A2
-#define REG_RXFLTMAP2                  0x06A4
-#define REG_BCN_PSR_RPT                        0x06A8
-#define REG_CALB32K_CTRL               0x06AC
-#define REG_PKT_MON_CTRL               0x06B4
-#define REG_BT_COEX_TABLE              0x06C0
-#define REG_WMAC_RESP_TXINFO           0x06D8
-
-#define REG_MACID1                     0x0700
-#define REG_BSSID1                     0x0708
-
-
-/*  */
-/*  */
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-/*  */
-/*  */
-#define REG_USB_INFO                   0xFE17
-#define REG_USB_SPECIAL_OPTION         0xFE55
-#define REG_USB_DMA_AGG_TO             0xFE5B
-#define REG_USB_AGG_TO                 0xFE5C
-#define REG_USB_AGG_TH                 0xFE5D
-
-/*  For test chip */
-#define REG_TEST_USB_TXQS              0xFE48
-#define REG_TEST_SIE_VID               0xFE60          /*  0xFE60~0xFE61 */
-#define REG_TEST_SIE_PID               0xFE62          /*  0xFE62~0xFE63 */
-#define REG_TEST_SIE_OPTIONAL          0xFE64
-#define REG_TEST_SIE_CHIRP_K           0xFE65
-#define REG_TEST_SIE_PHY               0xFE66          /*  0xFE66~0xFE6B */
-#define REG_TEST_SIE_MAC_ADDR          0xFE70          /*  0xFE70~0xFE75 */
-#define REG_TEST_SIE_STRING            0xFE80          /*  0xFE80~0xFEB9 */
-
-
-/*  For normal chip */
-#define REG_NORMAL_SIE_VID             0xFE60          /*  0xFE60~0xFE61 */
-#define REG_NORMAL_SIE_PID             0xFE62          /*  0xFE62~0xFE63 */
-#define REG_NORMAL_SIE_OPTIONAL                0xFE64
-#define REG_NORMAL_SIE_EP              0xFE65          /*  0xFE65~0xFE67 */
-#define REG_NORMAL_SIE_PHY             0xFE68          /*  0xFE68~0xFE6B */
-#define REG_NORMAL_SIE_OPTIONAL2       0xFE6C
-#define REG_NORMAL_SIE_GPS_EP          0xFE6D          /*  RTL8723 only */
-#define REG_NORMAL_SIE_MAC_ADDR                0xFE70          /*  0xFE70~0xFE75 */
-#define REG_NORMAL_SIE_STRING          0xFE80          /*  0xFE80~0xFEDF */
-
-
-/*  */
-/*  */
-/*     Redifine 8192C register definition for compatibility */
-/*  */
-/*  */
-
-/*  TODO: use these definition when using REG_xxx naming rule. */
-/*  NOTE: DO NOT Remove these definition. Use later. */
-
-       /*  System Isolation Interface Control. */
-#define        SYS_ISO_CTRL                    REG_SYS_ISO_CTRL
-       /*  System Function Enable. */
-#define        SYS_FUNC_EN                     REG_SYS_FUNC_EN
-#define        SYS_CLK                         REG_SYS_CLKR
-       /*  93C46/93C56 Command Register. */
-#define        CR9346                          REG_9346CR
-       /*  E-Fuse Control. */
-#define        EFUSE_CTRL                      REG_EFUSE_CTRL
-       /*  E-Fuse Test. */
-#define        EFUSE_TEST                      REG_EFUSE_TEST
-       /*  Media Status register */
-#define        MSR                             (REG_CR + 2)
-#define        ISR                             REG_HISR
-       /*  Timing Sync Function Timer Register. */
-#define        TSFR                            REG_TSFTR
-
-       /*  MAC ID Register, Offset 0x0050-0x0053 */
-#define        MACIDR0                         REG_MACID
-       /*  MAC ID Register, Offset 0x0054-0x0055 */
-#define        MACIDR4                         (REG_MACID + 4)
-
-#define        PBP                             REG_PBP
-
-       /*  Redifine MACID register, to compatible prior ICs. */
-#define        IDR0                            MACIDR0
-#define        IDR4                            MACIDR4
-
-
-/*  */
-/*  9. Security Control Registers      (Offset: ) */
-/*  */
-       /*  Software write CAM input content */
-#define        WCAMI                           REG_CAMWRITE
-       /*  Software read/write CAM config */
-#define        RCAMO                           REG_CAMREAD
-#define        CAMDBG                          REG_CAMDBG
-       /* Security Configuration Register */
-#define        SECR                            REG_SECCFG
-
-/*  Unused register */
-#define        UnusedRegister                  0x1BF
-#define        DCAM                            UnusedRegister
-#define        PSR                             UnusedRegister
-#define        BBAddr                          UnusedRegister
-#define        PhyDataR                        UnusedRegister
-
-#define        InvalidBBRFValue                0x12345678
-
-/*  Min Spacing related settings. */
-#define        MAX_MSS_DENSITY_2T              0x13
-#define        MAX_MSS_DENSITY_1T              0x0A
-
-/*  */
-/* 8192C Cmd9346CR bits                        (Offset 0xA, 16bit) */
-/*  */
-        /*  EEPROM enable when set 1 */
-#define        CmdEEPROM_En                    BIT(5)
-       /*  System EEPROM select, 0: boot from E-FUSE,
-           1: The EEPROM used is 9346 */
-#define        CmdEERPOMSEL                    BIT(4)
-#define        Cmd9346CR_9356SEL               BIT(4)
-#define        AutoLoadEEPROM                  (CmdEEPROM_En|CmdEERPOMSEL)
-#define        AutoLoadEFUSE                   CmdEEPROM_En
-
-/*  */
-/* 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte) */
-/*  */
-#define        GPIOSEL_GPIO                    0
-#define        GPIOSEL_ENBT                    BIT(5)
-
-/*  */
-/*        8192C GPIO PIN Control Register (offset 0x44, 4 byte) */
-/*  */
-       /*  GPIO pins input value */
-#define        GPIO_IN                         REG_GPIO_PIN_CTRL
-       /*  GPIO pins output value */
-#define        GPIO_OUT                        (REG_GPIO_PIN_CTRL+1)
-       /*  GPIO pins output enable when a bit is set to "1";
-           otherwise, input is configured. */
-#define        GPIO_IO_SEL                     (REG_GPIO_PIN_CTRL+2)
-#define        GPIO_MOD                        (REG_GPIO_PIN_CTRL+3)
-
-/*  */
-/* 8192C (MSR) Media Status Register   (Offset 0x4C, 8 bits) */
-/*  */
-/*
-Network Type
-00: No link
-01: Link in ad hoc network
-10: Link in infrastructure network
-11: AP mode
-Default: 00b.
-*/
-#define        MSR_NOLINK                      0x00
-#define        MSR_ADHOC                       0x01
-#define        MSR_INFRA                       0x02
-#define        MSR_AP                          0x03
-
-/*  */
-/*  6. Adaptive Control Registers  (Offset: 0x0160 - 0x01CF) */
-/*  */
-/*  */
-/* 8192C Response Rate Set Register    (offset 0x181, 24bits) */
-/*  */
-#define        RRSR_RSC_OFFSET                 21
-#define        RRSR_SHORT_OFFSET               23
-#define        RRSR_RSC_BW_40M                 0x600000
-#define        RRSR_RSC_UPSUBCHNL              0x400000
-#define        RRSR_RSC_LOWSUBCHNL             0x200000
-#define        RRSR_SHORT                      0x800000
-#define        RRSR_1M                         BIT(0)
-#define        RRSR_2M                         BIT(1)
-#define        RRSR_5_5M                       BIT(2)
-#define        RRSR_11M                        BIT(3)
-#define        RRSR_6M                         BIT(4)
-#define        RRSR_9M                         BIT(5)
-#define        RRSR_12M                        BIT(6)
-#define        RRSR_18M                        BIT(7)
-#define        RRSR_24M                        BIT(8)
-#define        RRSR_36M                        BIT(9)
-#define        RRSR_48M                        BIT(10)
-#define        RRSR_54M                        BIT(11)
-#define        RRSR_MCS0                       BIT(12)
-#define        RRSR_MCS1                       BIT(13)
-#define        RRSR_MCS2                       BIT(14)
-#define        RRSR_MCS3                       BIT(15)
-#define        RRSR_MCS4                       BIT(16)
-#define        RRSR_MCS5                       BIT(17)
-#define        RRSR_MCS6                       BIT(18)
-#define        RRSR_MCS7                       BIT(19)
-#define        BRSR_AckShortPmb                BIT(23)
-/*  CCK ACK: use Short Preamble or not */
-
-/*  */
-/* 8192C BW_OPMODE bits                        (Offset 0x203, 8bit) */
-/*  */
-#define        BW_OPMODE_20MHZ                 BIT(2)
-#define        BW_OPMODE_5G                    BIT(1)
-#define        BW_OPMODE_11J                   BIT(0)
-
-
-/*  */
-/* 8192C CAM Config Setting (offset 0x250, 1 byte) */
-/*  */
-#define        CAM_VALID                       BIT(15)
-#define        CAM_NOTVALID                    0x0000
-#define        CAM_USEDK                       BIT(5)
-
-#define        CAM_CONTENT_COUNT               8
-
-#define        CAM_NONE                        0x0
-#define        CAM_WEP40                       0x01
-#define        CAM_TKIP                        0x02
-#define        CAM_AES                         0x04
-#define        CAM_WEP104                      0x05
-
-#define        TOTAL_CAM_ENTRY                 32
-#define        HALF_CAM_ENTRY                  16
-
-#define        CAM_CONFIG_USEDK                true
-#define        CAM_CONFIG_NO_USEDK             false
-
-#define        CAM_WRITE                       BIT(16)
-#define        CAM_READ                        0x00000000
-#define        CAM_POLLINIG                    BIT(31)
-
-#define        SCR_UseDK                       0x01
-#define        SCR_TxSecEnable                 0x02
-#define        SCR_RxSecEnable                 0x04
-
-
-/*  */
-/*  12. Host Interrupt Status Registers         (Offset: 0x0300 - 0x030F) */
-/*  */
-/*  */
-/* 8190 IMR/ISR bits                   (offset 0xfd,  8bits) */
-/*  */
-#define        IMR8190_DISABLED                0x0
-/*  IMR DW0 Bit 0-31 */
-
-#define        IMR_BCNDMAINT6                  BIT(31) /*  Beacon DMA Interrupt 6 */
-#define        IMR_BCNDMAINT5                  BIT(30) /*  Beacon DMA Interrupt 5 */
-#define        IMR_BCNDMAINT4                  BIT(29) /*  Beacon DMA Interrupt 4 */
-#define        IMR_BCNDMAINT3                  BIT(28) /*  Beacon DMA Interrupt 3 */
-#define        IMR_BCNDMAINT2                  BIT(27) /*  Beacon DMA Interrupt 2 */
-#define        IMR_BCNDMAINT1                  BIT(26) /*  Beacon DMA Interrupt 1 */
-#define        IMR_BCNDOK8                     BIT(25) /*  Beacon Queue DMA OK
-                                                   Interrupt 8 */
-#define        IMR_BCNDOK7                     BIT(24) /*  Beacon Queue DMA OK
-                                                   Interrupt 7 */
-#define        IMR_BCNDOK6                     BIT(23) /*  Beacon Queue DMA OK
-                                                   Interrupt 6 */
-#define        IMR_BCNDOK5                     BIT(22) /*  Beacon Queue DMA OK
-                                                   Interrupt 5 */
-#define        IMR_BCNDOK4                     BIT(21) /*  Beacon Queue DMA OK
-                                                   Interrupt 4 */
-#define        IMR_BCNDOK3                     BIT(20) /*  Beacon Queue DMA OK
-                                                   Interrupt 3 */
-#define        IMR_BCNDOK2                     BIT(19) /*  Beacon Queue DMA OK
-                                                   Interrupt 2 */
-#define        IMR_BCNDOK1                     BIT(18) /*  Beacon Queue DMA OK
-                                                   Interrupt 1 */
-#define        IMR_TIMEOUT2                    BIT(17) /*  Timeout interrupt 2 */
-#define        IMR_TIMEOUT1                    BIT(16) /*  Timeout interrupt 1 */
-#define        IMR_TXFOVW                      BIT(15) /*  Transmit FIFO Overflow */
-#define        IMR_PSTIMEOUT                   BIT(14) /*  Power save time out
-                                                   interrupt */
-#define        IMR_BcnInt                      BIT(13) /*  Beacon DMA Interrupt 0 */
-#define        IMR_RXFOVW                      BIT(12) /*  Receive FIFO Overflow */
-#define        IMR_RDU                         BIT(11) /*  Receive Descriptor
-                                                   Unavailable */
-#define        IMR_ATIMEND                     BIT(10) /*  For 92C,ATIM Window
-                                                   End Interrupt */
-#define        IMR_BDOK                        BIT(9)  /*  Beacon Queue DMA OK
-                                                   Interrup */
-#define        IMR_HIGHDOK                     BIT(8)  /*  High Queue DMA OK
-                                                   Interrupt */
-#define        IMR_TBDOK                       BIT(7)  /*  Transmit Beacon OK
-                                                   interrup */
-#define        IMR_MGNTDOK                     BIT(6)  /*  Management Queue DMA OK
-                                                   Interrupt */
-#define        IMR_TBDER                       BIT(5)  /*  For 92C,Transmit Beacon
-                                                   Error Interrupt */
-#define        IMR_BKDOK                       BIT(4)  /*  AC_BK DMA OK Interrupt */
-#define        IMR_BEDOK                       BIT(3)  /*  AC_BE DMA OK Interrupt */
-#define        IMR_VIDOK                       BIT(2)  /*  AC_VI DMA OK Interrupt */
-#define        IMR_VODOK                       BIT(1)  /*  AC_VO DMA Interrupt */
-#define        IMR_ROK                         BIT(0)  /*  Receive DMA OK Interrupt */
-
-#define        IMR_RX_MASK                     (IMR_ROK|IMR_RDU|IMR_RXFOVW)
-#define        IMR_TX_MASK                     (IMR_VODOK|IMR_VIDOK|IMR_BEDOK| \
-                                        IMR_BKDOK|IMR_MGNTDOK|IMR_HIGHDOK| \
-                                        IMR_BDOK)
-
-/*  13. Host Interrupt Status Extension Register (Offset: 0x012C-012Eh) */
-#define        IMR_BcnInt_E                    BIT(12)
-#define        IMR_TXERR                       BIT(11)
-#define        IMR_RXERR                       BIT(10)
-#define        IMR_C2HCMD                      BIT(9)
-#define        IMR_CPWM                        BIT(8)
-/* RSVD [2-7] */
-#define        IMR_OCPINT                      BIT(1)
-#define        IMR_WLANOFF                     BIT(0)
-
-
-/*        8192C EEPROM/EFUSE share register definition. */
-
-/*  Default Value for EEPROM or EFUSE!!! */
-#define EEPROM_Default_TSSI                    0x0
-#define EEPROM_Default_TxPowerDiff             0x0
-#define EEPROM_Default_CrystalCap              0x5
- /*  Default: 2X2, RTL8192CE(QFPN68) */
-#define EEPROM_Default_BoardType               0x02
-#define EEPROM_Default_TxPower                 0x1010
-#define EEPROM_Default_HT2T_TxPwr              0x10
-
-#define EEPROM_Default_LegacyHTTxPowerDiff     0x3
-#define EEPROM_Default_ThermalMeter            0x12
-
-#define EEPROM_Default_AntTxPowerDiff          0x0
-#define EEPROM_Default_TxPwDiff_CrystalCap     0x5
-#define EEPROM_Default_TxPowerLevel            0x22
-#define EEPROM_Default_HT40_2SDiff             0x0
-       /*  HT20<->40 default Tx Power Index Difference */
-#define EEPROM_Default_HT20_Diff               2
-#define EEPROM_Default_LegacyHTTxPowerDiff     0x3
-#define EEPROM_Default_HT40_PwrMaxOffset       0
-#define EEPROM_Default_HT20_PwrMaxOffset       0
-
-/*  For debug */
-#define EEPROM_Default_PID                     0x1234
-#define EEPROM_Default_VID                     0x5678
-#define EEPROM_Default_CustomerID              0xAB
-#define EEPROM_Default_SubCustomerID           0xCD
-#define EEPROM_Default_Version                 0
-
-#define EEPROM_CHANNEL_PLAN_FCC                        0x0
-#define EEPROM_CHANNEL_PLAN_IC                 0x1
-#define EEPROM_CHANNEL_PLAN_ETSI               0x2
-#define EEPROM_CHANNEL_PLAN_SPAIN              0x3
-#define EEPROM_CHANNEL_PLAN_FRANCE             0x4
-#define EEPROM_CHANNEL_PLAN_MKK                        0x5
-#define EEPROM_CHANNEL_PLAN_MKK1               0x6
-#define EEPROM_CHANNEL_PLAN_ISRAEL             0x7
-#define EEPROM_CHANNEL_PLAN_TELEC              0x8
-#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN      0x9
-#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13      0xA
-#define EEPROM_CHANNEL_PLAN_NCC                        0xB
-#define EEPROM_USB_OPTIONAL1                   0xE
-#define EEPROM_CHANNEL_PLAN_BY_HW_MASK         0x80
-
-
-#define EEPROM_CID_DEFAULT                     0x0
-#define EEPROM_CID_TOSHIBA                     0x4
- /*  CCX test. By Bruce, 2009-02-25. */
-#define EEPROM_CID_CCX                         0x10
-#define EEPROM_CID_QMI                         0x0D
- /*  added by chiyoko for dtm, 20090108 */
-#define EEPROM_CID_WHQL                                0xFE
-
-
-#define        RTL_EEPROM_ID                           0x8129
-
-#define        SUPPORT_HW_RADIO_DETECT(pHalData)               \
-       (pHalData->BoardType == BOARD_MINICARD ||       \
-       pHalData->BoardType == BOARD_USB_SOLO ||        \
-       pHalData->BoardType == BOARD_USB_COMBO)
-
-/*  */
-/*  EEPROM address for Test chip */
-/*  */
-#define EEPROM_TEST_USB_OPT            0x0E
-#define EEPROM_TEST_CHIRP_K            0x0F
-#define EEPROM_TEST_EP_SETTING         0x0E
-#define EEPROM_TEST_USB_PHY            0x10
-
-
-/*  */
-/*  EEPROM address for Normal chip */
-/*  */
-#define EEPROM_NORMAL_USB_OPT          0x0E
-#define EEPROM_NORMAL_CHIRP_K          0x0E    /*  Changed */
-#define EEPROM_NORMAL_EP_SETTING       0x0F    /*  Changed */
-#define EEPROM_NORMAL_USB_PHY          0x12    /*  Changed */
-
-enum {
-       BOARD_USB_DONGLE = 0,   /*  USB dongle */
-       BOARD_USB_High_PA = 1,  /*  USB dongle with high power PA */
-       BOARD_MINICARD = 2,     /*  Minicard */
-       BOARD_USB_SOLO = 3,     /*  USB solo-Slim module */
-       BOARD_USB_COMBO = 4,    /*  USB Combo-Slim module */
-};
-
-/*  Test chip and normal chip common define */
-/*  */
-/*  EEPROM address for both */
-/*  */
-#define EEPROM_ID0                     0x00
-#define EEPROM_ID1                     0x01
-#define EEPROM_RTK_RSV1                        0x02
-#define EEPROM_RTK_RSV2                        0x03
-#define EEPROM_RTK_RSV3                        0x04
-#define EEPROM_RTK_RSV4                        0x05
-#define EEPROM_RTK_RSV5                        0x06
-#define EEPROM_DBG_SEL                 0x07
-#define EEPROM_RTK_RSV6                        0x08
-#define EEPROM_VID                     0x0A
-#define EEPROM_PID                     0x0C
-
-#define EEPROM_MAC_ADDR                        0x16
-#define EEPROM_STRING                  0x1C
-#define EEPROM_SUBCUSTOMER_ID          0x59
-#define EEPROM_CCK_TX_PWR_INX          0x5A
-#define EEPROM_HT40_1S_TX_PWR_INX      0x60
-#define EEPROM_HT40_2S_TX_PWR_INX_DIFF 0x66
-#define EEPROM_HT20_TX_PWR_INX_DIFF    0x69
-#define EEPROM_OFDM_TX_PWR_INX_DIFF    0x6C
-#define EEPROM_HT40_MAX_PWR_OFFSET     0x6F
-#define EEPROM_HT20_MAX_PWR_OFFSET     0x72
-
-#define EEPROM_CHANNEL_PLAN            0x75
-#define EEPROM_TSSI_A                  0x76
-#define EEPROM_TSSI_B                  0x77
-#define EEPROM_THERMAL_METER           0x78
-#define EEPROM_RF_OPT1                 0x79
-#define EEPROM_RF_OPT2                 0x7A
-#define EEPROM_RF_OPT3                 0x7B
-#define EEPROM_RF_OPT4                 0x7C
-#define EEPROM_VERSION                 0x7E
-#define EEPROM_CUSTOMER_ID             0x7F
-
-        /* 0x0: RTL8188SU, 0x1: RTL8191SU, 0x2: RTL8192SU, 0x3: RTL8191GU */
-#define EEPROM_BoardType               0x54
-       /* 0x5C-0x76, Tx Power index. */
-#define EEPROM_TxPwIndex               0x5C
-       /*  Difference of gain index between legacy and high throughput OFDM. */
-#define EEPROM_PwDiff                  0x67
-       /*  CCK Tx Power */
-#define EEPROM_TxPowerCCK              0x5A
-
-/*  2009/02/09 Cosa Add for SD3 requirement */
-       /*  HT20 Tx Power Index Difference */
-#define EEPROM_TX_PWR_HT20_DIFF                0x6e
-       /*  HT20<->40 default Tx Power Index Difference */
-#define DEFAULT_HT20_TXPWR_DIFF                2
-       /*  OFDM Tx Power Index Difference */
-#define EEPROM_TX_PWR_OFDM_DIFF                0x71
-
-       /*  Power diff for channel group */
-#define EEPROM_TxPWRGroup              0x73
-       /*  Check if power safety is need */
-#define EEPROM_Regulatory              0x79
-
-       /*  92cu, 0x7E[4] */
-#define EEPROM_BLUETOOTH_COEXIST       0x7E
-#define EEPROM_NORMAL_BoardType                EEPROM_RF_OPT1  /* 7:5] */
-#define BOARD_TYPE_NORMAL_MASK         0xE0
-#define BOARD_TYPE_TEST_MASK           0x0F
-       /* BIT0 1 for build-in module, 0 for external dongle */
-#define EEPROM_EASY_REPLACEMENT                0x50
-/*  */
-/* EPROM content definitions */
-/*  */
-#define OS_LINK_SPEED                  BIT(5)
-
-#define BOARD_TYPE_MASK                        0xF
-
-#define BT_COEXISTENCE                 BIT(4)
-#define BT_CO_SHIFT                    4
-
-#define EP_NUMBER_MASK                 0x30    /* bit 4:5 0Eh */
-#define EP_NUMBER_SHIFT                        4
-
-
-#define USB_PHY_PARA_SIZE              5
-
-
-/*  */
-/*     \14EEPROM default value definitions */
-/*  */
-/*  Use 0xABCD instead of 0x8192 for debug */
-#define EEPROM_DEF_ID_0                        0xCD    /*  Byte 0x00 */
-#define EEPROM_DEF_ID_1                        0xAB    /*  Byte 0x01 */
-
-#define EEPROM_DEF_RTK_RSV_A3          0x74    /*  Byte 0x03 */
-#define EEPROM_DEF_RTK_RSV_A4          0x6D    /*  Byte 0x04 */
-#define EEPROM_DEF_RTK_RSV_A8          0xFF    /*  Byte 0x08 */
-
-#define EEPROM_DEF_VID_0               0x0A    /*  Byte 0x0A */
-#define EEPROM_DEF_VID_1               0x0B
-
-#define EEPROM_DEF_PID_0               0x92    /*  Byte 0x0C */
-#define EEPROM_DEF_PID_1               0x81
-
-
-#define EEPROM_TEST_DEF_USB_OPT                0x80    /*  Byte 0x0E */
-#define EEPROM_NORMAL_DEF_USB_OPT      0x00    /*  Byte 0x0E */
-
-#define EEPROM_DEF_CHIRPK              0x15    /*  Byte 0x0F */
-
-#define EEPROM_DEF_USB_PHY_0           0x85    /*  Byte 0x10 */
-#define EEPROM_DEF_USB_PHY_1           0x62    /*  Byte 0x11 */
-#define EEPROM_DEF_USB_PHY_2           0x9E    /*  Byte 0x12 */
-#define EEPROM_DEF_USB_PHY_3           0x06    /*  Byte 0x13 */
-
-#define EEPROM_DEF_TSSI_A              0x09    /*  Byte 0x78 */
-#define EEPROM_DEF_TSSI_B              0x09    /*  Byte 0x79 */
-
-
-#define EEPROM_DEF_THERMAL_METER       0x12    /*  Byte 0x7A */
-
-       /*  Check if power safety spec is need */
-#define RF_OPTION1                     0x79
-#define RF_OPTION2                     0x7A
-#define RF_OPTION3                     0x7B
-#define RF_OPTION4                     0x7C
-
-
-#define        EEPROM_USB_SN                   BIT(0)
-#define        EEPROM_USB_REMOTE_WAKEUP        BIT(1)
-#define        EEPROM_USB_DEVICE_PWR           BIT(2)
-#define        EEPROM_EP_NUMBER                (BIT(3)|BIT(4))
-
-/*===================================================================
-=====================================================================
-Here the register defines are for 92C. When the define is as same with 92C,
-we will use the 92C's define for the consistency
-So the following defines for 92C is not entire!!!!!!
-=====================================================================
-=====================================================================*/
-/*
-Based on Datasheet V33---090401
-Register Summary
-Current IOREG MAP
-0x0000h ~ 0x00FFh   System Configuration (256 Bytes)
-0x0100h ~ 0x01FFh   MACTOP General Configuration (256 Bytes)
-0x0200h ~ 0x027Fh   TXDMA Configuration (128 Bytes)
-0x0280h ~ 0x02FFh   RXDMA Configuration (128 Bytes)
-0x0300h ~ 0x03FFh   PCIE EMAC Reserved Region (256 Bytes)
-0x0400h ~ 0x04FFh   Protocol Configuration (256 Bytes)
-0x0500h ~ 0x05FFh   EDCA Configuration (256 Bytes)
-0x0600h ~ 0x07FFh   WMAC Configuration (512 Bytes)
-0x2000h ~ 0x3FFFh   8051 FW Download Region (8196 Bytes)
-*/
-
-/*  */
-/* 8192C (RCR) Receive Configuration Register  (Offset 0x608, 32 bits) */
-/*  */
-#define        RCR_APPFCS                      BIT(31) /* WMAC append FCS after payload*/
-#define        RCR_APP_MIC                     BIT(30)
-#define        RCR_APP_PHYSTS                  BIT(28)
-#define        RCR_APP_ICV                     BIT(29)
-#define        RCR_APP_PHYST_RXFF              BIT(28)
-#define        RCR_APP_BA_SSN                  BIT(27) /* Accept BA SSN */
-#define        RCR_ENMBID                      BIT(24) /* Enable Multiple BssId. */
-#define        RCR_LSIGEN                      BIT(23)
-#define        RCR_MFBEN                       BIT(22)
-#define        RCR_HTC_LOC_CTRL                BIT(14) /* MFC<--HTC=1 MFC-->HTC=0 */
-#define        RCR_AMF                         BIT(13) /* Accept management type frame */
-#define        RCR_ACF                         BIT(12) /* Accept control type frame */
-#define        RCR_ADF                         BIT(11) /* Accept data type frame */
-#define        RCR_AICV                        BIT(9)  /* Accept ICV error packet */
-#define        RCR_ACRC32                      BIT(8)  /* Accept CRC32 error packet */
-#define        RCR_CBSSID_BCN                  BIT(7)  /* Accept BSSID match packet
-                                                (Rx beacon, probe rsp) */
-#define        RCR_CBSSID_DATA                 BIT(6)  /* Accept BSSID match packet
-                                                (Data) */
-#define        RCR_CBSSID                      RCR_CBSSID_DATA /* Accept BSSID match
-                                                          packet */
-#define        RCR_APWRMGT                     BIT(5)  /* Accept power management
-                                                packet */
-#define        RCR_ADD3                        BIT(4)  /* Accept address 3 match
-                                                packet */
-#define        RCR_AB                          BIT(3)  /* Accept broadcast packet */
-#define        RCR_AM                          BIT(2)  /* Accept multicast packet */
-#define        RCR_APM                         BIT(1)  /* Accept physical match packet */
-#define        RCR_AAP                         BIT(0)  /* Accept all unicast packet */
-#define        RCR_MXDMA_OFFSET                8
-#define        RCR_FIFO_OFFSET                 13
-
-
-
-/*  */
-/* 8192c USB specific Regsiter Offset and Content definition, */
-/* 2009.08.18, added by vivi. for merge 92c and 92C into one driver */
-/*  */
-/* define APS_FSMCO                    0x0004  same with 92Ce */
-#define RSV_CTRL                       0x001C
-#define RD_CTRL                                0x0524
-
-/*  */
-/*  */
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-/*  */
-/*  */
-#define REG_USB_INFO                   0xFE17
-#define REG_USB_SPECIAL_OPTION         0xFE55
-#define REG_USB_DMA_AGG_TO             0xFE5B
-#define REG_USB_AGG_TO                 0xFE5C
-#define REG_USB_AGG_TH                 0xFE5D
-
-#define REG_USB_VID                    0xFE60
-#define REG_USB_PID                    0xFE62
-#define REG_USB_OPTIONAL               0xFE64
-#define REG_USB_CHIRP_K                        0xFE65
-#define REG_USB_PHY                    0xFE66
-#define REG_USB_MAC_ADDR               0xFE70
-
-#define REG_USB_HRPWM                  0xFE58
-#define REG_USB_HCPWM                  0xFE57
-
-#define        InvalidBBRFValue                0x12345678
-
-/*  */
-/*        8192C Regsiter Bit and Content definition */
-/*  */
-/*  */
-/*  */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-/*  */
-/*  */
-
-/* 2 SPS0_CTRL */
-#define SW18_FPWM                      BIT(3)
-
-
-/* 2 SYS_ISO_CTRL */
-#define ISO_MD2PP                      BIT(0)
-#define ISO_UA2USB                     BIT(1)
-#define ISO_UD2CORE                    BIT(2)
-#define ISO_PA2PCIE                    BIT(3)
-#define ISO_PD2CORE                    BIT(4)
-#define ISO_IP2MAC                     BIT(5)
-#define ISO_DIOP                       BIT(6)
-#define ISO_DIOE                       BIT(7)
-#define ISO_EB2CORE                    BIT(8)
-#define ISO_DIOR                       BIT(9)
-
-#define PWC_EV25V                      BIT(14)
-#define PWC_EV12V                      BIT(15)
-
-
-/* 2 SYS_FUNC_EN */
-#define FEN_BBRSTB                     BIT(0)
-#define FEN_BB_GLB_RSTn                        BIT(1)
-#define FEN_USBA                       BIT(2)
-#define FEN_UPLL                       BIT(3)
-#define FEN_USBD                       BIT(4)
-#define FEN_DIO_PCIE                   BIT(5)
-#define FEN_PCIEA                      BIT(6)
-#define FEN_PPLL                       BIT(7)
-#define FEN_PCIED                      BIT(8)
-#define FEN_DIOE                       BIT(9)
-#define FEN_CPUEN                      BIT(10)
-#define FEN_DCORE                      BIT(11)
-#define FEN_ELDR                       BIT(12)
-#define FEN_DIO_RF                     BIT(13)
-#define FEN_HWPDN                      BIT(14)
-#define FEN_MREGEN                     BIT(15)
-
-/* 2 APS_FSMCO */
-#define PFM_LDALL                      BIT(0)
-#define PFM_ALDN                       BIT(1)
-#define PFM_LDKP                       BIT(2)
-#define PFM_WOWL                       BIT(3)
-#define EnPDN                          BIT(4)
-#define PDN_PL                         BIT(5)
-#define APFM_ONMAC                     BIT(8)
-#define APFM_OFF                       BIT(9)
-#define APFM_RSM                       BIT(10)
-#define AFSM_HSUS                      BIT(11)
-#define AFSM_PCIE                      BIT(12)
-#define APDM_MAC                       BIT(13)
-#define APDM_HOST                      BIT(14)
-#define APDM_HPDN                      BIT(15)
-#define RDY_MACON                      BIT(16)
-#define SUS_HOST                       BIT(17)
-#define ROP_ALD                                BIT(20)
-#define ROP_PWR                                BIT(21)
-#define ROP_SPS                                BIT(22)
-#define SOP_MRST                       BIT(25)
-#define SOP_FUSE                       BIT(26)
-#define SOP_ABG                                BIT(27)
-#define SOP_AMB                                BIT(28)
-#define SOP_RCK                                BIT(29)
-#define SOP_A8M                                BIT(30)
-#define XOP_BTCK                       BIT(31)
-
-/* 2 SYS_CLKR */
-#define ANAD16V_EN                     BIT(0)
-#define ANA8M                          BIT(1)
-#define MACSLP                         BIT(4)
-#define LOADER_CLK_EN                  BIT(5)
-#define _80M_SSC_DIS                   BIT(7)
-#define _80M_SSC_EN_HO                 BIT(8)
-#define PHY_SSC_RSTB                   BIT(9)
-#define SEC_CLK_EN                     BIT(10)
-#define MAC_CLK_EN                     BIT(11)
-#define SYS_CLK_EN                     BIT(12)
-#define RING_CLK_EN                    BIT(13)
-
-
-/* 2 9346CR */
-
-
-#define                EEDO                    BIT(0)
-#define                EEDI                    BIT(1)
-#define                EESK                    BIT(2)
-#define                EECS                    BIT(3)
-/* define      EERPROMSEL              BIT(4) */
-/* define      EEPROM_EN               BIT(5) */
-#define                BOOT_FROM_EEPROM        BIT(4)
-#define                EEPROM_EN               BIT(5)
-#define                EEM0                    BIT(6)
-#define                EEM1                    BIT(7)
-
-
-/* 2 AFE_MISC */
-#define AFE_BGEN                       BIT(0)
-#define AFE_MBEN                       BIT(1)
-#define MAC_ID_EN                      BIT(7)
-
-
-/* 2 SPS0_CTRL */
-
-
-/* 2 SPS_OCP_CFG */
-
-
-/* 2 RSV_CTRL */
-#define WLOCK_ALL                      BIT(0)
-#define WLOCK_00                       BIT(1)
-#define WLOCK_04                       BIT(2)
-#define WLOCK_08                       BIT(3)
-#define WLOCK_40                       BIT(4)
-#define R_DIS_PRST_0                   BIT(5)
-#define R_DIS_PRST_1                   BIT(6)
-#define LOCK_ALL_EN                    BIT(7)
-
-/* 2 RF_CTRL */
-#define RF_EN                          BIT(0)
-#define RF_RSTB                                BIT(1)
-#define RF_SDMRSTB                     BIT(2)
-
-
-
-/* 2 LDOA15_CTRL */
-#define LDA15_EN                       BIT(0)
-#define LDA15_STBY                     BIT(1)
-#define LDA15_OBUF                     BIT(2)
-#define LDA15_REG_VOS                  BIT(3)
-#define _LDA15_VOADJ(x)                        (((x) & 0x7) << 4)
-
-
-
-/* 2 LDOV12D_CTRL */
-#define LDV12_EN                       BIT(0)
-#define LDV12_SDBY                     BIT(1)
-#define LPLDO_HSM                      BIT(2)
-#define LPLDO_LSM_DIS                  BIT(3)
-#define _LDV12_VADJ(x)                 (((x) & 0xF) << 4)
-
-
-/* 2 AFE_XTAL_CTRL */
-#define XTAL_EN                                BIT(0)
-#define XTAL_BSEL                      BIT(1)
-#define _XTAL_BOSC(x)                  (((x) & 0x3) << 2)
-#define _XTAL_CADJ(x)                  (((x) & 0xF) << 4)
-#define XTAL_GATE_USB                  BIT(8)
-#define _XTAL_USB_DRV(x)               (((x) & 0x3) << 9)
-#define XTAL_GATE_AFE                  BIT(11)
-#define _XTAL_AFE_DRV(x)               (((x) & 0x3) << 12)
-#define XTAL_RF_GATE                   BIT(14)
-#define _XTAL_RF_DRV(x)                        (((x) & 0x3) << 15)
-#define XTAL_GATE_DIG                  BIT(17)
-#define _XTAL_DIG_DRV(x)               (((x) & 0x3) << 18)
-#define XTAL_BT_GATE                   BIT(20)
-#define _XTAL_BT_DRV(x)                        (((x) & 0x3) << 21)
-#define _XTAL_GPIO(x)                  (((x) & 0x7) << 23)
-
-
-#define CKDLY_AFE                      BIT(26)
-#define CKDLY_USB                      BIT(27)
-#define CKDLY_DIG                      BIT(28)
-#define CKDLY_BT                       BIT(29)
-
-
-/* 2 AFE_PLL_CTRL */
-#define APLL_EN                                BIT(0)
-#define APLL_320_EN                    BIT(1)
-#define APLL_FREF_SEL                  BIT(2)
-#define APLL_EDGE_SEL                  BIT(3)
-#define APLL_WDOGB                     BIT(4)
-#define APLL_LPFEN                     BIT(5)
-
-#define APLL_REF_CLK_13MHZ             0x1
-#define APLL_REF_CLK_19_2MHZ           0x2
-#define APLL_REF_CLK_20MHZ             0x3
-#define APLL_REF_CLK_25MHZ             0x4
-#define APLL_REF_CLK_26MHZ             0x5
-#define APLL_REF_CLK_38_4MHZ           0x6
-#define APLL_REF_CLK_40MHZ             0x7
-
-#define APLL_320EN                     BIT(14)
-#define APLL_80EN                      BIT(15)
-#define APLL_1MEN                      BIT(24)
-
-
-/* 2 EFUSE_CTRL */
-#define ALD_EN                         BIT(18)
-#define EF_PD                          BIT(19)
-#define EF_FLAG                                BIT(31)
-
-/* 2 EFUSE_TEST (For RTL8723 partially) */
-#define EF_TRPT                                BIT(7)
-       /*  00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 */
-#define EF_CELL_SEL                    (BIT(8)|BIT(9))
-#define LDOE25_EN                      BIT(31)
-#define EFUSE_SEL(x)                   (((x) & 0x3) << 8)
-#define EFUSE_SEL_MASK                 0x300
-#define EFUSE_WIFI_SEL_0               0x0
-#define EFUSE_BT_SEL_0                 0x1
-#define EFUSE_BT_SEL_1                 0x2
-#define EFUSE_BT_SEL_2                 0x3
-
-#define EFUSE_ACCESS_ON                        0x69    /*  For RTL8723 only. */
-#define EFUSE_ACCESS_OFF               0x00    /*  For RTL8723 only. */
-
-/* 2 PWR_DATA */
-
-/* 2 CAL_TIMER */
-
-/* 2 ACLK_MON */
-#define RSM_EN                         BIT(0)
-#define Timer_EN                       BIT(4)
-
-
-/* 2 GPIO_MUXCFG */
-#define TRSW0EN                                BIT(2)
-#define TRSW1EN                                BIT(3)
-#define EROM_EN                                BIT(4)
-#define EnBT                           BIT(5)
-#define EnUart                         BIT(8)
-#define Uart_910                       BIT(9)
-#define EnPMAC                         BIT(10)
-#define SIC_SWRST                      BIT(11)
-#define EnSIC                          BIT(12)
-#define SIC_23                         BIT(13)
-#define EnHDP                          BIT(14)
-#define SIC_LBK                                BIT(15)
-
-/* 2 GPIO_PIN_CTRL */
-
-/*  GPIO BIT */
-#define HAL_8192C_HW_GPIO_WPS_BIT      BIT(2)
-
-/* 2 GPIO_INTM */
-
-/* 2 LEDCFG */
-#define LED0PL                         BIT(4)
-#define LED0DIS                                BIT(7)
-#define LED1DIS                                BIT(15)
-#define LED1PL                         BIT(12)
-
-#define  SECCAM_CLR                    BIT(30)
-
-
-/* 2 FSIMR */
-
-/* 2 FSISR */
-
-
-/* 2 8051FWDL */
-/* 2 MCUFWDL */
-#define MCUFWDL_EN                     BIT(0)
-#define MCUFWDL_RDY                    BIT(1)
-#define FWDL_ChkSum_rpt                        BIT(2)
-#define MACINI_RDY                     BIT(3)
-#define BBINI_RDY                      BIT(4)
-#define RFINI_RDY                      BIT(5)
-#define WINTINI_RDY                    BIT(6)
-#define CPRST                          BIT(23)
-
-/* 2REG_HPON_FSM */
-#define BOND92CE_1T2R_CFG              BIT(22)
-
-
-/* 2 REG_SYS_CFG */
-#define XCLK_VLD                       BIT(0)
-#define ACLK_VLD                       BIT(1)
-#define UCLK_VLD                       BIT(2)
-#define PCLK_VLD                       BIT(3)
-#define PCIRSTB                                BIT(4)
-#define V15_VLD                                BIT(5)
-#define TRP_B15V_EN                    BIT(7)
-#define SIC_IDLE                       BIT(8)
-#define BD_MAC2                                BIT(9)
-#define BD_MAC1                                BIT(10)
-#define IC_MACPHY_MODE                 BIT(11)
-#define CHIP_VER                       (BIT(12)|BIT(13)|BIT(14)|BIT(15))
-#define BT_FUNC                                BIT(16)
-#define VENDOR_ID                      BIT(19)
-#define PAD_HWPD_IDN                   BIT(22)
-#define TRP_VAUX_EN                    BIT(23)
-#define TRP_BT_EN                      BIT(24)
-#define BD_PKG_SEL                     BIT(25)
-#define BD_HCI_SEL                     BIT(26)
-#define TYPE_ID                                BIT(27)
-
-#define CHIP_VER_RTL_MASK              0xF000  /* Bit 12 ~ 15 */
-#define CHIP_VER_RTL_SHIFT             12
-
-/* 2REG_GPIO_OUTSTS (For RTL8723 only) */
-#define        EFS_HCI_SEL                     (BIT(0)|BIT(1))
-#define        PAD_HCI_SEL                     (BIT(2)|BIT(3))
-#define        HCI_SEL                         (BIT(4)|BIT(5))
-#define        PKG_SEL_HCI                     BIT(6)
-#define        FEN_GPS                         BIT(7)
-#define        FEN_BT                          BIT(8)
-#define        FEN_WL                          BIT(9)
-#define        FEN_PCI                         BIT(10)
-#define        FEN_USB                         BIT(11)
-#define        BTRF_HWPDN_N                    BIT(12)
-#define        WLRF_HWPDN_N                    BIT(13)
-#define        PDN_BT_N                        BIT(14)
-#define        PDN_GPS_N                       BIT(15)
-#define        BT_CTL_HWPDN                    BIT(16)
-#define        GPS_CTL_HWPDN                   BIT(17)
-#define        PPHY_SUSB                       BIT(20)
-#define        UPHY_SUSB                       BIT(21)
-#define        PCI_SUSEN                       BIT(22)
-#define        USB_SUSEN                       BIT(23)
-#define        RF_RL_ID                        (BIT(31)|BIT(30)|BIT(29)|BIT(28))
-
-/*  */
-/*  */
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-/*  */
-/*  */
-
-
-/* 2 Function Enable Registers */
-/* 2 CR */
-
-#define REG_LBMODE                     (REG_CR + 3)
-
-
-#define HCI_TXDMA_EN                   BIT(0)
-#define HCI_RXDMA_EN                   BIT(1)
-#define TXDMA_EN                       BIT(2)
-#define RXDMA_EN                       BIT(3)
-#define PROTOCOL_EN                    BIT(4)
-#define SCHEDULE_EN                    BIT(5)
-#define MACTXEN                                BIT(6)
-#define MACRXEN                                BIT(7)
-#define ENSWBCN                                BIT(8)
-#define ENSEC                          BIT(9)
-
-#define _LBMODE(x)                     (((x) & 0xF) << 24)
-#define MASK_LBMODE                    0xF000000
-#define LOOPBACK_NORMAL                        0x0
-#define LOOPBACK_IMMEDIATELY           0xB
-#define LOOPBACK_MAC_DELAY             0x3
-#define LOOPBACK_PHY                   0x1
-#define LOOPBACK_DMA                   0x7
-
-
-/* 2 PBP - Page Size Register */
-#define GET_RX_PAGE_SIZE(value)                ((value) & 0xF)
-#define GET_TX_PAGE_SIZE(value)                (((value) & 0xF0) >> 4)
-#define _PSRX_MASK                     0xF
-#define _PSTX_MASK                     0xF0
-#define _PSRX(x)                       (x)
-#define _PSTX(x)                       ((x) << 4)
-
-#define PBP_64                         0x0
-#define PBP_128                                0x1
-#define PBP_256                                0x2
-#define PBP_512                                0x3
-#define PBP_1024                       0x4
-
-
-/* 2 TX/RXDMA */
-#define RXDMA_ARBBW_EN                 BIT(0)
-#define RXSHFT_EN                      BIT(1)
-#define RXDMA_AGG_EN                   BIT(2)
-#define QS_VO_QUEUE                    BIT(8)
-#define QS_VI_QUEUE                    BIT(9)
-#define QS_BE_QUEUE                    BIT(10)
-#define QS_BK_QUEUE                    BIT(11)
-#define QS_MANAGER_QUEUE               BIT(12)
-#define QS_HIGH_QUEUE                  BIT(13)
-
-#define HQSEL_VOQ                      BIT(0)
-#define HQSEL_VIQ                      BIT(1)
-#define HQSEL_BEQ                      BIT(2)
-#define HQSEL_BKQ                      BIT(3)
-#define HQSEL_MGTQ                     BIT(4)
-#define HQSEL_HIQ                      BIT(5)
-
-/*  For normal driver, 0x10C */
-#define _TXDMA_HIQ_MAP(x)              (((x)&0x3) << 14)
-#define _TXDMA_MGQ_MAP(x)              (((x)&0x3) << 12)
-#define _TXDMA_BKQ_MAP(x)              (((x)&0x3) << 10)
-#define _TXDMA_BEQ_MAP(x)              (((x)&0x3) << 8)
-#define _TXDMA_VIQ_MAP(x)              (((x)&0x3) << 6)
-#define _TXDMA_VOQ_MAP(x)              (((x)&0x3) << 4)
-
-#define QUEUE_LOW                      1
-#define QUEUE_NORMAL                   2
-#define QUEUE_HIGH                     3
-
-
-
-/* 2 TRXFF_BNDY */
-
-
-/* 2 LLT_INIT */
-#define _LLT_NO_ACTIVE                 0x0
-#define _LLT_WRITE_ACCESS              0x1
-#define _LLT_READ_ACCESS               0x2
-
-#define _LLT_INIT_DATA(x)              ((x) & 0xFF)
-#define _LLT_INIT_ADDR(x)              (((x) & 0xFF) << 8)
-#define _LLT_OP(x)                     (((x) & 0x3) << 30)
-#define _LLT_OP_VALUE(x)               (((x) >> 30) & 0x3)
-
-
-/* 2 BB_ACCESS_CTRL */
-#define BB_WRITE_READ_MASK             (BIT(31) | BIT(30))
-#define BB_WRITE_EN                    BIT(30)
-#define BB_READ_EN                     BIT(31)
-/* define BB_ADDR_MASK                 0xFFF */
-/* define _BB_ADDR(x)                  ((x) & BB_ADDR_MASK) */
-
-/*  */
-/*  */
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-/*  */
-/*  */
-/* 2 RQPN */
-#define _HPQ(x)                                ((x) & 0xFF)
-#define _LPQ(x)                                (((x) & 0xFF) << 8)
-#define _PUBQ(x)                       (((x) & 0xFF) << 16)
-       /*  NOTE: in RQPN_NPQ register */
-#define _NPQ(x)                                ((x) & 0xFF)
-
-
-#define HPQ_PUBLIC_DIS                 BIT(24)
-#define LPQ_PUBLIC_DIS                 BIT(25)
-#define LD_RQPN                                BIT(31)
-
-
-/* 2 TDECTRL */
-#define BCN_VALID                      BIT(16)
-#define BCN_HEAD(x)                    (((x) & 0xFF) << 8)
-#define        BCN_HEAD_MASK                   0xFF00
-
-/* 2 TDECTL */
-#define BLK_DESC_NUM_SHIFT             4
-#define BLK_DESC_NUM_MASK              0xF
-
-
-/* 2 TXDMA_OFFSET_CHK */
-#define DROP_DATA_EN                   BIT(9)
-
-/*  */
-/*  */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-/*  */
-/*  */
-/* 2 FWHW_TXQ_CTRL */
-#define EN_AMPDU_RTY_NEW               BIT(7)
-
-/* 2 INIRTSMCS_SEL */
-#define _INIRTSMCS_SEL(x)              ((x) & 0x3F)
-
-
-/* 2 SPEC SIFS */
-#define _SPEC_SIFS_CCK(x)              ((x) & 0xFF)
-#define _SPEC_SIFS_OFDM(x)             (((x) & 0xFF) << 8)
-
-
-/* 2 RRSR */
-
-#define RATE_REG_BITMAP_ALL            0xFFFFF
-
-#define _RRSC_BITMAP(x)                        ((x) & 0xFFFFF)
-
-#define _RRSR_RSC(x)                   (((x) & 0x3) << 21)
-#define RRSR_RSC_RESERVED              0x0
-#define RRSR_RSC_UPPER_SUBCHANNEL      0x1
-#define RRSR_RSC_LOWER_SUBCHANNEL      0x2
-#define RRSR_RSC_DUPLICATE_MODE                0x3
-
-
-/* 2 ARFR */
-#define USE_SHORT_G1                   BIT(20)
-
-/* 2 AGGLEN_LMT_L */
-#define _AGGLMT_MCS0(x)                        ((x) & 0xF)
-#define _AGGLMT_MCS1(x)                        (((x) & 0xF) << 4)
-#define _AGGLMT_MCS2(x)                        (((x) & 0xF) << 8)
-#define _AGGLMT_MCS3(x)                        (((x) & 0xF) << 12)
-#define _AGGLMT_MCS4(x)                        (((x) & 0xF) << 16)
-#define _AGGLMT_MCS5(x)                        (((x) & 0xF) << 20)
-#define _AGGLMT_MCS6(x)                        (((x) & 0xF) << 24)
-#define _AGGLMT_MCS7(x)                        (((x) & 0xF) << 28)
-
-
-/* 2 RL */
-#define        RETRY_LIMIT_SHORT_SHIFT         8
-#define        RETRY_LIMIT_LONG_SHIFT          0
-
-
-/* 2 DARFRC */
-#define _DARF_RC1(x)                   ((x) & 0x1F)
-#define _DARF_RC2(x)                   (((x) & 0x1F) << 8)
-#define _DARF_RC3(x)                   (((x) & 0x1F) << 16)
-#define _DARF_RC4(x)                   (((x) & 0x1F) << 24)
-/*  NOTE: shift starting from address (DARFRC + 4) */
-#define _DARF_RC5(x)                   ((x) & 0x1F)
-#define _DARF_RC6(x)                   (((x) & 0x1F) << 8)
-#define _DARF_RC7(x)                   (((x) & 0x1F) << 16)
-#define _DARF_RC8(x)                   (((x) & 0x1F) << 24)
-
-
-/* 2 RARFRC */
-#define _RARF_RC1(x)                   ((x) & 0x1F)
-#define _RARF_RC2(x)                   (((x) & 0x1F) << 8)
-#define _RARF_RC3(x)                   (((x) & 0x1F) << 16)
-#define _RARF_RC4(x)                   (((x) & 0x1F) << 24)
-/*  NOTE: shift starting from address (RARFRC + 4) */
-#define _RARF_RC5(x)                   ((x) & 0x1F)
-#define _RARF_RC6(x)                   (((x) & 0x1F) << 8)
-#define _RARF_RC7(x)                   (((x) & 0x1F) << 16)
-#define _RARF_RC8(x)                   (((x) & 0x1F) << 24)
-
-
-/*  */
-/*  */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-/*  */
-/*  */
-
-
-
-/* 2 EDCA setting */
-#define AC_PARAM_TXOP_LIMIT_OFFSET     16
-#define AC_PARAM_ECW_MAX_OFFSET                12
-#define AC_PARAM_ECW_MIN_OFFSET                8
-#define AC_PARAM_AIFS_OFFSET           0
-
-
-/* 2 EDCA_VO_PARAM */
-#define _AIFS(x)                       (x)
-#define _ECW_MAX_MIN(x)                        ((x) << 8)
-#define _TXOP_LIMIT(x)                 ((x) << 16)
-
-
-#define _BCNIFS(x)                     ((x) & 0xFF)
-#define _BCNECW(x)                     (((x) & 0xF))<< 8)
-
-
-#define _LRL(x)                                ((x) & 0x3F)
-#define _SRL(x)                                (((x) & 0x3F) << 8)
-
-
-/* 2 SIFS_CCK */
-#define _SIFS_CCK_CTX(x)               ((x) & 0xFF)
-#define _SIFS_CCK_TRX(x)               (((x) & 0xFF) << 8);
-
-
-/* 2 SIFS_OFDM */
-#define _SIFS_OFDM_CTX(x)              ((x) & 0xFF)
-#define _SIFS_OFDM_TRX(x)              (((x) & 0xFF) << 8);
-
-
-/* 2 TBTT PROHIBIT */
-#define _TBTT_PROHIBIT_HOLD(x)         (((x) & 0xFF) << 8)
-
-
-/* 2 REG_RD_CTRL */
-#define DIS_EDCA_CNT_DWN               BIT(11)
-
-
-/* 2 BCN_CTRL */
-#define EN_MBSSID                      BIT(1)
-#define EN_TXBCN_RPT                   BIT(2)
-#define        EN_BCN_FUNCTION                 BIT(3)
-#define DIS_TSF_UPDATE                 BIT(3)
-
-/*  The same function but different bit field. */
-#define        DIS_TSF_UDT0_NORMAL_CHIP        BIT(4)
-#define        DIS_TSF_UDT0_TEST_CHIP          BIT(5)
-
-/* 2 ACMHWCTRL */
-#define        AcmHw_HwEn                      BIT(0)
-#define        AcmHw_BeqEn                     BIT(1)
-#define        AcmHw_ViqEn                     BIT(2)
-#define        AcmHw_VoqEn                     BIT(3)
-#define        AcmHw_BeqStatus                 BIT(4)
-#define        AcmHw_ViqStatus                 BIT(5)
-#define        AcmHw_VoqStatus                 BIT(6)
-
-
-
-/*  */
-/*  */
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/*  */
-/*  */
-
-/* 2 APSD_CTRL */
-#define APSDOFF                                BIT(6)
-#define APSDOFF_STATUS                 BIT(7)
-
-
-/* 2 BWOPMODE */
-#define BW_20MHZ                       BIT(2)
-
-
-#define RATE_BITMAP_ALL                        0xFFFFF
-
-/*  Only use CCK 1M rate for ACK */
-#define RATE_RRSR_CCK_ONLY_1M          0xFFFF1
-
-/* 2 TCR */
-#define TSFRST                         BIT(0)
-#define DIS_GCLK                       BIT(1)
-#define PAD_SEL                                BIT(2)
-#define PWR_ST                         BIT(6)
-#define PWRBIT_OW_EN                   BIT(7)
-#define ACRC                           BIT(8)
-#define CFENDFORM                      BIT(9)
-#define ICV                            BIT(10)
-
-
-
-/* 2 RCR */
-#define AAP                            BIT(0)
-#define APM                            BIT(1)
-#define AM                             BIT(2)
-#define AB                             BIT(3)
-#define ADD3                           BIT(4)
-#define APWRMGT                                BIT(5)
-#define CBSSID                         BIT(6)
-#define CBSSID_BCN                     BIT(7)
-#define ACRC32                         BIT(8)
-#define AICV                           BIT(9)
-#define ADF                            BIT(11)
-#define ACF                            BIT(12)
-#define AMF                            BIT(13)
-#define HTC_LOC_CTRL                   BIT(14)
-#define UC_DATA_EN                     BIT(16)
-#define BM_DATA_EN                     BIT(17)
-#define MFBEN                          BIT(22)
-#define LSIGEN                         BIT(23)
-#define EnMBID                         BIT(24)
-#define APP_BASSN                      BIT(27)
-#define APP_PHYSTS                     BIT(28)
-#define APP_ICV                                BIT(29)
-#define APP_MIC                                BIT(30)
-#define APP_FCS                                BIT(31)
-
-/* 2 RX_PKT_LIMIT */
-
-/* 2 RX_DLK_TIME */
-
-/* 2 MBIDCAMCFG */
-
-
-
-/* 2 AMPDU_MIN_SPACE */
-#define _MIN_SPACE(x)                  ((x) & 0x7)
-#define _SHORT_GI_PADDING(x)           (((x) & 0x1F) << 3)
-
-
-/* 2 RXERR_RPT */
-#define RXERR_TYPE_OFDM_PPDU           0
-#define RXERR_TYPE_OFDMfalse_ALARM     1
-#define        RXERR_TYPE_OFDM_MPDU_OK         2
-#define RXERR_TYPE_OFDM_MPDU_FAIL      3
-#define RXERR_TYPE_CCK_PPDU            4
-#define RXERR_TYPE_CCKfalse_ALARM      5
-#define RXERR_TYPE_CCK_MPDU_OK         6
-#define RXERR_TYPE_CCK_MPDU_FAIL       7
-#define RXERR_TYPE_HT_PPDU             8
-#define RXERR_TYPE_HTfalse_ALARM       9
-#define RXERR_TYPE_HT_MPDU_TOTAL       10
-#define RXERR_TYPE_HT_MPDU_OK          11
-#define RXERR_TYPE_HT_MPDU_FAIL                12
-#define RXERR_TYPE_RX_FULL_DROP                15
-
-#define RXERR_COUNTER_MASK             0xFFFFF
-#define RXERR_RPT_RST                  BIT(27)
-#define _RXERR_RPT_SEL(type)           ((type) << 28)
-
-
-/* 2 SECCFG */
-#define        SCR_TxUseDK                     BIT(0)  /* Force Tx Use Default Key */
-#define        SCR_RxUseDK                     BIT(1)  /* Force Rx Use Default Key */
-#define        SCR_TxEncEnable                 BIT(2)  /* Enable Tx Encryption */
-#define        SCR_RxDecEnable                 BIT(3)  /* Enable Rx Decryption */
-#define        SCR_SKByA2                      BIT(4)  /* Search kEY BY A2 */
-#define        SCR_NoSKMC                      BIT(5)  /* No Key Search Multicast */
-
-
-
-/*  */
-/*  */
-/*     0xFE00h ~ 0xFE55h       USB Configuration */
-/*  */
-/*  */
-
-/* 2 USB Information (0xFE17) */
-#define USB_IS_HIGH_SPEED              0
-#define USB_IS_FULL_SPEED              1
-#define USB_SPEED_MASK                 BIT(5)
-
-#define USB_NORMAL_SIE_EP_MASK         0xF
-#define USB_NORMAL_SIE_EP_SHIFT                4
-
-#define USB_TEST_EP_MASK               0x30
-#define USB_TEST_EP_SHIFT              4
-
-/* 2 Special Option */
-#define USB_AGG_EN                     BIT(3)
-
-
-/* 2REG_C2HEVT_CLEAR */
-       /*  Set by driver and notify FW that the driver has read the
-           C2H command message */
-#define C2H_EVT_HOST_CLOSE             0x00
-       /*  Set by FW indicating that FW had set the C2H command message
-           and it's not yet read by driver. */
-#define C2H_EVT_FW_CLOSE               0xFF
-
-
-/* 2REG_MULTI_FUNC_CTRL(For RTL8723 Only) */
-       /*  Enable GPIO[9] as WiFi HW PDn source */
-#define        WL_HWPDN_EN                     BIT(0)
-       /*  WiFi HW PDn polarity control */
-#define        WL_HWPDN_SL                     BIT(1)
-       /*  WiFi function enable */
-#define        WL_FUNC_EN                      BIT(2)
-       /*  Enable GPIO[9] as WiFi RF HW PDn source */
-#define        WL_HWROF_EN                     BIT(3)
-       /*  Enable GPIO[11] as BT HW PDn source */
-#define        BT_HWPDN_EN                     BIT(16)
-       /*  BT HW PDn polarity control */
-#define        BT_HWPDN_SL                     BIT(17)
-       /*  BT function enable */
-#define        BT_FUNC_EN                      BIT(18)
-       /*  Enable GPIO[11] as BT/GPS RF HW PDn source */
-#define        BT_HWROF_EN                     BIT(19)
-       /*  Enable GPIO[10] as GPS HW PDn source */
-#define        GPS_HWPDN_EN                    BIT(20)
-       /*  GPS HW PDn polarity control */
-#define        GPS_HWPDN_SL                    BIT(21)
-       /*  GPS function enable */
-#define        GPS_FUNC_EN                     BIT(22)
-
-/* 3 REG_LIFECTRL_CTRL */
-#define        HAL92C_EN_PKT_LIFE_TIME_BK      BIT(3)
-#define        HAL92C_EN_PKT_LIFE_TIME_BE      BIT(2)
-#define        HAL92C_EN_PKT_LIFE_TIME_VI      BIT(1)
-#define        HAL92C_EN_PKT_LIFE_TIME_VO      BIT(0)
-
-#define        HAL92C_MSDU_LIFE_TIME_UNIT      128     /*  in us, said by Tim. */
-
-/*  */
-/*  General definitions */
-/*  */
-
-#define LAST_ENTRY_OF_TX_PKT_BUFFER    255
-
-#define POLLING_LLT_THRESHOLD          20
-#define POLLING_READY_TIMEOUT_COUNT    1000
-
-/*  Min Spacing related settings. */
-#define        MAX_MSS_DENSITY_2T              0x13
-#define        MAX_MSS_DENSITY_1T              0x0A
-
-/*  */
-/*     8723A Regsiter offset definition */
-/*  */
-#define HAL_8723A_NAV_UPPER_UNIT       128             /*  micro-second */
-
-/*  */
-/*  */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-/*  */
-/*  */
-#define REG_SYSON_REG_LOCK             0x001C
-
-
-/*  */
-/*  */
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-/*  */
-/*  */
-#define REG_FTIMR                      0x0138
-
-
-/*  */
-/*  */
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-/*  */
-/*  */
-
-
-/*  */
-/*  */
-/*     0x0280h ~ 0x02FFh       RXDMA Configuration */
-/*  */
-/*  */
-
-
-/*  */
-/*  */
-/*     0x0300h ~ 0x03FFh       PCIe */
-/*  */
-/*  */
-
-
-/*  */
-/*  */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-/*  */
-/*  */
-#define REG_EARLY_MODE_CONTROL         0x4D0
-
-
-/*  */
-/*  */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-/*  */
-/*  */
-
-/* 2 BCN_CTRL */
-#define DIS_ATIM                       BIT(0)
-#define DIS_BCNQ_SUB                   BIT(1)
-#define DIS_TSF_UDT                    BIT(4)
-
-
-/*  */
-/*  */
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/*  */
-/*  */
-/*  */
-/*  Note: */
-/*     The NAV upper value is very important to WiFi 11n 5.2.3 NAV test.
- *     The default value is always too small, but the WiFi TestPlan test
- *     by 25,000 microseconds of NAV through sending CTS in the air. We
- *     must update this value greater than 25,000 microseconds to pass the
- *     item.
-*      The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset
-*      should be 0x0652. Commented by SD1 Scott. */
-/*  By Bruce, 2011-07-18. */
-/*  */
-#define        REG_NAV_UPPER                   0x0652  /*  unit of 128 */
-
-
-/*  */
-/*     8723 Regsiter Bit and Content definition */
-/*  */
-
-/*  */
-/*  */
-/*     0x0000h ~ 0x00FFh       System Configuration */
-/*  */
-/*  */
-
-/* 2 SPS0_CTRL */
-
-/* 2 SYS_ISO_CTRL */
-
-/* 2 SYS_FUNC_EN */
-
-/* 2 APS_FSMCO */
-#define EN_WLON                                BIT(16)
-
-/* 2 SYS_CLKR */
-
-/* 2 9346CR */
-
-/* 2 AFE_MISC */
-
-/* 2 SPS0_CTRL */
-
-/* 2 SPS_OCP_CFG */
-
-/* 2 SYSON_REG_LOCK */
-#define WLOCK_ALL                      BIT(0)
-#define WLOCK_00                       BIT(1)
-#define WLOCK_04                       BIT(2)
-#define WLOCK_08                       BIT(3)
-#define WLOCK_40                       BIT(4)
-#define WLOCK_1C_B6                    BIT(5)
-#define R_DIS_PRST_1                   BIT(6)
-#define LOCK_ALL_EN                    BIT(7)
-
-/* 2 RF_CTRL */
-
-/* 2 LDOA15_CTRL */
-
-/* 2 LDOV12D_CTRL */
-
-/* 2 AFE_XTAL_CTRL */
-
-/* 2 AFE_PLL_CTRL */
-
-/* 2 EFUSE_CTRL */
-
-/* 2 EFUSE_TEST (For RTL8723 partially) */
-
-/* 2 PWR_DATA */
-
-/* 2 CAL_TIMER */
-
-/* 2 ACLK_MON */
-
-/* 2 GPIO_MUXCFG */
-
-/* 2 GPIO_PIN_CTRL */
-
-/* 2 GPIO_INTM */
-
-/* 2 LEDCFG */
-
-/* 2 FSIMR */
-
-/* 2 FSISR */
-
-/* 2 HSIMR */
-/*  8723 Host System Interrupt Mask Register (offset 0x58, 32 byte) */
-#define HSIMR_GPIO12_0_INT_EN          BIT(0)
-#define HSIMR_SPS_OCP_INT_EN           BIT(5)
-#define HSIMR_RON_INT_EN               BIT(6)
-#define HSIMR_PDNINT_EN                        BIT(7)
-#define HSIMR_GPIO9_INT_EN             BIT(25)
-
-/* 2 HSISR */
-/*  8723 Host System Interrupt Status Register (offset 0x5C, 32 byte) */
-#define HSISR_GPIO12_0_INT             BIT(0)
-#define HSISR_SPS_OCP_INT              BIT(5)
-#define HSISR_RON_INT                  BIT(6)
-#define HSISR_PDNINT                   BIT(7)
-#define        HSISR_GPIO9_INT                 BIT(25)
-
-/*  interrupt mask which needs to clear */
-#define MASK_HSISR_CLEAR               (HSISR_GPIO12_0_INT | \
-                                        HSISR_SPS_OCP_INT | \
-                                        HSISR_RON_INT | \
-                                        HSISR_PDNINT | \
-                                        HSISR_GPIO9_INT)
-
-/* 2 MCUFWDL */
-#define RAM_DL_SEL                     BIT(7)  /*  1:RAM, 0:ROM */
-
-/* 2 HPON_FSM */
-
-/* 2 SYS_CFG */
-#define RTL_ID                         BIT(23) /*  TestChip ID,
-                                                   1:Test(RLE); 0:MP(RL) */
-#define SPS_SEL                                BIT(24) /*  1:LDO regulator mode;
-                                                   0:Switching regulator mode*/
-
-
-/*  */
-/*  */
-/*     0x0100h ~ 0x01FFh       MACTOP General Configuration */
-/*  */
-/*  */
-
-/* 2 Function Enable Registers */
-
-/* 2 CR */
-#define CALTMR_EN                      BIT(10)
-
-/* 2 PBP - Page Size Register */
-
-/* 2 TX/RXDMA */
-
-/* 2 TRXFF_BNDY */
-
-/* 2 LLT_INIT */
-
-/* 2 BB_ACCESS_CTRL */
-
-
-/*  */
-/*  */
-/*     0x0200h ~ 0x027Fh       TXDMA Configuration */
-/*  */
-/*  */
-
-/* 2 RQPN */
-
-/* 2 TDECTRL */
-
-/* 2 TDECTL */
-
-/* 2 TXDMA_OFFSET_CHK */
-
-
-/*  */
-/*  */
-/*     0x0400h ~ 0x047Fh       Protocol Configuration */
-/*  */
-/*  */
-
-/* 2 FWHW_TXQ_CTRL */
-
-/* 2 INIRTSMCS_SEL */
-
-/* 2 SPEC SIFS */
-
-/* 2 RRSR */
-
-/* 2 ARFR */
-
-/* 2 AGGLEN_LMT_L */
-
-/* 2 RL */
-
-/* 2 DARFRC */
-
-/* 2 RARFRC */
-
-
-/*  */
-/*  */
-/*     0x0500h ~ 0x05FFh       EDCA Configuration */
-/*  */
-/*  */
-
-/* 2 EDCA setting */
-
-/* 2 EDCA_VO_PARAM */
-
-/* 2 SIFS_CCK */
-
-/* 2 SIFS_OFDM */
-
-/* 2 TBTT PROHIBIT */
-
-/* 2 REG_RD_CTRL */
-
-/* 2 BCN_CTRL */
-
-/* 2 ACMHWCTRL */
-
-
-/*  */
-/*  */
-/*     0x0600h ~ 0x07FFh       WMAC Configuration */
-/*  */
-/*  */
-
-/* 2 APSD_CTRL */
-
-/* 2 BWOPMODE */
-
-/* 2 TCR */
-
-/* 2 RCR */
-
-/* 2 RX_PKT_LIMIT */
-
-/* 2 RX_DLK_TIME */
-
-/* 2 MBIDCAMCFG */
-
-/* 2 AMPDU_MIN_SPACE */
-
-/* 2 RXERR_RPT */
-
-/* 2 SECCFG */
-
-
-/*  */
-/*  */
-/*     0xFE00h ~ 0xFE55h       RTL8723 SDIO Configuration */
-/*  */
-/*  */
-
-/*  I/O bus domain address mapping */
-#define WLAN_IOREG_BASE                        0x10260000
-#define FIRMWARE_FIFO_BASE             0x10270000
-#define TX_HIQ_BASE                    0x10310000
-#define TX_MIQ_BASE                    0x10320000
-#define TX_LOQ_BASE                    0x10330000
-#define RX_RX0FF_BASE                  0x10340000
-
-/*  SDIO host local register space mapping. */
-#define WLAN_IOREG_MSK                 0x7FFF
-#define WLAN_FIFO_MSK                  0x1FFF  /*  Aggregation Length[12:0] */
-#define WLAN_RX0FF_MSK                 0x0003
-
-#define WLAN_RX0FF_DEVICE_ID           7       /*  0b[16], 111b[15:13] */
-#define WLAN_IOREG_DEVICE_ID           8       /*  1b[16] */
-
-/*  8723 EFUSE */
-#define HWSET_MAX_SIZE                 256
-
-
-/* USB interrupt */
-#define        UHIMR_TIMEOUT2                  BIT(31)
-#define        UHIMR_TIMEOUT1                  BIT(30)
-#define        UHIMR_PSTIMEOUT                 BIT(29)
-#define        UHIMR_GTINT4                    BIT(28)
-#define        UHIMR_GTINT3                    BIT(27)
-#define        UHIMR_TXBCNERR                  BIT(26)
-#define        UHIMR_TXBCNOK                   BIT(25)
-#define        UHIMR_TSF_BIT32_TOGGLE          BIT(24)
-#define        UHIMR_BCNDMAINT3                BIT(23)
-#define        UHIMR_BCNDMAINT2                BIT(22)
-#define        UHIMR_BCNDMAINT1                BIT(21)
-#define        UHIMR_BCNDMAINT0                BIT(20)
-#define        UHIMR_BCNDOK3                   BIT(19)
-#define        UHIMR_BCNDOK2                   BIT(18)
-#define        UHIMR_BCNDOK1                   BIT(17)
-#define        UHIMR_BCNDOK0                   BIT(16)
-#define        UHIMR_HSISR_IND                 BIT(15)
-#define        UHIMR_BCNDMAINT_E               BIT(14)
-/* RSVD        BIT(13) */
-#define        UHIMR_CTW_END                   BIT(12)
-/* RSVD        BIT(11) */
-#define        UHIMR_C2HCMD                    BIT(10)
-#define        UHIMR_CPWM2                     BIT(9)
-#define        UHIMR_CPWM                      BIT(8)
-#define        UHIMR_HIGHDOK                   BIT(7)  /*  High Queue DMA OK
-                                                   Interrupt */
-#define        UHIMR_MGNTDOK                   BIT(6)  /*  Management Queue DMA OK
-                                                   Interrupt */
-#define        UHIMR_BKDOK                     BIT(5)  /*  AC_BK DMA OK Interrupt */
-#define        UHIMR_BEDOK                     BIT(4)  /*  AC_BE DMA OK Interrupt */
-#define        UHIMR_VIDOK                     BIT(3)  /*  AC_VI DMA OK Interrupt */
-#define        UHIMR_VODOK                     BIT(2)  /*  AC_VO DMA Interrupt */
-#define        UHIMR_RDU                       BIT(1)  /*  Receive Descriptor
-                                                   Unavailable */
-#define        UHIMR_ROK                       BIT(0)  /*  Receive DMA OK Interrupt */
-
-/*  USB Host Interrupt Status Extension bit */
-#define        UHIMR_BCNDMAINT7                BIT(23)
-#define        UHIMR_BCNDMAINT6                BIT(22)
-#define        UHIMR_BCNDMAINT5                BIT(21)
-#define        UHIMR_BCNDMAINT4                BIT(20)
-#define        UHIMR_BCNDOK7                   BIT(19)
-#define        UHIMR_BCNDOK6                   BIT(18)
-#define        UHIMR_BCNDOK5                   BIT(17)
-#define        UHIMR_BCNDOK4                   BIT(16)
-/*  bit14-15: RSVD */
-#define        UHIMR_ATIMEND_E                 BIT(13)
-#define        UHIMR_ATIMEND                   BIT(12)
-#define        UHIMR_TXERR                     BIT(11)
-#define        UHIMR_RXERR                     BIT(10)
-#define        UHIMR_TXFOVW                    BIT(9)
-#define        UHIMR_RXFOVW                    BIT(8)
-/*  bit2-7: RSVD */
-#define        UHIMR_OCPINT                    BIT(1)
-/*  bit0: RSVD */
-
-#define        REG_USB_HIMR                    0xFE38
-#define        REG_USB_HIMRE                   0xFE3C
-#define        REG_USB_HISR                    0xFE78
-#define        REG_USB_HISRE                   0xFE7C
-
-#define        USB_INTR_CPWM_OFFSET            16
-#define        USB_INTR_CONTENT_HISR_OFFSET    48
-#define        USB_INTR_CONTENT_HISRE_OFFSET   52
-#define        USB_INTR_CONTENT_LENGTH         56
-#define        USB_C2H_CMDID_OFFSET            0
-#define        USB_C2H_SEQ_OFFSET              1
-#define        USB_C2H_EVENT_OFFSET            2
-/*  */
-/*     General definitions */
-/*  */
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_sreset.h b/drivers/staging/rtl8723au/include/rtl8723a_sreset.h
deleted file mode 100644 (file)
index 6197910..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTL8723A_SRESET_H_
-#define _RTL8723A_SRESET_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_sreset.h>
-
-void rtl8723a_sreset_xmit_status_check(struct rtw_adapter *padapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_xmit.h b/drivers/staging/rtl8723au/include/rtl8723a_xmit.h
deleted file mode 100644 (file)
index 7db29f4..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTL8723A_XMIT_H__
-#define __RTL8723A_XMIT_H__
-
-/*  */
-/*  Queue Select Value in TxDesc */
-/*  */
-#define QSLT_BK                                                        0x2/* 0x01 */
-#define QSLT_BE                                                        0x0
-#define QSLT_VI                                                        0x5/* 0x4 */
-#define QSLT_VO                                                        0x7/* 0x6 */
-#define QSLT_BEACON                                            0x10
-#define QSLT_HIGH                                              0x11
-#define QSLT_MGNT                                              0x12
-#define QSLT_CMD                                               0x13
-
-/*  */
-/* defined for TX DESC Operation */
-/*  */
-
-#define MAX_TID (15)
-
-/* OFFSET 0 */
-#define OFFSET_SZ      0
-#define OFFSET_SHT     16
-#define BMC            BIT(24)
-#define LSG            BIT(26)
-#define FSG            BIT(27)
-#define OWN            BIT(31)
-
-
-/* OFFSET 4 */
-#define PKT_OFFSET_SZ  0
-#define BK             BIT(6)
-#define QSEL_SHT       8
-#define Rate_ID_SHT    16
-#define NAVUSEHDR      BIT(20)
-#define PKT_OFFSET_SHT 26
-#define HWPC           BIT(31)
-
-/* OFFSET 8 */
-#define AGG_EN         BIT(29)
-
-/* OFFSET 12 */
-#define SEQ_SHT                16
-
-/* OFFSET 16 */
-#define QoS            BIT(6)
-#define HW_SEQ_EN      BIT(7)
-#define USERATE                BIT(8)
-#define DISDATAFB      BIT(10)
-#define DATA_SHORT     BIT(24)
-#define DATA_BW                BIT(25)
-
-/* OFFSET 20 */
-#define SGI            BIT(6)
-
-struct txdesc_8723a {
-       u32 pktlen:16;
-       u32 offset:8;
-       u32 bmc:1;
-       u32 htc:1;
-       u32 ls:1;
-       u32 fs:1;
-       u32 linip:1;
-       u32 noacm:1;
-       u32 gf:1;
-       u32 own:1;
-
-       u32 macid:5;
-       u32 agg_en:1;
-       u32 bk:1;
-       u32 rd_en:1;
-       u32 qsel:5;
-       u32 rd_nav_ext:1;
-       u32 lsig_txop_en:1;
-       u32 pifs:1;
-       u32 rate_id:4;
-       u32 navusehdr:1;
-       u32 en_desc_id:1;
-       u32 sectype:2;
-       u32 rsvd0424:2;
-       u32 pkt_offset:5;       /*  unit: 8 bytes */
-       u32 rsvd0431:1;
-
-       u32 rts_rc:6;
-       u32 data_rc:6;
-       u32 rsvd0812:2;
-       u32 bar_rty_th:2;
-       u32 rsvd0816:1;
-       u32 morefrag:1;
-       u32 raw:1;
-       u32 ccx:1;
-       u32 ampdu_density:3;
-       u32 bt_null:1;
-       u32 ant_sel_a:1;
-       u32 ant_sel_b:1;
-       u32 tx_ant_cck:2;
-       u32 tx_antl:2;
-       u32 tx_ant_ht:2;
-
-       u32 nextheadpage:8;
-       u32 tailpage:8;
-       u32 seq:12;
-       u32 cpu_handle:1;
-       u32 tag1:1;
-       u32 trigger_int:1;
-       u32 hwseq_en:1;
-
-       u32 rtsrate:5;
-       u32 ap_dcfe:1;
-       u32 hwseq_sel:2;
-       u32 userate:1;
-       u32 disrtsfb:1;
-       u32 disdatafb:1;
-       u32 cts2self:1;
-       u32 rtsen:1;
-       u32 hw_rts_en:1;
-       u32 port_id:1;
-       u32 rsvd1615:3;
-       u32 wait_dcts:1;
-       u32 cts2ap_en:1;
-       u32 data_sc:2;
-       u32 data_stbc:2;
-       u32 data_short:1;
-       u32 data_bw:1;
-       u32 rts_short:1;
-       u32 rts_bw:1;
-       u32 rts_sc:2;
-       u32 vcs_stbc:2;
-
-       u32 datarate:6;
-       u32 sgi:1;
-       u32 try_rate:1;
-       u32 data_ratefb_lmt:5;
-       u32 rts_ratefb_lmt:4;
-       u32 rty_lmt_en:1;
-       u32 data_rt_lmt:6;
-       u32 usb_txagg_num:8;
-
-       u32 txagg_a:5;
-       u32 txagg_b:5;
-       u32 use_max_len:1;
-       u32 max_agg_num:5;
-       u32 mcsg1_max_len:4;
-       u32 mcsg2_max_len:4;
-       u32 mcsg3_max_len:4;
-       u32 mcs7_sgi_max_len:4;
-
-       u32 checksum:16;        /*  TxBuffSize(PCIe)/CheckSum(USB) */
-       u32 mcsg4_max_len:4;
-       u32 mcsg5_max_len:4;
-       u32 mcsg6_max_len:4;
-       u32 mcs15_sgi_max_len:4;
-};
-
-#define txdesc_set_ccx_sw_8723a(txdesc, value) \
-       do { \
-               ((struct txdesc_8723a *)(txdesc))->mcsg4_max_len = (((value)>>8) & 0x0f); \
-               ((struct txdesc_8723a *)(txdesc))->mcs15_sgi_max_len= (((value)>>4) & 0x0f); \
-               ((struct txdesc_8723a *)(txdesc))->mcsg6_max_len = ((value) & 0x0f); \
-       } while (0)
-
-struct txrpt_ccx_8723a {
-       /* offset 0 */
-       u8 tag1:1;
-       u8 rsvd:4;
-       u8 int_bt:1;
-       u8 int_tri:1;
-       u8 int_ccx:1;
-
-       /* offset 1 */
-       u8 mac_id:5;
-       u8 pkt_drop:1;
-       u8 pkt_ok:1;
-       u8 bmc:1;
-
-       /* offset 2 */
-       u8 retry_cnt:6;
-       u8 lifetime_over:1;
-       u8 retry_over:1;
-
-       /* offset 3 */
-       u8 ccx_qtime0;
-       u8 ccx_qtime1;
-
-       /* offset 5 */
-       u8 final_data_rate;
-
-       /* offset 6 */
-       u8 sw1:4;
-       u8 qsel:4;
-
-       /* offset 7 */
-       u8 sw0;
-};
-
-#define txrpt_ccx_sw_8723a(txrpt_ccx) ((txrpt_ccx)->sw0 + ((txrpt_ccx)->sw1<<8))
-#define txrpt_ccx_qtime_8723a(txrpt_ccx) ((txrpt_ccx)->ccx_qtime0+((txrpt_ccx)->ccx_qtime1<<8))
-
-void handle_txrpt_ccx_8723a(struct rtw_adapter *adapter, void *buf);
-void rtl8723a_fill_fake_txdesc(struct rtw_adapter *padapter, u8 *pDesc, u32 BufferLen, u8 IsPsPoll, u8 IsBTQosNull);
-
-int rtl8723au_hal_xmitframe_enqueue(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe);
-s32 rtl8723au_xmit_buf_handler(struct rtw_adapter *padapter);
-#define hal_xmit_handler rtl8723au_xmit_buf_handler
-bool rtl8723au_hal_xmit(struct rtw_adapter *padapter, struct xmit_frame *pxmitframe);
-int rtl8723au_mgnt_xmit(struct rtw_adapter *padapter, struct xmit_frame *pmgntframe);
-bool rtl8723au_xmitframe_complete(struct rtw_adapter *padapter, struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_ap.h b/drivers/staging/rtl8723au/include/rtw_ap.h
deleted file mode 100644 (file)
index 55a708f..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_AP_H_
-#define __RTW_AP_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-#ifdef CONFIG_8723AU_AP_MODE
-
-/* external function */
-
-void init_mlme_ap_info23a(struct rtw_adapter *padapter);
-void free_mlme_ap_info23a(struct rtw_adapter *padapter);
-/* void update_BCNTIM(struct rtw_adapter *padapter); */
-void rtw_add_bcn_ie(struct rtw_adapter *padapter, struct wlan_bssid_ex *pnetwork, u8 index, u8 *data, u8 len);
-void rtw_remove_bcn_ie(struct rtw_adapter *padapter, struct wlan_bssid_ex *pnetwork, u8 index);
-void update_beacon23a(struct rtw_adapter *padapter, u8 ie_id, u8 *oui, u8 tx);
-void add_RATid23a(struct rtw_adapter *padapter, struct sta_info *psta, u8 rssi_level);
-void expire_timeout_chk23a(struct rtw_adapter *padapter);
-void update_sta_info23a_apmode23a(struct rtw_adapter *padapter, struct sta_info *psta);
-int rtw_check_beacon_data23a(struct rtw_adapter *padapter,
-                            struct ieee80211_mgmt *mgmt, unsigned int len);
-void rtw_ap_restore_network(struct rtw_adapter *padapter);
-void rtw_set_macaddr_acl23a(struct rtw_adapter *padapter, int mode);
-
-void associated_clients_update23a(struct rtw_adapter *padapter, u8 updated);
-void bss_cap_update_on_sta_join23a(struct rtw_adapter *padapter, struct sta_info *psta);
-u8 bss_cap_update_on_sta_leave23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void sta_info_update23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void ap_sta_info_defer_update23a(struct rtw_adapter *padapter, struct sta_info *psta);
-u8 ap_free_sta23a(struct rtw_adapter *padapter, struct sta_info *psta, bool active, u16 reason);
-int rtw_sta_flush23a(struct rtw_adapter *padapter);
-void start_ap_mode23a(struct rtw_adapter *padapter);
-void stop_ap_mode23a(struct rtw_adapter *padapter);
-#endif /* end of CONFIG_8723AU_AP_MODE */
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_cmd.h b/drivers/staging/rtl8723au/include/rtw_cmd.h
deleted file mode 100644 (file)
index d1fa95d..0000000
+++ /dev/null
@@ -1,815 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_CMD_H_
-#define __RTW_CMD_H_
-
-#include <wlan_bssdef.h>
-#include <rtw_rf.h>
-
-#define C2H_MEM_SZ (16*1024)
-
-#include <osdep_service.h>
-#include <ieee80211.h> /*  <ieee80211/ieee80211.h> */
-
-
-#define MAX_CMDSZ      1024
-#define MAX_RSPSZ      512
-#define MAX_EVTSZ      1024
-
-#define CMDBUFF_ALIGN_SZ 512
-
-struct cmd_obj {
-       struct work_struct work;
-       struct rtw_adapter *padapter;
-       u16     cmdcode;
-       int     res;
-       u32     cmdsz;
-       u8      *parmbuf;
-       u8      *rsp;
-       u32     rspsz;
-};
-
-struct cmd_priv {
-       struct workqueue_struct *wq;
-       u32     cmd_issued_cnt;
-       u32     cmd_done_cnt;
-       u32     rsp_cnt;
-       struct rtw_adapter *padapter;
-};
-
-#define C2H_QUEUE_MAX_LEN 10
-
-struct evt_priv {
-       struct workqueue_struct *wq;
-       struct work_struct irq_wk;
-};
-
-#define init_h2fwcmd_w_parm_no_rsp(pcmd, pparm, code) \
-do {\
-       pcmd->cmdcode = code;\
-       pcmd->parmbuf = (u8 *)(pparm);\
-       pcmd->cmdsz = sizeof (*pparm);\
-       pcmd->rsp = NULL;\
-       pcmd->rspsz = 0;\
-} while(0)
-
-struct c2h_evt_hdr {
-       u8 id:4;
-       u8 plen:4;
-       u8 seq;
-       u8 payload[0];
-};
-
-/*
- * Do not reorder - this allows for struct evt_work to be passed on to
- * rtw_c2h_wk_cmd23a() as a 'struct c2h_evt_hdr *' without making an
- * additional copy.
- */
-struct evt_work {
-       union {
-               struct c2h_evt_hdr c2h_evt;
-               u8 buf[16];
-       } u;
-       struct work_struct work;
-       struct rtw_adapter *adapter;
-};
-
-#define c2h_evt_exist(c2h_evt) ((c2h_evt)->id || (c2h_evt)->plen)
-
-void rtw_evt_work(struct work_struct *work);
-
-int rtw_enqueue_cmd23a(struct cmd_priv *pcmdpriv, struct cmd_obj *obj);
-void rtw_free_cmd_obj23a(struct cmd_obj *pcmd);
-
-int rtw_cmd_thread23a(void *context);
-
-int rtw_init_cmd_priv23a(struct cmd_priv *pcmdpriv);
-
-u32 rtw_init_evt_priv23a (struct evt_priv *pevtpriv);
-void rtw_free_evt_priv23a (struct evt_priv *pevtpriv);
-void rtw_evt_notify_isr(struct evt_priv *pevtpriv);
-
-enum rtw_drvextra_cmd_id
-{
-       NONE_WK_CID,
-       DYNAMIC_CHK_WK_CID,
-       DM_CTRL_WK_CID,
-       PBC_POLLING_WK_CID,
-       POWER_SAVING_CTRL_WK_CID,/* IPS,AUTOSuspend */
-       LPS_CTRL_WK_CID,
-       ANT_SELECT_WK_CID,
-       P2P_PS_WK_CID,
-       P2P_PROTO_WK_CID,
-       CHECK_HIQ_WK_CID,/* for softap mode, check hi queue if empty */
-       C2H_WK_CID,
-       RTP_TIMER_CFG_WK_CID,
-       MAX_WK_CID
-};
-
-enum LPS_CTRL_TYPE
-{
-       LPS_CTRL_SCAN=0,
-       LPS_CTRL_JOINBSS=1,
-       LPS_CTRL_CONNECT=2,
-       LPS_CTRL_DISCONNECT=3,
-       LPS_CTRL_SPECIAL_PACKET=4,
-       LPS_CTRL_LEAVE=5,
-};
-
-enum RFINTFS {
-       SWSI,
-       HWSI,
-       HWPI,
-};
-
-/*
-Caller Mode: Infra, Ad-HoC(C)
-
-Notes: To enter USB suspend mode
-
-Command Mode
-
-*/
-struct usb_suspend_parm {
-       u32 action;/*  1: sleep, 0:resume */
-};
-
-/*
-Caller Mode: Infra, Ad-HoC
-
-Notes: To join a known BSS.
-
-Command-Event Mode
-
-*/
-
-/*
-Caller Mode: Infra, Ad-HoC(C)
-
-Notes: To disconnect the current associated BSS
-
-Command Mode
-
-*/
-struct disconnect_parm {
-       u32 deauth_timeout_ms;
-};
-
-struct setopmode_parm {
-       enum nl80211_iftype mode;
-};
-
-/*
-Caller Mode: AP, Ad-HoC, Infra
-
-Notes: To ask RTL8711 performing site-survey
-
-Command-Event Mode
-
-*/
-
-#define RTW_SSID_SCAN_AMOUNT 9 /*  for WEXT_CSCAN_AMOUNT 9 */
-#define RTW_CHANNEL_SCAN_AMOUNT (14+37)
-struct sitesurvey_parm {
-       int scan_mode;  /* active: 1, passive: 0 */
-       u8 ssid_num;
-       u8 ch_num;
-       struct cfg80211_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To set the auth type of RTL8711. open/shared/802.1x
-
-Command Mode
-
-*/
-struct setauth_parm {
-       u8 mode;  /* 0: legacy open, 1: legacy shared 2: 802.1x */
-       u8 _1x;   /* 0: PSK, 1: TLS */
-       u8 rsvd[2];
-};
-
-/*
-Caller Mode: Infra
-
-a. algorithm: wep40, wep104, tkip & aes
-b. keytype: grp key/unicast key
-c. key contents
-
-when shared key ==> keyid is the camid
-when 802.1x ==> keyid [0:1] ==> grp key
-when 802.1x ==> keyid > 2 ==> unicast key
-
-*/
-struct setkey_parm {
-       u32     algorithm;      /*  encryption algorithm, could be none, wep40, TKIP, CCMP, wep104 */
-       u8      keyid;
-       u8      grpkey;         /*  1: this is the grpkey for 802.1x. 0: this is the unicast key for 802.1x */
-       u8      set_tx;         /*  1: main tx key for wep. 0: other key. */
-       u8      key[16];        /*  this could be 40 or 104 */
-};
-
-/*
-When in AP or Ad-Hoc mode, this is used to
-allocate an sw/hw entry for a newly associated sta.
-
-Command
-
-when shared key ==> algorithm/keyid
-
-*/
-struct set_stakey_parm {
-       u8      addr[ETH_ALEN];
-       u8      id;/*  currently for erasing cam entry if algorithm == _NO_PRIVACY_ */
-       u32     algorithm;
-       u8      key[16];
-};
-
-struct set_stakey_rsp {
-       u8      addr[ETH_ALEN];
-       u8      keyid;
-       u8      rsvd;
-};
-
-/*
-Caller Ad-Hoc/AP
-
-Command -Rsp(AID == CAMID) mode
-
-This is to force fw to add an sta_data entry per driver's request.
-
-FW will write an cam entry associated with it.
-
-*/
-struct set_assocsta_parm {
-       u8      addr[ETH_ALEN];
-};
-
-struct set_assocsta_rsp {
-       u8      cam_id;
-       u8      rsvd[3];
-};
-
-/*
-       Caller Ad-Hoc/AP
-
-       Command mode
-
-       This is to force fw to del an sta_data entry per driver's request
-
-       FW will invalidate the cam entry associated with it.
-
-*/
-struct del_assocsta_parm {
-       u8      addr[ETH_ALEN];
-};
-
-/*
-Caller Mode: AP/Ad-HoC(M)
-
-Notes: To notify fw that given staid has changed its power state
-
-Command Mode
-
-*/
-struct setstapwrstate_parm {
-       u8      staid;
-       u8      status;
-       u8      hwaddr[6];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To setup the basic rate of RTL8711
-
-Command Mode
-
-*/
-struct setbasicrate_parm {
-       u8      basicrates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To read the current basic rate
-
-Command-Rsp Mode
-
-*/
-struct getbasicrate_parm {
-       u32 rsvd;
-};
-
-struct getbasicrate_rsp {
-       u8 basicrates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To setup the data rate of RTL8711
-
-Command Mode
-
-*/
-struct setdatarate_parm {
-       u8      mac_id;
-       u8      datarates[NumRates];
-};
-
-/*
-Caller Mode: Any
-
-Notes: To read the current data rate
-
-Command-Rsp Mode
-
-*/
-struct getdatarate_parm {
-       u32 rsvd;
-};
-
-struct getdatarate_rsp {
-       u8 datarates[NumRates];
-};
-
-
-/*
-Caller Mode: Any
-AP: AP can use the info for the contents of beacon frame
-Infra: STA can use the info when sitesurveying
-Ad-HoC(M): Like AP
-Ad-HoC(C): Like STA
-
-
-Notes: To set the phy capability of the NIC
-
-Command Mode
-
-*/
-
-struct setphyinfo_parm {
-       struct regulatory_class class_sets[NUM_REGULATORYS];
-       u8      status;
-};
-
-struct getphyinfo_parm {
-       u32 rsvd;
-};
-
-struct getphyinfo_rsp {
-       struct regulatory_class class_sets[NUM_REGULATORYS];
-       u8      status;
-};
-
-/*
-Caller Mode: Any
-
-Notes: To set the channel/modem/band
-This command will be used when channel/modem/band is changed.
-
-Command Mode
-
-*/
-struct setphy_parm {
-       u8      rfchannel;
-       u8      modem;
-};
-
-/*
-Caller Mode: Any
-
-Notes: To get the current setting of channel/modem/band
-
-Command-Rsp Mode
-
-*/
-struct getphy_parm {
-       u32 rsvd;
-};
-
-struct getphy_rsp {
-       u8      rfchannel;
-       u8      modem;
-};
-
-struct readBB_parm {
-       u8      offset;
-};
-
-struct readBB_rsp {
-       u8      value;
-};
-
-struct readTSSI_parm {
-       u8      offset;
-};
-
-struct readTSSI_rsp {
-       u8      value;
-};
-
-struct writeBB_parm {
-       u8      offset;
-       u8      value;
-};
-
-struct readRF_parm {
-       u8      offset;
-};
-
-struct readRF_rsp {
-       u32     value;
-};
-
-struct writeRF_parm {
-       u32     offset;
-       u32     value;
-};
-
-struct getrfintfs_parm {
-       u8      rfintfs;
-};
-
-struct Tx_Beacon_param {
-       struct wlan_bssid_ex network;
-};
-
-/*  CMD param Formart for driver extra cmd handler */
-struct drvextra_cmd_parm {
-       int ec_id; /* extra cmd id */
-       int type_size; /*  Can use this field as the type id or command size */
-       unsigned char *pbuf;
-};
-
-/*------------------- Below are used for RF/BB tunning ---------------------*/
-
-struct setantenna_parm {
-       u8      tx_antset;
-       u8      rx_antset;
-       u8      tx_antenna;
-       u8      rx_antenna;
-};
-
-struct enrateadaptive_parm {
-       u32     en;
-};
-
-struct settxagctbl_parm {
-       u32     txagc[MAX_RATES_LENGTH];
-};
-
-struct gettxagctbl_parm {
-       u32 rsvd;
-};
-
-struct gettxagctbl_rsp {
-       u32     txagc[MAX_RATES_LENGTH];
-};
-
-struct setagcctrl_parm {
-       u32     agcctrl;                /*  0: pure hw, 1: fw */
-};
-
-struct setssup_parm    {
-       u32     ss_ForceUp[MAX_RATES_LENGTH];
-};
-
-struct getssup_parm    {
-       u32 rsvd;
-};
-
-struct getssup_rsp     {
-       u8      ss_ForceUp[MAX_RATES_LENGTH];
-};
-
-struct setssdlevel_parm        {
-       u8      ss_DLevel[MAX_RATES_LENGTH];
-};
-
-struct getssdlevel_parm        {
-       u32 rsvd;
-};
-
-struct getssdlevel_rsp {
-       u8      ss_DLevel[MAX_RATES_LENGTH];
-};
-
-struct setssulevel_parm        {
-       u8      ss_ULevel[MAX_RATES_LENGTH];
-};
-
-struct getssulevel_parm        {
-       u32 rsvd;
-};
-
-struct getssulevel_rsp {
-       u8      ss_ULevel[MAX_RATES_LENGTH];
-};
-
-struct setcountjudge_parm {
-       u8      count_judge[MAX_RATES_LENGTH];
-};
-
-struct getcountjudge_parm {
-       u32 rsvd;
-};
-
-struct getcountjudge_rsp {
-       u8      count_judge[MAX_RATES_LENGTH];
-};
-
-struct setratable_parm {
-       u8 ss_ForceUp[NumRates];
-       u8 ss_ULevel[NumRates];
-       u8 ss_DLevel[NumRates];
-       u8 count_judge[NumRates];
-};
-
-struct getratable_parm {
-       uint rsvd;
-};
-
-struct getratable_rsp {
-       u8 ss_ForceUp[NumRates];
-       u8 ss_ULevel[NumRates];
-       u8 ss_DLevel[NumRates];
-       u8 count_judge[NumRates];
-};
-
-/* to get TX,RX retry count */
-struct gettxretrycnt_parm{
-       unsigned int rsvd;
-};
-struct gettxretrycnt_rsp{
-       unsigned long tx_retrycnt;
-};
-
-struct getrxretrycnt_parm{
-       unsigned int rsvd;
-};
-struct getrxretrycnt_rsp{
-       unsigned long rx_retrycnt;
-};
-
-/* to get BCNOK,BCNERR count */
-struct getbcnokcnt_parm{
-       unsigned int rsvd;
-};
-struct getbcnokcnt_rsp{
-       unsigned long  bcnokcnt;
-};
-
-struct getbcnerrcnt_parm{
-       unsigned int rsvd;
-};
-struct getbcnerrcnt_rsp{
-       unsigned long bcnerrcnt;
-};
-
-/*  to get current TX power level */
-struct getcurtxpwrlevel_parm{
-       unsigned int rsvd;
-};
-
-struct getcurtxpwrlevel_rsp{
-       unsigned short tx_power;
-};
-
-struct setprobereqextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[0];
-};
-
-struct setassocreqextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[0];
-};
-
-struct setproberspextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[0];
-};
-
-struct setassocrspextraie_parm {
-       unsigned char e_id;
-       unsigned char ie_len;
-       unsigned char ie[0];
-};
-
-struct addBaReq_parm {
-       unsigned int tid;
-       u8      addr[ETH_ALEN];
-};
-
-/*H2C Handler index: 46 */
-struct set_ch_parm {
-       u8 ch;
-       u8 bw;
-       u8 ch_offset;
-};
-
-/*H2C Handler index: 59 */
-struct SetChannelPlan_param {
-       u8 channel_plan;
-};
-
-/*H2C Handler index: 60 */
-struct LedBlink_param {
-       struct led_8723a *pLed;
-};
-
-/*H2C Handler index: 61 */
-struct SetChannelSwitch_param {
-       u8 new_ch_no;
-};
-
-/*H2C Handler index: 62 */
-struct TDLSoption_param {
-       u8 addr[ETH_ALEN];
-       u8 option;
-};
-
-#define GEN_CMD_CODE(cmd)      cmd ## _CMD_
-
-
-/*
-
-Result:
-0x00: success
-0x01: success, and check Response.
-0x02: cmd ignored due to duplicated sequcne number
-0x03: cmd dropped due to invalid cmd code
-0x04: reserved.
-
-*/
-
-#define H2C_RSP_OFFSET                 512
-
-#define H2C_SUCCESS                    0x00
-#define H2C_SUCCESS_RSP                        0x01
-#define H2C_DUPLICATED                 0x02
-#define H2C_DROPPED                    0x03
-#define H2C_PARAMETERS_ERROR           0x04
-#define H2C_REJECTED                   0x05
-#define H2C_CMD_OVERFLOW               0x06
-#define H2C_RESERVED                   0x07
-
-int rtw_setassocsta_cmd(struct rtw_adapter  *padapter, u8 *mac_addr);
-int rtw_setstandby_cmd(struct rtw_adapter *padapter, uint action);
-int rtw_sitesurvey_cmd23a(struct rtw_adapter  *padapter, struct cfg80211_ssid *ssid, int ssid_num, struct rtw_ieee80211_channel *ch, int ch_num);
-int rtw_createbss_cmd23a(struct rtw_adapter  *padapter);
-int rtw_createbss_cmd23a_ex(struct rtw_adapter  *padapter, unsigned char *pbss, unsigned int sz);
-int rtw_setphy_cmd(struct rtw_adapter  *padapter, u8 modem, u8 ch);
-int rtw_setstakey_cmd23a(struct rtw_adapter  *padapter, u8 *psta, u8 unicast_key);
-int rtw_clearstakey_cmd23a(struct rtw_adapter *padapter, u8 *psta, u8 entry, u8 enqueue);
-int rtw_joinbss_cmd23a(struct rtw_adapter  *padapter, struct wlan_network* pnetwork);
-int rtw_disassoc_cmd23a(struct rtw_adapter *padapter, u32 deauth_timeout_ms, bool enqueue);
-int rtw_setopmode_cmd23a(struct rtw_adapter *padapter, enum nl80211_iftype ifmode);
-int rtw_setdatarate_cmd(struct rtw_adapter  *padapter, u8 *rateset);
-int rtw_setbasicrate_cmd(struct rtw_adapter  *padapter, u8 *rateset);
-int rtw_setbbreg_cmd(struct rtw_adapter *padapter, u8 offset, u8 val);
-int rtw_setrfreg_cmd(struct rtw_adapter *padapter, u8 offset, u32 val);
-int rtw_getbbreg_cmd(struct rtw_adapter *padapter, u8 offset, u8 *pval);
-int rtw_getrfreg_cmd(struct rtw_adapter *padapter, u8 offset, u8 *pval);
-int rtw_setrfintfs_cmd(struct rtw_adapter  *padapter, u8 mode);
-int rtw_setrttbl_cmd(struct rtw_adapter  *padapter, struct setratable_parm *prate_table);
-int rtw_getrttbl_cmd(struct rtw_adapter  *padapter, struct getratable_rsp *pval);
-
-int rtw_gettssi_cmd(struct rtw_adapter  *padapter, u8 offset, u8 *pval);
-int rtw_setfwdig_cmd(struct rtw_adapter*padapter, u8 type);
-int rtw_setfwra_cmd(struct rtw_adapter*padapter, u8 type);
-
-int rtw_addbareq_cmd23a(struct rtw_adapter*padapter, u8 tid, u8 *addr);
-
-int rtw_dynamic_chk_wk_cmd23a(struct rtw_adapter *adapter);
-
-int rtw_lps_ctrl_wk_cmd23a(struct rtw_adapter*padapter, u8 lps_ctrl_type, u8 enqueue);
-
-int rtw_ps_cmd23a(struct rtw_adapter*padapter);
-
-#ifdef CONFIG_8723AU_AP_MODE
-int rtw_chk_hi_queue_cmd23a(struct rtw_adapter*padapter);
-#endif
-
-int rtw_set_chplan_cmd(struct rtw_adapter*padapter, u8 chplan, u8 enqueue);
-int rtw_led_blink_cmd(struct rtw_adapter*padapter, struct led_8723a *pLed);
-int rtw_set_csa_cmd(struct rtw_adapter*padapter, u8 new_ch_no);
-
-int rtw_c2h_wk_cmd23a(struct rtw_adapter *padapter, u8 *c2h_evt);
-
-int rtw_drvextra_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-
-void rtw_survey_cmd_callback23a(struct rtw_adapter  *padapter, struct cmd_obj *pcmd);
-void rtw_disassoc_cmd23a_callback(struct rtw_adapter  *padapter, struct cmd_obj *pcmd);
-void rtw_joinbss_cmd23a_callback(struct rtw_adapter  *padapter, struct cmd_obj *pcmd);
-void rtw_createbss_cmd23a_callback(struct rtw_adapter  *padapter, struct cmd_obj *pcmd);
-void rtw_getbbrfreg_cmdrsp_callback23a(struct rtw_adapter  *padapter, struct cmd_obj *pcmd);
-
-void rtw_setstaKey_cmdrsp_callback23a(struct rtw_adapter  *padapter,  struct cmd_obj *pcmd);
-void rtw_setassocsta_cmdrsp_callback23a(struct rtw_adapter  *padapter,  struct cmd_obj *pcmd);
-
-struct _cmd_callback {
-       u32     cmd_code;
-       void (*callback)(struct rtw_adapter  *padapter, struct cmd_obj *cmd);
-};
-
-enum rtw_h2c_cmd {
-       GEN_CMD_CODE(_Read_MACREG) ,    /*0*/
-       GEN_CMD_CODE(_Write_MACREG) ,
-       GEN_CMD_CODE(_Read_BBREG) ,
-       GEN_CMD_CODE(_Write_BBREG) ,
-       GEN_CMD_CODE(_Read_RFREG) ,
-       GEN_CMD_CODE(_Write_RFREG) , /*5*/
-       GEN_CMD_CODE(_Read_EEPROM) ,
-       GEN_CMD_CODE(_Write_EEPROM) ,
-       GEN_CMD_CODE(_Read_EFUSE) ,
-       GEN_CMD_CODE(_Write_EFUSE) ,
-
-       GEN_CMD_CODE(_Read_CAM) ,       /*10*/
-       GEN_CMD_CODE(_Write_CAM) ,
-       GEN_CMD_CODE(_setBCNITV),
-       GEN_CMD_CODE(_setMBIDCFG),
-       GEN_CMD_CODE(_JoinBss),   /*14*/
-       GEN_CMD_CODE(_DisConnect) , /*15*/
-       GEN_CMD_CODE(_CreateBss) ,
-       GEN_CMD_CODE(_SetOpMode) ,
-       GEN_CMD_CODE(_SiteSurvey),  /*18*/
-       GEN_CMD_CODE(_SetAuth) ,
-
-       GEN_CMD_CODE(_SetKey) , /*20*/
-       GEN_CMD_CODE(_SetStaKey) ,
-       GEN_CMD_CODE(_SetAssocSta) ,
-       GEN_CMD_CODE(_DelAssocSta) ,
-       GEN_CMD_CODE(_SetStaPwrState) ,
-       GEN_CMD_CODE(_SetBasicRate) , /*25*/
-       GEN_CMD_CODE(_GetBasicRate) ,
-       GEN_CMD_CODE(_SetDataRate) ,
-       GEN_CMD_CODE(_GetDataRate) ,
-       GEN_CMD_CODE(_SetPhyInfo) ,
-
-       GEN_CMD_CODE(_GetPhyInfo) ,     /*30*/
-       GEN_CMD_CODE(_SetPhy) ,
-       GEN_CMD_CODE(_GetPhy) ,
-       GEN_CMD_CODE(_readRssi) ,
-       GEN_CMD_CODE(_readGain) ,
-       GEN_CMD_CODE(_SetAtim) , /*35*/
-       GEN_CMD_CODE(_SetPwrMode) ,
-       GEN_CMD_CODE(_JoinbssRpt),
-       GEN_CMD_CODE(_SetRaTable) ,
-       GEN_CMD_CODE(_GetRaTable) ,
-
-       GEN_CMD_CODE(_GetCCXReport), /*40*/
-       GEN_CMD_CODE(_GetDTMReport),
-       GEN_CMD_CODE(_GetTXRateStatistics),
-       GEN_CMD_CODE(_SetUsbSuspend),
-       GEN_CMD_CODE(_SetH2cLbk),
-       GEN_CMD_CODE(_AddBAReq) , /*45*/
-       GEN_CMD_CODE(_SetChannel), /*46*/
-       GEN_CMD_CODE(_SetTxPower),
-       GEN_CMD_CODE(_SwitchAntenna),
-       GEN_CMD_CODE(_SetCrystalCap),
-       GEN_CMD_CODE(_SetSingleCarrierTx), /*50*/
-
-       GEN_CMD_CODE(_SetSingleToneTx),/*51*/
-       GEN_CMD_CODE(_SetCarrierSuppressionTx),
-       GEN_CMD_CODE(_SetContinuousTx),
-       GEN_CMD_CODE(_SwitchBandwidth), /*54*/
-       GEN_CMD_CODE(_TX_Beacon), /*55*/
-
-       GEN_CMD_CODE(_Set_MLME_EVT), /*56*/
-       GEN_CMD_CODE(_Set_Drv_Extra), /*57*/
-       GEN_CMD_CODE(_Set_H2C_MSG), /*58*/
-
-       GEN_CMD_CODE(_SetChannelPlan), /*59*/
-       GEN_CMD_CODE(_LedBlink), /*60*/
-
-       GEN_CMD_CODE(_SetChannelSwitch), /*61*/
-       GEN_CMD_CODE(_TDLS), /*62*/
-
-       MAX_H2CCMD
-};
-
-extern struct _cmd_callback    rtw_cmd_callback[];
-
-#endif /*  _CMD_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_debug.h b/drivers/staging/rtl8723au/include/rtw_debug.h
deleted file mode 100644 (file)
index 159183e..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __RTW_DEBUG_H__
-#define __RTW_DEBUG_H__
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define _drv_always_                   1
-#define _drv_emerg_                    2
-#define _drv_alert_                    3
-#define _drv_err_                      4
-#define        _drv_warning_                   5
-#define _drv_notice_                   6
-#define _drv_info_                     7
-#define        _drv_debug_                     8
-
-#define _module_rtl871x_xmit_c_                BIT(0)
-#define _module_xmit_osdep_c_          BIT(1)
-#define _module_rtl871x_recv_c_                BIT(2)
-#define _module_recv_osdep_c_          BIT(3)
-#define _module_rtl871x_mlme_c_                BIT(4)
-#define _module_mlme_osdep_c_          BIT(5)
-#define _module_rtl871x_sta_mgt_c_     BIT(6)
-#define _module_rtl871x_cmd_c_         BIT(7)
-#define _module_cmd_osdep_c_           BIT(8)
-#define _module_rtl871x_io_c_          BIT(9)
-#define _module_io_osdep_c_            BIT(10)
-#define _module_os_intfs_c_            BIT(11)
-#define _module_rtl871x_security_c_    BIT(12)
-#define _module_rtl871x_eeprom_c_      BIT(13)
-#define _module_hal_init_c_            BIT(14)
-#define _module_hci_hal_init_c_                BIT(15)
-#define _module_rtl871x_ioctl_c_       BIT(16)
-#define _module_rtl871x_ioctl_set_c_   BIT(17)
-#define _module_rtl871x_ioctl_query_c_ BIT(18)
-#define _module_rtl871x_pwrctrl_c_     BIT(19)
-#define _module_hci_intfs_c_           BIT(20)
-#define _module_hci_ops_c_             BIT(21)
-#define _module_osdep_service_c_       BIT(22)
-#define _module_mp_                    BIT(23)
-#define _module_hci_ops_os_c_          BIT(24)
-#define _module_rtl871x_ioctl_os_c     BIT(25)
-#define _module_rtl8712_cmd_c_         BIT(26)
-#define        _module_rtl8192c_xmit_c_        BIT(28)
-#define _module_hal_xmit_c_            BIT(28) /* duplication intentional */
-#define _module_efuse_                 BIT(29)
-#define _module_rtl8712_recv_c_                BIT(30)
-#define _module_rtl8712_led_c_         BIT(31)
-
-#undef _MODULE_DEFINE_
-
-#if defined _RTW_XMIT_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_xmit_c_
-#elif defined _XMIT_OSDEP_C_
-       #define _MODULE_DEFINE_ _module_xmit_osdep_c_
-#elif defined _RTW_RECV_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_recv_c_
-#elif defined _RECV_OSDEP_C_
-       #define _MODULE_DEFINE_ _module_recv_osdep_c_
-#elif defined _RTW_MLME_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_mlme_c_
-#elif defined _MLME_OSDEP_C_
-       #define _MODULE_DEFINE_ _module_mlme_osdep_c_
-#elif defined _RTW_MLME_EXT_C_
-       #define _MODULE_DEFINE_ 1
-#elif defined _RTW_STA_MGT_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_sta_mgt_c_
-#elif defined _RTW_CMD_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_cmd_c_
-#elif defined _CMD_OSDEP_C_
-       #define _MODULE_DEFINE_ _module_cmd_osdep_c_
-#elif defined _RTW_IO_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_io_c_
-#elif defined _IO_OSDEP_C_
-       #define _MODULE_DEFINE_ _module_io_osdep_c_
-#elif defined _OS_INTFS_C_
-       #define _MODULE_DEFINE_ _module_os_intfs_c_
-#elif defined _RTW_SECURITY_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_security_c_
-#elif defined _RTW_EEPROM_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_eeprom_c_
-#elif defined _HAL_INTF_C_
-       #define _MODULE_DEFINE_ _module_hal_init_c_
-#elif (defined _HCI_HAL_INIT_C_) || (defined _SDIO_HALINIT_C_)
-       #define _MODULE_DEFINE_ _module_hci_hal_init_c_
-#elif defined _RTL871X_IOCTL_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_ioctl_c_
-#elif defined _RTL871X_IOCTL_SET_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_ioctl_set_c_
-#elif defined _RTL871X_IOCTL_QUERY_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_ioctl_query_c_
-#elif defined _RTL871X_PWRCTRL_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_pwrctrl_c_
-#elif defined _RTW_PWRCTRL_C_
-       #define _MODULE_DEFINE_ 1
-#elif defined _HCI_INTF_C_
-       #define _MODULE_DEFINE_ _module_hci_intfs_c_
-#elif defined _HCI_OPS_C_
-       #define _MODULE_DEFINE_ _module_hci_ops_c_
-#elif defined _SDIO_OPS_C_
-       #define _MODULE_DEFINE_ 1
-#elif defined _OSDEP_HCI_INTF_C_
-       #define _MODULE_DEFINE_ _module_hci_intfs_c_
-#elif defined _OSDEP_SERVICE_C_
-       #define _MODULE_DEFINE_ _module_osdep_service_c_
-#elif defined _HCI_OPS_OS_C_
-       #define _MODULE_DEFINE_ _module_hci_ops_os_c_
-#elif defined _RTL871X_IOCTL_LINUX_C_
-       #define _MODULE_DEFINE_ _module_rtl871x_ioctl_os_c
-#elif defined _RTL8712_CMD_C_
-       #define _MODULE_DEFINE_ _module_rtl8712_cmd_c_
-#elif defined _RTL8192C_XMIT_C_
-       #define _MODULE_DEFINE_ 1
-#elif defined _RTL8723AS_XMIT_C_
-       #define _MODULE_DEFINE_ 1
-#elif defined _RTL8712_RECV_C_
-       #define _MODULE_DEFINE_ _module_rtl8712_recv_c_
-#elif defined _RTL8192CU_RECV_C_
-       #define _MODULE_DEFINE_ _module_rtl8712_recv_c_
-#elif defined _RTL871X_MLME_EXT_C_
-       #define _MODULE_DEFINE_ _module_mlme_osdep_c_
-#elif defined _RTW_MP_C_
-       #define _MODULE_DEFINE_ _module_mp_
-#elif defined _RTW_MP_IOCTL_C_
-       #define _MODULE_DEFINE_ _module_mp_
-#elif defined _RTW_EFUSE_C_
-       #define _MODULE_DEFINE_ _module_efuse_
-#endif
-
-#define DRIVER_PREFIX  "RTL8723AU: "
-#define DEBUG_LEVEL    (_drv_err_)
-#define DBG_8723A_LEVEL(_level, fmt, arg...)                           \
-       do {                                                            \
-               if (_level <= GlobalDebugLevel23A)                              \
-                       pr_info(DRIVER_PREFIX fmt, ##arg);\
-       } while (0)
-
-#define DBG_8723A(...)                                                 \
-       do {                                                            \
-               if (_drv_err_ <= GlobalDebugLevel23A)                   \
-                       pr_info(DRIVER_PREFIX __VA_ARGS__);             \
-       } while (0)
-
-#define MSG_8723A(...)                                                 \
-       do {                                                            \
-               if (_drv_err_ <= GlobalDebugLevel23A)                   \
-                       pr_info(DRIVER_PREFIX __VA_ARGS__);             \
-       } while (0)
-
-extern u32 GlobalDebugLevel23A;
-
-__printf(3, 4)
-void rt_trace(int comp, int level, const char *fmt, ...);
-
-#define RT_TRACE(_Comp, _Level, Fmt, ...)                              \
-do {                                                                   \
-       if (_Level <= GlobalDebugLevel23A)                              \
-               rt_trace(_Comp, _Level, Fmt, ##__VA_ARGS__);            \
-} while (0)
-
-#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData,           \
-                     _HexDataLen)                                      \
-       if (_Level <= GlobalDebugLevel23A) {                            \
-               int __i;                                                \
-               u8      *ptr = (u8 *)_HexData;                          \
-               pr_info("%s", DRIVER_PREFIX);                           \
-               pr_info(_TitleString);                                  \
-               for (__i = 0; __i < (int)_HexDataLen; __i++) {          \
-                       printk("%02X%s", ptr[__i],                      \
-                              (((__i + 1) % 4) == 0) ? "  " : " ");    \
-                       if (((__i + 1) % 16) == 0)                      \
-                               printk("\n");                           \
-               }                                                       \
-               printk("\n");                                           \
-       }
-
-#endif /* __RTW_DEBUG_H__ */
diff --git a/drivers/staging/rtl8723au/include/rtw_eeprom.h b/drivers/staging/rtl8723au/include/rtw_eeprom.h
deleted file mode 100644 (file)
index a86f36e..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_EEPROM_H__
-#define __RTW_EEPROM_H__
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define        RTL8712_EEPROM_ID                       0x8712
-/* define      EEPROM_MAX_SIZE                 256 */
-
-#define        HWSET_MAX_SIZE_512              512
-#define        EEPROM_MAX_SIZE                 HWSET_MAX_SIZE_512
-
-#define        CLOCK_RATE                                      50                      /* 100us */
-
-/*  EEPROM opcodes */
-#define EEPROM_READ_OPCODE             06
-#define EEPROM_WRITE_OPCODE            05
-#define EEPROM_ERASE_OPCODE            07
-#define EEPROM_EWEN_OPCODE             19      /*  Erase/write enable */
-#define EEPROM_EWDS_OPCODE             16      /*  Erase/write disable */
-
-/* Country codes */
-#define USA                                                    0x555320
-#define EUROPE                                         0x1 /* temp, should be provided later */
-#define JAPAN                                          0x2 /* temp, should be provided later */
-
-#define        EEPROM_CID_DEFAULT                      0x0
-#define        EEPROM_CID_ALPHA                                0x1
-#define        EEPROM_CID_Senao                                0x3
-#define        EEPROM_CID_NetCore                              0x5
-#define        EEPROM_CID_CAMEO                                0X8
-#define        EEPROM_CID_SITECOM                              0x9
-#define        EEPROM_CID_COREGA                               0xB
-#define        EEPROM_CID_EDIMAX_BELKIN                0xC
-#define        EEPROM_CID_SERCOMM_BELKIN               0xE
-#define        EEPROM_CID_CAMEO1                               0xF
-#define        EEPROM_CID_WNC_COREGA           0x12
-#define        EEPROM_CID_CLEVO                                0x13
-#define        EEPROM_CID_WHQL                         0xFE /*  added by chiyoko for dtm, 20090108 */
-
-/*  */
-/*  Customer ID, note that: */
-/*  This variable is initiailzed through EEPROM or registry, */
-/*  however, its definition may be different with that in EEPROM for */
-/*  EEPROM size consideration. So, we have to perform proper translation between them. */
-/*  Besides, CustomerID of registry has precedence of that of EEPROM. */
-/*  defined below. 060703, by rcnjko. */
-/*  */
-enum rt_customer_id
-{
-       RT_CID_DEFAULT = 0,
-       RT_CID_8187_ALPHA0 = 1,
-       RT_CID_8187_SERCOMM_PS = 2,
-       RT_CID_8187_HW_LED = 3,
-       RT_CID_8187_NETGEAR = 4,
-       RT_CID_WHQL = 5,
-       RT_CID_819x_CAMEO  = 6,
-       RT_CID_819x_RUNTOP = 7,
-       RT_CID_819x_Senao = 8,
-       RT_CID_TOSHIBA = 9,     /*  Merge by Jacken, 2008/01/31. */
-       RT_CID_819x_Netcore = 10,
-       RT_CID_Nettronix = 11,
-       RT_CID_DLINK = 12,
-       RT_CID_PRONET = 13,
-       RT_CID_COREGA = 14,
-       RT_CID_CHINA_MOBILE = 15,
-       RT_CID_819x_ALPHA = 16,
-       RT_CID_819x_Sitecom = 17,
-       RT_CID_CCX = 18, /*  It's set under CCX logo test and isn't demanded for CCX functions, but for test behavior like retry limit and tx report. By Bruce, 2009-02-17. */
-       RT_CID_819x_Lenovo = 19,
-       RT_CID_819x_QMI = 20,
-       RT_CID_819x_Edimax_Belkin = 21,
-       RT_CID_819x_Sercomm_Belkin = 22,
-       RT_CID_819x_CAMEO1 = 23,
-       RT_CID_819x_MSI = 24,
-       RT_CID_819x_Acer = 25,
-       RT_CID_819x_AzWave_ASUS = 26,
-       RT_CID_819x_AzWave = 27, /*  For AzWave in PCIe, The ID is AzWave use and not only Asus */
-       RT_CID_819x_HP = 28,
-       RT_CID_819x_WNC_COREGA = 29,
-       RT_CID_819x_Arcadyan_Belkin = 30,
-       RT_CID_819x_SAMSUNG = 31,
-       RT_CID_819x_CLEVO = 32,
-       RT_CID_819x_DELL = 33,
-       RT_CID_819x_PRONETS = 34,
-       RT_CID_819x_Edimax_ASUS = 35,
-       RT_CID_819x_CAMEO_NETGEAR = 36,
-       RT_CID_PLANEX = 37,
-       RT_CID_CC_C = 38,
-       RT_CID_819x_Xavi = 39,
-       RT_CID_819x_FUNAI_TV = 40,
-       RT_CID_819x_ALPHA_WD=41,
-};
-
-struct eeprom_priv {
-       u8              mac_addr[6];    /* PermanentAddress */
-       u8              bautoload_fail_flag;
-       u8              bloadfile_fail_flag;
-       u8              bloadmac_fail_flag;
-       /* u8           bempty; */
-       /* u8           sys_config; */
-       /* u8           config0; */
-       u16             channel_plan;
-       /* u8           country_string[3]; */
-       /* u8           tx_power_b[15]; */
-       /* u8           tx_power_g[15]; */
-       /* u8           tx_power_a[201]; */
-
-       u8              EepromOrEfuse;
-
-       u8              efuse_eeprom_data[HWSET_MAX_SIZE_512]; /* 92C:256bytes, 88E:512bytes, we use union set (512bytes) */
-};
-
-void eeprom_write16(struct rtw_adapter *padapter, u16 reg, u16 data);
-u16 eeprom_read16(struct rtw_adapter *padapter, u16 reg);
-void read_eeprom_content(struct rtw_adapter *padapter);
-void eeprom_read_sz(struct rtw_adapter *padapter, u16 reg, u8 *data, u32 sz);
-
-void read_eeprom_content_by_attrib(struct rtw_adapter *padapter);
-
-#endif  /* __RTL871X_EEPROM_H__ */
diff --git a/drivers/staging/rtl8723au/include/rtw_efuse.h b/drivers/staging/rtl8723au/include/rtw_efuse.h
deleted file mode 100644 (file)
index c577e26..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __RTW_EFUSE_H__
-#define __RTW_EFUSE_H__
-
-#include <osdep_service.h>
-
-#define        EFUSE_ERROE_HANDLE              1
-
-#define        PG_STATE_HEADER                 0x01
-#define        PG_STATE_WORD_0         0x02
-#define        PG_STATE_WORD_1         0x04
-#define        PG_STATE_WORD_2         0x08
-#define        PG_STATE_WORD_3         0x10
-#define        PG_STATE_DATA                   0x20
-
-#define        PG_SWBYTE_H                     0x01
-#define        PG_SWBYTE_L                     0x02
-
-#define        PGPKT_DATA_SIZE         8
-
-#define        EFUSE_WIFI                              0
-#define        EFUSE_BT                                1
-
-enum _EFUSE_DEF_TYPE {
-       TYPE_EFUSE_MAX_SECTION                          = 0,
-       TYPE_EFUSE_REAL_CONTENT_LEN                     = 1,
-       TYPE_AVAILABLE_EFUSE_BYTES_BANK         = 2,
-       TYPE_AVAILABLE_EFUSE_BYTES_TOTAL        = 3,
-       TYPE_EFUSE_MAP_LEN                                      = 4,
-       TYPE_EFUSE_PROTECT_BYTES_BANK           = 5,
-       TYPE_EFUSE_CONTENT_LEN_BANK                     = 6,
-};
-
-/* E-Fuse */
-#define EFUSE_MAP_SIZE      256
-
-#define EFUSE_MAX_SIZE      512
-/* end of E-Fuse */
-
-#define                EFUSE_MAX_MAP_LEN               256
-#define                EFUSE_MAX_HW_SIZE               512
-#define                EFUSE_MAX_SECTION_BASE  16
-
-#define EXT_HEADER(header) ((header & 0x1F) == 0x0F)
-#define ALL_WORDS_DISABLED(wde)        ((wde & 0x0F) == 0x0F)
-#define GET_HDR_OFFSET_2_0(header) ( (header & 0xE0) >> 5)
-
-#define                EFUSE_REPEAT_THRESHOLD_                 3
-
-/*  */
-/*     The following is for BT Efuse definition */
-/*  */
-#define                EFUSE_BT_MAX_MAP_LEN            1024
-#define                EFUSE_MAX_BANK                  4
-#define                EFUSE_MAX_BT_BANK               (EFUSE_MAX_BANK-1)
-/*  */
-/*--------------------------Define Parameters-------------------------------*/
-#define                EFUSE_MAX_WORD_UNIT                     4
-
-/*------------------------------Define structure----------------------------*/
-struct pg_pkt_struct {
-       u8 offset;
-       u8 word_en;
-       u8 data[8];
-       u8 word_cnts;
-};
-
-/*------------------------Export global variable----------------------------*/
-
-u16    efuse_GetMaxSize23a(struct rtw_adapter *padapter);
-int    rtw_efuse_access23a(struct rtw_adapter *padapter, u8 bRead, u16 start_addr, u16 cnts, u8 *data);
-int    rtw_efuse_map_read23a(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data);
-u8     rtw_efuse_map_write(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data);
-int    rtw_BT_efuse_map_read23a(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data);
-u8     rtw_BT_efuse_map_write(struct rtw_adapter *padapter, u16 addr, u16 cnts, u8 *data);
-
-u16    Efuse_GetCurrentSize23a(struct rtw_adapter *pAdapter, u8 efuseType);
-u8     Efuse_CalculateWordCnts23a(u8 word_en);
-void   ReadEFuseByte23a(struct rtw_adapter *Adapter, u16 _offset, u8 *pbuf);
-void   EFUSE_GetEfuseDefinition23a(struct rtw_adapter *pAdapter, u8 efuseType, u8 type, void *pOut);
-int    efuse_OneByteRead23a(struct rtw_adapter *pAdapter, u16 addr, u8 *data);
-int    efuse_OneByteWrite23a(struct rtw_adapter *pAdapter, u16 addr, u8 data);
-
-void   Efuse_PowerSwitch23a(struct rtw_adapter *pAdapter, u8 bWrite,
-                            u8 PwrState);
-int    Efuse_PgPacketRead23a(struct rtw_adapter *pAdapter, u8 offset, u8 *data);
-int    Efuse_PgPacketWrite23a(struct rtw_adapter *pAdapter, u8 offset, u8 word_en, u8 *data);
-void   efuse_WordEnableDataRead23a(u8 word_en, u8 *sourdata, u8 *targetdata);
-u8     Efuse_WordEnableDataWrite23a(struct rtw_adapter *pAdapter, u16 efuse_addr, u8 word_en, u8 *data);
-
-u8     EFUSE_Read1Byte23a(struct rtw_adapter *pAdapter, u16 Address);
-void   EFUSE_ShadowMapUpdate23a(struct rtw_adapter *pAdapter, u8 efuseType);
-void   EFUSE_ShadowRead23a(struct rtw_adapter *pAdapter, u8 Type, u16 Offset, u32 *Value);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_event.h b/drivers/staging/rtl8723au/include/rtw_event.h
deleted file mode 100644 (file)
index 4557aec..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTW_EVENT_H_
-#define _RTW_EVENT_H_
-
-#include <osdep_service.h>
-#include <wlan_bssdef.h>
-
-/*
-Used to report a bss has been scanned
-*/
-struct survey_event {
-       struct wlan_bssid_ex *bss;
-};
-
-/*
-Used to report that the requested site survey has been done.
-bss_cnt indicates the number of bss that has been reported.
-*/
-struct surveydone_event {
-       unsigned int bss_cnt;
-};
-
-/*
-Used to report the link result of joinning the given bss
-join_res:
--1: authentication fail
--2: association fail
-> 0: TID
-*/
-struct joinbss_event {
-       struct wlan_network network;
-};
-
-/*
-Used to report a given STA has joinned the created BSS.
-It is used in AP/Ad-HoC(M) mode.
-*/
-struct stassoc_event {
-       unsigned char macaddr[6];
-       unsigned char rsvd[2];
-       int cam_id;
-};
-
-struct stadel_event {
-       unsigned char macaddr[6];
-       unsigned char rsvd[2]; /* for reason */
-       int mac_id;
-};
-
-struct addba_event {
-       unsigned int tid;
-};
-
-#define GEN_EVT_CODE(event)    event ## _EVT_
-
-struct fwevent {
-       u32 parmsize;
-       void (*event_callback)(struct rtw_adapter *dev, const u8 *pbuf);
-};
-
-#endif /*  _WLANEVENT_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_ht.h b/drivers/staging/rtl8723au/include/rtw_ht.h
deleted file mode 100644 (file)
index 780eb89..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTW_HT_H_
-#define _RTW_HT_H_
-
-#include <osdep_service.h>
-#include "linux/ieee80211.h"
-#include "wifi.h"
-
-struct ht_priv {
-       bool    ht_option;
-       bool    ampdu_enable;/* for enable Tx A-MPDU */
-       /* u8   baddbareq_issued[16]; */
-       u32     tx_amsdu_enable;/* for enable Tx A-MSDU */
-       u32     tx_amdsu_maxlen; /*  1: 8k, 0:4k ; default:8k, for tx */
-       u32     rx_ampdu_maxlen; /* for rx reordering ctrl win_sz, updated when join_callback. */
-
-       u8      bwmode;/*  */
-       u8      ch_offset;/* PRIME_CHNL_OFFSET */
-       u8      sgi;/* short GI */
-
-       /* for processing Tx A-MPDU */
-       u16     agg_enable_bitmap;
-       /* u8   ADDBA_retry_count; */
-       u16     candidate_tid_bitmap;
-
-       struct ieee80211_ht_cap ht_cap;
-};
-
-#endif /* _RTL871X_HT_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_io.h b/drivers/staging/rtl8723au/include/rtw_io.h
deleted file mode 100644 (file)
index c8119e2..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#ifndef _RTW_IO_H_
-#define _RTW_IO_H_
-
-#include <osdep_service.h>
-#include <osdep_intf.h>
-
-#include <asm/byteorder.h>
-#include <linux/semaphore.h>
-#include <linux/list.h>
-/* include <linux/smp_lock.h> */
-#include <linux/spinlock.h>
-#include <asm/atomic.h>
-
-#include <linux/usb.h>
-#include <linux/usb/ch9.h>
-
-#define rtw_usb_buffer_alloc(dev, size, dma) usb_alloc_coherent((dev), (size), (in_interrupt() ? GFP_ATOMIC : GFP_KERNEL), (dma))
-#define rtw_usb_buffer_free(dev, size, addr, dma) usb_free_coherent((dev), (size), (addr), (dma))
-
-#define NUM_IOREQ              8
-
-#define MAX_PROT_SZ    (64-16)
-
-#define _IOREADY                       0
-#define _IO_WAIT_COMPLETE   1
-#define _IO_WAIT_RSP        2
-
-/*  IO COMMAND TYPE */
-#define _IOSZ_MASK_            (0x7F)
-#define _IO_WRITE_             BIT(7)
-#define _IO_FIXED_             BIT(8)
-#define _IO_BURST_             BIT(9)
-#define _IO_BYTE_              BIT(10)
-#define _IO_HW_                        BIT(11)
-#define _IO_WORD_              BIT(12)
-#define _IO_SYNC_              BIT(13)
-#define _IO_CMDMASK_   (0x1F80)
-
-
-/*
-       For prompt mode accessing, caller shall free io_req
-       Otherwise, io_handler will free io_req
-*/
-
-
-
-/*  IO STATUS TYPE */
-#define _IO_ERR_               BIT(2)
-#define _IO_SUCCESS_   BIT(1)
-#define _IO_DONE_              BIT(0)
-
-
-#define IO_RD32                        (_IO_SYNC_ | _IO_WORD_)
-#define IO_RD16                        (_IO_SYNC_ | _IO_HW_)
-#define IO_RD8                 (_IO_SYNC_ | _IO_BYTE_)
-
-#define IO_RD32_ASYNC  (_IO_WORD_)
-#define IO_RD16_ASYNC  (_IO_HW_)
-#define IO_RD8_ASYNC   (_IO_BYTE_)
-
-#define IO_WR32                        (_IO_WRITE_ | _IO_SYNC_ | _IO_WORD_)
-#define IO_WR16                        (_IO_WRITE_ | _IO_SYNC_ | _IO_HW_)
-#define IO_WR8                 (_IO_WRITE_ | _IO_SYNC_ | _IO_BYTE_)
-
-#define IO_WR32_ASYNC  (_IO_WRITE_ | _IO_WORD_)
-#define IO_WR16_ASYNC  (_IO_WRITE_ | _IO_HW_)
-#define IO_WR8_ASYNC   (_IO_WRITE_ | _IO_BYTE_)
-
-/*
-
-       Only Sync. burst accessing is provided.
-
-*/
-
-#define IO_WR_BURST(x)         (_IO_WRITE_ | _IO_SYNC_ | _IO_BURST_ | ( (x) & _IOSZ_MASK_))
-#define IO_RD_BURST(x)         (_IO_SYNC_ | _IO_BURST_ | ( (x) & _IOSZ_MASK_))
-
-
-
-/* below is for the intf_option bit defition... */
-
-#define _INTF_ASYNC_   BIT(0)  /* support async io */
-
-struct intf_priv;
-
-struct io_req {
-       struct list_head        list;
-       u32     addr;
-       volatile u32    val;
-       u32     command;
-       u32     status;
-       u8      *pbuf;
-       struct semaphore        sema;
-
-       void (*_async_io_callback)(struct rtw_adapter *padater, struct io_req *pio_req, u8 *cnxt);
-       u8 *cnxt;
-};
-
-struct reg_protocol_rd {
-
-#ifdef __LITTLE_ENDIAN
-
-       /* DW1 */
-       u32             NumOfTrans:4;
-       u32             Reserved1:4;
-       u32             Reserved2:24;
-       /* DW2 */
-       u32             ByteCount:7;
-       u32             WriteEnable:1;          /* 0:read, 1:write */
-       u32             FixOrContinuous:1;      /* 0:continuous, 1: Fix */
-       u32             BurstMode:1;
-       u32             Byte1Access:1;
-       u32             Byte2Access:1;
-       u32             Byte4Access:1;
-       u32             Reserved3:3;
-       u32             Reserved4:16;
-       /* DW3 */
-       u32             BusAddress;
-       /* DW4 */
-       /* u32          Value; */
-#else
-
-
-/* DW1 */
-       u32 Reserved1  :4;
-       u32 NumOfTrans :4;
-
-       u32 Reserved2  :24;
-
-       /* DW2 */
-       u32 WriteEnable : 1;
-       u32 ByteCount :7;
-
-
-       u32 Reserved3 : 3;
-       u32 Byte4Access : 1;
-
-       u32 Byte2Access : 1;
-       u32 Byte1Access : 1;
-       u32 BurstMode :1 ;
-       u32 FixOrContinuous : 1;
-
-       u32 Reserved4 : 16;
-
-       /* DW3 */
-       u32             BusAddress;
-
-       /* DW4 */
-       /* u32          Value; */
-
-#endif
-
-};
-
-
-struct reg_protocol_wt {
-
-
-#ifdef __LITTLE_ENDIAN
-
-       /* DW1 */
-       u32             NumOfTrans:4;
-       u32             Reserved1:4;
-       u32             Reserved2:24;
-       /* DW2 */
-       u32             ByteCount:7;
-       u32             WriteEnable:1;          /* 0:read, 1:write */
-       u32             FixOrContinuous:1;      /* 0:continuous, 1: Fix */
-       u32             BurstMode:1;
-       u32             Byte1Access:1;
-       u32             Byte2Access:1;
-       u32             Byte4Access:1;
-       u32             Reserved3:3;
-       u32             Reserved4:16;
-       /* DW3 */
-       u32             BusAddress;
-       /* DW4 */
-       u32             Value;
-
-#else
-       /* DW1 */
-       u32 Reserved1  :4;
-       u32 NumOfTrans :4;
-
-       u32 Reserved2  :24;
-
-       /* DW2 */
-       u32 WriteEnable : 1;
-       u32 ByteCount :7;
-
-       u32 Reserved3 : 3;
-       u32 Byte4Access : 1;
-
-       u32 Byte2Access : 1;
-       u32 Byte1Access : 1;
-       u32 BurstMode :1 ;
-       u32 FixOrContinuous : 1;
-
-       u32 Reserved4 : 16;
-
-       /* DW3 */
-       u32             BusAddress;
-
-       /* DW4 */
-       u32             Value;
-
-#endif
-
-};
-
-#define PlatformEFIOWrite1Byte(_a, _b, _c)             \
-       rtl8723au_write8(_a, _b, _c)
-#define PlatformEFIOWrite2Byte(_a, _b, _c)             \
-       rtl8723au_write16(_a, _b, _c)
-#define PlatformEFIOWrite4Byte(_a, _b, _c)             \
-       rtl8723au_write32(_a, _b, _c)
-
-#define PlatformEFIORead1Byte(_a, _b)          rtl8723au_read8(_a, _b)
-#define PlatformEFIORead2Byte(_a, _b)          rtl8723au_read16(_a, _b)
-#define PlatformEFIORead4Byte(_a, _b)          rtl8723au_read32(_a, _b)
-
-#endif /* _RTL8711_IO_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
deleted file mode 100644 (file)
index dbd3a5f..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- *
- ******************************************************************************/
-#ifndef __RTW_MLME_H_
-#define __RTW_MLME_H_
-
-#include <osdep_service.h>
-#include <mlme_osdep.h>
-#include <drv_types.h>
-#include <wlan_bssdef.h>
-
-#define        MAX_BSS_CNT     128
-#define   MAX_JOIN_TIMEOUT     6500
-
-/* Increase the scanning timeout because of increasing the SURVEY_TO value. */
-
-#define        SCANNING_TIMEOUT        8000
-
-#define        SCAN_INTERVAL   (30) /*  unit:2sec, 30*2 = 60sec */
-
-#define        SCANQUEUE_LIFETIME 20 /*  unit:sec */
-
-#define        WIFI_NULL_STATE         0x00000000
-
-#define        WIFI_ASOC_STATE         0x00000001 /*  Under Linked state.*/
-#define        WIFI_REASOC_STATE       0x00000002
-#define        WIFI_SLEEP_STATE        0x00000004
-#define        WIFI_STATION_STATE      0x00000008
-
-#define        WIFI_AP_STATE           0x00000010
-#define        WIFI_ADHOC_STATE        0x00000020
-#define   WIFI_ADHOC_MASTER_STATE      0x00000040
-#define   WIFI_UNDER_LINKING   0x00000080
-
-#define        WIFI_UNDER_WPS          0x00000100
-#define        WIFI_STA_ALIVE_CHK_STATE        0x00000400
-/* to indicate the station is under site surveying */
-#define        WIFI_SITE_MONITOR       0x00000800
-
-#define        WIFI_MP_STATE           0x00010000
-#define        WIFI_MP_CTX_BACKGROUND  0x00020000      /*  in continuous tx background */
-#define        WIFI_MP_CTX_ST          0x00040000      /*  in continuous tx with single-tone */
-#define        WIFI_MP_CTX_BACKGROUND_PENDING  0x00080000      /*  pending in continuous tx background due to out of skb */
-#define        WIFI_MP_CTX_CCK_HW      0x00100000      /*  in continuous tx */
-#define        WIFI_MP_CTX_CCK_CS      0x00200000      /*  in continuous tx with carrier suppression */
-#define   WIFI_MP_LPBK_STATE   0x00400000
-
-#define _FW_UNDER_LINKING      WIFI_UNDER_LINKING
-#define _FW_LINKED             WIFI_ASOC_STATE
-#define _FW_UNDER_SURVEY       WIFI_SITE_MONITOR
-
-
-enum dot11AuthAlgrthmNum {
-       dot11AuthAlgrthm_Open = 0,
-       dot11AuthAlgrthm_Shared,
-       dot11AuthAlgrthm_8021X,
-       dot11AuthAlgrthm_Auto,
-       dot11AuthAlgrthm_MaxNum
-};
-
-/*  Scan type including active and passive scan. */
-enum rt_scan_type {
-       SCAN_PASSIVE,
-       SCAN_ACTIVE,
-       SCAN_MIX,
-};
-
-enum {
-       GHZ24_50 = 0,
-       GHZ_50,
-       GHZ_24,
-};
-
-/*
-
-there are several "locks" in mlme_priv,
-since mlme_priv is a shared resource between many threads,
-like ISR/Call-Back functions, the OID handlers, and even timer functions.
-
-
-Each _queue has its own locks, already.
-Other items are protected by mlme_priv.lock.
-
-To avoid possible dead lock, any thread trying to modifiying mlme_priv
-SHALL not lock up more than one locks at a time!
-*/
-
-struct rt_link_detect {
-       u32     NumTxOkInPeriod;
-       u32     NumRxOkInPeriod;
-       u32     NumRxUnicastOkInPeriod;
-       bool    bBusyTraffic;
-       bool    bTxBusyTraffic;
-       bool    bRxBusyTraffic;
-       bool    bHigherBusyTraffic; /*  For interrupt migration purpose. */
-       bool    bHigherBusyRxTraffic; /*  We may disable Tx interrupt according as Rx traffic. */
-       bool    bHigherBusyTxTraffic; /*  We may disable Tx interrupt according as Tx traffic. */
-};
-
-struct mlme_priv {
-       spinlock_t      lock;
-       int     fw_state;
-       u8 bScanInProcess;
-       u8      to_join; /* flag */
-       u8 to_roaming; /*  roaming trying times */
-
-       struct rtw_adapter *nic_hdl;
-
-       u8      not_indic_disco;
-       struct rtw_queue        scanned_queue;
-
-       struct cfg80211_ssid assoc_ssid;
-       u8      assoc_bssid[6];
-
-       struct wlan_network     cur_network;
-
-       /* uint wireless_mode; no used, remove it */
-
-       u32     scan_interval;
-
-       struct timer_list assoc_timer;
-
-       uint assoc_by_bssid;
-       uint assoc_by_rssi;
-
-       struct timer_list scan_to_timer;
-
-       struct timer_list set_scan_deny_timer;
-       atomic_t set_scan_deny; /* 0: allowed, 1: deny */
-
-       unsigned int qos_option;
-
-       /* Number of non-HT AP/stations */
-       int num_sta_no_ht;
-
-       int num_FortyMHzIntolerant;
-
-       struct ht_priv  htpriv;
-
-       struct rt_link_detect LinkDetectInfo;
-       struct timer_list dynamic_chk_timer; /* dynamic/periodic check timer */
-
-       u8      key_mask; /* use for ips to set wep key after ips_leave23a */
-       u8      acm_mask; /*  for wmm acm mask */
-       u8      ChannelPlan;
-       enum rt_scan_type scan_mode; /*  active: 1, passive: 0 */
-
-       u8 *wps_probe_req_ie;
-       u32 wps_probe_req_ie_len;
-       u8 *assoc_req;
-       u32 assoc_req_len;
-       u32 assoc_rsp_len;
-       u8 *assoc_rsp;
-
-#ifdef CONFIG_8723AU_AP_MODE
-       /* Number of associated Non-ERP stations (i.e., stations using 802.11b
-        * in 802.11g BSS) */
-       int num_sta_non_erp;
-
-       /* Number of associated stations that do not support Short Slot Time */
-       int num_sta_no_short_slot_time;
-
-       /* Number of associated stations that do not support Short Preamble */
-       int num_sta_no_short_preamble;
-
-       int olbc; /* Overlapping Legacy BSS Condition */
-
-       /* Number of HT associated stations that do not support greenfield */
-       int num_sta_ht_no_gf;
-
-       /* Number of associated non-HT stations */
-       /* int num_sta_no_ht; */
-
-       /* Number of HT associated stations 20 MHz */
-       int num_sta_ht_20mhz;
-
-       /* Overlapping BSS information */
-       int olbc_ht;
-
-       u16 ht_op_mode;
-
-       spinlock_t      bcn_update_lock;
-       u8              update_bcn;
-
-#endif /* ifdef CONFIG_8723AU_AP_MODE */
-};
-
-void rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf);
-void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf);
-void rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
-void rtw23a_joinbss_event_cb(struct rtw_adapter *adapter, const u8 *pbuf);
-void rtw_stassoc_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
-void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf);
-
-int event_thread(void *context);
-void rtw23a_join_to_handler(unsigned long);
-
-void rtw_free_network_queue23a(struct rtw_adapter *adapter);
-int rtw_init_mlme_priv23a(struct rtw_adapter *adapter);
-
-void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
-
-int rtw_do_join_adhoc(struct rtw_adapter *adapter);
-int rtw_do_join_network(struct rtw_adapter *adapter,
-                       struct wlan_network *candidate);
-int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv);
-int rtw_set_key23a(struct rtw_adapter *adapter,
-               struct security_priv *psecuritypriv, int keyid, u8 set_tx);
-int rtw_set_auth23a(struct rtw_adapter *adapter,
-                struct security_priv *psecuritypriv);
-
-static inline u8 *get_bssid(struct mlme_priv *pmlmepriv)
-{      /* if sta_mode:pmlmepriv->cur_network.network.MacAddress => bssid */
-       /*  if adhoc_mode:pmlmepriv->cur_network.network.MacAddress => ibss mac address */
-       return pmlmepriv->cur_network.network.MacAddress;
-}
-
-static inline bool check_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       if (pmlmepriv->fw_state & state)
-               return true;
-
-       return false;
-}
-
-static inline int get_fwstate(struct mlme_priv *pmlmepriv)
-{
-       return pmlmepriv->fw_state;
-}
-
-/*
- * No Limit on the calling context,
- * therefore set it to be the critical section...
- *
- * ### NOTE:#### (!!!!)
- * MUST TAKE CARE THAT BEFORE CALLING THIS FUNC, YOU SHOULD HAVE LOCKED pmlmepriv->lock
- */
-static inline void set_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       pmlmepriv->fw_state |= state;
-       /* FOR HW integration */
-       if (_FW_UNDER_SURVEY == state)
-               pmlmepriv->bScanInProcess = true;
-}
-
-static inline void _clr_fwstate_(struct mlme_priv *pmlmepriv, int state)
-{
-       pmlmepriv->fw_state &= ~state;
-       /* FOR HW integration */
-       if (_FW_UNDER_SURVEY == state)
-               pmlmepriv->bScanInProcess = false;
-}
-
-/*
- * No Limit on the calling context,
- * therefore set it to be the critical section...
- */
-static inline void clr_fwstate(struct mlme_priv *pmlmepriv, int state)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       if (check_fwstate(pmlmepriv, state))
-               pmlmepriv->fw_state ^= state;
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
-{
-       spin_lock_bh(&pmlmepriv->lock);
-       _clr_fwstate_(pmlmepriv, state);
-       spin_unlock_bh(&pmlmepriv->lock);
-}
-
-void rtw_disconnect_hdl23a_under_linked(struct rtw_adapter *adapter,
-                                    struct sta_info *psta, u8 free_assoc);
-void rtw_generate_random_ibss23a(u8 *pibss);
-struct wlan_network *rtw_find_network23a(struct rtw_queue *scanned_queue, u8 *addr);
-struct wlan_network *rtw_get_oldest_wlan_network23a(struct rtw_queue *scanned_queue);
-
-void rtw_free_assoc_resources23a(struct rtw_adapter *adapter,
-                             int lock_scanned_queue);
-void rtw_indicate_disconnect23a(struct rtw_adapter *adapter);
-void rtw_indicate_connect23a(struct rtw_adapter *adapter);
-void rtw_scan_abort23a(struct rtw_adapter *adapter);
-
-int rtw_restruct_sec_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie,
-                       uint in_len);
-int rtw_restruct_wmm_ie23a(struct rtw_adapter *adapter, u8 *in_ie, u8 *out_ie,
-                       uint in_len, uint initial_out_len);
-void rtw_init_registrypriv_dev_network23a(struct rtw_adapter *adapter);
-
-void rtw_update_registrypriv_dev_network23a(struct rtw_adapter *adapter);
-
-void rtw_scan_timeout_handler23a(unsigned long data);
-
-void rtw_dynamic_check_timer_handler(unsigned long data);
-bool rtw_is_scan_deny(struct rtw_adapter *adapter);
-void rtw_clear_scan_deny(struct rtw_adapter *adapter);
-void rtw_set_scan_deny_timer_hdl(unsigned long data);
-void rtw_set_scan_deny(struct rtw_adapter *adapter, u32 ms);
-
-void rtw23a_free_mlme_priv_ie_data(struct mlme_priv *pmlmepriv);
-
-void _rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
-
-struct wlan_network *rtw_alloc_network(struct mlme_priv *pmlmepriv, gfp_t gfp);
-
-int rtw_if_up23a(struct rtw_adapter *padapter);
-
-int rtw_linked_check(struct rtw_adapter *padapter);
-
-void rtw_joinbss_reset23a(struct rtw_adapter *padapter);
-
-bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
-                             u8 *out_ie, uint in_len, uint *pout_len);
-void rtw_update_ht_cap23a(struct rtw_adapter *padapter,
-                      u8 *pie, uint ie_len);
-void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
-                           struct xmit_frame *pxmitframe);
-
-bool rtw_is_same_ibss23a(struct rtw_adapter *adapter,
-                        struct wlan_network *pnetwork);
-int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst);
-
-void rtw23a_roaming(struct rtw_adapter *adapter,
-                struct wlan_network *tgt_network);
-void rtw_set_roaming(struct rtw_adapter *adapter, u8 to_roaming);
-
-#endif /* __RTL871X_MLME_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
deleted file mode 100644 (file)
index 0e7d3da..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_MLME_EXT_H_
-#define __RTW_MLME_EXT_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wlan_bssdef.h>
-
-
-/*     Commented by Albert 20101105 */
-/*     Increase the SURVEY_TO value from 100 to 150  ( 100ms to 150ms ) */
-/*     The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request. */
-/*     So, this driver tried to extend the dwell time for each scanning channel. */
-/*     This will increase the chance to receive the probe response from SoftAP. */
-
-#define SURVEY_TO              (100)
-#define REAUTH_TO              (300) /* 50) */
-#define REASSOC_TO             (300) /* 50) */
-/* define DISCONNECT_TO        (3000) */
-#define ADDBA_TO                       (2000)
-
-#define LINKED_TO (1) /* unit:2 sec, 1x2=2 sec */
-
-#define REAUTH_LIMIT   (4)
-#define REASSOC_LIMIT  (4)
-#define READDBA_LIMIT  (2)
-
-#define ROAMING_LIMIT  8
-
-#define        DYNAMIC_FUNC_DISABLE                    (0x0)
-
-/*  ====== enum odm_ability ======== */
-/*  BB ODM section BIT 0-15 */
-#define        DYNAMIC_BB_DIG                          BIT(0)
-#define        DYNAMIC_BB_RA_MASK                      BIT(1)
-#define        DYNAMIC_BB_DYNAMIC_TXPWR        BIT(2)
-#define        DYNAMIC_BB_BB_FA_CNT                    BIT(3)
-
-#define                DYNAMIC_BB_RSSI_MONITOR         BIT(4)
-#define                DYNAMIC_BB_CCK_PD                       BIT(5)
-#define                DYNAMIC_BB_ANT_DIV                      BIT(6)
-#define                DYNAMIC_BB_PWR_SAVE                     BIT(7)
-#define                DYNAMIC_BB_PWR_TRAIN                    BIT(8)
-#define                DYNAMIC_BB_RATE_ADAPTIVE                BIT(9)
-#define                DYNAMIC_BB_PATH_DIV                     BIT(10)
-#define                DYNAMIC_BB_PSD                          BIT(11)
-
-/*  MAC DM section BIT 16-23 */
-#define                DYNAMIC_MAC_struct edca_turboURBO               BIT(16)
-#define                DYNAMIC_MAC_EARLY_MODE          BIT(17)
-
-/*  RF ODM section BIT 24-31 */
-#define                DYNAMIC_RF_TX_PWR_TRACK         BIT(24)
-#define                DYNAMIC_RF_RX_GAIN_TRACK                BIT(25)
-#define                DYNAMIC_RF_CALIBRATION          BIT(26)
-
-#define                DYNAMIC_ALL_FUNC_ENABLE         0xFFFFFFF
-
-#define _HW_STATE_NOLINK_              0x00
-#define _HW_STATE_ADHOC_               0x01
-#define _HW_STATE_STATION_     0x02
-#define _HW_STATE_AP_                  0x03
-
-
-#define                _1M_RATE_       0
-#define                _2M_RATE_       1
-#define                _5M_RATE_       2
-#define                _11M_RATE_      3
-#define                _6M_RATE_       4
-#define                _9M_RATE_       5
-#define                _12M_RATE_      6
-#define                _18M_RATE_      7
-#define                _24M_RATE_      8
-#define                _36M_RATE_      9
-#define                _48M_RATE_      10
-#define                _54M_RATE_      11
-
-
-extern unsigned char WMM_OUI23A[];
-extern unsigned char WPS_OUI23A[];
-extern unsigned char WFD_OUI23A[];
-extern unsigned char P2P_OUI23A[];
-
-extern unsigned char WMM_INFO_OUI23A[];
-extern unsigned char WMM_PARA_OUI23A[];
-
-
-/*  */
-/*  Channel Plan Type. */
-/*  Note: */
-/*     We just add new channel plan when the new channel plan is different from any of the following */
-/*     channel plan. */
-/*     If you just want to customize the actions(scan period or join actions) about one of the channel plan, */
-/*     customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */
-/*  */
-enum  { /* _RT_CHANNEL_DOMAIN */
-       /*  old channel plan mapping ===== */
-       RT_CHANNEL_DOMAIN_FCC = 0x00,
-       RT_CHANNEL_DOMAIN_IC = 0x01,
-       RT_CHANNEL_DOMAIN_ETSI = 0x02,
-       RT_CHANNEL_DOMAIN_SPAIN = 0x03,
-       RT_CHANNEL_DOMAIN_FRANCE = 0x04,
-       RT_CHANNEL_DOMAIN_MKK = 0x05,
-       RT_CHANNEL_DOMAIN_MKK1 = 0x06,
-       RT_CHANNEL_DOMAIN_ISRAEL = 0x07,
-       RT_CHANNEL_DOMAIN_TELEC = 0x08,
-       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x09,
-       RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0x0A,
-       RT_CHANNEL_DOMAIN_TAIWAN = 0x0B,
-       RT_CHANNEL_DOMAIN_CHINA = 0x0C,
-       RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0x0D,
-       RT_CHANNEL_DOMAIN_KOREA = 0x0E,
-       RT_CHANNEL_DOMAIN_TURKEY = 0x0F,
-       RT_CHANNEL_DOMAIN_JAPAN = 0x10,
-       RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11,
-       RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12,
-       RT_CHANNEL_DOMAIN_WORLD_WIDE_5G = 0x13,
-       RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14,
-
-       /*  new channel plan mapping, (2GDOMAIN_5GDOMAIN) ===== */
-       RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20,
-       RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21,
-       RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22,
-       RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23,
-       RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24,
-       RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26,
-       RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27,
-       RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28,
-       RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29,
-       RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30,
-       RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31,
-       RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32,
-       RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33,
-       RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35,
-       RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36,
-       RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37,
-       RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38,
-       RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39,
-       RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40,
-       RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G = 0x41,
-       /*  Add new channel plan above this line=============== */
-       RT_CHANNEL_DOMAIN_MAX,
-       RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F,
-};
-
-enum { /* _RT_CHANNEL_DOMAIN_2G */
-       RT_CHANNEL_DOMAIN_2G_WORLD = 0x00,              /* Worldwird 13 */
-       RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01,              /* Europe */
-       RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02,               /* US */
-       RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03,               /* Japan */
-       RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04,              /* France */
-       RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
-       /*  Add new channel plan above this line=============== */
-       RT_CHANNEL_DOMAIN_2G_MAX,
-};
-
-enum { /* _RT_CHANNEL_DOMAIN_5G */
-       RT_CHANNEL_DOMAIN_5G_NULL = 0x00,
-       RT_CHANNEL_DOMAIN_5G_ETSI1 = 0x01,              /* Europe */
-       RT_CHANNEL_DOMAIN_5G_ETSI2 = 0x02,              /* Australia, New Zealand */
-       RT_CHANNEL_DOMAIN_5G_ETSI3 = 0x03,              /* Russia */
-       RT_CHANNEL_DOMAIN_5G_FCC1 = 0x04,               /* US */
-       RT_CHANNEL_DOMAIN_5G_FCC2 = 0x05,               /* FCC o/w DFS Channels */
-       RT_CHANNEL_DOMAIN_5G_FCC3 = 0x06,               /* India, Mexico */
-       RT_CHANNEL_DOMAIN_5G_FCC4 = 0x07,               /* Venezuela */
-       RT_CHANNEL_DOMAIN_5G_FCC5 = 0x08,               /* China */
-       RT_CHANNEL_DOMAIN_5G_FCC6 = 0x09,               /* Israel */
-       RT_CHANNEL_DOMAIN_5G_FCC7_IC1 = 0x0A,   /* US, Canada */
-       RT_CHANNEL_DOMAIN_5G_KCC1 = 0x0B,               /* Korea */
-       RT_CHANNEL_DOMAIN_5G_MKK1 = 0x0C,               /* Japan */
-       RT_CHANNEL_DOMAIN_5G_MKK2 = 0x0D,               /* Japan (W52, W53) */
-       RT_CHANNEL_DOMAIN_5G_MKK3 = 0x0E,               /* Japan (W56) */
-       RT_CHANNEL_DOMAIN_5G_NCC1 = 0x0F,               /* Taiwan */
-       RT_CHANNEL_DOMAIN_5G_NCC2 = 0x10,               /* Taiwan o/w DFS */
-       /*  Add new channel plan above this line=============== */
-       /*  Driver Self Defined ===== */
-       RT_CHANNEL_DOMAIN_5G_FCC = 0x11,
-       RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS = 0x12,
-       RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS = 0x13,
-       RT_CHANNEL_DOMAIN_5G_MAX,
-};
-
-#define rtw_is_channel_plan_valid(chplan) (chplan<RT_CHANNEL_DOMAIN_MAX || chplan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
-
-struct rt_channel_plan {
-       unsigned char   Channel[MAX_CHANNEL_NUM];
-       unsigned char   Len;
-};
-
-struct rt_channel_plan_2g {
-       unsigned char   Channel[MAX_CHANNEL_NUM_2G];
-       unsigned char   Len;
-};
-
-struct rt_channel_plan_5g {
-       unsigned char   Channel[MAX_CHANNEL_NUM_5G];
-       unsigned char   Len;
-};
-
-struct rt_channel_plan_map {
-       unsigned char   Index2G;
-       unsigned char   Index5G;
-};
-
-enum Associated_AP {
-       atherosAP       = 0,
-       broadcomAP      = 1,
-       ciscoAP         = 2,
-       marvellAP       = 3,
-       ralinkAP        = 4,
-       realtekAP       = 5,
-       airgocapAP      = 6,
-       unknownAP       = 7,
-       maxAP,
-};
-
-enum { /* HT_IOT_PEER_E */
-       HT_IOT_PEER_UNKNOWN             = 0,
-       HT_IOT_PEER_REALTEK             = 1,
-       HT_IOT_PEER_REALTEK_92SE        = 2,
-       HT_IOT_PEER_BROADCOM            = 3,
-       HT_IOT_PEER_RALINK              = 4,
-       HT_IOT_PEER_ATHEROS             = 5,
-       HT_IOT_PEER_CISCO               = 6,
-       HT_IOT_PEER_MERU                = 7,
-       HT_IOT_PEER_MARVELL             = 8,
-       HT_IOT_PEER_REALTEK_SOFTAP      = 9,/*  peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */
-       HT_IOT_PEER_SELF_SOFTAP         = 10, /*  Self is SoftAP */
-       HT_IOT_PEER_AIRGO               = 11,
-       HT_IOT_PEER_INTEL               = 12,
-       HT_IOT_PEER_RTK_APCLIENT        = 13,
-       HT_IOT_PEER_REALTEK_81XX        = 14,
-       HT_IOT_PEER_REALTEK_WOW         = 15,
-       HT_IOT_PEER_TENDA               = 16,
-       HT_IOT_PEER_MAX                 = 17
-};
-
-enum SCAN_STATE {
-       SCAN_DISABLE = 0,
-       SCAN_START = 1,
-       SCAN_TXNULL = 2,
-       SCAN_PROCESS = 3,
-       SCAN_COMPLETE = 4,
-       SCAN_STATE_MAX,
-};
-
-struct mlme_handler {
-       char *str;
-       int (*func)(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-};
-
-struct action_handler {
-       unsigned int   num;
-       char *str;
-       int (*func)(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
-};
-
-struct ss_res {
-       int     state;
-       int     bss_cnt;
-       int     channel_idx;
-       int     scan_mode;
-       u8 ssid_num;
-       u8 ch_num;
-       struct cfg80211_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
-};
-
-#define        WIFI_FW_AUTH_NULL                       0x00000100
-#define        WIFI_FW_AUTH_STATE                      0x00000200
-#define        WIFI_FW_AUTH_SUCCESS                    0x00000400
-
-#define        WIFI_FW_ASSOC_STATE                     0x00002000
-#define        WIFI_FW_ASSOC_SUCCESS           0x00004000
-
-#define        WIFI_FW_LINKING_STATE           (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
-
-struct FW_Sta_Info {
-       struct sta_info *psta;
-       u32     status;
-       u32     rx_pkt;
-       u32     retry;
-       unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
-};
-
-/*
- * Usage:
- * When one iface acted as AP mode and the other iface is STA mode and scanning,
- * it should switch back to AP's operating channel periodically.
- * Parameters info:
- * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
- * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
- * Example:
- * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
- * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MILLISECOND is 3 and SURVEY_TO is 100.
- * When it's STA mode gets set_scan command,
- * it would
- * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
- * 2. Back to channel 1 for 300 milliseconds
- * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
- * 4. Back to channel 1 for 300 milliseconds
- * 5. ... and so on, till survey done.
- */
-
-struct mlme_ext_info {
-       u32     state;
-       u32     reauth_count;
-       u32     reassoc_count;
-       u32     link_count;
-       u32     auth_seq;
-       u32     auth_algo;      /*  802.11 auth, could be open, shared, auto */
-       u32     authModeToggle;
-       u32     enc_algo;/* encrypt algorithm; */
-       u32     key_index;      /*  this is only valid for legendary wep, 0~3 for key id. */
-       u32     iv;
-       u8      chg_txt[128];
-       u16     aid;
-       u16     bcn_interval;
-       u16     capability;
-       u8      assoc_AP_vendor;
-       u8      slotTime;
-       u8      preamble_mode;
-       u8      WMM_enable;
-       u8      ERP_enable;
-       u8      ERP_IE;
-       u8      HT_enable;
-       u8      HT_caps_enable;
-       u8      HT_info_enable;
-       u8      HT_protection;
-       u8      turboMode_cts2self;
-       u8      turboMode_rtsen;
-       u8      SM_PS;
-       u8      ADDBA_retry_count;
-       u8      dialogToken;
-       /*  Accept ADDBA Request */
-       bool bAcceptAddbaReq;
-       u8      bwmode_updated;
-       u8      hidden_ssid_mode;
-
-       struct ADDBA_request            ADDBA_req;
-       struct WMM_para_element WMM_param;
-       struct ieee80211_ht_cap ht_cap;
-       struct ieee80211_ht_operation HT_info;
-       struct wlan_bssid_ex                    network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */
-       struct FW_Sta_Info              FW_sta_info[NUM_STA];
-};
-
-/*  The channel information about this channel including joining, scanning, and power constraints. */
-struct rt_channel_info {
-       u8              ChannelNum;             /*  The channel number. */
-       enum rt_scan_type ScanType;             /*  Scan type such as passive or active scan. */
-};
-
-int rtw_ch_set_search_ch23a(struct rt_channel_info *ch_set, const u32 ch);
-
-/*  P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */
-#define P2P_MAX_REG_CLASSES 10
-
-/*  P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class */
-#define P2P_MAX_REG_CLASS_CHANNELS 20
-
-/*   struct p2p_channels - List of supported channels */
-struct p2p_channels {
-       /*  struct p2p_reg_class - Supported regulatory class */
-       struct p2p_reg_class {
-               /*  reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */
-               u8 reg_class;
-
-               /*  channel - Supported channels */
-               u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
-
-               /*  channels - Number of channel entries in use */
-               size_t channels;
-       } reg_class[P2P_MAX_REG_CLASSES];
-
-       /*  reg_classes - Number of reg_class entries in use */
-       size_t reg_classes;
-};
-
-struct p2p_oper_class_map {
-       enum hw_mode {IEEE80211G, IEEE80211A} mode;
-       u8 op_class;
-       u8 min_chan;
-       u8 max_chan;
-       u8 inc;
-       enum {
-               BW20, BW40PLUS, BW40MINUS
-       } bw;
-};
-
-struct mlme_ext_priv {
-       struct rtw_adapter      *padapter;
-       u8      mlmeext_init;
-       atomic_t                event_seq;
-       u16     mgnt_seq;
-
-       /* struct fw_priv       fwpriv; */
-
-       unsigned char   cur_channel;
-       unsigned char   cur_bwmode;
-       unsigned char   cur_ch_offset;/* PRIME_CHNL_OFFSET */
-       unsigned char   cur_wireless_mode;      /*  NETWORK_TYPE */
-
-       unsigned char   max_chan_nums;
-       struct rt_channel_info          channel_set[MAX_CHANNEL_NUM];
-       struct p2p_channels channel_list;
-       unsigned char   basicrate[NumRates];
-       unsigned char   datarate[NumRates];
-
-       struct ss_res           sitesurvey_res;
-       struct mlme_ext_info    mlmext_info;/* for sta/adhoc mode, including current scanning/connecting/connected related info. */
-                                                     /* for ap mode, network includes ap's cap_info */
-       struct timer_list               survey_timer;
-       struct timer_list               link_timer;
-       u16                     chan_scan_time;
-
-       u8      scan_abort;
-       u8      tx_rate; /*  TXRATE when USERATE is set. */
-
-       u32     retry; /* retry for issue probereq */
-
-       u64 TSFValue;
-
-       unsigned char bstart_bss;
-       u8 update_channel_plan_by_ap_done;
-       /* recv_decache check for Action_public frame */
-       u8 action_public_dialog_token;
-       u16      action_public_rxseq;
-       u8 active_keep_alive_check;
-};
-
-int init_mlme_ext_priv23a(struct rtw_adapter *padapter);
-int init_hw_mlme_ext23a(struct rtw_adapter *padapter);
-void free_mlme_ext_priv23a (struct mlme_ext_priv *pmlmeext);
-void init_mlme_ext_timer23a(struct rtw_adapter *padapter);
-void init_addba_retry_timer23a(struct sta_info *psta);
-struct xmit_frame *alloc_mgtxmitframe23a(struct xmit_priv *pxmitpriv);
-
-unsigned char networktype_to_raid23a(unsigned char network_type);
-u8 judge_network_type23a(struct rtw_adapter *padapter, unsigned char *rate,
-                     int ratelen);
-void get_rate_set23a(struct rtw_adapter *padapter, unsigned char *pbssrate,
-                 int *bssrate_len);
-void UpdateBrateTbl23a(struct rtw_adapter *padapter, u8 *mBratesOS);
-void Update23aTblForSoftAP(u8 *bssrateset, u32 bssratelen);
-
-u8 rtw_get_oper_ch23a(struct rtw_adapter *adapter);
-void rtw_set_oper_ch23a(struct rtw_adapter *adapter, u8 ch);
-void rtw_set_oper_bw23a(struct rtw_adapter *adapter, u8 bw);
-void rtw_set_oper_ch23aoffset23a(struct rtw_adapter *adapter, u8 offset);
-
-void set_channel_bwmode23a(struct rtw_adapter *padapter, unsigned char channel,
-                       unsigned char channel_offset, unsigned short bwmode);
-void SelectChannel23a(struct rtw_adapter *padapter, unsigned char channel);
-
-unsigned int decide_wait_for_beacon_timeout23a(unsigned int bcn_interval);
-
-void clear_cam_entry23a(struct rtw_adapter *padapter, u8 entry);
-
-void invalidate_cam_all23a(struct rtw_adapter *padapter);
-
-int allocate_fw_sta_entry23a(struct rtw_adapter *padapter);
-void flush_all_cam_entry23a(struct rtw_adapter *padapter);
-
-bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel);
-
-void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
-                   struct rtw_adapter *padapter, bool update_ie);
-
-u8 *get_my_bssid23a(struct wlan_bssid_ex *pnetwork);
-
-bool is_client_associated_to_ap23a(struct rtw_adapter *padapter);
-bool is_client_associated_to_ibss23a(struct rtw_adapter *padapter);
-bool is_IBSS_empty23a(struct rtw_adapter *padapter);
-
-unsigned char check_assoc_AP23a(u8 *pframe, uint len);
-
-int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p);
-void WMMOnAssocRsp23a(struct rtw_adapter *padapter);
-
-void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p);
-void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p);
-void HTOnAssocRsp23a(struct rtw_adapter *padapter);
-
-void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p);
-void VCS_update23a(struct rtw_adapter *padapter, struct sta_info *psta);
-
-void update_beacon23a_info(struct rtw_adapter *padapter,
-                          struct ieee80211_mgmt *mgmt, uint len,
-                          struct sta_info *psta);
-int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
-                         struct ieee80211_mgmt *mgmt, u32 packet_len);
-void update_IOT_info23a(struct rtw_adapter *padapter);
-void update_capinfo23a(struct rtw_adapter *Adapter, u16 updateCap);
-void update_wireless_mode23a(struct rtw_adapter *padapter);
-void update_tx_basic_rate23a(struct rtw_adapter *padapter, u8 modulation);
-void update_bmc_sta_support_rate23a(struct rtw_adapter *padapter, u32 mac_id);
-int update_sta_support_rate23a(struct rtw_adapter *padapter, u8 *pvar_ie,
-                           uint var_ie_len, int cam_idx);
-
-/* for sta/adhoc mode */
-void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta);
-unsigned int update_basic_rate23a(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *ht_cap);
-void Update_RA_Entry23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void set_sta_rate23a(struct rtw_adapter *padapter, struct sta_info *psta);
-
-int receive_disconnect23a(struct rtw_adapter *padapter,
-                         unsigned char *MacAddr, unsigned short reason);
-
-unsigned char get_highest_rate_idx23a(u32 mask);
-int support_short_GI23a(struct rtw_adapter *padapter,
-                       struct ieee80211_ht_cap *ht_cap);
-bool is_ap_in_tkip23a(struct rtw_adapter *padapter);
-bool is_ap_in_wep23a(struct rtw_adapter *padapter);
-bool should_forbid_n_rate23a(struct rtw_adapter *padapter);
-
-void report_join_res23a(struct rtw_adapter *padapter, int res);
-void report_survey_event23a(struct rtw_adapter *padapter,
-                        struct recv_frame *precv_frame);
-void report_surveydone_event23a(struct rtw_adapter *padapter);
-void report_del_sta_event23a(struct rtw_adapter *padapter,
-                         unsigned char *MacAddr, unsigned short reason);
-void report_add_sta_event23a(struct rtw_adapter *padapter,
-                         unsigned char *MacAddr, int cam_idx);
-
-int set_tx_beacon_cmd23a(struct rtw_adapter*padapter);
-unsigned int setup_beacon_frame(struct rtw_adapter *padapter,
-                               unsigned char *beacon_frame);
-void update_mgnt_tx_rate23a(struct rtw_adapter *padapter, u8 rate);
-void update_mgntframe_attrib23a(struct rtw_adapter *padapter,
-                            struct pkt_attrib *pattrib);
-void dump_mgntframe23a(struct rtw_adapter *padapter,
-                   struct xmit_frame *pmgntframe);
-s32 dump_mgntframe23a_and_wait(struct rtw_adapter *padapter,
-                           struct xmit_frame *pmgntframe, int timeout_ms);
-s32 dump_mgntframe23a_and_wait_ack23a(struct rtw_adapter *padapter,
-                               struct xmit_frame *pmgntframe);
-
-void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms);
-int issue_nulldata23a(struct rtw_adapter *padapter, unsigned char *da,
-                  unsigned int power_mode, int try_cnt, int wait_ms);
-int issue_qos_nulldata23a(struct rtw_adapter *padapter, unsigned char *da, u16 tid,
-                      int try_cnt, int wait_ms);
-int issue_deauth23a(struct rtw_adapter *padapter, unsigned char *da,
-                unsigned short reason);
-void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter, u8 *ra,
-                                u8 new_ch, u8 ch_offset);
-void issue_action_BA23a(struct rtw_adapter *padapter,
-                       const unsigned char *raddr,
-                       unsigned char action, unsigned short status);
-int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr);
-int send_beacon23a(struct rtw_adapter *padapter);
-
-void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, int join_res);
-void mlmeext_sta_del_event_callback23a(struct rtw_adapter *padapter);
-void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, struct sta_info *psta);
-
-void linked_status_chk23a(struct rtw_adapter *padapter);
-
-#define set_survey_timer(mlmeext, ms) \
-       /*DBG_8723A("%s set_survey_timer(%p, %d)\n", __func__, (mlmeext), (ms));*/ \
-       mod_timer(&mlmeext->survey_timer, jiffies + msecs_to_jiffies(ms));
-
-#define set_link_timer(mlmeext, ms) \
-       /*DBG_8723A("%s set_link_timer(%p, %d)\n", __func__, (mlmeext), (ms));*/ \
-       mod_timer(&mlmeext->link_timer, jiffies + msecs_to_jiffies(ms));
-
-int cckrates_included23a(unsigned char *rate, int ratelen);
-int cckratesonly_included23a(unsigned char *rate, int ratelen);
-
-void process_addba_req23a(struct rtw_adapter *padapter, u8 *paddba_req, u8 *addr);
-
-void correct_TSF23a(struct rtw_adapter *padapter, struct mlme_ext_priv *pmlmeext);
-
-struct cmd_hdl {
-       uint    parmsize;
-       int (*h2cfuns)(struct rtw_adapter *padapter, const u8 *pbuf);
-};
-
-
-int read_macreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-int write_macreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-int read_bbreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-int write_bbreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-int read_rfreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-int write_rfreg_hdl(struct rtw_adapter *padapter, u8 *pbuf);
-
-
-int NULL_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int setauth_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int setkey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int set_stakey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int set_assocsta_hdl(struct rtw_adapter *padapter, const u8 *pbuf);
-int del_assocsta_hdl(struct rtw_adapter *padapter, const u8 *pbuf);
-int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-
-int mlme_evt_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int h2c_msg_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int tx_beacon_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-int set_csa_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);      /* Kurt: Handling DFS channel switch announcement ie. */
-int tdls_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf);
-
-#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl23a},
-#define GEN_MLME_EXT_HANDLER(size, cmd)        {size, cmd},
-
-struct C2HEvent_Header {
-#ifdef __LITTLE_ENDIAN
-
-       unsigned int len:16;
-       unsigned int ID:8;
-       unsigned int seq:8;
-
-#elif defined(__BIG_ENDIAN)
-
-       unsigned int seq:8;
-       unsigned int ID:8;
-       unsigned int len:16;
-
-#else
-
-#  error "Must be LITTLE or BIG Endian"
-
-#endif
-
-       unsigned int rsvd;
-};
-
-enum rtw_c2h_event {
-       GEN_EVT_CODE(_Read_MACREG) = 0, /*0*/
-       GEN_EVT_CODE(_Read_BBREG),
-       GEN_EVT_CODE(_Read_RFREG),
-       GEN_EVT_CODE(_Read_EEPROM),
-       GEN_EVT_CODE(_Read_EFUSE),
-       GEN_EVT_CODE(_Read_CAM),                        /*5*/
-       GEN_EVT_CODE(_Get_BasicRate),
-       GEN_EVT_CODE(_Get_DataRate),
-       GEN_EVT_CODE(_Survey),   /*8*/
-       GEN_EVT_CODE(_SurveyDone),       /*9*/
-
-       GEN_EVT_CODE(_JoinBss) , /*10*/
-       GEN_EVT_CODE(_AddSTA),
-       GEN_EVT_CODE(_DelSTA),
-       GEN_EVT_CODE(_AtimDone) ,
-       GEN_EVT_CODE(_TX_Report),
-       GEN_EVT_CODE(_CCX_Report),                      /*15*/
-       GEN_EVT_CODE(_DTM_Report),
-       GEN_EVT_CODE(_TX_Rate_Statistics),
-       GEN_EVT_CODE(_C2HLBK),
-       GEN_EVT_CODE(_FWDBG),
-       GEN_EVT_CODE(_C2HFEEDBACK),               /*20*/
-       GEN_EVT_CODE(_ADDBA),
-       GEN_EVT_CODE(_C2HBCN),
-       GEN_EVT_CODE(_ReportPwrState),          /* filen: only for PCIE, USB */
-       GEN_EVT_CODE(_CloseRF),                         /* filen: only for PCIE, work around ASPM */
-       MAX_C2HEVT
-};
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_pwrctrl.h b/drivers/staging/rtl8723au/include/rtw_pwrctrl.h
deleted file mode 100644 (file)
index 599fed9..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_PWRCTRL_H_
-#define __RTW_PWRCTRL_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define FW_PWR0                0
-#define FW_PWR1                1
-#define FW_PWR2                2
-#define FW_PWR3                3
-
-
-#define HW_PWR0                7
-#define HW_PWR1                6
-#define HW_PWR2                2
-#define HW_PWR3                0
-#define HW_PWR4                8
-
-#define FW_PWRMSK      0x7
-
-
-#define XMIT_ALIVE     BIT(0)
-#define RECV_ALIVE     BIT(1)
-#define CMD_ALIVE      BIT(2)
-#define EVT_ALIVE      BIT(3)
-
-enum Power_Mgnt {
-       PS_MODE_ACTIVE  = 0,
-       PS_MODE_MIN,
-       PS_MODE_MAX,
-       PS_MODE_DTIM,
-       PS_MODE_VOIP,
-       PS_MODE_UAPSD_WMM,
-       PS_MODE_UAPSD,
-       PS_MODE_IBSS,
-       PS_MODE_WWLAN,
-       PM_Radio_Off,
-       PM_Card_Disable,
-       PS_MODE_NUM
-};
-
-
-/* BIT[2:0] = HW state
- * BIT[3] = Protocol PS state,  0: active, 1: sleep state
- * BIT[4] = sub-state
- */
-
-#define PS_DPS                 BIT(0)
-#define PS_LCLK                        (PS_DPS)
-#define PS_RF_OFF              BIT(1)
-#define PS_ALL_ON              BIT(2)
-#define PS_ST_ACTIVE           BIT(3)
-
-#define PS_ISR_ENABLE          BIT(4)
-#define PS_IMR_ENABLE          BIT(5)
-#define PS_ACK                 BIT(6)
-#define PS_TOGGLE              BIT(7)
-
-#define PS_STATE_MASK          (0x0F)
-#define PS_STATE_HW_MASK       (0x07)
-#define PS_SEQ_MASK            (0xc0)
-
-#define PS_STATE(x)            (PS_STATE_MASK & (x))
-#define PS_STATE_HW(x) (PS_STATE_HW_MASK & (x))
-#define PS_SEQ(x)              (PS_SEQ_MASK & (x))
-
-#define PS_STATE_S0            (PS_DPS)
-#define PS_STATE_S1            (PS_LCLK)
-#define PS_STATE_S2            (PS_RF_OFF)
-#define PS_STATE_S3            (PS_ALL_ON)
-#define PS_STATE_S4            ((PS_ST_ACTIVE) | (PS_ALL_ON))
-
-
-#define PS_IS_RF_ON(x) ((x) & (PS_ALL_ON))
-#define PS_IS_ACTIVE(x)        ((x) & (PS_ST_ACTIVE))
-#define CLR_PS_STATE(x)        ((x) = ((x) & (0xF0)))
-
-
-struct reportpwrstate_parm {
-       unsigned char mode;
-       unsigned char state; /* the CPWM value */
-       unsigned short rsvd;
-};
-
-#define LPS_DELAY_TIME (1*HZ) /*  1 sec */
-
-#define EXE_PWR_NONE           0x01
-#define EXE_PWR_IPS            0x02
-#define EXE_PWR_LPS            0x04
-
-/*  RF state. */
-enum rt_rf_power_state {
-       rf_on,          /*  RF is on after RFSleep or RFOff */
-       rf_sleep,       /*  802.11 Power Save mode */
-       rf_off,         /*  HW/SW Radio OFF or Inactive Power Save */
-       /* Add the new RF state above this line===== */
-       rf_max
-};
-
-/*  RF Off Level for IPS or HW/SW radio off */
-#define        RT_RF_OFF_LEVL_ASPM             BIT(0)  /*  PCI ASPM */
-#define        RT_RF_OFF_LEVL_CLK_REQ          BIT(1)  /*  PCI clock request */
-#define        RT_RF_OFF_LEVL_PCI_D3           BIT(2)  /*  PCI D3 mode */
-/* NIC halt, re-init hw params */
-#define        RT_RF_OFF_LEVL_HALT_NIC         BIT(3)
-/*  FW free, re-download the FW */
-#define        RT_RF_OFF_LEVL_FREE_FW          BIT(4)
-#define        RT_RF_OFF_LEVL_FW_32K           BIT(5)  /*  FW in 32k */
-/*  Always enable ASPM and Clock Req in initialization. */
-#define        RT_RF_PS_LEVEL_ALWAYS_ASPM      BIT(6)
-/*  When LPS is on, disable 2R if no packet is received or transmittd. */
-#define        RT_RF_LPS_DISALBE_2R            BIT(30)
-#define        RT_RF_LPS_LEVEL_ASPM            BIT(31) /*  LPS with ASPM */
-
-#define        RT_IN_PS_LEVEL(ppsc, _PS_FLAG)                          \
-       ((ppsc->cur_ps_level & _PS_FLAG) ? true : false)
-#define        RT_CLEAR_PS_LEVEL(ppsc, _PS_FLAG)                       \
-       (ppsc->cur_ps_level &= (~(_PS_FLAG)))
-#define        RT_SET_PS_LEVEL(ppsc, _PS_FLAG)                         \
-       (ppsc->cur_ps_level |= _PS_FLAG)
-
-
-enum {
-       PSBBREG_RF0 = 0,
-       PSBBREG_RF1,
-       PSBBREG_RF2,
-       PSBBREG_AFE0,
-       PSBBREG_TOTALCNT
-};
-
-enum { /*  for ips_mode */
-       IPS_NONE = 0,
-       IPS_NORMAL,
-       IPS_LEVEL_2,
-};
-
-struct pwrctrl_priv {
-       struct semaphore lock;
-       volatile u8 rpwm; /* requested power state for fw */
-       volatile u8 cpwm; /* fw current power state. updated when 1.
-                          * read from HCPWM 2. driver lowers power level
-                          */
-       volatile u8 tog; /*  toggling */
-
-       u8      pwr_mode;
-       u8      smart_ps;
-       u8      bcn_ant_mode;
-
-       u8      bpower_saving;
-
-       u8      reg_rfoff;
-       u32     rfoff_reason;
-
-       /* RF OFF Level */
-       u32     cur_ps_level;
-       u32     reg_rfps_level;
-
-       uint    ips_enter23a_cnts;
-       uint    ips_leave23a_cnts;
-
-       u8      ips_mode;
-       u8      ips_mode_req; /*  used to accept the mode setting request */
-       uint bips_processing;
-       unsigned long ips_deny_time; /* deny IPS when system time is smaller */
-       u8 ps_processing; /* used to mark whether in rtw_ps_processor23a */
-
-       u8      bLeisurePs;
-       u8      LpsIdleCount;
-       u8      power_mgnt;
-       u8      bFwCurrentInPSMode;
-       unsigned long   DelayLPSLastTimeStamp;
-       u8      btcoex_rfon;
-
-       u8              bInSuspend;
-#ifdef CONFIG_8723AU_BT_COEXIST
-       u8              bAutoResume;
-       u8              autopm_cnt;
-#endif
-       u8              bSupportRemoteWakeup;
-       struct timer_list       pwr_state_check_timer;
-       int             pwr_state_check_interval;
-       u8              pwr_state_check_cnts;
-
-       enum rt_rf_power_state  rf_pwrstate;/* cur power state */
-       enum rt_rf_power_state  change_rfpwrstate;
-
-       u8      bkeepfwalive;
-       unsigned long PS_BBRegBackup[PSBBREG_TOTALCNT];
-};
-
-#define RTW_PWR_STATE_CHK_INTERVAL 2000
-
-#define _rtw_set_pwr_state_check_timer(pwrctrlpriv, ms) \
-       (mod_timer(&pwrctrlpriv->pwr_state_check_timer, jiffies +       \
-                 msecs_to_jiffies(ms)))
-
-#define rtw_set_pwr_state_check_timer(pwrctrlpriv)     \
-       (_rtw_set_pwr_state_check_timer((pwrctrlpriv),  \
-                        (pwrctrlpriv)->pwr_state_check_interval))
-
-void rtw_init_pwrctrl_priv23a(struct rtw_adapter *adapter);
-void rtw_free_pwrctrl_priv(struct rtw_adapter *adapter);
-
-void rtw_set_ps_mode23a(struct rtw_adapter *padapter, u8 ps_mode,
-                    u8 smart_ps, u8 bcn_ant_mode);
-void rtw_set_rpwm23a(struct rtw_adapter *padapter, u8 val8);
-void LeaveAllPowerSaveMode23a(struct rtw_adapter *adapter);
-void ips_enter23a(struct rtw_adapter *padapter);
-int ips_leave23a(struct rtw_adapter *padapter);
-
-void rtw_ps_processor23a(struct rtw_adapter *padapter);
-
-enum rt_rf_power_state RfOnOffDetect23a(struct rtw_adapter *adapter);
-
-s32 LPS_RF_ON_check23a(struct rtw_adapter *padapter, u32 delay_ms);
-void LPS_Enter23a(struct rtw_adapter *padapter);
-void LPS_Leave23a(struct rtw_adapter *padapter);
-
-void rtw_set_ips_deny23a(struct rtw_adapter *padapter, u32 ms);
-int _rtw_pwr_wakeup23a(struct rtw_adapter *padapter, u32 ips_deffer_ms,
-                   const char *caller);
-#define rtw_pwr_wakeup(adapter) _rtw_pwr_wakeup23a(adapter,            \
-        RTW_PWR_STATE_CHK_INTERVAL, __func__)
-int rtw_pm_set_ips23a(struct rtw_adapter *padapter, u8 mode);
-int rtw_pm_set_lps23a(struct rtw_adapter *padapter, u8 mode);
-
-#endif  /* __RTL871X_PWRCTRL_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_recv.h b/drivers/staging/rtl8723au/include/rtw_recv.h
deleted file mode 100644 (file)
index 85a5edb..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTW_RECV_H_
-#define _RTW_RECV_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <Hal8723APhyCfg.h>
-
-#define NR_RECVFRAME           256
-
-#define MAX_RXFRAME_CNT                512
-#define MAX_RX_NUMBLKS         (32)
-#define RECVFRAME_HDR_ALIGN    128
-
-#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
-
-#define MAX_SUBFRAME_COUNT     64
-
-/* for Rx reordering buffer control */
-struct recv_reorder_ctrl {
-       struct rtw_adapter      *padapter;
-       u8 enable;
-       u16 indicate_seq;/* wstart_b, init_value=0xffff */
-       u16 wend_b;
-       u8 wsize_b;
-       struct rtw_queue pending_recvframe_queue;
-       struct timer_list reordering_ctrl_timer;
-};
-
-struct stainfo_rxcache {
-       u16     tid_rxseq[16];
-/*
-       unsigned short  tid0_rxseq;
-       unsigned short  tid1_rxseq;
-       unsigned short  tid2_rxseq;
-       unsigned short  tid3_rxseq;
-       unsigned short  tid4_rxseq;
-       unsigned short  tid5_rxseq;
-       unsigned short  tid6_rxseq;
-       unsigned short  tid7_rxseq;
-       unsigned short  tid8_rxseq;
-       unsigned short  tid9_rxseq;
-       unsigned short  tid10_rxseq;
-       unsigned short  tid11_rxseq;
-       unsigned short  tid12_rxseq;
-       unsigned short  tid13_rxseq;
-       unsigned short  tid14_rxseq;
-       unsigned short  tid15_rxseq;
-*/
-};
-
-struct smooth_rssi_data {
-       u32     elements[100];  /* array to store values */
-       u32     index;                  /* index to current array to store */
-       u32     total_num;              /* num of valid elements */
-       u32     total_val;              /* sum of valid elements */
-};
-
-struct signal_stat {
-       u8      update_req;             /* used to indicate */
-       u8      avg_val;                /* avg of valid elements */
-       u32     total_num;              /* num of valid elements */
-       u32     total_val;              /* sum of valid elements */
-};
-
-struct phy_info {
-       u8              RxPWDBAll;
-       u8              SignalQuality;   /*  in 0-100 index. */
-       u8              RxMIMOSignalQuality[RF_PATH_MAX]; /* EVM */
-       u8              RxMIMOSignalStrength[RF_PATH_MAX];/* 0~100 */
-       s8              RxPower; /*  in dBm Translate from PWdB */
-       /* Real power in dBm for this packet, no beautification and aggregation.
-        * Keep this raw info to be used for the other procedures.
-        */
-       s8              RecvSignalPower;
-       u8              BTRxRSSIPercentage;
-       u8              SignalStrength; /*  in 0-100 index. */
-       u8              RxPwr[RF_PATH_MAX];/* per-path's pwdb */
-       u8              RxSNR[RF_PATH_MAX];/* per-path's SNR */
-};
-
-
-struct rx_pkt_attrib   {
-       u16     pkt_len;
-       u8      physt;
-       u8      drvinfo_sz;
-       u8      shift_sz;
-       u8      hdrlen; /* the WLAN Header Len */
-       u8      amsdu;
-       u8      qos;
-       u8      priority;
-       u8      pw_save;
-       u8      mdata;
-       u16     seq_num;
-       u8      frag_num;
-       u8      mfrag;
-       u8      order;
-       u8      privacy; /* in frame_ctrl field */
-       u8      bdecrypted;
-       /* when 0 indicate no encrypt. when non-zero, indicate the algorith */
-       u32     encrypt;
-       u8      iv_len;
-       u8      icv_len;
-       u8      crc_err;
-       u8      icv_err;
-
-       u16 eth_type;
-
-       u8      dst[ETH_ALEN];
-       u8      src[ETH_ALEN];
-       u8      ta[ETH_ALEN];
-       u8      ra[ETH_ALEN];
-       u8      bssid[ETH_ALEN];
-
-       u8 ack_policy;
-
-       u8      tcpchk_valid; /*  0: invalid, 1: valid */
-       u8      ip_chkrpt; /* 0: incorrect, 1: correct */
-       u8      tcp_chkrpt; /* 0: incorrect, 1: correct */
-       u8      key_index;
-
-       u8      mcs_rate;
-       u8      rxht;
-       u8      sgi;
-       u8      pkt_rpt_type;
-       u32     MacIDValidEntry[2];     /*  64 bits present 64 entry. */
-       struct phy_info phy_info;
-};
-
-/* These definition is used for Rx packet reordering. */
-#define SN_LESS(a, b)          (((a-b) & 0x800) != 0)
-#define SN_EQUAL(a, b)         (a == b)
-#define REORDER_WAIT_TIME      (50) /*  (ms) */
-
-#define RECVBUFF_ALIGN_SZ 8
-
-#define RXDESC_SIZE    24
-#define RXDESC_OFFSET RXDESC_SIZE
-
-struct recv_stat {
-       __le32 rxdw0;
-       __le32 rxdw1;
-       __le32 rxdw2;
-       __le32 rxdw3;
-       __le32 rxdw4;
-       __le32 rxdw5;
-};
-
-/* accesser of recv_priv: rtw_recv_entry23a(dispatch / passive level); \
- * recv_thread(passive) ; returnpkt(dispatch) ; halt(passive) ;
- *
- * using enter_critical section to protect
- */
-struct recv_priv {
-       spinlock_t      lock;
-
-       struct rtw_queue        free_recv_queue;
-       struct rtw_queue        recv_pending_queue;
-       struct rtw_queue        uc_swdec_pending_queue;
-
-       int free_recvframe_cnt;
-
-       struct rtw_adapter      *adapter;
-
-       u32     bIsAnyNonBEPkts;
-       u64     rx_bytes;
-       u64     rx_pkts;
-       u64     rx_drop;
-       u64     last_rx_bytes;
-
-       uint  rx_icv_err;
-       uint  rx_largepacket_crcerr;
-       uint  rx_smallpacket_crcerr;
-       uint  rx_middlepacket_crcerr;
-
-       /* u8 *pallocated_urb_buf; */
-       u8      rx_pending_cnt;
-
-       struct urb *int_in_urb;
-
-       u8      *int_in_buf;
-
-       struct tasklet_struct irq_prepare_beacon_tasklet;
-       struct tasklet_struct recv_tasklet;
-       struct sk_buff_head free_recv_skb_queue;
-       struct sk_buff_head rx_skb_queue;
-       u8 *precv_buf;
-
-       /* For display the phy informatiom */
-       s8 rxpwdb;
-       u8 signal_strength;
-       u8 signal_qual;
-       u8 noise;
-       int RxSNRdB[2];
-       s8 RxRssi[2];
-       int FalseAlmCnt_all;
-
-       struct timer_list signal_stat_timer;
-       u32 signal_stat_sampling_interval;
-       /* u32 signal_stat_converging_constant; */
-       struct signal_stat signal_qual_data;
-       struct signal_stat signal_strength_data;
-};
-
-#define rtw_set_signal_stat_timer(recvpriv)                    \
-        mod_timer(&(recvpriv)->signal_stat_timer, jiffies +    \
-                  msecs_to_jiffies((recvpriv)->signal_stat_sampling_interval))
-
-struct sta_recv_priv {
-       spinlock_t      lock;
-       int     option;
-
-       /* struct rtw_queue     blk_strms[MAX_RX_NUMBLKS]; */
-       struct rtw_queue defrag_q;       /* keeping the fragment frame until defrag */
-
-       struct  stainfo_rxcache rxcache;
-
-       /* uint sta_rx_bytes; */
-       /* uint sta_rx_pkts; */
-       /* uint sta_rx_fail; */
-
-};
-
-
-struct recv_buf {
-       struct list_head list;
-
-       struct rtw_adapter *adapter;
-
-       struct urb *purb;
-       struct sk_buff *pskb;
-};
-
-/*     head  ----->
- *
- *             data  ----->
- *
- *                     payload
- *
- *             tail  ----->
- *
- *     end   ----->
- *
- *     len = (unsigned int )(tail - data);
- *
- */
-struct recv_frame {
-       struct list_head        list;
-       struct sk_buff *pkt;
-
-       struct rtw_adapter  *adapter;
-
-       struct rx_pkt_attrib attrib;
-
-       struct sta_info *psta;
-
-       /* for A-MPDU Rx reordering buffer control */
-       struct recv_reorder_ctrl *preorder_ctrl;
-};
-
-/* get a free recv_frame from pfree_recv_queue */
-struct recv_frame *rtw_alloc_recvframe23a(struct rtw_queue *pfree_recv_queue);
-int rtw_free_recvframe23a(struct recv_frame *precvframe);
-
-int rtw_enqueue_recvframe23a(struct recv_frame *precvframe, struct rtw_queue *queue);
-
-u32 rtw_free_uc_swdec_pending_queue23a(struct rtw_adapter *adapter);
-
-struct recv_buf *rtw_dequeue_recvbuf23a(struct rtw_queue *queue);
-
-void rtw_reordering_ctrl_timeout_handler23a(unsigned long pcontext);
-
-static inline s32 translate_percentage_to_dbm(u32 SignalStrengthIndex)
-{
-       s32     SignalPower; /*  in dBm. */
-
-       /*  Translate to dBm (x=0.5y-95). */
-       SignalPower = (s32)((SignalStrengthIndex + 1) >> 1);
-       SignalPower -= 95;
-
-       return SignalPower;
-}
-
-
-struct sta_info;
-
-void _rtw_init_sta_recv_priv23a(struct sta_recv_priv *psta_recvpriv);
-
-void mgt_dispatcher23a(struct rtw_adapter *padapter,
-                   struct recv_frame *precv_frame);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_rf.h b/drivers/staging/rtl8723au/include/rtw_rf.h
deleted file mode 100644 (file)
index a7de714..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef        __RTW_RF_H_
-#define __RTW_RF_H_
-
-#include <rtw_cmd.h>
-
-#define OFDM_PHY               1
-#define MIXED_PHY              2
-#define CCK_PHY                        3
-
-#define NumRates               (13)
-
-/*  slot time for 11g */
-#define SHORT_SLOT_TIME                        9
-#define NON_SHORT_SLOT_TIME            20
-
-/*  We now define the max channels in each channel plan. */
-#define        MAX_CHANNEL_NUM_2G      14
-#define        MAX_CHANNEL_NUM_5G      24
-#define        MAX_CHANNEL_NUM         38/* 14+24 */
-
-/* define NUM_REGULATORYS      21 */
-#define NUM_REGULATORYS        1
-
-/* Country codes */
-#define USA            0x555320
-#define EUROPE         0x1 /* temp, should be provided later */
-#define JAPAN          0x2 /* temp, should be provided later */
-
-struct regulatory_class {
-       u32     starting_freq;                                  /* MHz, */
-       u8      channel_set[MAX_CHANNEL_NUM];
-       u8      channel_cck_power[MAX_CHANNEL_NUM];/* dbm */
-       u8      channel_ofdm_power[MAX_CHANNEL_NUM];/* dbm */
-       u8      txpower_limit;                                  /* dbm */
-       u8      channel_spacing;                                /* MHz */
-       u8      modem;
-};
-
-enum {
-       cESS            = 0x0001,
-       cIBSS           = 0x0002,
-       cPollable       = 0x0004,
-       cPollReq        = 0x0008,
-       cPrivacy        = 0x0010,
-       cShortPreamble  = 0x0020,
-       cPBCC           = 0x0040,
-       cChannelAgility = 0x0080,
-       cSpectrumMgnt   = 0x0100,
-       cQos            = 0x0200,       /*  For HCCA, use with CF-Pollable and CF-PollReq */
-       cShortSlotTime  = 0x0400,
-       cAPSD           = 0x0800,
-       cRM             = 0x1000,       /*  RRM (Radio Request Measurement) */
-       cDSSS_OFDM      = 0x2000,
-       cDelayedBA      = 0x4000,
-       cImmediateBA    = 0x8000,
-};
-
-enum {
-       PREAMBLE_LONG   = 1,
-       PREAMBLE_AUTO   = 2,
-       PREAMBLE_SHORT  = 3,
-};
-
-/*  Bandwidth Offset */
-#define HAL_PRIME_CHNL_OFFSET_DONT_CARE        0
-#define HAL_PRIME_CHNL_OFFSET_LOWER    1
-#define HAL_PRIME_CHNL_OFFSET_UPPER    2
-
-/*  Represent Channel Width in HT Capabilities */
-enum ht_channel_width {
-       HT_CHANNEL_WIDTH_20 = 0,
-       HT_CHANNEL_WIDTH_40 = 1,
-       HT_CHANNEL_WIDTH_80 = 2,
-       HT_CHANNEL_WIDTH_160 = 3,
-       HT_CHANNEL_WIDTH_10 = 4,
-};
-
-/* 2007/11/15 MH Define different RF type. */
-enum {
-       RF_1T2R = 0,
-       RF_2T4R = 1,
-       RF_2T2R = 2,
-       RF_1T1R = 3,
-       RF_2T2R_GREEN = 4,
-       RF_819X_MAX_TYPE = 5,
-};
-
-#endif /* _RTL8711_RF_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_security.h b/drivers/staging/rtl8723au/include/rtw_security.h
deleted file mode 100644 (file)
index 624a9d7..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_SECURITY_H_
-#define __RTW_SECURITY_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <net/lib80211.h>
-
-
-#define is_wep_enc(alg) (alg == WLAN_CIPHER_SUITE_WEP40 || \
-                        alg == WLAN_CIPHER_SUITE_WEP104)
-
-#define SHA256_MAC_LEN 32
-#define AES_BLOCK_SIZE 16
-#define AES_PRIV_SIZE (4 * 44)
-
-enum ENCRYP_PROTOCOL {
-       ENCRYP_PROTOCOL_OPENSYS,   /* open system */
-       ENCRYP_PROTOCOL_WEP,       /* WEP */
-       ENCRYP_PROTOCOL_WPA,       /* WPA */
-       ENCRYP_PROTOCOL_WPA2,      /* WPA2 */
-       ENCRYP_PROTOCOL_MAX
-};
-
-#ifndef Ndis802_11AuthModeWPA2
-#define Ndis802_11AuthModeWPA2 (Ndis802_11AuthModeWPANone + 1)
-#endif
-
-#ifndef Ndis802_11AuthModeWPA2PSK
-#define Ndis802_11AuthModeWPA2PSK (Ndis802_11AuthModeWPANone + 2)
-#endif
-
-union pn48 {
-       u64     val;
-
-#ifdef __LITTLE_ENDIAN
-
-struct {
-       u8 TSC0;
-       u8 TSC1;
-       u8 TSC2;
-       u8 TSC3;
-       u8 TSC4;
-       u8 TSC5;
-       u8 TSC6;
-       u8 TSC7;
-} _byte_;
-
-#elif defined(__BIG_ENDIAN)
-
-struct {
-       u8 TSC7;
-       u8 TSC6;
-       u8 TSC5;
-       u8 TSC4;
-       u8 TSC3;
-       u8 TSC2;
-       u8 TSC1;
-       u8 TSC0;
-} _byte_;
-#else
-#error Need BIG or LITTLE endian
-
-#endif
-
-};
-
-union Keytype {
-       u8   skey[16];
-       u32    lkey[4];
-};
-
-struct rtw_wep_key {
-       u8 key[WLAN_KEY_LEN_WEP104 + 1]; /* 14 */
-       u16 keylen;
-};
-
-struct rt_pmkid_list {
-       u8      bUsed;
-       u8      Bssid[6];
-       u8      PMKID[16];
-       u8      SsidBuf[33];
-       u8      *ssid_octet;
-       u16     ssid_length;
-};
-
-struct security_priv {
-       u32       dot11AuthAlgrthm;     /*  802.11 auth, could be open, shared,
-                                        * 8021x and authswitch */
-       u32       dot11PrivacyAlgrthm;  /* This specifies the privacy for
-                                        * shared auth. algorithm.
-                                        */
-       /* WEP */
-       u32       dot11PrivacyKeyIndex; /*  this is only valid for legendary
-                                        * wep, 0~3 for key id. (tx key index)
-                                        */
-       struct rtw_wep_key wep_key[NUM_WEP_KEYS];
-
-       u32 dot118021XGrpPrivacy;       /* specify the privacy algthm.
-                                        * used for Grp key
-                                        */
-       u32     dot118021XGrpKeyid;     /*  key id used for Grp Key
-                                        * (tx key index)
-                                        */
-       union Keytype   dot118021XGrpKey[4];/* 802.1x Grp Key, inx0 and inx1 */
-       union Keytype   dot118021XGrptxmickey[4];
-       union Keytype   dot118021XGrprxmickey[4];
-       union pn48      dot11Grptxpn;           /* PN48 used for Grp Key xmit.*/
-       union pn48      dot11Grprxpn;           /* PN48 used for Grp Key recv.*/
-
-#ifdef CONFIG_8723AU_AP_MODE
-       /* extend security capabilities for AP_MODE */
-       unsigned int dot8021xalg;/* 0:disable, 1:psk, 2:802.1x */
-       unsigned int wpa_psk;/* 0:disable, bit(0): WPA, bit(1):WPA2 */
-       unsigned int wpa_group_cipher;
-       unsigned int wpa2_group_cipher;
-       unsigned int wpa_pairwise_cipher;
-       unsigned int wpa2_pairwise_cipher;
-#endif
-
-       u8 wps_ie[MAX_WPS_IE_LEN];/* added in assoc req */
-       int wps_ie_len;
-       unsigned int binstallGrpkey:1;
-       unsigned int busetkipkey:1;
-       unsigned int bcheck_grpkey:1;
-       unsigned int hw_decrypted:1;
-       u32 ndisauthtype;       /*  enum ndis_802_11_auth_mode */
-       u32 ndisencryptstatus;  /*  NDIS_802_11_ENCRYPTION_STATUS */
-       struct wlan_bssid_ex sec_bss;  /* for joinbss (h2c buffer) usage */
-       u8 assoc_info[600];
-       u8 szofcapability[256]; /* for wpa2 usage */
-       u8 oidassociation[512]; /* for wpa/wpa2 usage */
-       u8 supplicant_ie[256];  /* store sta security information element */
-
-       /* for tkip countermeasure */
-       unsigned long last_mic_err_time;
-       u8      btkip_countermeasure;
-       u8      btkip_wait_report;
-       unsigned long btkip_countermeasure_time;
-
-       /*  For WPA2 Pre-Authentication. */
-       struct rt_pmkid_list PMKIDList[NUM_PMKID_CACHE];
-       u8 PMKIDIndex;
-       u8 bWepDefaultKeyIdxSet;
-};
-
-struct sha256_state {
-       u64 length;
-       u32 state[8], curlen;
-       u8 buf[64];
-};
-
-#define GET_ENCRY_ALGO(psecuritypriv, psta, encry_algo, bmcst)\
-do {\
-       switch (psecuritypriv->dot11AuthAlgrthm) {\
-       case dot11AuthAlgrthm_Open:\
-       case dot11AuthAlgrthm_Shared:\
-       case dot11AuthAlgrthm_Auto:\
-               encry_algo = psecuritypriv->dot11PrivacyAlgrthm;\
-               break;\
-       case dot11AuthAlgrthm_8021X:\
-               if (bmcst)\
-                       encry_algo = psecuritypriv->dot118021XGrpPrivacy;\
-               else\
-                       encry_algo = psta->dot118021XPrivacy;\
-               break;\
-       }       \
-} while (0)
-
-#define GET_TKIP_PN(iv, dot11txpn)\
-do {\
-       dot11txpn._byte_.TSC0 = iv[2];\
-       dot11txpn._byte_.TSC1 = iv[0];\
-       dot11txpn._byte_.TSC2 = iv[4];\
-       dot11txpn._byte_.TSC3 = iv[5];\
-       dot11txpn._byte_.TSC4 = iv[6];\
-       dot11txpn._byte_.TSC5 = iv[7];\
-} while (0)
-
-#define ROL32(A, n)  (((A) << (n)) | (((A)>>(32-(n)))  & ((1UL << (n)) - 1)))
-#define ROR32(A, n)  ROL32((A), 32-(n))
-
-struct mic_data {
-       u32  K0, K1;         /*  Key */
-       u32  L, R;           /*  Current state */
-       u32  M;              /*  Message accumulator (single word) */
-       u32     nBytesInM;      /*  # bytes in M */
-};
-
-extern const u32 Te0[256];
-extern const u32 Te1[256];
-extern const u32 Te2[256];
-extern const u32 Te3[256];
-extern const u32 Te4[256];
-extern const u32 Td0[256];
-extern const u32 Td1[256];
-extern const u32 Td2[256];
-extern const u32 Td3[256];
-extern const u32 Td4[256];
-extern const u32 rcon[10];
-extern const u8 Td4s[256];
-extern const u8 rcons[10];
-
-#define RCON(i) (rcons[(i)] << 24)
-
-static inline u32 rotr(u32 val, int bits)
-{
-       return (val >> bits) | (val << (32 - bits));
-}
-
-#define TE0(i) Te0[((i) >> 24) & 0xff]
-#define TE1(i) rotr(Te0[((i) >> 16) & 0xff], 8)
-#define TE2(i) rotr(Te0[((i) >> 8) & 0xff], 16)
-#define TE3(i) rotr(Te0[(i) & 0xff], 24)
-#define TE41(i) ((Te0[((i) >> 24) & 0xff] << 8) & 0xff000000)
-#define TE42(i) (Te0[((i) >> 16) & 0xff] & 0x00ff0000)
-#define TE43(i) (Te0[((i) >> 8) & 0xff] & 0x0000ff00)
-#define TE44(i) ((Te0[(i) & 0xff] >> 8) & 0x000000ff)
-#define TE421(i) ((Te0[((i) >> 16) & 0xff] << 8) & 0xff000000)
-#define TE432(i) (Te0[((i) >> 8) & 0xff] & 0x00ff0000)
-#define TE443(i) (Te0[(i) & 0xff] & 0x0000ff00)
-#define TE414(i) ((Te0[((i) >> 24) & 0xff] >> 8) & 0x000000ff)
-#define TE4(i) ((Te0[(i)] >> 8) & 0x000000ff)
-
-#define TD0(i) Td0[((i) >> 24) & 0xff]
-#define TD1(i) rotr(Td0[((i) >> 16) & 0xff], 8)
-#define TD2(i) rotr(Td0[((i) >> 8) & 0xff], 16)
-#define TD3(i) rotr(Td0[(i) & 0xff], 24)
-#define TD41(i) (Td4s[((i) >> 24) & 0xff] << 24)
-#define TD42(i) (Td4s[((i) >> 16) & 0xff] << 16)
-#define TD43(i) (Td4s[((i) >> 8) & 0xff] << 8)
-#define TD44(i) (Td4s[(i) & 0xff])
-#define TD0_(i) Td0[(i) & 0xff]
-#define TD1_(i) rotr(Td0[(i) & 0xff], 8)
-#define TD2_(i) rotr(Td0[(i) & 0xff], 16)
-#define TD3_(i) rotr(Td0[(i) & 0xff], 24)
-
-#define GETU32(pt) (((u32)(pt)[0] << 24) ^ ((u32)(pt)[1] << 16) ^ \
-                       ((u32)(pt)[2] <<  8) ^ ((u32)(pt)[3]))
-
-#define PUTU32(ct, st) { \
-(ct)[0] = (u8)((st) >> 24); (ct)[1] = (u8)((st) >> 16); \
-(ct)[2] = (u8)((st) >>  8); (ct)[3] = (u8)(st); }
-
-#define WPA_GET_BE32(a) ((((u32) (a)[0]) << 24) | (((u32) (a)[1]) << 16) | \
-                        (((u32) (a)[2]) << 8) | ((u32) (a)[3]))
-
-#define WPA_PUT_LE16(a, val)                   \
-       do {                                    \
-               (a)[1] = ((u16) (val)) >> 8;    \
-               (a)[0] = ((u16) (val)) & 0xff;  \
-       } while (0)
-
-#define WPA_PUT_BE32(a, val)                                   \
-       do {                                                    \
-               (a)[0] = (u8) ((((u32) (val)) >> 24) & 0xff);   \
-               (a)[1] = (u8) ((((u32) (val)) >> 16) & 0xff);   \
-               (a)[2] = (u8) ((((u32) (val)) >> 8) & 0xff);    \
-               (a)[3] = (u8) (((u32) (val)) & 0xff);           \
-       } while (0)
-
-#define WPA_PUT_BE64(a, val)                           \
-       do {                                            \
-               (a)[0] = (u8) (((u64) (val)) >> 56);    \
-               (a)[1] = (u8) (((u64) (val)) >> 48);    \
-               (a)[2] = (u8) (((u64) (val)) >> 40);    \
-               (a)[3] = (u8) (((u64) (val)) >> 32);    \
-               (a)[4] = (u8) (((u64) (val)) >> 24);    \
-               (a)[5] = (u8) (((u64) (val)) >> 16);    \
-               (a)[6] = (u8) (((u64) (val)) >> 8);     \
-               (a)[7] = (u8) (((u64) (val)) & 0xff);   \
-       } while (0)
-
-/* ===== start - public domain SHA256 implementation ===== */
-
-/* This is based on SHA256 implementation in LibTomCrypt that was released into
- * public domain by Tom St Denis. */
-
-/* the K array */
-static const unsigned long K[64] = {
-       0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
-       0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
-       0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
-       0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
-       0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
-       0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
-       0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
-       0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
-       0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
-       0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
-       0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
-       0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
-       0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-
-void rtw_secmicsetkey23a(struct mic_data *pmicdata, u8 *key);
-void rtw_secmicappend23abyte23a(struct mic_data *pmicdata, u8 b);
-void rtw_secmicappend23a(struct mic_data *pmicdata, u8 *src, u32 nbBytes);
-void rtw_secgetmic23a(struct mic_data *pmicdata, u8 *dst);
-
-void rtw_seccalctkipmic23a(u8 *key, u8 *header, u8 *data, u32 data_len,
-                       u8 *Miccode, u8 priorityi);
-
-int rtw_aes_encrypt23a(struct rtw_adapter *padapter,
-                   struct xmit_frame *pxmitframe);
-int rtw_tkip_encrypt23a(struct rtw_adapter *padapter,
-                    struct xmit_frame *pxmitframe);
-void rtw_wep_encrypt23a(struct rtw_adapter *padapter,
-                    struct xmit_frame *pxmitframe);
-int rtw_aes_decrypt23a(struct rtw_adapter *padapter,
-                   struct recv_frame *precvframe);
-int rtw_tkip_decrypt23a(struct rtw_adapter *padapter,
-                    struct recv_frame *precvframe);
-void rtw_wep_decrypt23a(struct rtw_adapter *padapter, struct recv_frame *precvframe);
-
-void rtw_use_tkipkey_handler23a(void *FunctionContext);
-
-#endif /* __RTL871X_SECURITY_H_ */
diff --git a/drivers/staging/rtl8723au/include/rtw_sreset.h b/drivers/staging/rtl8723au/include/rtw_sreset.h
deleted file mode 100644 (file)
index 60fa829..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTW_SRESET_C_
-#define _RTW_SRESET_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-struct sreset_priv {
-       struct mutex    silentreset_mutex;
-       u8      silent_reset_inprogress;
-       unsigned long last_tx_time;
-       unsigned long last_tx_complete_time;
-};
-
-#include <rtl8723a_hal.h>
-
-void rtw_sreset_init(struct rtw_adapter *padapter);
-void rtw_sreset_reset_value(struct rtw_adapter *padapter);
-bool rtw_sreset_inprogress(struct rtw_adapter *padapter);
-void sreset_set_trigger_point(struct rtw_adapter *padapter, s32 tgp);
-void rtw_sreset_reset(struct rtw_adapter *active_adapter);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_version.h b/drivers/staging/rtl8723au/include/rtw_version.h
deleted file mode 100644 (file)
index c947733..0000000
+++ /dev/null
@@ -1 +0,0 @@
-#define DRIVERVERSION  "v4.1.6_7336.20130426"
diff --git a/drivers/staging/rtl8723au/include/rtw_xmit.h b/drivers/staging/rtl8723au/include/rtw_xmit.h
deleted file mode 100644 (file)
index 2b7d6d0..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _RTW_XMIT_H_
-#define _RTW_XMIT_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#define MAX_XMITBUF_SZ         2048
-#define NR_XMITBUFF            4
-
-#define XMITBUF_ALIGN_SZ       512
-
-/*  xmit extension buff defination */
-#define MAX_XMIT_EXTBUF_SZ     1536
-#define NR_XMIT_EXTBUFF                32
-
-#define MAX_NUMBLKS            1
-
-#define XMIT_VO_QUEUE          0
-#define XMIT_VI_QUEUE          1
-#define XMIT_BE_QUEUE          2
-#define XMIT_BK_QUEUE          3
-
-#define VO_QUEUE_INX           0
-#define VI_QUEUE_INX           1
-#define BE_QUEUE_INX           2
-#define BK_QUEUE_INX           3
-#define BCN_QUEUE_INX          4
-#define MGT_QUEUE_INX          5
-#define HIGH_QUEUE_INX         6
-#define TXCMD_QUEUE_INX                7
-
-#define HW_QUEUE_ENTRY         8
-
-#define WEP_IV(pattrib_iv, dot11txpn, keyidx)                          \
-do {                                                                   \
-       pattrib_iv[0] = dot11txpn._byte_.TSC0;                          \
-       pattrib_iv[1] = dot11txpn._byte_.TSC1;                          \
-       pattrib_iv[2] = dot11txpn._byte_.TSC2;                          \
-       pattrib_iv[3] = ((keyidx & 0x3) << 6);                          \
-       dot11txpn.val = (dot11txpn.val == 0xffffff) ? 0 :               \
-                        (dot11txpn.val+1);                             \
-} while (0)
-
-#define TKIP_IV(pattrib_iv, dot11txpn, keyidx)                         \
-do {                                                                   \
-       pattrib_iv[0] = dot11txpn._byte_.TSC1;                          \
-       pattrib_iv[1] = (dot11txpn._byte_.TSC1 | 0x20) & 0x7f;          \
-       pattrib_iv[2] = dot11txpn._byte_.TSC0;                          \
-       pattrib_iv[3] = BIT(5) | ((keyidx & 0x3)<<6);                   \
-       pattrib_iv[4] = dot11txpn._byte_.TSC2;                          \
-       pattrib_iv[5] = dot11txpn._byte_.TSC3;                          \
-       pattrib_iv[6] = dot11txpn._byte_.TSC4;                          \
-       pattrib_iv[7] = dot11txpn._byte_.TSC5;                          \
-       dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 :        \
-                                        (dot11txpn.val+1);             \
-} while (0)
-
-#define AES_IV(pattrib_iv, dot11txpn, keyidx)\
-do {                                                                   \
-       pattrib_iv[0] = dot11txpn._byte_.TSC0;                          \
-       pattrib_iv[1] = dot11txpn._byte_.TSC1;                          \
-       pattrib_iv[2] = 0;                                              \
-       pattrib_iv[3] = BIT(5) | ((keyidx & 0x3) << 6);                 \
-       pattrib_iv[4] = dot11txpn._byte_.TSC2;                          \
-       pattrib_iv[5] = dot11txpn._byte_.TSC3;                          \
-       pattrib_iv[6] = dot11txpn._byte_.TSC4;                          \
-       pattrib_iv[7] = dot11txpn._byte_.TSC5;                          \
-       dot11txpn.val = dot11txpn.val == 0xffffffffffffULL ? 0 :        \
-                                        (dot11txpn.val+1);             \
-} while (0)
-
-#define HWXMIT_ENTRY   4
-
-#define TXDESC_SIZE 32
-
-#define PACKET_OFFSET_SZ 8
-#define TXDESC_OFFSET (TXDESC_SIZE + PACKET_OFFSET_SZ)
-
-struct tx_desc {
-       /* DWORD 0 */
-       __le32 txdw0;
-       __le32 txdw1;
-       __le32 txdw2;
-       __le32 txdw3;
-       __le32 txdw4;
-       __le32 txdw5;
-       __le32 txdw6;
-       __le32 txdw7;
-};
-
-union txdesc {
-       struct tx_desc txdesc;
-       unsigned int value[TXDESC_SIZE>>2];
-};
-
-struct hw_xmit {
-       struct rtw_queue *sta_queue;
-       int     accnt;
-};
-
-/* reduce size */
-struct pkt_attrib {
-       u16     type;
-       u8      bswenc;
-       u8      dhcp_pkt;
-       u16     ether_type;
-       u16     seqnum;
-       u16     pkt_hdrlen;     /* the original 802.3 pkt header len */
-       u16     hdrlen;         /* the WLAN Header Len */
-       u32     pktlen;         /* the original 802.3 pkt raw_data len */
-       u32     last_txcmdsz;
-       u32     encrypt;        /* when 0 indicate no encrypt. */
-       u8      nr_frags;
-       u8      iv_len;
-       u8      icv_len;
-       u8      iv[18];
-       u8      icv[16];
-       u8      priority;
-       u8      ack_policy;
-       u8      mac_id;
-       u8      vcs_mode;       /* virtual carrier sense method */
-       u8      dst[ETH_ALEN];
-       u8      src[ETH_ALEN];
-       u8      ta[ETH_ALEN];
-       u8      ra[ETH_ALEN];
-       u8      key_idx;
-       u8      qos_en;
-       u8      ht_en;
-       u8      raid;/* rate adpative id */
-       u8      bwmode;
-       u8      ch_offset;/* PRIME_CHNL_OFFSET */
-       u8      sgi;/* short GI */
-       u8      ampdu_en;/* tx ampdu enable */
-       u8      mdata;/* more data bit */
-       u8      pctrl;/* per packet txdesc control enable */
-       u8      triggered;/* for ap mode handling Power Saving sta */
-       u8      qsel;
-       u8      eosp;
-       u8      rate;
-       u8      retry_ctrl;
-       struct sta_info *psta;
-};
-
-#define WLANHDR_OFFSET         64
-
-#define NULL_FRAMETAG          0x0
-#define DATA_FRAMETAG          0x01
-#define L2_FRAMETAG            0x02
-#define MGNT_FRAMETAG          0x03
-#define AMSDU_FRAMETAG         0x04
-
-#define EII_FRAMETAG           0x05
-#define IEEE8023_FRAMETAG      0x06
-
-#define MP_FRAMETAG            0x07
-
-#define TXAGG_FRAMETAG         0x08
-
-struct  submit_ctx {
-       u32 timeout_ms; /* <0: not synchronous, 0: wait forever,
-                        * >0: up to ms waiting
-                        */
-       int status; /* status for operation */
-       struct completion done;
-};
-
-enum {
-       RTW_SCTX_SUBMITTED = -1,
-       RTW_SCTX_DONE_SUCCESS = 0,
-       RTW_SCTX_DONE_UNKNOWN,
-       RTW_SCTX_DONE_TIMEOUT,
-       RTW_SCTX_DONE_BUF_ALLOC,
-       RTW_SCTX_DONE_BUF_FREE,
-       RTW_SCTX_DONE_WRITE_PORT_ERR,
-       RTW_SCTX_DONE_TX_DESC_NA,
-       RTW_SCTX_DONE_TX_DENY,
-       RTW_SCTX_DONE_CCX_PKT_FAIL,
-       RTW_SCTX_DONE_DRV_STOP,
-       RTW_SCTX_DONE_DEV_REMOVE,
-};
-
-void rtw_sctx_init23a(struct submit_ctx *sctx, int timeout_ms);
-int rtw_sctx_wait23a(struct submit_ctx *sctx);
-void rtw23a_sctx_done_err(struct submit_ctx **sctx, int status);
-
-struct xmit_buf {
-       struct list_head list, list2;
-       struct rtw_adapter *padapter;
-
-       u8 *pallocated_buf;
-       u8 *pbuf;
-       void *priv_data;
-
-       u16 ext_tag; /*  0: Normal xmitbuf, 1: extension xmitbuf. */
-       u16 flags;
-       u32 alloc_sz;
-       u32  len;
-       struct submit_ctx *sctx;
-       u32     ff_hwaddr;
-       struct urb *pxmit_urb[8];
-       u8 bpending[8];
-       int last[8];
-#if defined(DBG_XMIT_BUF) || defined(DBG_XMIT_BUF_EXT)
-       u8 no;
-#endif
-};
-
-struct xmit_frame {
-       struct list_head        list;
-       struct pkt_attrib attrib;
-       struct sk_buff *pkt;
-       int     frame_tag;
-       struct rtw_adapter *padapter;
-       u8      *buf_addr;
-       struct xmit_buf *pxmitbuf;
-
-       s8      pkt_offset;
-
-       u8 ack_report;
-
-       u8 ext_tag; /* 0:data, 1:mgmt */
-};
-
-struct tx_servq {
-       struct list_head        tx_pending;
-       struct rtw_queue        sta_pending;
-       int qcnt;
-};
-
-struct sta_xmit_priv {
-       spinlock_t      lock;
-       int     option;
-       int     apsd_setting;   /* When bit mask is on, the associated edca
-                                * queue supports APSD.
-                                */
-       struct tx_servq be_q;                   /* priority == 0,3 */
-       struct tx_servq bk_q;                   /* priority == 1,2 */
-       struct tx_servq vi_q;                   /* priority == 4,5 */
-       struct tx_servq vo_q;                   /* priority == 6,7 */
-       struct list_head legacy_dz;
-       struct list_head apsd;
-       u16 txseq_tid[16];
-};
-
-struct hw_txqueue {
-       volatile int head;
-       volatile int tail;
-       volatile int free_sz;   /* in units of 64 bytes */
-       volatile int free_cmdsz;
-       volatile int txsz[8];
-       uint    ff_hwaddr;
-       uint    cmd_hwaddr;
-       int     ac_tag;
-};
-
-struct agg_pkt_info {
-       u16 offset;
-       u16 pkt_len;
-};
-
-struct xmit_priv {
-       spinlock_t      lock;
-
-       struct semaphore        xmit_sema;
-       struct semaphore        terminate_xmitthread_sema;
-
-       struct rtw_queue        be_pending;
-       struct rtw_queue        bk_pending;
-       struct rtw_queue        vi_pending;
-       struct rtw_queue        vo_pending;
-       struct rtw_queue        bm_pending;
-
-       int free_xmitframe_cnt;
-       struct rtw_queue        free_xmit_queue;
-
-       int free_xframe_ext_cnt;
-       struct rtw_queue free_xframe_ext_queue;
-
-       uint    frag_len;
-
-       struct rtw_adapter      *adapter;
-
-       u64     tx_bytes;
-       u64     tx_pkts;
-       u64     tx_drop;
-       u64     last_tx_bytes;
-       u64     last_tx_pkts;
-
-       struct hw_xmit *hwxmits;
-       u8      hwxmit_entry;
-       u8      vcs;
-       u8      nqos_ssn;
-
-       u8      wmm_para_seq[4];/* sequence for wmm ac parameter strength from
-                                * large to small. it's value is 0->vo, 1->vi,
-                                * 2->be, 3->bk.
-                                */
-
-       struct semaphore        tx_retevt;/* all tx return event; */
-
-       struct tasklet_struct xmit_tasklet;
-
-       struct rtw_queue free_xmitbuf_queue;
-       struct list_head xmitbuf_list;          /* track buffers for cleanup */
-       struct rtw_queue pending_xmitbuf_queue;
-       uint free_xmitbuf_cnt;
-
-       struct rtw_queue free_xmit_extbuf_queue;
-       struct list_head xmitextbuf_list;       /* track buffers for cleanup */
-       uint free_xmit_extbuf_cnt;
-
-       int     ack_tx;
-       struct mutex ack_tx_mutex;
-       struct submit_ctx ack_tx_ops;
-       spinlock_t lock_sctx;
-};
-
-struct xmit_buf *rtw_alloc_xmitbuf23a_ext(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitbuf_ext23a(struct xmit_priv *pxmitpriv,
-                        struct xmit_buf *pxmitbuf);
-
-struct xmit_buf *rtw_alloc_xmitbuf23a(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitbuf23a(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf);
-
-void rtw_count_tx_stats23a(struct rtw_adapter *padapter,
-                       struct xmit_frame *pxmitframe, int sz);
-void rtw_update_protection23a(struct rtw_adapter *padapter, u8 *ie, uint ie_len);
-struct xmit_frame *rtw_alloc_xmitframe23a_ext(struct xmit_priv *pxmitpriv);
-struct xmit_frame *rtw_alloc_xmitframe23a_once(struct xmit_priv *pxmitpriv);
-s32 rtw_free_xmitframe23a(struct xmit_priv *pxmitpriv,
-                      struct xmit_frame *pxmitframe);
-void rtw_free_xmitframe_queue23a(struct xmit_priv *pxmitpriv, struct rtw_queue *pframequeue);
-struct tx_servq *rtw_get_sta_pending23a(struct rtw_adapter *padapter,
-                                    struct sta_info *psta, int up, u8 *ac);
-s32 rtw_xmitframe_enqueue23a(struct rtw_adapter *padapter,
-                            struct xmit_frame *pxmitframe);
-struct xmit_frame *rtw_dequeue_xframe23a(struct xmit_priv *pxmitpriv,
-                                     struct hw_xmit *phwxmit_i, int entry);
-s32 rtw_xmit23a_classifier(struct rtw_adapter *padapter,
-                       struct xmit_frame *pxmitframe);
-s32 rtw_xmitframe_coalesce23a(struct rtw_adapter *padapter, struct sk_buff *pkt,
-                             struct xmit_frame *pxmitframe);
-s32 _rtw_init_hw_txqueue(struct hw_txqueue *phw_txqueue, u8 ac_tag);
-void _rtw_init_sta_xmit_priv23a(struct sta_xmit_priv *psta_xmitpriv);
-
-s32 rtw_txframes_pending23a(struct rtw_adapter *padapter);
-s32 rtw_txframes_sta_ac_pending23a(struct rtw_adapter *padapter,
-                               struct pkt_attrib *pattrib);
-void rtw_init_hwxmits23a(struct hw_xmit *phwxmit, int entry);
-int _rtw_init_xmit_priv23a(struct xmit_priv *pxmitpriv,
-                       struct rtw_adapter *padapter);
-void _rtw_free_xmit_priv23a(struct xmit_priv *pxmitpriv);
-void rtw_alloc_hwxmits23a(struct rtw_adapter *padapter);
-void rtw_free_hwxmits23a(struct rtw_adapter *padapter);
-int rtw_xmit23a(struct rtw_adapter *padapter, struct sk_buff *pkt);
-#if defined(CONFIG_8723AU_AP_MODE)
-int xmitframe_enqueue_for_sleeping_sta23a(struct rtw_adapter *padapter,
-                                      struct xmit_frame *pxmitframe);
-void stop_sta_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void wakeup_sta_to_xmit23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void xmit_delivery_enabled_frames23a(struct rtw_adapter *padapter,
-                                 struct sta_info *psta);
-#endif
-u8     qos_acm23a(u8 acm_mask, u8 priority);
-u32    rtw_get_ff_hwaddr23a(struct xmit_frame  *pxmitframe);
-int rtw_ack_tx_wait23a(struct xmit_priv *pxmitpriv, u32 timeout_ms);
-
-/* include after declaring struct xmit_buf, in order to avoid warning */
-#include <xmit_osdep.h>
-
-#endif /* _RTL871X_XMIT_H_ */
diff --git a/drivers/staging/rtl8723au/include/sta_info.h b/drivers/staging/rtl8723au/include/sta_info.h
deleted file mode 100644 (file)
index e726005..0000000
+++ /dev/null
@@ -1,373 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __STA_INFO_H_
-#define __STA_INFO_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <wifi.h>
-
-#define IBSS_START_MAC_ID      2
-#define NUM_STA 32
-#define NUM_ACL 16
-
-
-/* if mode ==0, then the sta is allowed once the addr is hit. */
-/* if mode ==1, then the sta is rejected once the addr is non-hit. */
-struct rtw_wlan_acl_node {
-       struct list_head        list;
-       u8       addr[ETH_ALEN];
-       u8       valid;
-};
-
-/* mode=0, disable */
-/* mode=1, accept unless in deny list */
-/* mode=2, deny unless in accept list */
-struct wlan_acl_pool {
-       int mode;
-       int num;
-       struct rtw_wlan_acl_node aclnode[NUM_ACL];
-       struct rtw_queue        acl_node_q;
-};
-
-struct rssi_sta  {
-       s32     UndecoratedSmoothedPWDB;
-       s32     UndecoratedSmoothedCCK;
-       s32     UndecoratedSmoothedOFDM;
-       u64     PacketMap;
-       u8      ValidBit;
-};
-
-struct stainfo_stats   {
-       u64 rx_mgnt_pkts;
-               u64 rx_beacon_pkts;
-               u64 rx_probereq_pkts;
-               u64 rx_probersp_pkts;
-               u64 rx_probersp_bm_pkts;
-               u64 rx_probersp_uo_pkts;
-       u64 rx_ctrl_pkts;
-       u64 rx_data_pkts;
-
-       u64     last_rx_mgnt_pkts;
-               u64 last_rx_beacon_pkts;
-               u64 last_rx_probereq_pkts;
-               u64 last_rx_probersp_pkts;
-               u64 last_rx_probersp_bm_pkts;
-               u64 last_rx_probersp_uo_pkts;
-       u64     last_rx_ctrl_pkts;
-       u64     last_rx_data_pkts;
-
-       u64     rx_bytes;
-       u64     rx_drops;
-
-       u64     tx_pkts;
-       u64     tx_bytes;
-       u64  tx_drops;
-
-};
-
-struct sta_info {
-       spinlock_t      lock;
-       struct list_head        list; /* free_sta_queue */
-       struct list_head        hash_list; /* sta_hash */
-       struct rtw_adapter *padapter;
-
-       struct sta_xmit_priv sta_xmitpriv;
-       struct sta_recv_priv sta_recvpriv;
-
-       struct rtw_queue sleep_q;
-       unsigned int sleepq_len;
-
-       uint state;
-       uint aid;
-       uint mac_id;
-       uint qos_option;
-       u8      hwaddr[ETH_ALEN];
-
-       uint    ieee8021x_blocked;      /* 0: allowed, 1:blocked */
-       u32     dot118021XPrivacy; /* aes, tkip... */
-       union Keytype   dot11tkiptxmickey;
-       union Keytype   dot11tkiprxmickey;
-       union Keytype   dot118021x_UncstKey;
-       union pn48              dot11txpn;                      /*  PN48 used for Unicast xmit. */
-       union pn48              dot11rxpn;                      /*  PN48 used for Unicast recv. */
-
-
-       u8      bssrateset[16];
-       u32     bssratelen;
-       s32  rssi;
-       s32     signal_quality;
-
-       u8      cts2self;
-       u8      rtsen;
-
-       u8      raid;
-       u8      init_rate;
-       u32     ra_mask;
-       u8      wireless_mode;  /*  NETWORK_TYPE */
-       struct stainfo_stats sta_stats;
-
-       /* for A-MPDU TX, ADDBA timeout check */
-       struct timer_list addba_retry_timer;
-
-       /* for A-MPDU Rx reordering buffer control */
-       struct recv_reorder_ctrl recvreorder_ctrl[16];
-
-       /* for A-MPDU Tx */
-       /* unsigned char                ampdu_txen_bitmap; */
-       u16     BA_starting_seqctrl[16];
-
-       struct ht_priv  htpriv;
-
-       /* Notes: */
-       /* STA_Mode: */
-       /* curr_network(mlme_priv/security_priv/qos/ht) + sta_info: (STA & AP) CAP/INFO */
-       /* scan_q: AP CAP/INFO */
-
-       /* AP_Mode: */
-       /* curr_network(mlme_priv/security_priv/qos/ht) : AP CAP/INFO */
-       /* sta_info: (AP & STA) CAP/INFO */
-
-       struct list_head asoc_list;
-       struct list_head auth_list;
-
-       unsigned int expire_to;
-       unsigned int auth_seq;
-       unsigned int authalg;
-       unsigned char chg_txt[128];
-
-       u16 capability;
-       int flags;
-
-       int dot8021xalg;/* 0:disable, 1:psk, 2:802.1x */
-       int wpa_psk;/* 0:disable, bit(0): WPA, bit(1):WPA2 */
-       int wpa_group_cipher;
-       int wpa2_group_cipher;
-       int wpa_pairwise_cipher;
-       int wpa2_pairwise_cipher;
-
-       u8 bpairwise_key_installed;
-
-       u8 wpa_ie[32];
-
-       u8 nonerp_set;
-       u8 no_short_slot_time_set;
-       u8 no_short_preamble_set;
-       u8 no_ht_gf_set;
-       u8 no_ht_set;
-       u8 ht_20mhz_set;
-
-       unsigned int tx_ra_bitmap;
-       u8 qos_info;
-
-       u8 max_sp_len;
-       u8 uapsd_bk;/* BIT(0): Delivery enabled, BIT(1): Trigger enabled */
-       u8 uapsd_be;
-       u8 uapsd_vi;
-       u8 uapsd_vo;
-
-       u8 has_legacy_ac;
-       unsigned int sleepq_ac_len;
-
-       /* p2p priv data */
-       u8 is_p2p_device;
-       u8 p2p_status_code;
-
-       u8 keep_alive_trycnt;
-
-       /* p2p client info */
-       u8 dev_addr[ETH_ALEN];
-       u8 dev_cap;
-       u16 config_methods;
-       u8 primary_dev_type[8];
-       u8 num_of_secdev_type;
-       u8 secdev_types_list[32];/*  32/8 == 4; */
-       u16 dev_name_len;
-       u8 dev_name[32];
-       u8 *passoc_req;
-       u32 assoc_req_len;
-
-       /* for DM */
-       struct rssi_sta  rssi_stat;
-
-       /*  */
-       /*  ================ODM Relative Info======================= */
-       /*  Please be care, dont declare too much structure here. It will cost memory * STA support num. */
-       /*  */
-       /*  */
-       /*  2011/10/20 MH Add for ODM STA info. */
-       /*  */
-       /*  Driver Write */
-       u8              bValid;                         /*  record the sta status link or not? */
-       u8              rssi_level;                     /* for Refresh RA mask */
-       /*  ODM Write */
-       /* 1 PHY_STATUS_INFO */
-       u8              RSSI_Path[4];           /*  */
-       u8              RSSI_Ave;
-       u8              RXEVM[4];
-       u8              RXSNR[4];
-
-       /*  ODM Write */
-       /* 1 TX_INFO (may changed by IC) */
-       /*  ================ODM Relative Info======================= */
-       /*  */
-
-       /* To store the sequence number of received management frame */
-       u16 RxMgmtFrameSeqNum;
-};
-
-#define sta_rx_pkts(sta) \
-       (sta->sta_stats.rx_mgnt_pkts \
-       + sta->sta_stats.rx_ctrl_pkts \
-       + sta->sta_stats.rx_data_pkts)
-
-#define sta_last_rx_pkts(sta) \
-       (sta->sta_stats.last_rx_mgnt_pkts \
-       + sta->sta_stats.last_rx_ctrl_pkts \
-       + sta->sta_stats.last_rx_data_pkts)
-
-#define sta_rx_data_pkts(sta) \
-       (sta->sta_stats.rx_data_pkts)
-
-#define sta_last_rx_data_pkts(sta) \
-       (sta->sta_stats.last_rx_data_pkts)
-
-#define sta_rx_mgnt_pkts(sta) \
-       (sta->sta_stats.rx_mgnt_pkts)
-
-#define sta_last_rx_mgnt_pkts(sta) \
-       (sta->sta_stats.last_rx_mgnt_pkts)
-
-#define sta_rx_beacon_pkts(sta) \
-       (sta->sta_stats.rx_beacon_pkts)
-
-#define sta_last_rx_beacon_pkts(sta) \
-       (sta->sta_stats.last_rx_beacon_pkts)
-
-#define sta_rx_probereq_pkts(sta) \
-       (sta->sta_stats.rx_probereq_pkts)
-
-#define sta_last_rx_probereq_pkts(sta) \
-       (sta->sta_stats.last_rx_probereq_pkts)
-
-#define sta_rx_probersp_pkts(sta) \
-       (sta->sta_stats.rx_probersp_pkts)
-
-#define sta_last_rx_probersp_pkts(sta) \
-       (sta->sta_stats.last_rx_probersp_pkts)
-
-#define sta_rx_probersp_bm_pkts(sta) \
-       (sta->sta_stats.rx_probersp_bm_pkts)
-
-#define sta_last_rx_probersp_bm_pkts(sta) \
-       (sta->sta_stats.last_rx_probersp_bm_pkts)
-
-#define sta_rx_probersp_uo_pkts(sta) \
-       (sta->sta_stats.rx_probersp_uo_pkts)
-
-#define sta_last_rx_probersp_uo_pkts(sta) \
-       (sta->sta_stats.last_rx_probersp_uo_pkts)
-
-#define sta_update_last_rx_pkts(sta) \
-       do { \
-               sta->sta_stats.last_rx_mgnt_pkts = sta->sta_stats.rx_mgnt_pkts; \
-               sta->sta_stats.last_rx_beacon_pkts = sta->sta_stats.rx_beacon_pkts; \
-               sta->sta_stats.last_rx_probereq_pkts = sta->sta_stats.rx_probereq_pkts; \
-               sta->sta_stats.last_rx_probersp_pkts = sta->sta_stats.rx_probersp_pkts; \
-               sta->sta_stats.last_rx_probersp_bm_pkts = sta->sta_stats.rx_probersp_bm_pkts; \
-               sta->sta_stats.last_rx_probersp_uo_pkts = sta->sta_stats.rx_probersp_uo_pkts; \
-               sta->sta_stats.last_rx_ctrl_pkts = sta->sta_stats.rx_ctrl_pkts; \
-               sta->sta_stats.last_rx_data_pkts = sta->sta_stats.rx_data_pkts; \
-       } while (0)
-
-#define STA_RX_PKTS_ARG(sta) \
-       sta->sta_stats.rx_mgnt_pkts \
-       , sta->sta_stats.rx_ctrl_pkts \
-       , sta->sta_stats.rx_data_pkts
-
-#define STA_LAST_RX_PKTS_ARG(sta) \
-       sta->sta_stats.last_rx_mgnt_pkts, \
-       sta->sta_stats.last_rx_ctrl_pkts, \
-       sta->sta_stats.last_rx_data_pkts
-
-#define STA_RX_PKTS_DIFF_ARG(sta) \
-       sta->sta_stats.rx_mgnt_pkts - sta->sta_stats.last_rx_mgnt_pkts, \
-       sta->sta_stats.rx_ctrl_pkts - sta->sta_stats.last_rx_ctrl_pkts, \
-       sta->sta_stats.rx_data_pkts - sta->sta_stats.last_rx_data_pkts
-
-#define STA_PKTS_FMT "(m:%llu, c:%llu, d:%llu)"
-
-struct sta_priv {
-       spinlock_t sta_hash_lock;
-       struct list_head sta_hash[NUM_STA];
-       int asoc_sta_count;
-
-       struct rtw_adapter *padapter;
-       struct list_head asoc_list;
-       struct list_head auth_list;
-       spinlock_t asoc_list_lock;
-       spinlock_t auth_list_lock;
-       u8 asoc_list_cnt;
-       u8 auth_list_cnt;
-
-       unsigned int auth_to;  /* sec, time to expire in authenticating. */
-       unsigned int assoc_to; /* sec, time to expire before associating. */
-       unsigned int expire_to; /* sec , time to expire after associated. */
-
-       /* pointers to STA info; based on allocated AID or NULL if AID free
-        * AID is in the range 1-2007, so sta_aid[0] corresponders to AID 1
-        * and so on
-        */
-       struct sta_info *sta_aid[NUM_STA];
-
-       u16 sta_dz_bitmap;/* only support 15 stations, station aid bitmap
-                          * for sleeping sta. */
-       u16 tim_bitmap;/* only support 15 stations,
-                       * aid=0~15 mapping bit0~bit15 */
-
-       u16 max_num_sta;
-
-       struct wlan_acl_pool acl_list;
-};
-
-static inline u32 wifi_mac_hash(const u8 *mac)
-{
-       u32 x;
-
-       x = mac[0];
-       x = (x << 2) ^ mac[1];
-       x = (x << 2) ^ mac[2];
-       x = (x << 2) ^ mac[3];
-       x = (x << 2) ^ mac[4];
-       x = (x << 2) ^ mac[5];
-
-       x ^= x >> 8;
-       x  = x & (NUM_STA - 1);
-
-       return x;
-}
-
-int _rtw_init_sta_priv23a(struct sta_priv *pstapriv);
-int _rtw_free_sta_priv23a(struct sta_priv *pstapriv);
-
-struct sta_info *rtw_alloc_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr, gfp_t gfp);
-int rtw_free_stainfo23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void rtw_free_all_stainfo23a(struct rtw_adapter *padapter);
-struct sta_info *rtw_get_stainfo23a(struct sta_priv *pstapriv, const u8 *hwaddr);
-int rtw_init_bcmc_stainfo23a(struct rtw_adapter *padapter);
-struct sta_info *rtw_get_bcmc_stainfo23a(struct rtw_adapter *padapter);
-bool rtw_access_ctrl23a(struct rtw_adapter *padapter, u8 *mac_addr);
-
-#endif /* _STA_INFO_H_ */
diff --git a/drivers/staging/rtl8723au/include/usb_ops.h b/drivers/staging/rtl8723au/include/usb_ops.h
deleted file mode 100644 (file)
index ff11e13..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __USB_OPS_H_
-#define __USB_OPS_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <osdep_intf.h>
-#include <usb_ops_linux.h>
-
-#define REALTEK_USB_VENQT_READ         0xC0
-#define REALTEK_USB_VENQT_WRITE                0x40
-#define REALTEK_USB_VENQT_CMD_REQ      0x05
-#define REALTEK_USB_VENQT_CMD_IDX      0x00
-
-enum {
-       VENDOR_WRITE = 0x00,
-       VENDOR_READ = 0x01,
-};
-
-#define ALIGNMENT_UNIT                         16
-#define MAX_VENDOR_REQ_CMD_SIZE        254             /* 8188cu SIE Support */
-#define MAX_USB_IO_CTL_SIZE    (MAX_VENDOR_REQ_CMD_SIZE +ALIGNMENT_UNIT)
-
-void rtl8723au_set_hw_type(struct rtw_adapter *padapter);
-
-void rtl8723au_recv_tasklet(void *priv);
-
-void rtl8723au_xmit_tasklet(void *priv);
-
-/* Increase and check if the continual_urb_error of this @param dvobjprive is
- * larger than MAX_CONTINUAL_URB_ERR. Return result
- */
-static inline int rtw_inc_and_chk_continual_urb_error(struct dvobj_priv *dvobj)
-{
-       int ret = false;
-       int value;
-
-       value = atomic_inc_return(&dvobj->continual_urb_error);
-       if (value > MAX_CONTINUAL_URB_ERR) {
-               DBG_8723A("[dvobj:%p][ERROR] continual_urb_error:%d > %d\n",
-                         dvobj, value, MAX_CONTINUAL_URB_ERR);
-               ret = true;
-       }
-       return ret;
-}
-
-/* Set the continual_urb_error of this @param dvobjprive to 0 */
-static inline void rtw_reset_continual_urb_error(struct dvobj_priv *dvobj)
-{
-       atomic_set(&dvobj->continual_urb_error, 0);
-}
-
-bool rtl8723au_chip_configure(struct rtw_adapter *padapter);
-
-#endif /* __USB_OPS_H_ */
diff --git a/drivers/staging/rtl8723au/include/usb_ops_linux.h b/drivers/staging/rtl8723au/include/usb_ops_linux.h
deleted file mode 100644 (file)
index af2f14b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __USB_OPS_LINUX_H__
-#define __USB_OPS_LINUX_H__
-
-#define VENDOR_CMD_MAX_DATA_LEN        254
-
-#define RTW_USB_CONTROL_MSG_TIMEOUT    500/* ms */
-
-#define MAX_USBCTRL_VENDORREQ_TIMES    10
-
-int rtl8723au_read_port(struct rtw_adapter *adapter, u32 cnt,
-                       struct recv_buf *precvbuf);
-void rtl8723au_read_port_cancel(struct rtw_adapter *padapter);
-int rtl8723au_write_port(struct rtw_adapter *padapter, u32 addr, u32 cnt,
-                        struct xmit_buf *pxmitbuf);
-void rtl8723au_write_port_cancel(struct rtw_adapter *padapter);
-int rtl8723au_read_interrupt(struct rtw_adapter *adapter);
-
-u8 rtl8723au_read8(struct rtw_adapter *padapter, u16 addr);
-u16 rtl8723au_read16(struct rtw_adapter *padapter, u16 addr);
-u32 rtl8723au_read32(struct rtw_adapter *padapter, u16 addr);
-int rtl8723au_write8(struct rtw_adapter *padapter, u16 addr, u8 val);
-int rtl8723au_write16(struct rtw_adapter *padapter, u16 addr, u16 val);
-int rtl8723au_write32(struct rtw_adapter *padapter, u16 addr, u32 val);
-int rtl8723au_writeN(struct rtw_adapter *padapter,
-                    u16 addr, u16 length, u8 *pdata);
-
-#endif
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
deleted file mode 100644 (file)
index 25d573c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef _WIFI_H_
-#define _WIFI_H_
-
-/*  This value is tested by WiFi 11n Test Plan 5.2.3.
- *  This test verifies the WLAN NIC can update the NAV through sending
- *  the CTS with large duration.
- */
-#define        WiFiNavUpperUs          30000   /*  30 ms */
-
-/*-----------------------------------------------------------------------------
-                               Below is the definition for 802.11n
-------------------------------------------------------------------------------*/
-
-struct AC_param {
-       u8                      ACI_AIFSN;
-       u8                      CW;
-       __le16                  TXOP_limit;
-}  __packed;
-
-struct WMM_para_element {
-       unsigned char           QoS_info;
-       unsigned char           reserved;
-       struct AC_param ac_param[4];
-}  __packed;
-
-struct ADDBA_request {
-       u8              dialog_token;
-       __le16          BA_para_set;
-       __le16          BA_timeout_value;
-       __le16          BA_starting_seqctrl;
-}  __packed;
-
-
-/*     ===============WPS Section=============== */
-/*     WPS attribute ID */
-#define WPS_ATTR_VER1                          0x104A
-#define WPS_ATTR_SIMPLE_CONF_STATE             0x1044
-#define WPS_ATTR_RESP_TYPE                     0x103B
-#define WPS_ATTR_UUID_E                                0x1047
-#define WPS_ATTR_MANUFACTURER                  0x1021
-#define WPS_ATTR_MODEL_NAME                    0x1023
-#define WPS_ATTR_MODEL_NUMBER                  0x1024
-#define WPS_ATTR_SERIAL_NUMBER                 0x1042
-#define WPS_ATTR_PRIMARY_DEV_TYPE              0x1054
-#define WPS_ATTR_SEC_DEV_TYPE_LIST             0x1055
-#define WPS_ATTR_DEVICE_NAME                   0x1011
-#define WPS_ATTR_CONF_METHOD                   0x1008
-#define WPS_ATTR_RF_BANDS                      0x103C
-#define WPS_ATTR_DEVICE_PWID                   0x1012
-#define WPS_ATTR_REQUEST_TYPE                  0x103A
-#define WPS_ATTR_ASSOCIATION_STATE             0x1002
-#define WPS_ATTR_CONFIG_ERROR                  0x1009
-#define WPS_ATTR_VENDOR_EXT                    0x1049
-#define WPS_ATTR_SELECTED_REGISTRAR            0x1041
-
-/*     WPS Configuration Method */
-#define        WPS_CM_NONE                                     0x0000
-#define        WPS_CM_LABEL                                    0x0004
-#define        WPS_CM_DISPLYA                                  0x0008
-#define        WPS_CM_EXTERNAL_NFC_TOKEN                       0x0010
-#define        WPS_CM_INTEGRATED_NFC_TOKEN                     0x0020
-#define        WPS_CM_NFC_INTERFACE                            0x0040
-#define        WPS_CM_PUSH_BUTTON                              0x0080
-#define        WPS_CM_KEYPAD                                   0x0100
-#define        WPS_CM_SW_PUHS_BUTTON                           0x0280
-#define        WPS_CM_HW_PUHS_BUTTON                           0x0480
-#define        WPS_CM_SW_DISPLAY_PIN                           0x2008
-#define        WPS_CM_LCD_DISPLAY_PIN                          0x4008
-
-#endif /*  _WIFI_H_ */
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h
deleted file mode 100644 (file)
index 95b32e1..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __WLAN_BSSDEF_H__
-#define __WLAN_BSSDEF_H__
-
-
-#define MAX_IE_SZ      768
-
-
-#define NDIS_802_11_LENGTH_RATES        8
-#define NDIS_802_11_LENGTH_RATES_EX     16
-
-/* Length is the 4 bytes multiples of the sum of
- * sizeof(6 * sizeof(unsigned char)) + 2 + sizeof(struct ndis_802_11_ssid) +
- * sizeof(u32) + sizeof(long) + sizeof(enum ndis_802_11_net_type) +
- * sizeof(struct ndis_802_11_config) + sizeof(sizeof(unsigned char) *
- * NDIS_802_11_LENGTH_RATES_EX) + IELength
- *
- * Except the IELength, all other fields are fixed length. Therefore,
- * we can define a macro to present the partial sum.
- */
-
-enum ndis_802_11_auth_mode {
-       Ndis802_11AuthModeOpen,
-       Ndis802_11AuthModeShared,
-       Ndis802_11AuthModeAutoSwitch,
-       Ndis802_11AuthModeWPA,
-       Ndis802_11AuthModeWPAPSK,
-       Ndis802_11AuthModeWPANone,
-       dis802_11AuthModeMax       /*  upper bound */
-};
-
-enum  {
-       Ndis802_11WEPEnabled,
-       Ndis802_11Encryption1Enabled = Ndis802_11WEPEnabled,
-       Ndis802_11WEPDisabled,
-       Ndis802_11EncryptionDisabled = Ndis802_11WEPDisabled,
-       Ndis802_11WEPKeyAbsent,
-       Ndis802_11Encryption1KeyAbsent = Ndis802_11WEPKeyAbsent,
-       Ndis802_11WEPNotSupported,
-       Ndis802_11EncryptionNotSupported = Ndis802_11WEPNotSupported,
-       Ndis802_11Encryption2Enabled,
-       Ndis802_11Encryption2KeyAbsent,
-       Ndis802_11Encryption3Enabled,
-       Ndis802_11Encryption3KeyAbsent,
-};
-
-struct wlan_bcn_info {
-       /* these infor get from rtw_get_encrypt_info when
-        *       * translate scan to UI */
-       u8 encryp_protocol;/* ENCRYP_PROTOCOL_E: OPEN/WEP/WPA/WPA2 */
-       int group_cipher; /* WPA/WPA2 group cipher */
-       int pairwise_cipher;/* WPA/WPA2/WEP pairwise cipher */
-       int is_8021x;
-
-       /* bwmode 20/40 and ch_offset UP/LOW */
-};
-
-struct wlan_bssid_ex {
-       u32  Length;
-       u8 MacAddress[ETH_ALEN];
-       u16 reserved;
-       struct cfg80211_ssid Ssid;
-       u32  Privacy;
-       long  Rssi;/* in dBM, raw data , get from PHY) */
-       u16 beacon_interval;
-       u16 capability;
-       u64 tsf;
-       u32 ATIMWindow;         /*  units are Kusec */
-       u32 DSConfig;           /*  Frequency, units are kHz */
-       enum nl80211_iftype ifmode;
-       unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
-       u8 SignalStrength;/* in percentage */
-       u8 SignalQuality;/* in percentage */
-       u32  IELength;
-       u8  IEs[MAX_IE_SZ]; /* timestamp, beacon interval, and capability info*/
-} __packed;
-
-static inline uint get_wlan_bssid_ex_sz(struct wlan_bssid_ex *bss)
-{
-       return sizeof(struct wlan_bssid_ex) - MAX_IE_SZ + bss->IELength;
-}
-
-struct wlan_network {
-       struct list_head        list;
-       int     network_type;   /* refer to ieee80211.h for 11A/B/G */
-       /*  set to fixed when not to be removed as site-surveying */
-       int     fixed;
-       unsigned long   last_scanned; /* timestamp for the network */
-       int     join_res;
-       struct wlan_bssid_ex    network; /* must be the last item */
-       struct wlan_bcn_info    BcnInfo;
-};
-
-enum VRTL_CARRIER_SENSE {
-       DISABLE_VCS,
-       ENABLE_VCS,
-       AUTO_VCS
-};
-
-enum VCS_TYPE {
-       NONE_VCS,
-       RTS_CTS,
-       CTS_TO_SELF
-};
-
-/* john */
-#define NUM_PRE_AUTH_KEY 16
-#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY
-
-#endif /* ifndef WLAN_BSSDEF_H_ */
diff --git a/drivers/staging/rtl8723au/include/xmit_osdep.h b/drivers/staging/rtl8723au/include/xmit_osdep.h
deleted file mode 100644 (file)
index 2be04c4..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __XMIT_OSDEP_H_
-#define __XMIT_OSDEP_H_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-
-#define NR_XMITFRAME   256
-
-int rtw_xmit23a_entry23a(struct sk_buff *pkt, struct net_device *pnetdev);
-
-void rtw_os_xmit_schedule23a(struct rtw_adapter *padapter);
-
-int rtw_os_xmit_resource_alloc23a(struct rtw_adapter *padapter,
-                              struct xmit_buf *pxmitbuf, u32 alloc_sz);
-void rtw_os_xmit_resource_free23a(struct rtw_adapter *padapter,
-                              struct xmit_buf *pxmitbuf);
-
-void rtw_os_pkt_complete23a(struct rtw_adapter *padapter, struct sk_buff *pkt);
-void rtw_os_xmit_complete23a(struct rtw_adapter *padapter,
-                         struct xmit_frame *pxframe);
-int netdev_open23a(struct net_device *pnetdev);
-
-#endif /* __XMIT_OSDEP_H_ */
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
deleted file mode 100644 (file)
index d0ba377..0000000
+++ /dev/null
@@ -1,3348 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define  _IOCTL_CFG80211_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <xmit_osdep.h>
-
-#include "ioctl_cfg80211.h"
-
-#define RTW_MAX_MGMT_TX_CNT 8
-
-#define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535       /* ms */
-#define RTW_MAX_NUM_PMKIDS 4
-
-static const u32 rtw_cipher_suites[] = {
-       WLAN_CIPHER_SUITE_WEP40,
-       WLAN_CIPHER_SUITE_WEP104,
-       WLAN_CIPHER_SUITE_TKIP,
-       WLAN_CIPHER_SUITE_CCMP,
-};
-
-#define RATETAB_ENT(_rate, _rateid, _flags) {                  \
-       .bitrate        = (_rate),                              \
-       .hw_value       = (_rateid),                            \
-       .flags          = (_flags),                             \
-}
-
-#define CHAN2G(_channel, _freq, _flags) {                      \
-       .band                   = NL80211_BAND_2GHZ,            \
-       .center_freq            = (_freq),                      \
-       .hw_value               = (_channel),                   \
-       .flags                  = (_flags),                     \
-       .max_antenna_gain       = 0,                            \
-       .max_power              = 30,                           \
-}
-
-#define CHAN5G(_channel, _flags) {                             \
-       .band                   = NL80211_BAND_5GHZ,            \
-       .center_freq            = 5000 + (5 * (_channel)),      \
-       .hw_value               = (_channel),                   \
-       .flags                  = (_flags),                     \
-       .max_antenna_gain       = 0,                            \
-       .max_power              = 30,                           \
-}
-
-static struct ieee80211_rate rtw_rates[] = {
-       RATETAB_ENT(10, 0x1, 0),
-       RATETAB_ENT(20, 0x2, 0),
-       RATETAB_ENT(55, 0x4, 0),
-       RATETAB_ENT(110, 0x8, 0),
-       RATETAB_ENT(60, 0x10, 0),
-       RATETAB_ENT(90, 0x20, 0),
-       RATETAB_ENT(120, 0x40, 0),
-       RATETAB_ENT(180, 0x80, 0),
-       RATETAB_ENT(240, 0x100, 0),
-       RATETAB_ENT(360, 0x200, 0),
-       RATETAB_ENT(480, 0x400, 0),
-       RATETAB_ENT(540, 0x800, 0),
-};
-
-#define rtw_a_rates            (rtw_rates + 4)
-#define RTW_A_RATES_NUM        8
-#define rtw_g_rates            (rtw_rates + 0)
-#define RTW_G_RATES_NUM        12
-
-#define RTW_2G_CHANNELS_NUM 14
-#define RTW_5G_CHANNELS_NUM 37
-
-static struct ieee80211_channel rtw_2ghz_channels[] = {
-       CHAN2G(1, 2412, 0),
-       CHAN2G(2, 2417, 0),
-       CHAN2G(3, 2422, 0),
-       CHAN2G(4, 2427, 0),
-       CHAN2G(5, 2432, 0),
-       CHAN2G(6, 2437, 0),
-       CHAN2G(7, 2442, 0),
-       CHAN2G(8, 2447, 0),
-       CHAN2G(9, 2452, 0),
-       CHAN2G(10, 2457, 0),
-       CHAN2G(11, 2462, 0),
-       CHAN2G(12, 2467, 0),
-       CHAN2G(13, 2472, 0),
-       CHAN2G(14, 2484, 0),
-};
-
-static struct ieee80211_channel rtw_5ghz_a_channels[] = {
-       CHAN5G(34, 0), CHAN5G(36, 0),
-       CHAN5G(38, 0), CHAN5G(40, 0),
-       CHAN5G(42, 0), CHAN5G(44, 0),
-       CHAN5G(46, 0), CHAN5G(48, 0),
-       CHAN5G(52, 0), CHAN5G(56, 0),
-       CHAN5G(60, 0), CHAN5G(64, 0),
-       CHAN5G(100, 0), CHAN5G(104, 0),
-       CHAN5G(108, 0), CHAN5G(112, 0),
-       CHAN5G(116, 0), CHAN5G(120, 0),
-       CHAN5G(124, 0), CHAN5G(128, 0),
-       CHAN5G(132, 0), CHAN5G(136, 0),
-       CHAN5G(140, 0), CHAN5G(149, 0),
-       CHAN5G(153, 0), CHAN5G(157, 0),
-       CHAN5G(161, 0), CHAN5G(165, 0),
-       CHAN5G(184, 0), CHAN5G(188, 0),
-       CHAN5G(192, 0), CHAN5G(196, 0),
-       CHAN5G(200, 0), CHAN5G(204, 0),
-       CHAN5G(208, 0), CHAN5G(212, 0),
-       CHAN5G(216, 0),
-};
-
-static void rtw_2g_channels_init(struct ieee80211_channel *channels)
-{
-       memcpy((void *)channels, (void *)rtw_2ghz_channels,
-              sizeof(struct ieee80211_channel) * RTW_2G_CHANNELS_NUM);
-}
-
-static void rtw_5g_channels_init(struct ieee80211_channel *channels)
-{
-       memcpy((void *)channels, (void *)rtw_5ghz_a_channels,
-              sizeof(struct ieee80211_channel) * RTW_5G_CHANNELS_NUM);
-}
-
-static void rtw_2g_rates_init(struct ieee80211_rate *rates)
-{
-       memcpy(rates, rtw_g_rates,
-              sizeof(struct ieee80211_rate) * RTW_G_RATES_NUM);
-}
-
-static void rtw_5g_rates_init(struct ieee80211_rate *rates)
-{
-       memcpy(rates, rtw_a_rates,
-              sizeof(struct ieee80211_rate) * RTW_A_RATES_NUM);
-}
-
-static struct ieee80211_supported_band *
-rtw_spt_band_alloc(enum nl80211_band band)
-{
-       struct ieee80211_supported_band *spt_band = NULL;
-       int n_channels, n_bitrates;
-
-       if (band == NL80211_BAND_2GHZ) {
-               n_channels = RTW_2G_CHANNELS_NUM;
-               n_bitrates = RTW_G_RATES_NUM;
-       } else if (band == NL80211_BAND_5GHZ) {
-               n_channels = RTW_5G_CHANNELS_NUM;
-               n_bitrates = RTW_A_RATES_NUM;
-       } else {
-               goto exit;
-       }
-       spt_band = kzalloc(sizeof(struct ieee80211_supported_band) +
-                          sizeof(struct ieee80211_channel) * n_channels +
-                          sizeof(struct ieee80211_rate) * n_bitrates,
-                          GFP_KERNEL);
-       if (!spt_band)
-               goto exit;
-
-       spt_band->channels =
-               (struct ieee80211_channel *)(((u8 *) spt_band) +
-                                            sizeof(struct
-                                                   ieee80211_supported_band));
-       spt_band->bitrates =
-               (struct ieee80211_rate *)(((u8 *) spt_band->channels) +
-                                         sizeof(struct ieee80211_channel) *
-                                         n_channels);
-       spt_band->band = band;
-       spt_band->n_channels = n_channels;
-       spt_band->n_bitrates = n_bitrates;
-
-       if (band == NL80211_BAND_2GHZ) {
-               rtw_2g_channels_init(spt_band->channels);
-               rtw_2g_rates_init(spt_band->bitrates);
-       } else if (band == NL80211_BAND_5GHZ) {
-               rtw_5g_channels_init(spt_band->channels);
-               rtw_5g_rates_init(spt_band->bitrates);
-       }
-
-       /* spt_band.ht_cap */
-
-exit:
-       return spt_band;
-}
-
-static const struct ieee80211_txrx_stypes
-rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
-       [NL80211_IFTYPE_ADHOC] = {
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ACTION >> 4)
-       },
-       [NL80211_IFTYPE_STATION] = {
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
-                     BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
-       },
-       [NL80211_IFTYPE_AP] = {
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_DISASSOC >> 4) |
-                     BIT(IEEE80211_STYPE_AUTH >> 4) |
-                     BIT(IEEE80211_STYPE_DEAUTH >> 4) |
-                     BIT(IEEE80211_STYPE_ACTION >> 4)
-       },
-       [NL80211_IFTYPE_AP_VLAN] = {
-               /* copy AP */
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_DISASSOC >> 4) |
-                     BIT(IEEE80211_STYPE_AUTH >> 4) |
-                     BIT(IEEE80211_STYPE_DEAUTH >> 4) |
-                     BIT(IEEE80211_STYPE_ACTION >> 4)
-       },
-       [NL80211_IFTYPE_P2P_CLIENT] = {
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ACTION >> 4) |
-                     BIT(IEEE80211_STYPE_PROBE_REQ >> 4)
-       },
-       [NL80211_IFTYPE_P2P_GO] = {
-               .tx = 0xffff,
-               .rx = BIT(IEEE80211_STYPE_ASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_REASSOC_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_PROBE_REQ >> 4) |
-                     BIT(IEEE80211_STYPE_DISASSOC >> 4) |
-                     BIT(IEEE80211_STYPE_AUTH >> 4) |
-                     BIT(IEEE80211_STYPE_DEAUTH >> 4) |
-                     BIT(IEEE80211_STYPE_ACTION >> 4)
-       },
-};
-
-static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
-                                  struct wlan_network *pnetwork)
-{
-       int ret = 0;
-       struct ieee80211_channel *notify_channel;
-       struct cfg80211_bss *bss;
-       u16 channel;
-       u32 freq;
-       u8 *notify_ie;
-       size_t notify_ielen;
-       s32 notify_signal;
-       struct wireless_dev *wdev = padapter->rtw_wdev;
-       struct wiphy *wiphy = wdev->wiphy;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       channel = pnetwork->network.DSConfig;
-       if (channel <= RTW_CH_MAX_2G_CHANNEL)
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_2GHZ);
-       else
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_5GHZ);
-
-       notify_channel = ieee80211_get_channel(wiphy, freq);
-
-       notify_ie = pnetwork->network.IEs;
-       notify_ielen = pnetwork->network.IELength;
-
-       /* We've set wiphy's signal_type as CFG80211_SIGNAL_TYPE_MBM:
-        *  signal strength in mBm (100*dBm)
-        */
-       if (check_fwstate(pmlmepriv, _FW_LINKED) &&
-           is_same_network23a(&pmlmepriv->cur_network.network,
-                           &pnetwork->network)) {
-               notify_signal = 100 * translate_percentage_to_dbm(padapter->recvpriv.signal_strength);  /* dbm */
-       } else {
-               notify_signal = 100 * translate_percentage_to_dbm(
-                       pnetwork->network.SignalStrength);      /* dbm */
-       }
-
-       bss = cfg80211_inform_bss(wiphy, notify_channel,
-                                 CFG80211_BSS_FTYPE_UNKNOWN,
-                                 pnetwork->network.MacAddress,
-                                 pnetwork->network.tsf,
-                                 pnetwork->network.capability,
-                                 pnetwork->network.beacon_interval,
-                                 notify_ie, notify_ielen,
-                                 notify_signal, GFP_ATOMIC);
-
-       if (unlikely(!bss)) {
-               DBG_8723A("rtw_cfg80211_inform_bss error\n");
-               return -EINVAL;
-       }
-
-       cfg80211_put_bss(wiphy, bss);
-
-       return ret;
-}
-
-void rtw_cfg80211_indicate_connect(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       struct wireless_dev *pwdev = padapter->rtw_wdev;
-
-       DBG_8723A("%s(padapter =%p)\n", __func__, padapter);
-
-       if (pwdev->iftype != NL80211_IFTYPE_STATION &&
-           pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
-               return;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return;
-
-       if (padapter->mlmepriv.to_roaming > 0) {
-               struct wiphy *wiphy = pwdev->wiphy;
-               struct ieee80211_channel *notify_channel;
-               u32 freq;
-               u16 channel = cur_network->network.DSConfig;
-
-               if (channel <= RTW_CH_MAX_2G_CHANNEL)
-                       freq =
-                           ieee80211_channel_to_frequency(channel,
-                                                          NL80211_BAND_2GHZ);
-               else
-                       freq =
-                           ieee80211_channel_to_frequency(channel,
-                                                          NL80211_BAND_5GHZ);
-
-               notify_channel = ieee80211_get_channel(wiphy, freq);
-
-               DBG_8723A("%s call cfg80211_roamed\n", __func__);
-               cfg80211_roamed(padapter->pnetdev, notify_channel,
-                               cur_network->network.MacAddress,
-                               pmlmepriv->assoc_req +
-                               sizeof(struct ieee80211_hdr_3addr) + 2,
-                               pmlmepriv->assoc_req_len -
-                               sizeof(struct ieee80211_hdr_3addr) - 2,
-                               pmlmepriv->assoc_rsp +
-                               sizeof(struct ieee80211_hdr_3addr) + 6,
-                               pmlmepriv->assoc_rsp_len -
-                               sizeof(struct ieee80211_hdr_3addr) - 6,
-                               GFP_ATOMIC);
-       } else {
-               cfg80211_connect_result(padapter->pnetdev,
-                                       cur_network->network.MacAddress,
-                                       pmlmepriv->assoc_req +
-                                       sizeof(struct ieee80211_hdr_3addr) + 2,
-                                       pmlmepriv->assoc_req_len -
-                                       sizeof(struct ieee80211_hdr_3addr) - 2,
-                                       pmlmepriv->assoc_rsp +
-                                       sizeof(struct ieee80211_hdr_3addr) + 6,
-                                       pmlmepriv->assoc_rsp_len -
-                                       sizeof(struct ieee80211_hdr_3addr) - 6,
-                                       WLAN_STATUS_SUCCESS, GFP_ATOMIC);
-       }
-}
-
-void rtw_cfg80211_indicate_disconnect(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wireless_dev *pwdev = padapter->rtw_wdev;
-
-       DBG_8723A("%s(padapter =%p)\n", __func__, padapter);
-
-       if (pwdev->iftype != NL80211_IFTYPE_STATION &&
-           pwdev->iftype != NL80211_IFTYPE_P2P_CLIENT)
-               return;
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-               return;
-
-       if (!padapter->mlmepriv.not_indic_disco) {
-               if (check_fwstate(&padapter->mlmepriv, WIFI_UNDER_LINKING)) {
-                       cfg80211_connect_result(padapter->pnetdev, NULL, NULL,
-                                               0, NULL, 0,
-                                               WLAN_STATUS_UNSPECIFIED_FAILURE,
-                                               GFP_ATOMIC);
-               } else {
-                       cfg80211_disconnected(padapter->pnetdev, 0, NULL,
-                                             0, false, GFP_ATOMIC);
-               }
-       }
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-static int set_pairwise_key(struct rtw_adapter *padapter, struct sta_info *psta)
-{
-       struct cmd_obj *ph2c;
-       struct set_stakey_parm *psetstakey_para;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (ph2c == NULL) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetstakey_para = kzalloc(sizeof(struct set_stakey_parm), GFP_KERNEL);
-       if (psetstakey_para == NULL) {
-               kfree(ph2c);
-               res = _FAIL;
-               goto exit;
-       }
-
-       init_h2fwcmd_w_parm_no_rsp(ph2c, psetstakey_para, _SetStaKey_CMD_);
-
-       psetstakey_para->algorithm = psta->dot118021XPrivacy;
-
-       ether_addr_copy(psetstakey_para->addr, psta->hwaddr);
-
-       memcpy(psetstakey_para->key, &psta->dot118021x_UncstKey, 16);
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, ph2c);
-
-exit:
-       return res;
-}
-
-static int set_group_key(struct rtw_adapter *padapter, struct key_params *parms,
-                        u32 alg, u8 keyid)
-{
-       struct cmd_obj *pcmd;
-       struct setkey_parm *psetkeyparm;
-       struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
-       int res = _SUCCESS;
-
-       DBG_8723A("%s\n", __func__);
-
-       if (keyid >= 4) {
-               res = _FAIL;
-               goto exit;
-       }
-
-       pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
-       if (!pcmd) {
-               res = _FAIL;
-               goto exit;
-       }
-       psetkeyparm = kzalloc(sizeof(struct setkey_parm), GFP_KERNEL);
-       if (!psetkeyparm) {
-               kfree(pcmd);
-               res = _FAIL;
-               goto exit;
-       }
-
-       psetkeyparm->keyid = keyid;
-       if (is_wep_enc(alg))
-               padapter->mlmepriv.key_mask |= BIT(psetkeyparm->keyid);
-
-       psetkeyparm->algorithm = alg;
-
-       psetkeyparm->set_tx = 1;
-
-       memcpy(&psetkeyparm->key, parms->key, parms->key_len);
-
-       pcmd->cmdcode = _SetKey_CMD_;
-       pcmd->parmbuf = (u8 *) psetkeyparm;
-       pcmd->cmdsz = sizeof(struct setkey_parm);
-       pcmd->rsp = NULL;
-       pcmd->rspsz = 0;
-
-       res = rtw_enqueue_cmd23a(pcmdpriv, pcmd);
-
-exit:
-       return res;
-}
-
-static int rtw_cfg80211_ap_set_encryption(struct net_device *dev, u8 key_index,
-                                         int set_tx, const u8 *sta_addr,
-                                         struct key_params *keyparms)
-{
-       int key_len;
-       struct sta_info *psta = NULL, *pbcmc_sta = NULL;
-       struct rtw_adapter *padapter = netdev_priv(dev);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       DBG_8723A("%s\n", __func__);
-
-       if (!is_broadcast_ether_addr(sta_addr)) {
-               psta = rtw_get_stainfo23a(pstapriv, sta_addr);
-               if (!psta) {
-                       /* ret = -EINVAL; */
-                       DBG_8723A("rtw_set_encryption(), sta has already "
-                                 "been removed or never been added\n");
-                       goto exit;
-               }
-       }
-
-       key_len = keyparms->key_len;
-
-       if (!psta && (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 ||
-                     keyparms->cipher == WLAN_CIPHER_SUITE_WEP104)) {
-               DBG_8723A("r871x_set_encryption, crypt.alg = WEP\n");
-
-               DBG_8723A("r871x_set_encryption, wep_key_idx =%d, len =%d\n",
-                         key_index, key_len);
-
-               if (psecuritypriv->bWepDefaultKeyIdxSet == 0) {
-                       /* wep default key has not been set, so use
-                          this key index as default key. */
-
-                       psecuritypriv->ndisencryptstatus =
-                               Ndis802_11Encryption1Enabled;
-                       psecuritypriv->dot11PrivacyAlgrthm = keyparms->cipher;
-                       psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher;
-
-                       psecuritypriv->dot11PrivacyKeyIndex = key_index;
-               }
-
-               memcpy(&psecuritypriv->wep_key[key_index].key,
-                      keyparms->key, key_len);
-
-               psecuritypriv->wep_key[key_index].keylen = key_len;
-
-               set_group_key(padapter, keyparms, keyparms->cipher, key_index);
-
-               goto exit;
-       }
-
-       if (!psta) {    /*  group key */
-               if (set_tx == 0) {      /* group key */
-                       if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 ||
-                           keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) {
-                               DBG_8723A("%s, set group_key, WEP\n", __func__);
-
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key, key_len);
-
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       keyparms->cipher;
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) {
-                               DBG_8723A("%s, set group_key, TKIP\n",
-                                         __func__);
-
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       WLAN_CIPHER_SUITE_TKIP;
-
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key,
-                                      (min(16, key_len)));
-
-                               /* set mic key */
-                               memcpy(psecuritypriv->
-                                      dot118021XGrptxmickey[key_index].skey,
-                                      &keyparms->key[16], 8);
-                               memcpy(psecuritypriv->
-                                      dot118021XGrprxmickey[key_index].skey,
-                                      &keyparms->key[24], 8);
-
-                               psecuritypriv->busetkipkey = 1;
-
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) {
-                                       DBG_8723A("%s, set group_key, CCMP\n",
-                                         __func__);
-
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       WLAN_CIPHER_SUITE_CCMP;
-
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key,
-                                      (min(16, key_len)));
-                       } else {
-                               DBG_8723A("%s, set group_key, none\n",
-                                         __func__);
-
-                               psecuritypriv->dot118021XGrpPrivacy = 0;
-                       }
-
-                       psecuritypriv->dot118021XGrpKeyid = key_index;
-
-                       psecuritypriv->binstallGrpkey = 1;
-
-                       psecuritypriv->dot11PrivacyAlgrthm =
-                               psecuritypriv->dot118021XGrpPrivacy;
-
-                       set_group_key(padapter, keyparms,
-                                     psecuritypriv->dot118021XGrpPrivacy,
-                                     key_index);
-
-                       pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter);
-                       if (pbcmc_sta) {
-                               pbcmc_sta->ieee8021x_blocked = false;
-                               /* rx will use bmc_sta's dot118021XPrivacy */
-                               pbcmc_sta->dot118021XPrivacy =
-                                       psecuritypriv->dot118021XGrpPrivacy;
-
-                       }
-
-               }
-
-               goto exit;
-       }
-
-       if (psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_8021X && psta) {
-               /*  psk/802_1x */
-               if (set_tx == 1) {
-                       /* pairwise key */
-                       memcpy(psta->dot118021x_UncstKey.skey,
-                              keyparms->key, (min(16, key_len)));
-
-                       if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 ||
-                           keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) {
-                               DBG_8723A("%s, set pairwise key, WEP\n",
-                                         __func__);
-
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       keyparms->cipher;
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) {
-                               DBG_8723A("%s, set pairwise key, TKIP\n",
-                                         __func__);
-
-                               psta->dot118021XPrivacy =
-                                       WLAN_CIPHER_SUITE_TKIP;
-
-                               /* set mic key */
-                               memcpy(psta->dot11tkiptxmickey.skey,
-                                      &keyparms->key[16], 8);
-                               memcpy(psta->dot11tkiprxmickey.skey,
-                                      &keyparms->key[24], 8);
-
-                               psecuritypriv->busetkipkey = 1;
-
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) {
-                               DBG_8723A("%s, set pairwise key, CCMP\n",
-                                         __func__);
-
-                               psta->dot118021XPrivacy =
-                                       WLAN_CIPHER_SUITE_CCMP;
-                       } else {
-                               DBG_8723A("%s, set pairwise key, none\n",
-                                         __func__);
-
-                               psta->dot118021XPrivacy = 0;
-                       }
-
-                       set_pairwise_key(padapter, psta);
-
-                       psta->ieee8021x_blocked = false;
-
-                       psta->bpairwise_key_installed = true;
-               } else {        /* group key??? */
-                       if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 ||
-                           keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) {
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key, key_len);
-
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       keyparms->cipher;
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_TKIP) {
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       WLAN_CIPHER_SUITE_TKIP;
-
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key,
-                                      (min(16, key_len)));
-
-                               /* set mic key */
-                               memcpy(psecuritypriv->
-                                      dot118021XGrptxmickey[key_index].skey,
-                                      &keyparms->key[16], 8);
-                               memcpy(psecuritypriv->
-                                      dot118021XGrprxmickey[key_index].skey,
-                                      &keyparms->key[24], 8);
-
-                               psecuritypriv->busetkipkey = 1;
-                       } else if (keyparms->cipher == WLAN_CIPHER_SUITE_CCMP) {
-                               psecuritypriv->dot118021XGrpPrivacy =
-                                       WLAN_CIPHER_SUITE_CCMP;
-
-                               memcpy(psecuritypriv->
-                                      dot118021XGrpKey[key_index].skey,
-                                      keyparms->key,
-                                      (min(16, key_len)));
-                       } else {
-                               psecuritypriv->dot118021XGrpPrivacy = 0;
-                       }
-
-                       psecuritypriv->dot118021XGrpKeyid = key_index;
-
-                       psecuritypriv->binstallGrpkey = 1;
-
-                       psecuritypriv->dot11PrivacyAlgrthm =
-                               psecuritypriv->dot118021XGrpPrivacy;
-
-                       set_group_key(padapter, keyparms,
-                                     psecuritypriv->dot118021XGrpPrivacy,
-                                     key_index);
-
-                       pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter);
-                       if (pbcmc_sta) {
-                               /* rx will use bmc_sta's
-                                  dot118021XPrivacy */
-                               pbcmc_sta->ieee8021x_blocked = false;
-                               pbcmc_sta->dot118021XPrivacy =
-                                       psecuritypriv->dot118021XGrpPrivacy;
-                       }
-               }
-       }
-
-exit:
-
-       return 0;
-}
-#endif
-
-static int rtw_cfg80211_set_encryption(struct net_device *dev, u8 key_index,
-                                      int set_tx, const u8 *sta_addr,
-                                      struct key_params *keyparms)
-{
-       int ret = 0;
-       int key_len;
-       struct rtw_adapter *padapter = netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s\n", __func__);
-
-       key_len = keyparms->key_len;
-
-       if (keyparms->cipher == WLAN_CIPHER_SUITE_WEP40 ||
-           keyparms->cipher == WLAN_CIPHER_SUITE_WEP104) {
-               RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_,
-                        "wpa_set_encryption, crypt.alg = WEP\n");
-               DBG_8723A("wpa_set_encryption, crypt.alg = WEP\n");
-
-               if (psecuritypriv->bWepDefaultKeyIdxSet == 0) {
-                       /* wep default key has not been set, so use this
-                          key index as default key. */
-
-                       psecuritypriv->ndisencryptstatus =
-                               Ndis802_11Encryption1Enabled;
-                       psecuritypriv->dot11PrivacyAlgrthm = keyparms->cipher;
-                       psecuritypriv->dot118021XGrpPrivacy = keyparms->cipher;
-
-                       psecuritypriv->dot11PrivacyKeyIndex = key_index;
-               }
-
-               memcpy(&psecuritypriv->wep_key[key_index].key,
-                      keyparms->key, key_len);
-
-               psecuritypriv->wep_key[key_index].keylen = key_len;
-
-               rtw_set_key23a(padapter, psecuritypriv, key_index, 0);
-
-               goto exit;
-       }
-
-       if (padapter->securitypriv.dot11AuthAlgrthm ==
-           dot11AuthAlgrthm_8021X) {   /*  802_1x */
-               struct sta_info *psta, *pbcmc_sta;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-
-               if (check_fwstate(pmlmepriv,
-                                 WIFI_STATION_STATE | WIFI_MP_STATE)) {
-                       /* sta mode */
-                       psta = rtw_get_stainfo23a(pstapriv, get_bssid(pmlmepriv));
-                       if (psta == NULL) {
-                               DBG_8723A("%s, : Obtain Sta_info fail\n",
-                                         __func__);
-                       } else {
-                               /* Jeff: don't disable ieee8021x_blocked
-                                  while clearing key */
-                               if (keyparms->cipher != IW_AUTH_CIPHER_NONE &&
-                                   keyparms->cipher != 0)
-                                       psta->ieee8021x_blocked = false;
-
-                               if ((padapter->securitypriv.ndisencryptstatus ==
-                                    Ndis802_11Encryption2Enabled) ||
-                                   (padapter->securitypriv.ndisencryptstatus ==
-                                    Ndis802_11Encryption3Enabled)) {
-                                       psta->dot118021XPrivacy =
-                                               padapter->securitypriv.
-                                               dot11PrivacyAlgrthm;
-                               }
-
-                               if (set_tx == 1) {
-                                       /* pairwise key */
-                                       DBG_8723A("%s, : set_tx == 1\n",
-                                                 __func__);
-
-                                       memcpy(psta->dot118021x_UncstKey.skey,
-                                              keyparms->key,
-                                              (min(16, key_len)));
-
-                                       if (keyparms->cipher ==
-                                           WLAN_CIPHER_SUITE_TKIP) {
-                                               memcpy(psta->dot11tkiptxmickey.
-                                                      skey,
-                                                      &keyparms->key[16], 8);
-                                               memcpy(psta->dot11tkiprxmickey.
-                                                      skey,
-                                                      &keyparms->key[24], 8);
-
-                                               padapter->securitypriv.
-                                                       busetkipkey = 0;
-                                       }
-                                       DBG_8723A(" ~~~~set sta key:unicastkey\n");
-
-                                       rtw_setstakey_cmd23a(padapter,
-                                                         (unsigned char *)psta,
-                                                         true);
-                               } else {        /* group key */
-                                       memcpy(padapter->securitypriv.
-                                              dot118021XGrpKey[key_index].skey,
-                                              keyparms->key,
-                                              (min(16, key_len)));
-                                       memcpy(padapter->securitypriv.
-                                              dot118021XGrptxmickey[key_index].
-                                              skey, &keyparms->key[16], 8);
-                                       memcpy(padapter->securitypriv.
-                                              dot118021XGrprxmickey[key_index].
-                                              skey, &keyparms->key[24], 8);
-                                       padapter->securitypriv.binstallGrpkey =
-                                               1;
-                                       DBG_8723A
-                                           (" ~~~~set sta key:groupkey\n");
-
-                                       padapter->securitypriv.
-                                           dot118021XGrpKeyid = key_index;
-
-                                       rtw_set_key23a(padapter,
-                                                   &padapter->securitypriv,
-                                                   key_index, 1);
-                               }
-                       }
-
-                       pbcmc_sta = rtw_get_bcmc_stainfo23a(padapter);
-                       if (pbcmc_sta) {
-                               /* Jeff: don't disable ieee8021x_blocked
-                                  while clearing key */
-                               if (keyparms->cipher != IW_AUTH_CIPHER_NONE &&
-                                   keyparms->cipher != 0)
-                                       pbcmc_sta->ieee8021x_blocked = false;
-
-                               if ((padapter->securitypriv.ndisencryptstatus ==
-                                    Ndis802_11Encryption2Enabled) ||
-                                   (padapter->securitypriv.ndisencryptstatus ==
-                                    Ndis802_11Encryption3Enabled)) {
-                                       pbcmc_sta->dot118021XPrivacy =
-                                           padapter->securitypriv.
-                                           dot11PrivacyAlgrthm;
-                               }
-                       }
-               }
-       }
-
-exit:
-
-       DBG_8723A("%s, ret =%d\n", __func__, ret);
-
-
-
-       return ret;
-}
-
-static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
-                               u8 key_index, bool pairwise,
-                               const u8 *mac_addr, struct key_params *params)
-{
-       int set_tx, ret = 0;
-       struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       u8 sta_addr[ETH_ALEN];
-
-       DBG_8723A("%s(%s): adding key for %pM\n", __func__, ndev->name,
-                 mac_addr);
-       DBG_8723A("cipher = 0x%x\n", params->cipher);
-       DBG_8723A("key_len = 0x%x\n", params->key_len);
-       DBG_8723A("seq_len = 0x%x\n", params->seq_len);
-       DBG_8723A("key_index =%d\n", key_index);
-       DBG_8723A("pairwise =%d\n", pairwise);
-
-       switch (params->cipher) {
-       case IW_AUTH_CIPHER_NONE:
-       case WLAN_CIPHER_SUITE_WEP40:
-               if (params->key_len != WLAN_KEY_LEN_WEP40) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       case WLAN_CIPHER_SUITE_WEP104:
-               if (params->key_len != WLAN_KEY_LEN_WEP104) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       case WLAN_CIPHER_SUITE_TKIP:
-       case WLAN_CIPHER_SUITE_CCMP:
-               break;
-       default:
-               ret = -ENOTSUPP;
-               goto exit;
-       }
-
-       if (key_index >= WEP_KEYS || params->key_len < 0) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       eth_broadcast_addr(sta_addr);
-
-       if (!mac_addr || is_broadcast_ether_addr(mac_addr))
-               set_tx = 0;     /* for wpa/wpa2 group key */
-       else
-               set_tx = 1;     /* for wpa/wpa2 pairwise key */
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-               ret = rtw_cfg80211_set_encryption(ndev, key_index, set_tx,
-                                                 sta_addr, params);
-       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-#ifdef CONFIG_8723AU_AP_MODE
-               if (mac_addr)
-                       ether_addr_copy(sta_addr, mac_addr);
-
-               ret = rtw_cfg80211_ap_set_encryption(ndev, key_index, set_tx,
-                                                    sta_addr, params);
-#endif
-       } else {
-               DBG_8723A("error! fw_state = 0x%x, iftype =%d\n",
-                         pmlmepriv->fw_state, rtw_wdev->iftype);
-
-       }
-
-exit:
-       return ret;
-}
-
-static int
-cfg80211_rtw_get_key(struct wiphy *wiphy, struct net_device *ndev,
-                    u8 key_index, bool pairwise, const u8 *mac_addr,
-                    void *cookie,
-                    void (*callback) (void *cookie, struct key_params *))
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-
-static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
-                               u8 key_index, bool pairwise,
-                               const u8 *mac_addr)
-{
-       struct rtw_adapter *padapter = netdev_priv(ndev);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s(%s): key_index =%d\n", __func__, ndev->name, key_index);
-
-       if (key_index == psecuritypriv->dot11PrivacyKeyIndex) {
-               /* clear the flag of wep default key set. */
-               psecuritypriv->bWepDefaultKeyIdxSet = 0;
-       }
-
-       return 0;
-}
-
-static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
-                                       struct net_device *ndev, u8 key_index,
-                                       bool unicast, bool multicast)
-{
-       struct rtw_adapter *padapter = netdev_priv(ndev);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s(%s): key_index =%d, unicast =%d, multicast =%d.\n",
-                 __func__, ndev->name, key_index, unicast, multicast);
-
-       if (key_index < NUM_WEP_KEYS &&
-           (psecuritypriv->dot11PrivacyAlgrthm == WLAN_CIPHER_SUITE_WEP40 ||
-            psecuritypriv->dot11PrivacyAlgrthm == WLAN_CIPHER_SUITE_WEP104)) {
-               /* set wep default key */
-               psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-
-               psecuritypriv->dot11PrivacyKeyIndex = key_index;
-
-               psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40;
-               psecuritypriv->dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40;
-               if (psecuritypriv->wep_key[key_index].keylen == 13) {
-                       psecuritypriv->dot11PrivacyAlgrthm =
-                               WLAN_CIPHER_SUITE_WEP104;
-                       psecuritypriv->dot118021XGrpPrivacy =
-                               WLAN_CIPHER_SUITE_WEP104;
-               }
-
-               /* set the flag to represent that wep default key
-                  has been set */
-               psecuritypriv->bWepDefaultKeyIdxSet = 1;
-       }
-
-       return 0;
-}
-
-static u16 rtw_get_cur_max_rate(struct rtw_adapter *adapter)
-{
-       int i = 0;
-       const u8 *p;
-       u16 rate = 0, max_rate = 0;
-       struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct registry_priv *pregistrypriv = &adapter->registrypriv;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_bssid_ex  *pcur_bss = &pmlmepriv->cur_network.network;
-       struct ieee80211_ht_cap *pht_capie;
-       u8 rf_type = 0;
-       u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
-       u16 mcs_rate = 0;
-
-       p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
-                            pcur_bss->IEs, pcur_bss->IELength);
-       if (p && p[1] > 0) {
-               pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-
-               memcpy(&mcs_rate, &pht_capie->mcs, 2);
-
-               /* bw_40MHz = (pht_capie->cap_info&
-                  IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */
-               /* cur_bwmod is updated by beacon, pmlmeinfo is
-                  updated by association response */
-               bw_40MHz = (pmlmeext->cur_bwmode &&
-                           (pmlmeinfo->HT_info.ht_param &
-                            IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
-
-               /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
-                  _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
-               short_GI_20 = (pmlmeinfo->ht_cap.cap_info &
-                              cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
-               short_GI_40 = (pmlmeinfo->ht_cap.cap_info &
-                              cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
-
-               rf_type = rtl8723a_get_rf_type(adapter);
-               max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
-                                          pregistrypriv->cbw40_enable,
-                                          short_GI_20, short_GI_40,
-                                          &pmlmeinfo->ht_cap.mcs);
-       } else {
-               while (pcur_bss->SupportedRates[i] != 0 &&
-                      pcur_bss->SupportedRates[i] != 0xFF) {
-                       rate = pcur_bss->SupportedRates[i] & 0x7F;
-                       if (rate > max_rate)
-                               max_rate = rate;
-                       i++;
-               }
-
-               max_rate = max_rate * 10 / 2;
-       }
-
-       return max_rate;
-}
-
-static int cfg80211_rtw_get_station(struct wiphy *wiphy,
-                                   struct net_device *ndev,
-                                   const u8 *mac, struct station_info *sinfo)
-{
-       int ret = 0;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_info *psta = NULL;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       sinfo->filled = 0;
-
-       if (!mac) {
-               DBG_8723A("%s(%s): mac ==%p\n", __func__, ndev->name, mac);
-               ret = -ENOENT;
-               goto exit;
-       }
-
-       psta = rtw_get_stainfo23a(pstapriv, mac);
-       if (psta == NULL) {
-               DBG_8723A("%s, sta_info is null\n", __func__);
-               ret = -ENOENT;
-               goto exit;
-       }
-       DBG_8723A("%s(%s): mac=%pM\n", __func__, ndev->name, mac);
-
-       /* for infra./P2PClient mode */
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
-           check_fwstate(pmlmepriv, _FW_LINKED)) {
-               struct wlan_network *cur_network = &pmlmepriv->cur_network;
-
-               if (!ether_addr_equal(mac, cur_network->network.MacAddress)) {
-                       DBG_8723A("%s, mismatch bssid=%pM\n",
-                                 __func__, cur_network->network.MacAddress);
-                       ret = -ENOENT;
-                       goto exit;
-               }
-
-               sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL);
-               sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.
-                                                           signal_strength);
-
-               sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE);
-               sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
-
-               sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS);
-               sinfo->rx_packets = sta_rx_data_pkts(psta);
-
-               sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS);
-               sinfo->tx_packets = psta->sta_stats.tx_pkts;
-       }
-
-       /* for Ad-Hoc/AP mode */
-       if ((check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-            check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) ||
-            check_fwstate(pmlmepriv, WIFI_AP_STATE)) &&
-           check_fwstate(pmlmepriv, _FW_LINKED)
-           ) {
-               /* TODO: should acquire station info... */
-       }
-
-exit:
-       return ret;
-}
-
-static int cfg80211_infrastructure_mode(struct rtw_adapter *padapter,
-                                enum nl80211_iftype ifmode)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *cur_network = &pmlmepriv->cur_network;
-       enum nl80211_iftype old_mode;
-
-       old_mode = cur_network->network.ifmode;
-
-       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_notice_,
-                "+%s: old =%d new =%d fw_state = 0x%08x\n", __func__,
-                old_mode, ifmode, get_fwstate(pmlmepriv));
-
-       if (old_mode != ifmode) {
-               spin_lock_bh(&pmlmepriv->lock);
-
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                        "change mode!\n");
-
-               if (old_mode == NL80211_IFTYPE_AP ||
-                   old_mode == NL80211_IFTYPE_P2P_GO) {
-                       /* change to other mode from Ndis802_11APMode */
-                       cur_network->join_res = -1;
-
-#ifdef CONFIG_8723AU_AP_MODE
-                       stop_ap_mode23a(padapter);
-#endif
-               }
-
-               if (check_fwstate(pmlmepriv, _FW_LINKED) ||
-                   old_mode == NL80211_IFTYPE_ADHOC)
-                       rtw_disassoc_cmd23a(padapter, 0, true);
-
-               if (check_fwstate(pmlmepriv, _FW_LINKED) ||
-                   check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))
-                       rtw_free_assoc_resources23a(padapter, 1);
-
-               if (old_mode == NL80211_IFTYPE_STATION ||
-                   old_mode == NL80211_IFTYPE_P2P_CLIENT ||
-                   old_mode == NL80211_IFTYPE_ADHOC) {
-                       if (check_fwstate(pmlmepriv, _FW_LINKED)) {
-                               /* will clr Linked_state; before this function,
-                                  we must have chked whether issue
-                                  dis-assoc_cmd or not */
-                               rtw_indicate_disconnect23a(padapter);
-                       }
-              }
-
-               cur_network->network.ifmode = ifmode;
-
-               _clr_fwstate_(pmlmepriv, ~WIFI_NULL_STATE);
-
-               switch (ifmode) {
-               case NL80211_IFTYPE_ADHOC:
-                       set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       break;
-
-               case NL80211_IFTYPE_P2P_CLIENT:
-               case NL80211_IFTYPE_STATION:
-                       set_fwstate(pmlmepriv, WIFI_STATION_STATE);
-                       break;
-
-               case NL80211_IFTYPE_P2P_GO:
-               case NL80211_IFTYPE_AP:
-                       set_fwstate(pmlmepriv, WIFI_AP_STATE);
-#ifdef CONFIG_8723AU_AP_MODE
-                       start_ap_mode23a(padapter);
-                       /* rtw_indicate_connect23a(padapter); */
-#endif
-                       break;
-
-               default:
-                       break;
-               }
-
-               /* SecClearAllKeys(adapter); */
-
-               spin_unlock_bh(&pmlmepriv->lock);
-       }
-
-       return _SUCCESS;
-}
-
-static int cfg80211_rtw_change_iface(struct wiphy *wiphy,
-                                    struct net_device *ndev,
-                                    enum nl80211_iftype type, u32 *flags,
-                                    struct vif_params *params)
-{
-       enum nl80211_iftype old_type;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct wireless_dev *rtw_wdev = wiphy_to_wdev(wiphy);
-       int ret = 0;
-
-       DBG_8723A("%s(%s): call netdev_open23a\n", __func__, ndev->name);
-
-       old_type = rtw_wdev->iftype;
-       DBG_8723A("%s(%s): old_iftype =%d, new_iftype =%d\n",
-                 __func__, ndev->name, old_type, type);
-
-       if (old_type != type) {
-               pmlmeext->action_public_rxseq = 0xffff;
-               pmlmeext->action_public_dialog_token = 0xff;
-       }
-
-       switch (type) {
-       case NL80211_IFTYPE_ADHOC:
-       case NL80211_IFTYPE_P2P_CLIENT:
-       case NL80211_IFTYPE_STATION:
-       case NL80211_IFTYPE_P2P_GO:
-       case NL80211_IFTYPE_AP:
-       case NL80211_IFTYPE_UNSPECIFIED:
-               break;
-       default:
-               return -EOPNOTSUPP;
-       }
-
-       rtw_wdev->iftype = type;
-
-       if (cfg80211_infrastructure_mode(padapter, type) != _SUCCESS) {
-               rtw_wdev->iftype = old_type;
-               ret = -EPERM;
-               goto exit;
-       }
-
-       rtw_setopmode_cmd23a(padapter, type);
-
-exit:
-       return ret;
-}
-
-void rtw_cfg80211_indicate_scan_done(struct rtw_wdev_priv *pwdev_priv,
-                                    bool aborted)
-{
-       spin_lock_bh(&pwdev_priv->scan_req_lock);
-       if (pwdev_priv->scan_request != NULL) {
-               DBG_8723A("%s with scan req\n", __func__);
-
-               if (pwdev_priv->scan_request->wiphy !=
-                   pwdev_priv->rtw_wdev->wiphy) {
-                       DBG_8723A("error wiphy compare\n");
-               } else {
-                       struct cfg80211_scan_info info = {
-                               .aborted = aborted,
-                       };
-
-                       cfg80211_scan_done(pwdev_priv->scan_request, &info);
-               }
-
-               pwdev_priv->scan_request = NULL;
-       } else {
-               DBG_8723A("%s without scan req\n", __func__);
-       }
-       spin_unlock_bh(&pwdev_priv->scan_req_lock);
-}
-
-void rtw_cfg80211_surveydone_event_callback(struct rtw_adapter *padapter)
-{
-       struct list_head *phead;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct rtw_queue *queue = &pmlmepriv->scanned_queue;
-       struct wlan_network *pnetwork, *ptmp;
-
-       spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-       phead = get_list_head(queue);
-       list_for_each_entry_safe(pnetwork, ptmp, phead, list) {
-               /* report network only if the current channel set
-                  contains the channel to which this network belongs */
-               if (rtw_ch_set_search_ch23a
-                   (padapter->mlmeextpriv.channel_set,
-                    pnetwork->network.DSConfig) >= 0)
-                       rtw_cfg80211_inform_bss(padapter, pnetwork);
-       }
-       spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
-       /* call this after other things have been done */
-       rtw_cfg80211_indicate_scan_done(wdev_to_priv(padapter->rtw_wdev),
-                                       false);
-}
-
-static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter,
-                                              char *buf, int len)
-{
-       int ret = 0;
-       const u8 *wps_ie;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       DBG_8723A("%s, ielen =%d\n", __func__, len);
-
-       if (len > 0) {
-               wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                                WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                                buf, len);
-               if (wps_ie) {
-                       DBG_8723A("probe_req_wps_ielen =%d\n", wps_ie[1]);
-
-                       if (pmlmepriv->wps_probe_req_ie) {
-                               pmlmepriv->wps_probe_req_ie_len = 0;
-                               kfree(pmlmepriv->wps_probe_req_ie);
-                               pmlmepriv->wps_probe_req_ie = NULL;
-                       }
-
-                       pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie, wps_ie[1],
-                                                             GFP_KERNEL);
-                       if (pmlmepriv->wps_probe_req_ie == NULL) {
-                               DBG_8723A("%s()-%d: kmalloc() ERROR!\n",
-                                         __func__, __LINE__);
-                               return -EINVAL;
-                       }
-                       pmlmepriv->wps_probe_req_ie_len = wps_ie[1];
-               }
-       }
-
-       return ret;
-}
-
-static int cfg80211_rtw_scan(struct wiphy *wiphy,
-                            struct cfg80211_scan_request *request)
-{
-       int i;
-       u8 _status = false;
-       int ret = 0;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct cfg80211_ssid ssid[RTW_SSID_SCAN_AMOUNT];
-       struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
-       struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
-       struct cfg80211_ssid *ssids = request->ssids;
-       bool need_indicate_scan_done = false;
-
-       DBG_8723A("%s(%s)\n", __func__, padapter->pnetdev->name);
-
-       spin_lock_bh(&pwdev_priv->scan_req_lock);
-       pwdev_priv->scan_request = request;
-       spin_unlock_bh(&pwdev_priv->scan_req_lock);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               DBG_8723A("%s under WIFI_AP_STATE\n", __func__);
-               /* need_indicate_scan_done = true; */
-               /* goto check_need_indicate_scan_done; */
-       }
-
-       if (rtw_pwr_wakeup(padapter) == _FAIL) {
-               need_indicate_scan_done = true;
-               goto check_need_indicate_scan_done;
-       }
-
-       if (request->ie && request->ie_len > 0) {
-               rtw_cfg80211_set_probe_req_wpsp2pie(padapter,
-                                                   (u8 *) request->ie,
-                                                   request->ie_len);
-       }
-
-       if (pmlmepriv->LinkDetectInfo.bBusyTraffic == true) {
-               DBG_8723A("%s, bBusyTraffic == true\n", __func__);
-               need_indicate_scan_done = true;
-               goto check_need_indicate_scan_done;
-       }
-       if (rtw_is_scan_deny(padapter)) {
-               DBG_8723A("%s(%s): scan deny\n", __func__,
-                         padapter->pnetdev->name);
-               need_indicate_scan_done = true;
-               goto check_need_indicate_scan_done;
-       }
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) ==
-           true) {
-               DBG_8723A("%s, fwstate = 0x%x\n", __func__, pmlmepriv->fw_state);
-               need_indicate_scan_done = true;
-               goto check_need_indicate_scan_done;
-       }
-
-       memset(ssid, 0, sizeof(struct cfg80211_ssid) * RTW_SSID_SCAN_AMOUNT);
-       /* parsing request ssids, n_ssids */
-       for (i = 0; i < request->n_ssids && i < RTW_SSID_SCAN_AMOUNT; i++) {
-               DBG_8723A("ssid =%s, len =%d\n", ssids[i].ssid,
-                         ssids[i].ssid_len);
-               memcpy(ssid[i].ssid, ssids[i].ssid, ssids[i].ssid_len);
-               ssid[i].ssid_len = ssids[i].ssid_len;
-       }
-
-       /* parsing channels, n_channels */
-       memset(ch, 0,
-              sizeof(struct rtw_ieee80211_channel) * RTW_CHANNEL_SCAN_AMOUNT);
-
-       if (request->n_channels == 1) {
-               for (i = 0; i < request->n_channels &&
-                    i < RTW_CHANNEL_SCAN_AMOUNT; i++) {
-                       DBG_8723A("%s:(%s):" CHAN_FMT "\n",
-                                 __func__, padapter->pnetdev->name,
-                                 CHAN_ARG(request->channels[i]));
-                       ch[i].hw_value = request->channels[i]->hw_value;
-                       ch[i].flags = request->channels[i]->flags;
-               }
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-       if (request->n_channels == 1) {
-               memcpy(&ch[1], &ch[0], sizeof(struct rtw_ieee80211_channel));
-               memcpy(&ch[2], &ch[0], sizeof(struct rtw_ieee80211_channel));
-               _status = rtw_sitesurvey_cmd23a(padapter, ssid,
-                                            RTW_SSID_SCAN_AMOUNT, ch, 3);
-       } else {
-               _status = rtw_sitesurvey_cmd23a(padapter, ssid,
-                                            RTW_SSID_SCAN_AMOUNT, NULL, 0);
-       }
-       spin_unlock_bh(&pmlmepriv->lock);
-
-       if (_status == false)
-               ret = -1;
-
-check_need_indicate_scan_done:
-       if (need_indicate_scan_done)
-               rtw_cfg80211_surveydone_event_callback(padapter);
-       return ret;
-}
-
-static int cfg80211_rtw_set_wiphy_params(struct wiphy *wiphy, u32 changed)
-{
-       DBG_8723A("%s\n", __func__);
-       return 0;
-}
-
-static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
-                                 struct cfg80211_ibss_params *params)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-
-static int cfg80211_rtw_leave_ibss(struct wiphy *wiphy, struct net_device *ndev)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-
-static int rtw_cfg80211_set_wpa_version(struct security_priv *psecuritypriv,
-                                       u32 wpa_version)
-{
-       DBG_8723A("%s, wpa_version =%d\n", __func__, wpa_version);
-
-       if (!wpa_version) {
-               psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-               return 0;
-       }
-
-       if (wpa_version & (NL80211_WPA_VERSION_1 | NL80211_WPA_VERSION_2))
-               psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPAPSK;
-
-/*
-       if (wpa_version & NL80211_WPA_VERSION_2)
-       {
-               psecuritypriv->ndisauthtype = Ndis802_11AuthModeWPA2PSK;
-       }
-*/
-
-       return 0;
-}
-
-static int rtw_cfg80211_set_auth_type(struct security_priv *psecuritypriv,
-                                     enum nl80211_auth_type sme_auth_type)
-{
-       DBG_8723A("%s, nl80211_auth_type =%d\n", __func__, sme_auth_type);
-
-       switch (sme_auth_type) {
-       case NL80211_AUTHTYPE_AUTOMATIC:
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Auto;
-
-               break;
-       case NL80211_AUTHTYPE_OPEN_SYSTEM:
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-
-               if (psecuritypriv->ndisauthtype > Ndis802_11AuthModeWPA)
-                       psecuritypriv->dot11AuthAlgrthm =
-                               dot11AuthAlgrthm_8021X;
-               break;
-       case NL80211_AUTHTYPE_SHARED_KEY:
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Shared;
-
-               psecuritypriv->ndisencryptstatus = Ndis802_11Encryption1Enabled;
-               break;
-       default:
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-               /* return -ENOTSUPP; */
-       }
-
-       return 0;
-}
-
-static int rtw_cfg80211_set_cipher(struct security_priv *psecuritypriv,
-                                  u32 cipher, bool ucast)
-{
-       u32 ndisencryptstatus = Ndis802_11EncryptionDisabled;
-
-       u32 *profile_cipher = ucast ? &psecuritypriv->dot11PrivacyAlgrthm :
-           &psecuritypriv->dot118021XGrpPrivacy;
-
-       DBG_8723A("%s, ucast =%d, cipher = 0x%x\n", __func__, ucast, cipher);
-
-       if (!cipher) {
-               *profile_cipher = 0;
-               psecuritypriv->ndisencryptstatus = ndisencryptstatus;
-               return 0;
-       }
-
-       switch (cipher) {
-       case IW_AUTH_CIPHER_NONE:
-               *profile_cipher = 0;
-               ndisencryptstatus = Ndis802_11EncryptionDisabled;
-               break;
-       case WLAN_CIPHER_SUITE_WEP40:
-               *profile_cipher = WLAN_CIPHER_SUITE_WEP40;
-               ndisencryptstatus = Ndis802_11Encryption1Enabled;
-               break;
-       case WLAN_CIPHER_SUITE_WEP104:
-               *profile_cipher = WLAN_CIPHER_SUITE_WEP104;
-               ndisencryptstatus = Ndis802_11Encryption1Enabled;
-               break;
-       case WLAN_CIPHER_SUITE_TKIP:
-               *profile_cipher = WLAN_CIPHER_SUITE_TKIP;
-               ndisencryptstatus = Ndis802_11Encryption2Enabled;
-               break;
-       case WLAN_CIPHER_SUITE_CCMP:
-               *profile_cipher = WLAN_CIPHER_SUITE_CCMP;
-               ndisencryptstatus = Ndis802_11Encryption3Enabled;
-               break;
-       default:
-               DBG_8723A("Unsupported cipher: 0x%x\n", cipher);
-               return -ENOTSUPP;
-       }
-
-       if (ucast)
-               psecuritypriv->ndisencryptstatus = ndisencryptstatus;
-
-       return 0;
-}
-
-static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv,
-                                   u32 key_mgt)
-{
-       DBG_8723A("%s, key_mgt = 0x%x\n", __func__, key_mgt);
-
-       if (key_mgt == WLAN_AKM_SUITE_8021X)
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-       else if (key_mgt == WLAN_AKM_SUITE_PSK)
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-       else
-               DBG_8723A("Invalid key mgt: 0x%x\n", key_mgt);
-
-       return 0;
-}
-
-static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
-                                  size_t ielen)
-{
-       const u8 *wps_ie;
-       int group_cipher = 0, pairwise_cipher = 0;
-       int ret = 0;
-       const u8 *pwpa, *pwpa2;
-       int i;
-
-       if (!pie || !ielen) {
-               /* Treat this as normal case, but need to clear
-                  WIFI_UNDER_WPS */
-               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-               goto exit;
-       }
-       if (ielen > MAX_WPA_IE_LEN + MAX_WPS_IE_LEN + MAX_P2P_IE_LEN) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       /* dump */
-       DBG_8723A("set wpa_ie(length:%zu):\n", ielen);
-       for (i = 0; i < ielen; i = i + 8)
-               DBG_8723A("0x%.2x 0x%.2x 0x%.2x 0x%.2x "
-                         "0x%.2x 0x%.2x 0x%.2x 0x%.2x\n",
-                         pie[i], pie[i + 1], pie[i + 2], pie[i + 3],
-                         pie[i + 4], pie[i + 5], pie[i + 6], pie[i + 7]);
-       if (ielen < RSN_HEADER_LEN) {
-               RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_,
-                        "Ie len too short %d\n", (int)ielen);
-               ret = -1;
-               goto exit;
-       }
-
-       pwpa = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                      WLAN_OUI_TYPE_MICROSOFT_WPA,
-                                      pie, ielen);
-       if (pwpa && pwpa[1] > 0) {
-               if (rtw_parse_wpa_ie23a(pwpa, pwpa[1] + 2, &group_cipher,
-                                       &pairwise_cipher, NULL) == _SUCCESS) {
-                       padapter->securitypriv.dot11AuthAlgrthm =
-                               dot11AuthAlgrthm_8021X;
-                       padapter->securitypriv.ndisauthtype =
-                               Ndis802_11AuthModeWPAPSK;
-                       memcpy(padapter->securitypriv.supplicant_ie, pwpa,
-                              pwpa[1] + 2);
-
-                       DBG_8723A("got wpa_ie, wpa_ielen:%u\n", pwpa[1]);
-               }
-       }
-
-       pwpa2 = cfg80211_find_ie(WLAN_EID_RSN, pie, ielen);
-       if (pwpa2 && pwpa2[1] > 0) {
-               if (rtw_parse_wpa2_ie23a (pwpa2, pwpa2[1] + 2, &group_cipher,
-                                         &pairwise_cipher, NULL) == _SUCCESS) {
-                       padapter->securitypriv.dot11AuthAlgrthm =
-                               dot11AuthAlgrthm_8021X;
-                       padapter->securitypriv.ndisauthtype =
-                               Ndis802_11AuthModeWPA2PSK;
-                       memcpy(padapter->securitypriv.supplicant_ie, pwpa2,
-                              pwpa2[1] + 2);
-
-                       DBG_8723A("got wpa2_ie, wpa2_ielen:%u\n", pwpa2[1]);
-               }
-       }
-
-       if (group_cipher == 0) {
-               group_cipher = WPA_CIPHER_NONE;
-       }
-       if (pairwise_cipher == 0) {
-               pairwise_cipher = WPA_CIPHER_NONE;
-       }
-
-       switch (group_cipher) {
-       case WPA_CIPHER_NONE:
-               padapter->securitypriv.dot118021XGrpPrivacy = 0;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11EncryptionDisabled;
-               break;
-       case WPA_CIPHER_WEP40:
-               padapter->securitypriv.dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP40;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption1Enabled;
-               break;
-       case WPA_CIPHER_TKIP:
-               padapter->securitypriv.dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_TKIP;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption2Enabled;
-               break;
-       case WPA_CIPHER_CCMP:
-               padapter->securitypriv.dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_CCMP;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption3Enabled;
-               break;
-       case WPA_CIPHER_WEP104:
-               padapter->securitypriv.dot118021XGrpPrivacy = WLAN_CIPHER_SUITE_WEP104;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption1Enabled;
-               break;
-       }
-
-       switch (pairwise_cipher) {
-       case WPA_CIPHER_NONE:
-               padapter->securitypriv.dot11PrivacyAlgrthm = 0;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11EncryptionDisabled;
-               break;
-       case WPA_CIPHER_WEP40:
-               padapter->securitypriv.dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption1Enabled;
-               break;
-       case WPA_CIPHER_TKIP:
-               padapter->securitypriv.dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_TKIP;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption2Enabled;
-               break;
-       case WPA_CIPHER_CCMP:
-               padapter->securitypriv.dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_CCMP;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption3Enabled;
-               break;
-       case WPA_CIPHER_WEP104:
-               padapter->securitypriv.dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104;
-               padapter->securitypriv.ndisencryptstatus =
-                       Ndis802_11Encryption1Enabled;
-               break;
-       }
-
-       wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                        WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                        pie, ielen);
-       if (wps_ie && wps_ie[1] > 0) {
-               DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ie[1]);
-               padapter->securitypriv.wps_ie_len = wps_ie[1];
-               memcpy(padapter->securitypriv.wps_ie, wps_ie,
-                      padapter->securitypriv.wps_ie_len);
-               set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
-       } else {
-               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-       }
-
-       /* TKIP and AES disallow multicast packets until installing group key */
-       if (padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_TKIP ||
-           padapter->securitypriv.dot11PrivacyAlgrthm ==
-           WLAN_CIPHER_SUITE_CCMP)
-               /* WPS open need to enable multicast */
-               /* check_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS) == true)*/
-               rtl8723a_off_rcr_am(padapter);
-
-       RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_info_,
-                "rtw_set_wpa_ie: pairwise_cipher = 0x%08x padapter->securitypriv.ndisencryptstatus =%d padapter->securitypriv.ndisauthtype =%d\n",
-                pairwise_cipher,
-                padapter->securitypriv.ndisencryptstatus,
-                padapter->securitypriv.ndisauthtype);
-
-exit:
-       if (ret)
-               _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
-       return ret;
-}
-
-static int rtw_cfg80211_add_wep(struct rtw_adapter *padapter,
-                               struct rtw_wep_key *wep, u8 keyid)
-{
-       int res;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       if (keyid >= NUM_WEP_KEYS) {
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
-                        "%s:keyid>4 =>fail\n", __func__);
-               res = _FAIL;
-               goto exit;
-       }
-
-       switch (wep->keylen) {
-       case WLAN_KEY_LEN_WEP40:
-               psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40;
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                        "%s:wep->KeyLength = 5\n", __func__);
-               break;
-       case WLAN_KEY_LEN_WEP104:
-               psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104;
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                        "%s:wep->KeyLength = 13\n", __func__);
-               break;
-       default:
-               psecuritypriv->dot11PrivacyAlgrthm = 0;
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                        "%s:wep->KeyLength!= 5 or 13\n", __func__);
-               res = _FAIL;
-               goto exit;
-       }
-
-       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                "%s:before memcpy, wep->KeyLength = 0x%x keyid =%x\n",
-                __func__, wep->keylen, keyid);
-
-       memcpy(&psecuritypriv->wep_key[keyid], wep, sizeof(struct rtw_wep_key));
-
-       psecuritypriv->dot11PrivacyKeyIndex = keyid;
-
-       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                "%s:security key material : %x %x %x %x %x %x %x %x %x %x %x %x %x\n",
-                __func__,
-                psecuritypriv->wep_key[keyid].key[0],
-                psecuritypriv->wep_key[keyid].key[1],
-                psecuritypriv->wep_key[keyid].key[2],
-                psecuritypriv->wep_key[keyid].key[3],
-                psecuritypriv->wep_key[keyid].key[4],
-                psecuritypriv->wep_key[keyid].key[5],
-                psecuritypriv->wep_key[keyid].key[6],
-                psecuritypriv->wep_key[keyid].key[7],
-                psecuritypriv->wep_key[keyid].key[8],
-                psecuritypriv->wep_key[keyid].key[9],
-                psecuritypriv->wep_key[keyid].key[10],
-                psecuritypriv->wep_key[keyid].key[11],
-                psecuritypriv->wep_key[keyid].key[12]);
-
-       res = rtw_set_key23a(padapter, psecuritypriv, keyid, 1);
-
-exit:
-
-       return res;
-}
-
-static int rtw_set_ssid(struct rtw_adapter *padapter,
-                       struct wlan_network *newnetwork)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network *pnetwork = &pmlmepriv->cur_network;
-       int status = _SUCCESS;
-       u32 cur_time = 0;
-
-       DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n",
-                       newnetwork->network.Ssid.ssid, get_fwstate(pmlmepriv));
-
-       if (padapter->hw_init_completed == false) {
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
-                        "set_ssid: hw_init_completed == false =>exit!!!\n");
-               status = _FAIL;
-               goto exit;
-       }
-
-       spin_lock_bh(&pmlmepriv->lock);
-
-       DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv));
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               goto handle_tkip_countermeasure;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) {
-               RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                        "set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n");
-
-               if (pmlmepriv->assoc_ssid.ssid_len ==
-                   newnetwork->network.Ssid.ssid_len &&
-                   !memcmp(&pmlmepriv->assoc_ssid.ssid,
-                           newnetwork->network.Ssid.ssid,
-                           newnetwork->network.Ssid.ssid_len)) {
-                       if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
-                               RT_TRACE(_module_rtl871x_ioctl_set_c_,
-                                        _drv_err_,
-                                        "New SSID is same SSID, fw_state = 0x%08x\n",
-                                        get_fwstate(pmlmepriv));
-
-                               if (rtw_is_same_ibss23a(padapter, pnetwork)) {
-                                       /*
-                                        * it means driver is in
-                                        * WIFI_ADHOC_MASTER_STATE, we needn't
-                                        * create bss again.
-                                        */
-                                       goto release_mlme_lock;
-                               }
-
-                               /*
-                                * if in WIFI_ADHOC_MASTER_STATE |
-                                * WIFI_ADHOC_STATE, create bss or
-                                * rejoin again
-                                */
-                               rtw_disassoc_cmd23a(padapter, 0, true);
-
-                               if (check_fwstate(pmlmepriv, _FW_LINKED))
-                                       rtw_indicate_disconnect23a(padapter);
-
-                               rtw_free_assoc_resources23a(padapter, 1);
-
-                               if (check_fwstate(pmlmepriv,
-                                                 WIFI_ADHOC_MASTER_STATE)) {
-                                       _clr_fwstate_(pmlmepriv,
-                                                     WIFI_ADHOC_MASTER_STATE);
-                                       set_fwstate(pmlmepriv,
-                                                   WIFI_ADHOC_STATE);
-                               }
-                       } else {
-                               rtw_lps_ctrl_wk_cmd23a(padapter,
-                                                      LPS_CTRL_JOINBSS, 1);
-                       }
-               } else {
-                       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                                "Set SSID not the same ssid\n");
-                       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                                "set_ssid =[%s] len = 0x%x\n",
-                                newnetwork->network.Ssid.ssid,
-                                newnetwork->network.Ssid.ssid_len);
-                       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
-                                "assoc_ssid =[%s] len = 0x%x\n",
-                                pmlmepriv->assoc_ssid.ssid,
-                                pmlmepriv->assoc_ssid.ssid_len);
-
-                       rtw_disassoc_cmd23a(padapter, 0, true);
-
-                       if (check_fwstate(pmlmepriv, _FW_LINKED))
-                               rtw_indicate_disconnect23a(padapter);
-
-                       rtw_free_assoc_resources23a(padapter, 1);
-
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
-                               _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
-                               set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
-                       }
-               }
-       }
-
-handle_tkip_countermeasure:
-
-       if (padapter->securitypriv.btkip_countermeasure == true) {
-               cur_time = jiffies;
-
-               if ((cur_time -
-                    padapter->securitypriv.btkip_countermeasure_time) >
-                   60 * HZ) {
-                       padapter->securitypriv.btkip_countermeasure = false;
-                       padapter->securitypriv.btkip_countermeasure_time = 0;
-               } else {
-                       status = _FAIL;
-                       goto release_mlme_lock;
-               }
-       }
-
-       memcpy(&pmlmepriv->assoc_ssid, &newnetwork->network.Ssid,
-              sizeof(struct cfg80211_ssid));
-
-       pmlmepriv->assoc_by_bssid = false;
-
-       pmlmepriv->to_join = true;
-
-       if (!check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               pmlmepriv->cur_network.join_res = -2;
-
-               status = rtw_do_join_network(padapter, newnetwork);
-               if (status == _SUCCESS) {
-                       pmlmepriv->to_join = false;
-               } else {
-                       if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
-                               /* switch to ADHOC_MASTER */
-                               status = rtw_do_join_adhoc(padapter);
-                               if (status != _SUCCESS)
-                                       goto release_mlme_lock;
-                       } else {
-                               /* can't associate ; reset under-linking */
-                               _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-                               status = _FAIL;
-                               pmlmepriv->to_join = false;
-                       }
-               }
-       }
-release_mlme_lock:
-       spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
-       RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
-                "-%s: status =%d\n", __func__, status);
-
-       return status;
-}
-
-static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
-                               struct cfg80211_connect_params *sme)
-{
-       int ret = 0;
-       struct list_head *phead, *plist, *ptmp;
-       struct wlan_network *pnetwork = NULL;
-       /* u8 matched_by_bssid = false; */
-       /* u8 matched_by_ssid = false; */
-       u8 matched = false;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       struct rtw_queue *queue = &pmlmepriv->scanned_queue;
-
-       DBG_8723A("=>" "%s(%s)\n", __func__, ndev->name);
-       DBG_8723A("privacy =%d, key =%p, key_len =%d, key_idx =%d\n",
-                 sme->privacy, sme->key, sme->key_len, sme->key_idx);
-
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -EPERM;
-               goto exit;
-       }
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-               ret = -EPERM;
-               goto exit;
-       }
-
-       if (!sme->ssid || !sme->ssid_len ||
-           sme->ssid_len > IEEE80211_MAX_SSID_LEN) {
-               ret = -EINVAL;
-               goto exit;
-       }
-
-       DBG_8723A("ssid =%s, len =%zu\n", sme->ssid, sme->ssid_len);
-
-       if (sme->bssid)
-               DBG_8723A("bssid=%pM\n", sme->bssid);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING)) {
-               ret = -EBUSY;
-               DBG_8723A("%s, fw_state = 0x%x, goto exit\n", __func__,
-                         pmlmepriv->fw_state);
-               goto exit;
-       }
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
-               rtw_scan_abort23a(padapter);
-       }
-
-       spin_lock_bh(&queue->lock);
-
-       phead = get_list_head(queue);
-
-       list_for_each_safe(plist, ptmp, phead) {
-               pnetwork = container_of(plist, struct wlan_network, list);
-
-               if (sme->bssid) {
-                       if (!ether_addr_equal(pnetwork->network.MacAddress,
-                                             sme->bssid))
-                               continue;
-               }
-
-               if (sme->ssid && sme->ssid_len) {
-                       if (pnetwork->network.Ssid.ssid_len != sme->ssid_len ||
-                           memcmp(pnetwork->network.Ssid.ssid, sme->ssid,
-                                  sme->ssid_len))
-                               continue;
-               }
-
-               if (sme->bssid) {
-                       if (ether_addr_equal(pnetwork->network.MacAddress,
-                                            sme->bssid)) {
-                               DBG_8723A("matched by bssid\n");
-
-                               matched = true;
-                               break;
-                       }
-               } else if (sme->ssid && sme->ssid_len) {
-                       if (!memcmp(pnetwork->network.Ssid.ssid,
-                                   sme->ssid, sme->ssid_len) &&
-                           pnetwork->network.Ssid.ssid_len == sme->ssid_len) {
-                               DBG_8723A("matched by ssid\n");
-
-                               matched = true;
-                               break;
-                       }
-               }
-       }
-
-       spin_unlock_bh(&queue->lock);
-
-       if (!matched || !pnetwork) {
-               ret = -ENOENT;
-               DBG_8723A("connect, matched == false, goto exit\n");
-               goto exit;
-       }
-
-       if (cfg80211_infrastructure_mode(
-                   padapter, pnetwork->network.ifmode) != _SUCCESS) {
-               ret = -EPERM;
-               goto exit;
-       }
-
-       psecuritypriv->ndisencryptstatus = Ndis802_11EncryptionDisabled;
-       psecuritypriv->dot11PrivacyAlgrthm = 0;
-       psecuritypriv->dot118021XGrpPrivacy = 0;
-       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-       psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-
-       ret = rtw_cfg80211_set_wpa_version(psecuritypriv,
-                                          sme->crypto.wpa_versions);
-       if (ret < 0)
-               goto exit;
-
-       ret = rtw_cfg80211_set_auth_type(psecuritypriv, sme->auth_type);
-
-       if (ret < 0)
-               goto exit;
-
-       DBG_8723A("%s, ie_len =%zu\n", __func__, sme->ie_len);
-
-       ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);
-       if (ret < 0)
-               goto exit;
-
-       if (sme->crypto.n_ciphers_pairwise) {
-               ret = rtw_cfg80211_set_cipher(psecuritypriv,
-                                             sme->crypto.ciphers_pairwise[0],
-                                             true);
-               if (ret < 0)
-                       goto exit;
-       }
-
-       /* For WEP Shared auth */
-       if ((psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Shared ||
-            psecuritypriv->dot11AuthAlgrthm == dot11AuthAlgrthm_Auto) &&
-           sme->key) {
-               struct rtw_wep_key wep_key;
-               u8 wep_key_idx, wep_key_len;
-               DBG_8723A("%s(): Shared/Auto WEP\n", __func__);
-
-               wep_key_idx = sme->key_idx;
-               wep_key_len = sme->key_len;
-
-               if (wep_key_idx > WEP_KEYS || !wep_key_len ||
-                   wep_key_len > WLAN_KEY_LEN_WEP104) {
-                       ret = -EINVAL;
-                       goto exit;
-               }
-
-               wep_key_len = wep_key_len <= 5 ? 5 : 13;
-
-               memset(&wep_key, 0, sizeof(struct rtw_wep_key));
-
-               wep_key.keylen = wep_key_len;
-
-               if (wep_key_len == 13) {
-                       padapter->securitypriv.dot11PrivacyAlgrthm =
-                               WLAN_CIPHER_SUITE_WEP104;
-                       padapter->securitypriv.dot118021XGrpPrivacy =
-                               WLAN_CIPHER_SUITE_WEP104;
-               } else {
-                       padapter->securitypriv.dot11PrivacyAlgrthm =
-                               WLAN_CIPHER_SUITE_WEP40;
-                       padapter->securitypriv.dot118021XGrpPrivacy =
-                               WLAN_CIPHER_SUITE_WEP40;
-               }
-
-               memcpy(wep_key.key, (void *)sme->key, wep_key.keylen);
-
-               if (rtw_cfg80211_add_wep(padapter, &wep_key, wep_key_idx) !=
-                   _SUCCESS)
-                       ret = -EOPNOTSUPP;
-
-               if (ret < 0)
-                       goto exit;
-       }
-
-       ret = rtw_cfg80211_set_cipher(psecuritypriv,
-                                     sme->crypto.cipher_group, false);
-       if (ret < 0)
-               goto exit;
-
-       if (sme->crypto.n_akm_suites) {
-               ret = rtw_cfg80211_set_key_mgt(psecuritypriv,
-                                              sme->crypto.akm_suites[0]);
-               if (ret < 0)
-                       goto exit;
-       }
-
-       if (psecuritypriv->ndisauthtype > 3)
-               psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
-       if (rtw_set_auth23a(padapter, psecuritypriv) != _SUCCESS) {
-               ret = -EBUSY;
-               goto exit;
-       }
-
-       /* rtw_set_802_11_encryption_mode(padapter,
-          padapter->securitypriv.ndisencryptstatus); */
-
-       if (rtw_set_ssid(padapter, pnetwork) != _SUCCESS) {
-               ret = -EBUSY;
-               goto exit;
-       }
-
-       DBG_8723A("set ssid:dot11AuthAlgrthm =%d, dot11PrivacyAlgrthm =%d, "
-                 "dot118021XGrpPrivacy =%d\n", psecuritypriv->dot11AuthAlgrthm,
-                 psecuritypriv->dot11PrivacyAlgrthm,
-                 psecuritypriv->dot118021XGrpPrivacy);
-
-exit:
-
-       DBG_8723A("<=%s, ret %d\n", __func__, ret);
-
-       return ret;
-}
-
-static int cfg80211_rtw_disconnect(struct wiphy *wiphy, struct net_device *ndev,
-                                  u16 reason_code)
-{
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-
-       rtw_set_roaming(padapter, 0);
-
-       if (check_fwstate(&padapter->mlmepriv, _FW_LINKED)) {
-               rtw_scan_abort23a(padapter);
-               LeaveAllPowerSaveMode23a(padapter);
-               rtw_disassoc_cmd23a(padapter, 500, false);
-
-               DBG_8723A("%s...call rtw_indicate_disconnect23a\n", __func__);
-
-               padapter->mlmepriv.not_indic_disco = true;
-               rtw_indicate_disconnect23a(padapter);
-               padapter->mlmepriv.not_indic_disco = false;
-
-               rtw_free_assoc_resources23a(padapter, 1);
-       }
-
-       return 0;
-}
-
-static int cfg80211_rtw_set_txpower(struct wiphy *wiphy,
-                                   struct wireless_dev *wdev,
-                                   enum nl80211_tx_power_setting type, int mbm)
-{
-       DBG_8723A("%s\n", __func__);
-       return 0;
-}
-
-static int cfg80211_rtw_get_txpower(struct wiphy *wiphy,
-                                   struct wireless_dev *wdev, int *dbm)
-{
-       DBG_8723A("%s\n", __func__);
-       *dbm = 12;
-       return 0;
-}
-
-inline bool rtw_cfg80211_pwr_mgmt(struct rtw_adapter *adapter)
-{
-       struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(adapter->rtw_wdev);
-       return rtw_wdev_priv->power_mgmt;
-}
-
-static int cfg80211_rtw_set_power_mgmt(struct wiphy *wiphy,
-                                      struct net_device *ndev,
-                                      bool enabled, int timeout)
-{
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct rtw_wdev_priv *rtw_wdev_priv = wdev_to_priv(padapter->rtw_wdev);
-
-       DBG_8723A("%s(%s): enabled:%u, timeout:%d\n",
-                 __func__, ndev->name, enabled, timeout);
-
-       rtw_wdev_priv->power_mgmt = enabled;
-
-       if (!enabled)
-               LPS_Leave23a(padapter);
-
-       return 0;
-}
-
-static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
-                                 struct net_device *netdev,
-                                 struct cfg80211_pmksa *pmksa)
-{
-       u8 index, blInserted = false;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s(%s)\n", __func__, netdev->name);
-
-       if (is_zero_ether_addr(pmksa->bssid))
-               return -EINVAL;
-
-       blInserted = false;
-
-       /* overwrite PMKID */
-       for (index = 0; index < NUM_PMKID_CACHE; index++) {
-               if (ether_addr_equal(psecuritypriv->PMKIDList[index].Bssid,
-                                    pmksa->bssid)) {
-                       /* BSSID is matched, the same AP => rewrite with
-                          new PMKID. */
-                       DBG_8723A("%s(%s):  BSSID exists in the PMKList.\n",
-                                 __func__, netdev->name);
-
-                       memcpy(psecuritypriv->PMKIDList[index].PMKID,
-                              pmksa->pmkid, WLAN_PMKID_LEN);
-                       psecuritypriv->PMKIDList[index].bUsed = true;
-                       psecuritypriv->PMKIDIndex = index + 1;
-                       blInserted = true;
-                       break;
-               }
-       }
-
-       if (!blInserted) {
-               /*  Find a new entry */
-               DBG_8723A("%s(%s): Use new entry index = %d for this PMKID\n",
-                         __func__, netdev->name, psecuritypriv->PMKIDIndex);
-
-               ether_addr_copy(
-                       psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].
-                       Bssid, pmksa->bssid);
-               memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].
-                      PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
-
-               psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed =
-                       true;
-               psecuritypriv->PMKIDIndex++;
-               if (psecuritypriv->PMKIDIndex == 16) {
-                       psecuritypriv->PMKIDIndex = 0;
-               }
-       }
-
-       return 0;
-}
-
-static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
-                                 struct net_device *netdev,
-                                 struct cfg80211_pmksa *pmksa)
-{
-       u8 index, bMatched = false;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s(%s)\n", __func__, netdev->name);
-
-       for (index = 0; index < NUM_PMKID_CACHE; index++) {
-               if (ether_addr_equal(psecuritypriv->PMKIDList[index].Bssid,
-                                    pmksa->bssid)) {
-                       /* BSSID is matched, the same AP => Remove this PMKID
-                          information and reset it. */
-                       eth_zero_addr(psecuritypriv->PMKIDList[index].Bssid);
-                       memset(psecuritypriv->PMKIDList[index].PMKID, 0x00,
-                              WLAN_PMKID_LEN);
-                       psecuritypriv->PMKIDList[index].bUsed = false;
-                       bMatched = true;
-                       break;
-               }
-       }
-
-       if (false == bMatched) {
-               DBG_8723A("%s(%s): do not have matched BSSID\n", __func__,
-                         netdev->name);
-               return -EINVAL;
-       }
-
-       return 0;
-}
-
-static int cfg80211_rtw_flush_pmksa(struct wiphy *wiphy,
-                                   struct net_device *netdev)
-{
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       DBG_8723A("%s(%s)\n", __func__, netdev->name);
-
-       memset(&psecuritypriv->PMKIDList[0], 0x00,
-              sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-       psecuritypriv->PMKIDIndex = 0;
-
-       return 0;
-}
-
-#ifdef CONFIG_8723AU_AP_MODE
-void rtw_cfg80211_indicate_sta_assoc(struct rtw_adapter *padapter,
-                                    u8 *pmgmt_frame, uint frame_len)
-{
-       s32 freq;
-       int channel;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct net_device *ndev = padapter->pnetdev;
-
-       DBG_8723A("%s(padapter =%p,%s)\n", __func__, padapter, ndev->name);
-
-#if defined(RTW_USE_CFG80211_STA_EVENT)
-       {
-               struct station_info sinfo;
-               u8 ie_offset;
-
-               if (ieee80211_is_assoc_req(hdr->frame_control))
-                       ie_offset = offsetof(struct ieee80211_mgmt,
-                                            u.assoc_req.variable);
-               else            /*  WIFI_REASSOCREQ */
-                       ie_offset = offsetof(struct ieee80211_mgmt,
-                                            u.reassoc_req.variable);
-
-               sinfo.filled = 0;
-               sinfo.assoc_req_ies = pmgmt_frame + ie_offset;
-               sinfo.assoc_req_ies_len = frame_len - ie_offset;
-               cfg80211_new_sta(ndev, hdr->addr2, &sinfo, GFP_ATOMIC);
-       }
-#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
-       channel = pmlmeext->cur_channel;
-       if (channel <= RTW_CH_MAX_2G_CHANNEL)
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_2GHZ);
-       else
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_5GHZ);
-
-       cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pmgmt_frame, frame_len,
-                        0);
-#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
-}
-
-void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
-                                       unsigned char *da,
-                                       unsigned short reason)
-{
-       s32 freq;
-       int channel;
-       uint frame_len;
-       struct ieee80211_mgmt mgmt;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-       struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       struct net_device *ndev = padapter->pnetdev;
-
-       DBG_8723A("%s(padapter =%p,%s)\n", __func__, padapter, ndev->name);
-
-       memset(&mgmt, 0, sizeof(struct ieee80211_mgmt));
-
-#if defined(RTW_USE_CFG80211_STA_EVENT)
-       cfg80211_del_sta(ndev, da, GFP_ATOMIC);
-#else /* defined(RTW_USE_CFG80211_STA_EVENT) */
-       channel = pmlmeext->cur_channel;
-       if (channel <= RTW_CH_MAX_2G_CHANNEL)
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_2GHZ);
-       else
-               freq = ieee80211_channel_to_frequency(channel,
-                                                     NL80211_BAND_5GHZ);
-
-       mgmt.frame_control =
-               cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH);
-
-       ether_addr_copy(mgmt.da, myid(&padapter->eeprompriv));
-       ether_addr_copy(mgmt.sa, da);
-       ether_addr_copy(mgmt.bssid, get_my_bssid23a(&pmlmeinfo->network));
-
-       mgmt.seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
-       pmlmeext->mgnt_seq++;
-
-       mgmt.u.disassoc.reason_code = cpu_to_le16(reason);
-
-       frame_len = sizeof(struct ieee80211_hdr_3addr) + 2;
-
-       cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, (u8 *)&mgmt, frame_len,
-                        0);
-#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
-}
-
-static int rtw_cfg80211_monitor_if_open(struct net_device *ndev)
-{
-       DBG_8723A("%s\n", __func__);
-
-       return 0;
-}
-
-static int rtw_cfg80211_monitor_if_close(struct net_device *ndev)
-{
-       DBG_8723A("%s\n", __func__);
-
-       return 0;
-}
-
-static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb,
-                                             struct net_device *ndev)
-{
-       int ret = 0;
-       int rtap_len;
-       int qos_len = 0;
-       int dot11_hdr_len = 24;
-       int snap_len = 6;
-       unsigned char *pdata;
-       unsigned char src_mac_addr[6];
-       unsigned char dst_mac_addr[6];
-       struct ieee80211_hdr *dot11_hdr;
-       struct ieee80211_radiotap_header *rtap_hdr;
-       struct rtw_adapter *padapter = netdev_priv(ndev);
-
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-
-       if (unlikely(skb->len < sizeof(struct ieee80211_radiotap_header)))
-               goto fail;
-
-       rtap_hdr = (struct ieee80211_radiotap_header *)skb->data;
-       if (unlikely(rtap_hdr->it_version))
-               goto fail;
-
-       rtap_len = ieee80211_get_radiotap_len(skb->data);
-       if (unlikely(skb->len < rtap_len))
-               goto fail;
-
-       if (rtap_len != 14) {
-               DBG_8723A("radiotap len (should be 14): %d\n", rtap_len);
-               goto fail;
-       }
-
-       /* Skip the ratio tap header */
-       skb_pull(skb, rtap_len);
-
-       dot11_hdr = (struct ieee80211_hdr *)skb->data;
-       /* Check if the QoS bit is set */
-       if (ieee80211_is_data(dot11_hdr->frame_control)) {
-               /* Check if this ia a Wireless Distribution System (WDS) frame
-                * which has 4 MAC addresses
-                */
-               if (ieee80211_is_data_qos(dot11_hdr->frame_control))
-                       qos_len = IEEE80211_QOS_CTL_LEN;
-               if (ieee80211_has_a4(dot11_hdr->frame_control))
-                       dot11_hdr_len += 6;
-
-               memcpy(dst_mac_addr, dot11_hdr->addr1, sizeof(dst_mac_addr));
-               memcpy(src_mac_addr, dot11_hdr->addr2, sizeof(src_mac_addr));
-
-               /*
-                * Skip the 802.11 header, QoS (if any) and SNAP,
-                * but leave spaces for two MAC addresses
-                */
-               skb_pull(skb, dot11_hdr_len + qos_len + snap_len -
-                        ETH_ALEN * 2);
-               pdata = (unsigned char *)skb->data;
-               ether_addr_copy(pdata, dst_mac_addr);
-               ether_addr_copy(pdata + ETH_ALEN, src_mac_addr);
-
-               DBG_8723A("should be eapol packet\n");
-
-               /* Use the real net device to transmit the packet */
-               ret = rtw_xmit23a_entry23a(skb, padapter->pnetdev);
-
-               return ret;
-
-       } else if (ieee80211_is_action(dot11_hdr->frame_control)) {
-               struct ieee80211_mgmt *mgmt;
-               /* only for action frames */
-               struct xmit_frame *pmgntframe;
-               struct pkt_attrib *pattrib;
-               unsigned char *pframe;
-               /* u8 category, action, OUI_Subtype, dialogToken = 0; */
-               /* unsigned char        *frame_body; */
-               struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-               struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-               u32 len = skb->len;
-               u8 category, action;
-
-               mgmt = (struct ieee80211_mgmt *)dot11_hdr;
-
-               DBG_8723A("RTW_Tx:da=%pM via %s(%s)\n",
-                         mgmt->da, __func__, ndev->name);
-               category = mgmt->u.action.category;
-               action = mgmt->u.action.u.wme_action.action_code;
-               DBG_8723A("RTW_Tx:category(%u), action(%u)\n",
-                         category, action);
-
-               /* starting alloc mgmt frame to dump it */
-               pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-               if (pmgntframe == NULL)
-                       goto fail;
-
-               /* update attribute */
-               pattrib = &pmgntframe->attrib;
-               update_mgntframe_attrib23a(padapter, pattrib);
-               pattrib->retry_ctrl = false;
-
-               memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-               pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
-
-               memcpy(pframe, skb->data, len);
-               pattrib->pktlen = len;
-
-               /* update seq number */
-               pmlmeext->mgnt_seq = le16_to_cpu(dot11_hdr->seq_ctrl) >> 4;
-               pattrib->seqnum = pmlmeext->mgnt_seq;
-               pmlmeext->mgnt_seq++;
-
-               pattrib->last_txcmdsz = pattrib->pktlen;
-
-               dump_mgntframe23a(padapter, pmgntframe);
-       }
-
-fail:
-
-       dev_kfree_skb(skb);
-
-       return 0;
-}
-
-static int
-rtw_cfg80211_monitor_if_set_mac_address(struct net_device *ndev, void *addr)
-{
-       DBG_8723A("%s\n", __func__);
-
-       return 0;
-}
-
-static const struct net_device_ops rtw_cfg80211_monitor_if_ops = {
-       .ndo_open = rtw_cfg80211_monitor_if_open,
-       .ndo_stop = rtw_cfg80211_monitor_if_close,
-       .ndo_start_xmit = rtw_cfg80211_monitor_if_xmit_entry,
-       .ndo_set_mac_address = rtw_cfg80211_monitor_if_set_mac_address,
-};
-
-static int rtw_cfg80211_add_monitor_if(struct rtw_adapter *padapter, char *name,
-                                      unsigned char name_assign_type,
-                                      struct net_device **ndev)
-{
-       int ret = 0;
-       struct net_device *mon_ndev = NULL;
-       struct wireless_dev *mon_wdev = NULL;
-       struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev);
-
-       if (!name) {
-               DBG_8723A("%s(%s): without specific name\n",
-                         __func__, padapter->pnetdev->name);
-               ret = -EINVAL;
-               goto out;
-       }
-
-       if (pwdev_priv->pmon_ndev) {
-               DBG_8723A("%s(%s): monitor interface exist: %s\n", __func__,
-                         padapter->pnetdev->name, pwdev_priv->pmon_ndev->name);
-               ret = -EBUSY;
-               goto out;
-       }
-
-       mon_ndev = alloc_etherdev(sizeof(struct rtw_adapter));
-       if (!mon_ndev) {
-               DBG_8723A("%s(%s): allocate ndev fail\n", __func__,
-                         padapter->pnetdev->name);
-               ret = -ENOMEM;
-               goto out;
-       }
-
-       mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP;
-       strncpy(mon_ndev->name, name, IFNAMSIZ);
-       mon_ndev->name[IFNAMSIZ - 1] = 0;
-       mon_ndev->name_assign_type = name_assign_type;
-       mon_ndev->destructor = rtw_ndev_destructor;
-
-       mon_ndev->netdev_ops = &rtw_cfg80211_monitor_if_ops;
-
-       /*  wdev */
-       mon_wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
-       if (!mon_wdev) {
-               ret = -ENOMEM;
-               goto out;
-       }
-
-       mon_wdev->wiphy = padapter->rtw_wdev->wiphy;
-       mon_wdev->netdev = mon_ndev;
-       mon_wdev->iftype = NL80211_IFTYPE_MONITOR;
-       mon_ndev->ieee80211_ptr = mon_wdev;
-
-       ret = register_netdevice(mon_ndev);
-       if (ret) {
-               goto out;
-       }
-
-       *ndev = pwdev_priv->pmon_ndev = mon_ndev;
-       memcpy(pwdev_priv->ifname_mon, name, IFNAMSIZ + 1);
-
-out:
-       if (ret) {
-               kfree(mon_wdev);
-               mon_wdev = NULL;
-       }
-
-       if (ret && mon_ndev) {
-               free_netdev(mon_ndev);
-               *ndev = mon_ndev = NULL;
-       }
-
-       return ret;
-}
-
-static struct wireless_dev *
-cfg80211_rtw_add_virtual_intf(struct wiphy *wiphy, const char *name,
-                             unsigned char name_assign_type,
-                             enum nl80211_iftype type, u32 *flags,
-                             struct vif_params *params)
-{
-       int ret = 0;
-       struct net_device *ndev = NULL;
-       struct rtw_adapter *padapter = wiphy_to_adapter(wiphy);
-
-       DBG_8723A("%s(%s): wiphy:%s, name:%s, type:%d\n", __func__,
-                 padapter->pnetdev->name, wiphy_name(wiphy), name, type);
-
-       switch (type) {
-       case NL80211_IFTYPE_ADHOC:
-       case NL80211_IFTYPE_AP_VLAN:
-       case NL80211_IFTYPE_WDS:
-       case NL80211_IFTYPE_MESH_POINT:
-               ret = -ENODEV;
-               break;
-       case NL80211_IFTYPE_MONITOR:
-               ret =
-                   rtw_cfg80211_add_monitor_if(padapter, (char *)name,
-                                               name_assign_type, &ndev);
-               break;
-
-       case NL80211_IFTYPE_P2P_CLIENT:
-       case NL80211_IFTYPE_STATION:
-               ret = -ENODEV;
-               break;
-
-       case NL80211_IFTYPE_P2P_GO:
-       case NL80211_IFTYPE_AP:
-               ret = -ENODEV;
-               break;
-       default:
-               ret = -ENODEV;
-               DBG_8723A("Unsupported interface type\n");
-               break;
-       }
-
-       DBG_8723A("%s(%s): ndev:%p, ret:%d\n", __func__,
-                 padapter->pnetdev->name,
-                 ndev, ret);
-
-       return ndev ? ndev->ieee80211_ptr : ERR_PTR(ret);
-}
-
-static int cfg80211_rtw_del_virtual_intf(struct wiphy *wiphy,
-                                        struct wireless_dev *wdev)
-{
-       struct rtw_wdev_priv *pwdev_priv =
-           (struct rtw_wdev_priv *)wiphy_priv(wiphy);
-       struct net_device *ndev;
-       ndev = wdev ? wdev->netdev : NULL;
-
-       if (!ndev)
-               goto exit;
-
-       unregister_netdevice(ndev);
-
-       if (ndev == pwdev_priv->pmon_ndev) {
-               pwdev_priv->pmon_ndev = NULL;
-               pwdev_priv->ifname_mon[0] = '\0';
-               DBG_8723A("%s(%s): remove monitor interface\n",
-                         __func__, ndev->name);
-       }
-
-exit:
-       return 0;
-}
-
-static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
-                         size_t head_len, const u8 *tail, size_t tail_len)
-{
-       int ret = 0;
-       u8 *pbuf;
-       uint len, ielen, wps_ielen = 0;
-       struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
-       struct wlan_bssid_ex *bss = &pmlmepriv->cur_network.network;
-       const struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)head;
-       struct ieee80211_mgmt *tmpmgmt;
-       /* struct sta_priv *pstapriv = &padapter->stapriv; */
-
-       DBG_8723A("%s beacon_head_len =%zu, beacon_tail_len =%zu\n",
-                 __func__, head_len, tail_len);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true)
-               return -EINVAL;
-
-       if (head_len < offsetof(struct ieee80211_mgmt, u.beacon.variable))
-               return -EINVAL;
-
-       pbuf = kzalloc(head_len + tail_len, GFP_KERNEL);
-       if (!pbuf)
-               return -ENOMEM;
-       tmpmgmt = (struct ieee80211_mgmt *)pbuf;
-
-       bss->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int);
-       bss->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info);
-       bss->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
-
-       /*  24 = beacon header len. */
-       memcpy(pbuf, (void *)head, head_len);
-       memcpy(pbuf + head_len, (void *)tail, tail_len);
-
-       len = head_len + tail_len;
-       ielen = len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
-       /* check wps ie if inclued */
-       if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
-                                   WLAN_OUI_TYPE_MICROSOFT_WPS,
-                                   tmpmgmt->u.beacon.variable, ielen))
-               DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen);
-
-       /* pbss_network->IEs will not include p2p_ie, wfd ie */
-       rtw_ies_remove_ie23a(tmpmgmt->u.beacon.variable, &ielen, 0,
-                            WLAN_EID_VENDOR_SPECIFIC, P2P_OUI23A, 4);
-       rtw_ies_remove_ie23a(tmpmgmt->u.beacon.variable, &ielen, 0,
-                            WLAN_EID_VENDOR_SPECIFIC, WFD_OUI23A, 4);
-
-       len = ielen + offsetof(struct ieee80211_mgmt, u.beacon.variable);
-       if (rtw_check_beacon_data23a(adapter, tmpmgmt, len) == _SUCCESS) {
-               ret = 0;
-       } else {
-               ret = -EINVAL;
-       }
-
-       kfree(pbuf);
-
-       return ret;
-}
-
-static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev,
-                                struct cfg80211_ap_settings *settings)
-{
-       int ret = 0;
-       struct rtw_adapter *adapter = wiphy_to_adapter(wiphy);
-
-       DBG_8723A("%s(%s): hidden_ssid:%d, auth_type:%d\n",
-                 __func__, ndev->name, settings->hidden_ssid,
-                 settings->auth_type);
-
-       ret = rtw_add_beacon(adapter, settings->beacon.head,
-                            settings->beacon.head_len, settings->beacon.tail,
-                            settings->beacon.tail_len);
-
-       adapter->mlmeextpriv.mlmext_info.hidden_ssid_mode =
-               settings->hidden_ssid;
-
-       if (settings->ssid && settings->ssid_len) {
-               struct wlan_bssid_ex *pbss_network =
-                       &adapter->mlmepriv.cur_network.network;
-               struct wlan_bssid_ex *pbss_network_ext =
-                       &adapter->mlmeextpriv.mlmext_info.network;
-
-               memcpy(pbss_network->Ssid.ssid, (void *)settings->ssid,
-                      settings->ssid_len);
-               pbss_network->Ssid.ssid_len = settings->ssid_len;
-               memcpy(pbss_network_ext->Ssid.ssid, (void *)settings->ssid,
-                      settings->ssid_len);
-               pbss_network_ext->Ssid.ssid_len = settings->ssid_len;
-       }
-
-       return ret;
-}
-
-static int cfg80211_rtw_change_beacon(struct wiphy *wiphy,
-                                     struct net_device *ndev,
-                                     struct cfg80211_beacon_data *info)
-{
-       int ret = 0;
-       struct rtw_adapter *adapter = wiphy_to_adapter(wiphy);
-
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-
-       ret = rtw_add_beacon(adapter, info->head, info->head_len, info->tail,
-                            info->tail_len);
-
-       return ret;
-}
-
-static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-
-static int cfg80211_rtw_add_station(struct wiphy *wiphy,
-                                   struct net_device *ndev, const u8 *mac,
-                                   struct station_parameters *params)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-
-       return 0;
-}
-
-static int cfg80211_rtw_del_station(struct wiphy *wiphy,
-                                   struct net_device *ndev,
-                                   struct station_del_parameters *params)
-{
-       const u8 *mac = params->mac;
-       int ret = 0;
-       struct list_head *phead;
-       u8 updated = 0;
-       struct sta_info *psta, *ptmp;
-       struct rtw_adapter *padapter = netdev_priv(ndev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct sta_priv *pstapriv = &padapter->stapriv;
-
-       DBG_8723A("+%s(%s)\n", __func__, ndev->name);
-
-       if (check_fwstate(pmlmepriv, (_FW_LINKED | WIFI_AP_STATE)) != true) {
-               DBG_8723A("%s, fw_state != FW_LINKED|WIFI_AP_STATE\n",
-                         __func__);
-               return -EINVAL;
-       }
-
-       if (!mac) {
-               DBG_8723A("flush all sta, and cam_entry\n");
-
-               flush_all_cam_entry23a(padapter);       /* clear CAM */
-
-               ret = rtw_sta_flush23a(padapter);
-
-               return ret;
-       }
-
-       DBG_8723A("free sta macaddr=%pM\n", mac);
-
-       if (is_broadcast_ether_addr(mac))
-               return -EINVAL;
-
-       spin_lock_bh(&pstapriv->asoc_list_lock);
-       phead = &pstapriv->asoc_list;
-       /* check asoc_queue */
-       list_for_each_entry_safe(psta, ptmp, phead, asoc_list) {
-               if (ether_addr_equal(mac, psta->hwaddr)) {
-                       if (psta->dot8021xalg == 1 &&
-                           psta->bpairwise_key_installed == false) {
-                               DBG_8723A("%s, sta's dot8021xalg = 1 and "
-                                         "key_installed = false\n", __func__);
-                       } else {
-                               DBG_8723A("free psta =%p, aid =%d\n", psta,
-                                         psta->aid);
-
-                               list_del_init(&psta->asoc_list);
-                               pstapriv->asoc_list_cnt--;
-
-                               /* spin_unlock_bh(&pstapriv->asoc_list_lock); */
-                               updated =
-                                   ap_free_sta23a(padapter, psta, true,
-                                               WLAN_REASON_DEAUTH_LEAVING);
-                               /* spin_lock_bh(&pstapriv->asoc_list_lock); */
-
-                               psta = NULL;
-
-                               break;
-                       }
-               }
-       }
-       spin_unlock_bh(&pstapriv->asoc_list_lock);
-
-       associated_clients_update23a(padapter, updated);
-
-       DBG_8723A("-%s(%s)\n", __func__, ndev->name);
-
-       return ret;
-}
-
-static int cfg80211_rtw_change_station(struct wiphy *wiphy,
-                                      struct net_device *ndev, const u8 *mac,
-                                      struct station_parameters *params)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-
-static int cfg80211_rtw_dump_station(struct wiphy *wiphy,
-                                    struct net_device *ndev, int idx, u8 *mac,
-                                    struct station_info *sinfo)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-
-       /* TODO: dump scanned queue */
-
-       return -ENOENT;
-}
-
-static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
-                                  struct bss_parameters *params)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       return 0;
-}
-#endif /* CONFIG_8723AU_AP_MODE */
-
-static int _cfg80211_rtw_mgmt_tx(struct rtw_adapter *padapter, u8 tx_ch,
-                                const u8 *buf, size_t len)
-{
-       struct xmit_frame *pmgntframe;
-       struct pkt_attrib *pattrib;
-       unsigned char *pframe;
-       int ret = _FAIL;
-       struct ieee80211_hdr *pwlanhdr;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
-
-       if (_FAIL == rtw_pwr_wakeup(padapter)) {
-               ret = -EFAULT;
-               goto exit;
-       }
-
-       rtw_set_scan_deny(padapter, 1000);
-
-       rtw_scan_abort23a(padapter);
-
-       if (tx_ch != rtw_get_oper_ch23a(padapter)) {
-               if (!check_fwstate(&padapter->mlmepriv, _FW_LINKED))
-                       pmlmeext->cur_channel = tx_ch;
-               set_channel_bwmode23a(padapter, tx_ch,
-                                  HAL_PRIME_CHNL_OFFSET_DONT_CARE,
-                                  HT_CHANNEL_WIDTH_20);
-       }
-
-       /* starting alloc mgmt frame to dump it */
-       pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
-       if (!pmgntframe) {
-               /* ret = -ENOMEM; */
-               ret = _FAIL;
-               goto exit;
-       }
-
-       /* update attribute */
-       pattrib = &pmgntframe->attrib;
-       update_mgntframe_attrib23a(padapter, pattrib);
-       pattrib->retry_ctrl = false;
-
-       memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
-       pframe = (u8 *) (pmgntframe->buf_addr) + TXDESC_OFFSET;
-
-       memcpy(pframe, (void *)buf, len);
-       pattrib->pktlen = len;
-
-       pwlanhdr = (struct ieee80211_hdr *)pframe;
-       /* update seq number */
-       pmlmeext->mgnt_seq = le16_to_cpu(pwlanhdr->seq_ctrl) >> 4;
-       pattrib->seqnum = pmlmeext->mgnt_seq;
-       pmlmeext->mgnt_seq++;
-
-       pattrib->last_txcmdsz = pattrib->pktlen;
-
-       ret = dump_mgntframe23a_and_wait_ack23a(padapter, pmgntframe);
-
-       if (ret  != _SUCCESS)
-               DBG_8723A("%s, ack == false\n", __func__);
-       else
-               DBG_8723A("%s, ack == true\n", __func__);
-
-exit:
-
-       DBG_8723A("%s, ret =%d\n", __func__, ret);
-
-       return ret;
-}
-
-static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
-                               struct cfg80211_mgmt_tx_params *params,
-                               u64 *cookie)
-{
-       struct rtw_adapter *padapter =
-               (struct rtw_adapter *)wiphy_to_adapter(wiphy);
-       int ret = 0;
-       int tx_ret;
-       u32 dump_limit = RTW_MAX_MGMT_TX_CNT;
-       u32 dump_cnt = 0;
-       bool ack = true;
-       u8 category, action;
-       unsigned long start = jiffies;
-       size_t len = params->len;
-       struct ieee80211_channel *chan = params->chan;
-       const u8 *buf = params->buf;
-       struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *)buf;
-       u8 tx_ch = (u8) ieee80211_frequency_to_channel(chan->center_freq);
-
-       if (!ieee80211_is_action(hdr->frame_control))
-               return -EINVAL;
-
-       /* cookie generation */
-       *cookie = (unsigned long)buf;
-
-       DBG_8723A("%s(%s): len =%zu, ch =%d\n", __func__,
-                 padapter->pnetdev->name, len, tx_ch);
-
-       /* indicate ack before issue frame to avoid racing with rsp frame */
-       cfg80211_mgmt_tx_status(padapter->rtw_wdev, *cookie, buf, len, ack,
-                               GFP_KERNEL);
-
-       DBG_8723A("RTW_Tx:tx_ch =%d, da =%pM\n", tx_ch, hdr->da);
-       category = hdr->u.action.category;
-       action = hdr->u.action.u.wme_action.action_code;
-       DBG_8723A("RTW_Tx:category(%u), action(%u)\n", category, action);
-
-       do {
-               dump_cnt++;
-               tx_ret = _cfg80211_rtw_mgmt_tx(padapter, tx_ch, buf, len);
-       } while (dump_cnt < dump_limit && tx_ret != _SUCCESS);
-
-       if (tx_ret != _SUCCESS || dump_cnt > 1) {
-               DBG_8723A("%s(%s): %s (%d/%d) in %d ms\n",
-                         __func__, padapter->pnetdev->name,
-                         tx_ret == _SUCCESS ? "OK" : "FAIL", dump_cnt,
-                         dump_limit, jiffies_to_msecs(jiffies - start));
-       }
-
-       return ret;
-}
-
-static void cfg80211_rtw_mgmt_frame_register(struct wiphy *wiphy,
-                                            struct wireless_dev *wdev,
-                                            u16 frame_type, bool reg)
-{
-       if (frame_type != (IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_PROBE_REQ))
-               return;
-
-       return;
-}
-
-static struct cfg80211_ops rtw_cfg80211_ops = {
-       .change_virtual_intf = cfg80211_rtw_change_iface,
-       .add_key = cfg80211_rtw_add_key,
-       .get_key = cfg80211_rtw_get_key,
-       .del_key = cfg80211_rtw_del_key,
-       .set_default_key = cfg80211_rtw_set_default_key,
-       .get_station = cfg80211_rtw_get_station,
-       .scan = cfg80211_rtw_scan,
-       .set_wiphy_params = cfg80211_rtw_set_wiphy_params,
-       .connect = cfg80211_rtw_connect,
-       .disconnect = cfg80211_rtw_disconnect,
-       .join_ibss = cfg80211_rtw_join_ibss,
-       .leave_ibss = cfg80211_rtw_leave_ibss,
-       .set_tx_power = cfg80211_rtw_set_txpower,
-       .get_tx_power = cfg80211_rtw_get_txpower,
-       .set_power_mgmt = cfg80211_rtw_set_power_mgmt,
-       .set_pmksa = cfg80211_rtw_set_pmksa,
-       .del_pmksa = cfg80211_rtw_del_pmksa,
-       .flush_pmksa = cfg80211_rtw_flush_pmksa,
-
-#ifdef CONFIG_8723AU_AP_MODE
-       .add_virtual_intf = cfg80211_rtw_add_virtual_intf,
-       .del_virtual_intf = cfg80211_rtw_del_virtual_intf,
-
-       .start_ap = cfg80211_rtw_start_ap,
-       .change_beacon = cfg80211_rtw_change_beacon,
-       .stop_ap = cfg80211_rtw_stop_ap,
-
-       .add_station = cfg80211_rtw_add_station,
-       .del_station = cfg80211_rtw_del_station,
-       .change_station = cfg80211_rtw_change_station,
-       .dump_station = cfg80211_rtw_dump_station,
-       .change_bss = cfg80211_rtw_change_bss,
-#endif /* CONFIG_8723AU_AP_MODE */
-
-       .mgmt_tx = cfg80211_rtw_mgmt_tx,
-       .mgmt_frame_register = cfg80211_rtw_mgmt_frame_register,
-};
-
-static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap,
-                                      enum nl80211_band band, u8 rf_type)
-{
-
-#define MAX_BIT_RATE_40MHZ_MCS15       300     /* Mbps */
-#define MAX_BIT_RATE_40MHZ_MCS7                150     /* Mbps */
-
-       ht_cap->ht_supported = true;
-
-       ht_cap->cap = IEEE80211_HT_CAP_SUP_WIDTH_20_40 |
-           IEEE80211_HT_CAP_SGI_40 | IEEE80211_HT_CAP_SGI_20 |
-           IEEE80211_HT_CAP_DSSSCCK40 | IEEE80211_HT_CAP_MAX_AMSDU;
-
-       /*
-        *Maximum length of AMPDU that the STA can receive.
-        *Length = 2 ^ (13 + max_ampdu_length_exp) - 1 (octets)
-        */
-       ht_cap->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K;
-
-       /*Minimum MPDU start spacing , */
-       ht_cap->ampdu_density = IEEE80211_HT_MPDU_DENSITY_16;
-
-       ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED;
-
-       /*
-        *hw->wiphy->bands[NL80211_BAND_2GHZ]
-        *base on ant_num
-        *rx_mask: RX mask
-        *if rx_ant = 1 rx_mask[0]= 0xff;==>MCS0-MCS7
-        *if rx_ant = 2 rx_mask[1]= 0xff;==>MCS8-MCS15
-        *if rx_ant >= 3 rx_mask[2]= 0xff;
-        *if BW_40 rx_mask[4]= 0x01;
-        *highest supported RX rate
-        */
-       if (rf_type == RF_1T1R) {
-               ht_cap->mcs.rx_mask[0] = 0xFF;
-               ht_cap->mcs.rx_mask[1] = 0x00;
-               ht_cap->mcs.rx_mask[4] = 0x01;
-
-               ht_cap->mcs.rx_highest = cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS7);
-       } else if ((rf_type == RF_1T2R) || (rf_type == RF_2T2R)) {
-               ht_cap->mcs.rx_mask[0] = 0xFF;
-               ht_cap->mcs.rx_mask[1] = 0xFF;
-               ht_cap->mcs.rx_mask[4] = 0x01;
-
-               ht_cap->mcs.rx_highest = cpu_to_le16(MAX_BIT_RATE_40MHZ_MCS15);
-       } else {
-               DBG_8723A("%s, error rf_type =%d\n", __func__, rf_type);
-       }
-
-}
-
-void rtw_cfg80211_init_wiphy(struct rtw_adapter *padapter)
-{
-       u8 rf_type;
-       struct ieee80211_supported_band *bands;
-       struct wireless_dev *pwdev = padapter->rtw_wdev;
-       struct wiphy *wiphy = pwdev->wiphy;
-
-       rf_type = rtl8723a_get_rf_type(padapter);
-
-       DBG_8723A("%s:rf_type =%d\n", __func__, rf_type);
-
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
-       {
-               bands = wiphy->bands[NL80211_BAND_2GHZ];
-               if (bands)
-                       rtw_cfg80211_init_ht_capab(&bands->ht_cap,
-                                                  NL80211_BAND_2GHZ,
-                                                  rf_type);
-       }
-
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
-       {
-               bands = wiphy->bands[NL80211_BAND_5GHZ];
-               if (bands)
-                       rtw_cfg80211_init_ht_capab(&bands->ht_cap,
-                                                  NL80211_BAND_5GHZ,
-                                                  rf_type);
-       }
-}
-
-static void rtw_cfg80211_preinit_wiphy(struct rtw_adapter *padapter,
-                                      struct wiphy *wiphy)
-{
-       wiphy->signal_type = CFG80211_SIGNAL_TYPE_MBM;
-
-       wiphy->max_scan_ssids = RTW_SSID_SCAN_AMOUNT;
-       wiphy->max_scan_ie_len = IEEE80211_MAX_DATA_LEN;
-       wiphy->max_num_pmkids = RTW_MAX_NUM_PMKIDS;
-
-       wiphy->max_remain_on_channel_duration =
-           RTW_MAX_REMAIN_ON_CHANNEL_DURATION;
-
-       wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
-           BIT(NL80211_IFTYPE_ADHOC) |
-#ifdef CONFIG_8723AU_AP_MODE
-           BIT(NL80211_IFTYPE_AP) | BIT(NL80211_IFTYPE_MONITOR) |
-#endif
-           0;
-
-#ifdef CONFIG_8723AU_AP_MODE
-       wiphy->mgmt_stypes = rtw_cfg80211_default_mgmt_stypes;
-#endif /* CONFIG_8723AU_AP_MODE */
-
-       wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);
-
-       /*
-          wiphy->iface_combinations = &rtw_combinations;
-          wiphy->n_iface_combinations = 1;
-        */
-
-       wiphy->cipher_suites = rtw_cipher_suites;
-       wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);
-
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */
-       wiphy->bands[NL80211_BAND_2GHZ] =
-           rtw_spt_band_alloc(NL80211_BAND_2GHZ);
-       /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */
-       wiphy->bands[NL80211_BAND_5GHZ] =
-           rtw_spt_band_alloc(NL80211_BAND_5GHZ);
-
-       wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL;
-       wiphy->flags |= WIPHY_FLAG_OFFCHAN_TX | WIPHY_FLAG_HAVE_AP_SME;
-
-       if (padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
-               wiphy->flags |= WIPHY_FLAG_PS_ON_BY_DEFAULT;
-       else
-               wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
-}
-
-int rtw_wdev_alloc(struct rtw_adapter *padapter, struct device *dev)
-{
-       int ret = 0;
-       struct wiphy *wiphy;
-       struct wireless_dev *wdev;
-       struct rtw_wdev_priv *pwdev_priv;
-       struct net_device *pnetdev = padapter->pnetdev;
-
-       DBG_8723A("%s(padapter =%p)\n", __func__, padapter);
-
-       /* wiphy */
-       wiphy = wiphy_new(&rtw_cfg80211_ops, sizeof(struct rtw_wdev_priv));
-       if (!wiphy) {
-               DBG_8723A("Couldn't allocate wiphy device\n");
-               ret = -ENOMEM;
-               goto exit;
-       }
-
-       /*  wdev */
-       wdev = kzalloc(sizeof(struct wireless_dev), GFP_KERNEL);
-       if (!wdev) {
-               ret = -ENOMEM;
-               goto free_wiphy;
-       }
-
-       set_wiphy_dev(wiphy, dev);
-       rtw_cfg80211_preinit_wiphy(padapter, wiphy);
-
-       ret = wiphy_register(wiphy);
-       if (ret < 0) {
-               DBG_8723A("Couldn't register wiphy device\n");
-               goto free_wdev;
-       }
-
-       wdev->wiphy = wiphy;
-       wdev->netdev = pnetdev;
-       /* wdev->iftype = NL80211_IFTYPE_STATION; */
-       /*  for rtw_setopmode_cmd23a() in cfg80211_rtw_change_iface() */
-       wdev->iftype = NL80211_IFTYPE_MONITOR;
-       padapter->rtw_wdev = wdev;
-       pnetdev->ieee80211_ptr = wdev;
-
-       /* init pwdev_priv */
-       pwdev_priv = wdev_to_priv(wdev);
-       pwdev_priv->rtw_wdev = wdev;
-       pwdev_priv->pmon_ndev = NULL;
-       pwdev_priv->ifname_mon[0] = '\0';
-       pwdev_priv->padapter = padapter;
-       pwdev_priv->scan_request = NULL;
-       spin_lock_init(&pwdev_priv->scan_req_lock);
-
-       pwdev_priv->p2p_enabled = false;
-
-       if (padapter->registrypriv.power_mgnt != PS_MODE_ACTIVE)
-               pwdev_priv->power_mgmt = true;
-       else
-               pwdev_priv->power_mgmt = false;
-
-       return ret;
-free_wdev:
-       kfree(wdev);
-free_wiphy:
-       wiphy_free(wiphy);
-exit:
-       return ret;
-}
-
-void rtw_wdev_free(struct wireless_dev *wdev)
-{
-       DBG_8723A("%s(wdev =%p)\n", __func__, wdev);
-
-       if (!wdev)
-               return;
-
-       kfree(wdev->wiphy->bands[NL80211_BAND_2GHZ]);
-       kfree(wdev->wiphy->bands[NL80211_BAND_5GHZ]);
-
-       wiphy_free(wdev->wiphy);
-
-       kfree(wdev);
-}
-
-void rtw_wdev_unregister(struct wireless_dev *wdev)
-{
-       struct rtw_wdev_priv *pwdev_priv;
-
-       DBG_8723A("%s(wdev =%p)\n", __func__, wdev);
-
-       if (!wdev)
-               return;
-
-       pwdev_priv = wdev_to_priv(wdev);
-
-       rtw_cfg80211_indicate_scan_done(pwdev_priv, true);
-
-       if (pwdev_priv->pmon_ndev) {
-               DBG_8723A("%s, unregister monitor interface\n", __func__);
-               unregister_netdev(pwdev_priv->pmon_ndev);
-       }
-
-       wiphy_unregister(wdev->wiphy);
-}
diff --git a/drivers/staging/rtl8723au/os_dep/mlme_linux.c b/drivers/staging/rtl8723au/os_dep/mlme_linux.c
deleted file mode 100644 (file)
index ca24369..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-
-#define _MLME_OSDEP_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <mlme_osdep.h>
-
-static struct rt_pmkid_list backupPMKIDList[NUM_PMKID_CACHE];
-
-void rtw_reset_securitypriv23a(struct rtw_adapter *adapter)
-{
-       u8      backupPMKIDIndex = 0;
-       u8      backupTKIPCountermeasure = 0x00;
-       unsigned long backupTKIPcountermeasure_time = 0;
-
-       if (adapter->securitypriv.dot11AuthAlgrthm ==
-           dot11AuthAlgrthm_8021X) { /* 802.1x */
-               /*  We have to backup the PMK information for WiFi PMK
-                *  Caching test item.
-                *  Backup the btkip_countermeasure information.
-                *  When the countermeasure is trigger, the driver have to
-                *  disconnect with AP for 60 seconds.
-                */
-               memcpy(&backupPMKIDList[0], &adapter->securitypriv.PMKIDList[0],
-                      sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-               backupPMKIDIndex = adapter->securitypriv.PMKIDIndex;
-               backupTKIPCountermeasure = adapter->securitypriv.btkip_countermeasure;
-               backupTKIPcountermeasure_time = adapter->securitypriv.btkip_countermeasure_time;
-
-               memset((unsigned char *)&adapter->securitypriv, 0,
-                      sizeof (struct security_priv));
-               /* Restore the PMK information to securitypriv structure
-                * for the following connection.
-                */
-               memcpy(&adapter->securitypriv.PMKIDList[0], &backupPMKIDList[0],
-                      sizeof(struct rt_pmkid_list) * NUM_PMKID_CACHE);
-               adapter->securitypriv.PMKIDIndex = backupPMKIDIndex;
-               adapter->securitypriv.btkip_countermeasure = backupTKIPCountermeasure;
-               adapter->securitypriv.btkip_countermeasure_time = backupTKIPcountermeasure_time;
-
-               adapter->securitypriv.ndisauthtype = Ndis802_11AuthModeOpen;
-               adapter->securitypriv.ndisencryptstatus = Ndis802_11WEPDisabled;
-       } else {  /* reset values in securitypriv */
-               struct security_priv *psec_priv = &adapter->securitypriv;
-
-               /* open system */
-               psec_priv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-               psec_priv->dot11PrivacyAlgrthm = 0;
-               psec_priv->dot11PrivacyKeyIndex = 0;
-
-               psec_priv->dot118021XGrpPrivacy = 0;
-               psec_priv->dot118021XGrpKeyid = 1;
-
-               psec_priv->ndisauthtype = Ndis802_11AuthModeOpen;
-               psec_priv->ndisencryptstatus = Ndis802_11WEPDisabled;
-       }
-}
-
-void rtw_os_indicate_disconnect23a(struct rtw_adapter *adapter)
-{
-       /* Do it first for tx broadcast pkt after disconnection issue! */
-       netif_carrier_off(adapter->pnetdev);
-
-       rtw_cfg80211_indicate_disconnect(adapter);
-
-       rtw_reset_securitypriv23a(adapter);
-}
diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c
deleted file mode 100644 (file)
index b8848c2..0000000
+++ /dev/null
@@ -1,852 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _OS_INTFS_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <xmit_osdep.h>
-#include <recv_osdep.h>
-#include <hal_intf.h>
-#include <rtw_version.h>
-
-#include <rtl8723a_hal.h>
-
-MODULE_LICENSE("GPL");
-MODULE_DESCRIPTION("Realtek Wireless Lan Driver");
-MODULE_AUTHOR("Realtek Semiconductor Corp.");
-MODULE_AUTHOR("Larry Finger <Larry.Finger@lwfinger.net>");
-MODULE_AUTHOR("Jes Sorensen <Jes.Sorensen@redhat.com>");
-MODULE_VERSION(DRIVERVERSION);
-MODULE_FIRMWARE("rtlwifi/rtl8723aufw_A.bin");
-MODULE_FIRMWARE("rtlwifi/rtl8723aufw_B.bin");
-MODULE_FIRMWARE("rtlwifi/rtl8723aufw_B_NoBT.bin");
-
-/* module param defaults */
-static int rtw_chip_version;
-static int rtw_rfintfs = HWPI;
-static int rtw_debug = 1;
-
-static int rtw_channel = 1;/* ad-hoc support requirement */
-static int rtw_wireless_mode = WIRELESS_11BG_24N;
-static int rtw_vrtl_carrier_sense = AUTO_VCS;
-static int rtw_vcs_type = RTS_CTS;/*  */
-static int rtw_rts_thresh = 2347;/*  */
-static int rtw_frag_thresh = 2346;/*  */
-static int rtw_preamble = PREAMBLE_LONG;/* long, short, auto */
-static int rtw_scan_mode = 1;/* active, passive */
-static int rtw_adhoc_tx_pwr = 1;
-static int rtw_soft_ap;
-static int rtw_power_mgnt = 1;
-static int rtw_ips_mode = IPS_NORMAL;
-
-static int rtw_smart_ps = 2;
-
-module_param(rtw_ips_mode, int, 0644);
-MODULE_PARM_DESC(rtw_ips_mode, "The default IPS mode");
-
-static int rtw_long_retry_lmt = 7;
-static int rtw_short_retry_lmt = 7;
-static int rtw_busy_thresh = 40;
-static int rtw_ack_policy = NORMAL_ACK;
-
-static int rtw_acm_method;/*  0:By SW 1:By HW. */
-
-static int rtw_wmm_enable = 1;/*  default is set to enable the wmm. */
-static int rtw_uapsd_enable;
-
-static int rtw_ht_enable = 1;
-/* 0 :diable, bit(0): enable 2.4g, bit(1): enable 5g */
-static int rtw_cbw40_enable = 3;
-static int rtw_ampdu_enable = 1;/* for enable tx_ampdu */
-/*  0: disable, bit(0):enable 2.4g, bit(1):enable 5g, default is set to enable
- * 2.4GHZ for IOT issue with bufflao's AP at 5GHZ
- */
-static int rtw_rx_stbc = 1;
-static int rtw_ampdu_amsdu;/*  0: disabled, 1:enabled, 2:auto */
-
-/* Use 2 path Tx to transmit MCS0~7 and legacy mode */
-static int rtw_lowrate_two_xmit = 1;
-
-/* int rf_config = RF_1T2R;  1T2R */
-static int rtw_rf_config = RF_819X_MAX_TYPE;  /* auto */
-static int rtw_low_power;
-static int rtw_wifi_spec;
-static int rtw_channel_plan = RT_CHANNEL_DOMAIN_MAX;
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-static int rtw_btcoex_enable = 1;
-static int rtw_bt_iso = 2;/*  0:Low, 1:High, 2:From Efuse */
-/*  0:Idle, 1:None-SCO, 2:SCO, 3:From Counter, 4.Busy, 5.OtherBusy */
-static int rtw_bt_sco = 3;
-/*  0:Disable BT control A-MPDU, 1:Enable BT control A-MPDU. */
-static int rtw_bt_ampdu = 1;
-#endif
-
-/*  0:Reject AP's Add BA req, 1:Accept AP's Add BA req. */
-static int rtw_AcceptAddbaReq = true;
-
-static int rtw_antdiv_cfg = 2; /*  0:OFF , 1:ON, 2:decide by Efuse config */
-static int rtw_antdiv_type; /* 0:decide by efuse */
-
-static int rtw_enusbss;/* 0:disable, 1:enable */
-
-static int rtw_hwpdn_mode = 2;/* 0:disable, 1:enable, 2: by EFUSE config */
-
-static int rtw_hwpwrp_detect; /* HW power  ping detect 0:disable , 1:enable */
-
-static int rtw_hw_wps_pbc = 1;
-
-static int rtw_80211d;
-
-static int rtw_regulatory_id = 0xff;/*  Regulatory tab id, 0xff = follow efuse's setting */
-
-module_param(rtw_regulatory_id, int, 0644);
-
-static char *ifname = "wlan%d";
-module_param(ifname, charp, 0644);
-MODULE_PARM_DESC(ifname, "The default name to allocate for first interface");
-
-static char *if2name = "wlan%d";
-module_param(if2name, charp, 0644);
-MODULE_PARM_DESC(if2name, "The default name to allocate for second interface");
-
-module_param(rtw_channel_plan, int, 0644);
-module_param(rtw_chip_version, int, 0644);
-module_param(rtw_rfintfs, int, 0644);
-module_param(rtw_channel, int, 0644);
-module_param(rtw_wmm_enable, int, 0644);
-module_param(rtw_vrtl_carrier_sense, int, 0644);
-module_param(rtw_vcs_type, int, 0644);
-module_param(rtw_busy_thresh, int, 0644);
-module_param(rtw_ht_enable, int, 0644);
-module_param(rtw_cbw40_enable, int, 0644);
-module_param(rtw_ampdu_enable, int, 0644);
-module_param(rtw_rx_stbc, int, 0644);
-module_param(rtw_ampdu_amsdu, int, 0644);
-
-module_param(rtw_lowrate_two_xmit, int, 0644);
-
-module_param(rtw_rf_config, int, 0644);
-module_param(rtw_power_mgnt, int, 0644);
-module_param(rtw_smart_ps, int, 0644);
-module_param(rtw_low_power, int, 0644);
-module_param(rtw_wifi_spec, int, 0644);
-
-module_param(rtw_antdiv_cfg, int, 0644);
-
-module_param(rtw_enusbss, int, 0644);
-module_param(rtw_hwpdn_mode, int, 0644);
-module_param(rtw_hwpwrp_detect, int, 0644);
-
-module_param(rtw_hw_wps_pbc, int, 0644);
-
-static uint rtw_max_roaming_times = 2;
-module_param(rtw_max_roaming_times, uint, 0644);
-MODULE_PARM_DESC(rtw_max_roaming_times, "The max roaming times to try");
-
-module_param(rtw_80211d, int, 0644);
-MODULE_PARM_DESC(rtw_80211d, "Enable 802.11d mechanism");
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-module_param(rtw_btcoex_enable, int, 0644);
-MODULE_PARM_DESC(rtw_btcoex_enable, "Enable BT co-existence mechanism");
-#endif
-
-static uint rtw_notch_filter;
-module_param(rtw_notch_filter, uint, 0644);
-MODULE_PARM_DESC(rtw_notch_filter, "0:Disable, 1:Enable, 2:Enable only for P2P");
-module_param_named(debug, rtw_debug, int, 0444);
-MODULE_PARM_DESC(debug, "Set debug level (1-9) (default 1)");
-
-static int netdev_close(struct net_device *pnetdev);
-
-static void loadparam(struct rtw_adapter *padapter,  struct net_device *pnetdev)
-{
-       struct registry_priv  *registry_par = &padapter->registrypriv;
-
-       GlobalDebugLevel23A = rtw_debug;
-       registry_par->chip_version = (u8)rtw_chip_version;
-       registry_par->rfintfs = (u8)rtw_rfintfs;
-       memcpy(registry_par->ssid.ssid, "ANY", 3);
-       registry_par->ssid.ssid_len = 3;
-       registry_par->channel = (u8)rtw_channel;
-       registry_par->wireless_mode = (u8)rtw_wireless_mode;
-       registry_par->vrtl_carrier_sense = (u8)rtw_vrtl_carrier_sense;
-       registry_par->vcs_type = (u8)rtw_vcs_type;
-       registry_par->rts_thresh = (u16)rtw_rts_thresh;
-       registry_par->frag_thresh = (u16)rtw_frag_thresh;
-       registry_par->preamble = (u8)rtw_preamble;
-       registry_par->scan_mode = (u8)rtw_scan_mode;
-       registry_par->adhoc_tx_pwr = (u8)rtw_adhoc_tx_pwr;
-       registry_par->soft_ap =  (u8)rtw_soft_ap;
-       registry_par->smart_ps =  (u8)rtw_smart_ps;
-       registry_par->power_mgnt = (u8)rtw_power_mgnt;
-       registry_par->ips_mode = (u8)rtw_ips_mode;
-       registry_par->long_retry_lmt = (u8)rtw_long_retry_lmt;
-       registry_par->short_retry_lmt = (u8)rtw_short_retry_lmt;
-       registry_par->busy_thresh = (u16)rtw_busy_thresh;
-       registry_par->ack_policy = (u8)rtw_ack_policy;
-       registry_par->acm_method = (u8)rtw_acm_method;
-        /* UAPSD */
-       registry_par->wmm_enable = (u8)rtw_wmm_enable;
-       registry_par->uapsd_enable = (u8)rtw_uapsd_enable;
-       registry_par->ht_enable = (u8)rtw_ht_enable;
-       registry_par->cbw40_enable = (u8)rtw_cbw40_enable;
-       registry_par->ampdu_enable = (u8)rtw_ampdu_enable;
-       registry_par->rx_stbc = (u8)rtw_rx_stbc;
-       registry_par->ampdu_amsdu = (u8)rtw_ampdu_amsdu;
-       registry_par->lowrate_two_xmit = (u8)rtw_lowrate_two_xmit;
-       registry_par->rf_config = (u8)rtw_rf_config;
-       registry_par->low_power = (u8)rtw_low_power;
-       registry_par->wifi_spec = (u8)rtw_wifi_spec;
-       registry_par->channel_plan = (u8)rtw_channel_plan;
-#ifdef CONFIG_8723AU_BT_COEXIST
-       registry_par->btcoex = (u8)rtw_btcoex_enable;
-       registry_par->bt_iso = (u8)rtw_bt_iso;
-       registry_par->bt_sco = (u8)rtw_bt_sco;
-       registry_par->bt_ampdu = (u8)rtw_bt_ampdu;
-#endif
-       registry_par->bAcceptAddbaReq = (u8)rtw_AcceptAddbaReq;
-       registry_par->antdiv_cfg = (u8)rtw_antdiv_cfg;
-       registry_par->antdiv_type = (u8)rtw_antdiv_type;
-
-       /* 0:disable, 1:enable, 2:by EFUSE config */
-       registry_par->hwpdn_mode = (u8)rtw_hwpdn_mode;
-       /* 0:disable, 1:enable */
-       registry_par->hwpwrp_detect = (u8)rtw_hwpwrp_detect;
-       registry_par->hw_wps_pbc = (u8)rtw_hw_wps_pbc;
-       registry_par->max_roaming_times = (u8)rtw_max_roaming_times;
-       registry_par->enable80211d = (u8)rtw_80211d;
-       snprintf(registry_par->ifname, 16, "%s", ifname);
-       snprintf(registry_par->if2name, 16, "%s", if2name);
-       registry_par->notch_filter = (u8)rtw_notch_filter;
-       registry_par->regulatory_tid = (u8)rtw_regulatory_id;
-}
-
-static int rtw_net_set_mac_address(struct net_device *pnetdev, void *p)
-{
-       struct rtw_adapter *padapter = netdev_priv(pnetdev);
-       struct sockaddr *addr = p;
-
-       if (!padapter->bup)
-               ether_addr_copy(padapter->eeprompriv.mac_addr, addr->sa_data);
-       return 0;
-}
-
-static struct net_device_stats *rtw_net_get_stats(struct net_device *pnetdev)
-{
-       struct rtw_adapter *padapter = netdev_priv(pnetdev);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct recv_priv *precvpriv = &padapter->recvpriv;
-
-       padapter->stats.tx_packets = pxmitpriv->tx_pkts;
-       padapter->stats.rx_packets = precvpriv->rx_pkts;
-       padapter->stats.tx_dropped = pxmitpriv->tx_drop;
-       padapter->stats.rx_dropped = precvpriv->rx_drop;
-       padapter->stats.tx_bytes = pxmitpriv->tx_bytes;
-       padapter->stats.rx_bytes = precvpriv->rx_bytes;
-
-       return &padapter->stats;
-}
-
-/*
- * AC to queue mapping
- *
- * AC_VO -> queue 0
- * AC_VI -> queue 1
- * AC_BE -> queue 2
- * AC_BK -> queue 3
- */
-static const u16 rtw_1d_to_queue[8] = { 2, 3, 3, 2, 1, 1, 0, 0 };
-
-/* Given a data frame determine the 802.1p/1d tag to use. */
-static u32 rtw_classify8021d(struct sk_buff *skb)
-{
-       u32 dscp;
-
-       /* skb->priority values from 256->263 are magic values to
-        * directly indicate a specific 802.1d priority.  This is used
-        * to allow 802.1d priority to be passed directly in from VLAN
-        * tags, etc.
-        */
-       if (skb->priority >= 256 && skb->priority <= 263)
-               return skb->priority - 256;
-       switch (skb->protocol) {
-       case htons(ETH_P_IP):
-               dscp = ip_hdr(skb)->tos & 0xfc;
-               break;
-       default:
-               return 0;
-       }
-       return dscp >> 5;
-}
-
-static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb,
-                           void *accel_priv,
-                           select_queue_fallback_t fallback)
-{
-       struct rtw_adapter *padapter = netdev_priv(dev);
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       skb->priority = rtw_classify8021d(skb);
-
-       if (pmlmepriv->acm_mask != 0)
-               skb->priority = qos_acm23a(pmlmepriv->acm_mask, skb->priority);
-       return rtw_1d_to_queue[skb->priority];
-}
-
-u16 rtw_recv_select_queue23a(struct sk_buff *skb)
-{
-       struct iphdr *piphdr;
-       struct ethhdr *eth = (struct ethhdr *)skb->data;
-       unsigned int dscp;
-       u16 eth_type = get_unaligned_be16(&eth->h_proto);
-       u32 priority;
-       u8 *pdata = skb->data;
-
-       switch (eth_type) {
-       case ETH_P_IP:
-               piphdr = (struct iphdr *)(pdata + ETH_HLEN);
-               dscp = piphdr->tos & 0xfc;
-               priority = dscp >> 5;
-               break;
-       default:
-               priority = 0;
-       }
-       return rtw_1d_to_queue[priority];
-}
-
-static const struct net_device_ops rtw_netdev_ops = {
-       .ndo_open = netdev_open23a,
-       .ndo_stop = netdev_close,
-       .ndo_start_xmit = rtw_xmit23a_entry23a,
-       .ndo_select_queue = rtw_select_queue,
-       .ndo_set_mac_address = rtw_net_set_mac_address,
-       .ndo_get_stats = rtw_net_get_stats,
-};
-
-int rtw_init_netdev23a_name23a(struct net_device *pnetdev, const char *ifname)
-{
-       if (dev_alloc_name(pnetdev, ifname) < 0) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "dev_alloc_name, fail!\n");
-       }
-       netif_carrier_off(pnetdev);
-       return 0;
-}
-
-static const struct device_type wlan_type = {
-       .name = "wlan",
-};
-
-struct net_device *rtw_init_netdev23a(struct rtw_adapter *old_padapter)
-{
-       struct rtw_adapter *padapter;
-       struct net_device *pnetdev;
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "+init_net_dev\n");
-
-       pnetdev = alloc_etherdev_mq(sizeof(struct rtw_adapter), 4);
-       if (!pnetdev)
-               return NULL;
-
-       pnetdev->dev.type = &wlan_type;
-       padapter = netdev_priv(pnetdev);
-       padapter->pnetdev = pnetdev;
-
-       DBG_8723A("register rtw_netdev_ops to netdev_ops\n");
-       pnetdev->netdev_ops = &rtw_netdev_ops;
-
-       pnetdev->watchdog_timeo = HZ*3; /* 3 second timeout */
-
-       loadparam(padapter, pnetdev);
-       return pnetdev;
-}
-
-static int rtw_init_default_value(struct rtw_adapter *padapter)
-{
-       struct registry_priv *pregistrypriv = &padapter->registrypriv;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-
-       /* xmit_priv */
-       pxmitpriv->vcs = pregistrypriv->vcs_type;
-       /* pxmitpriv->rts_thresh = pregistrypriv->rts_thresh; */
-       pxmitpriv->frag_len = pregistrypriv->frag_thresh;
-
-       /* mlme_priv */
-       pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-       pmlmepriv->scan_mode = SCAN_ACTIVE;
-
-       /* ht_priv */
-       pmlmepriv->htpriv.ampdu_enable = false;/* set to disabled */
-
-       /* security_priv */
-       psecuritypriv->binstallGrpkey = 0;
-
-        /* open system */
-       psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
-       psecuritypriv->dot11PrivacyAlgrthm = 0;
-
-       psecuritypriv->dot11PrivacyKeyIndex = 0;
-
-       psecuritypriv->dot118021XGrpPrivacy = 0;
-       psecuritypriv->dot118021XGrpKeyid = 1;
-
-       psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
-       psecuritypriv->ndisencryptstatus = Ndis802_11WEPDisabled;
-
-       /* registry_priv */
-       rtw_init_registrypriv_dev_network23a(padapter);
-       rtw_update_registrypriv_dev_network23a(padapter);
-
-       /* hal_priv */
-       rtl8723a_init_default_value(padapter);
-
-       /* misc. */
-       padapter->bReadPortCancel = false;
-       padapter->bWritePortCancel = false;
-       return _SUCCESS;
-}
-
-int rtw_reset_drv_sw23a(struct rtw_adapter *padapter)
-{
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct pwrctrl_priv *pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       /* hal_priv */
-       rtl8723a_init_default_value(padapter);
-       padapter->bReadPortCancel = false;
-       padapter->bWritePortCancel = false;
-       pmlmepriv->scan_interval = SCAN_INTERVAL;/*  30*2 sec = 60sec */
-
-       padapter->xmitpriv.tx_pkts = 0;
-       padapter->recvpriv.rx_pkts = 0;
-
-       pmlmepriv->LinkDetectInfo.bBusyTraffic = false;
-
-       _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING);
-
-       rtw_sreset_reset_value(padapter);
-       pwrctrlpriv->pwr_state_check_cnts = 0;
-
-       /* mlmeextpriv */
-       padapter->mlmeextpriv.sitesurvey_res.state = SCAN_DISABLE;
-
-       rtw_set_signal_stat_timer(&padapter->recvpriv);
-       return _SUCCESS;
-}
-
-int rtw_init_drv_sw23a(struct rtw_adapter *padapter)
-{
-       int ret8 = _SUCCESS;
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "+rtw_init_drv_sw23a\n");
-
-       if (rtw_init_cmd_priv23a(&padapter->cmdpriv) == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "Can't init cmd_priv\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       padapter->cmdpriv.padapter = padapter;
-
-       if (rtw_init_evt_priv23a(&padapter->evtpriv) == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "Can't init evt_priv\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       if (rtw_init_mlme_priv23a(padapter) == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "Can't init mlme_priv\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-
-       if (init_mlme_ext_priv23a(padapter) == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "Can't init mlme_ext_priv\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       if (_rtw_init_xmit_priv23a(&padapter->xmitpriv, padapter) == _FAIL) {
-               DBG_8723A("Can't _rtw_init_xmit_priv23a\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       if (_rtw_init_recv_priv23a(&padapter->recvpriv, padapter) == _FAIL) {
-               DBG_8723A("Can't _rtw_init_recv_priv23a\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       if (_rtw_init_sta_priv23a(&padapter->stapriv) == _FAIL) {
-               DBG_8723A("Can't _rtw_init_sta_priv23a\n");
-               ret8 = _FAIL;
-               goto exit;
-       }
-
-       padapter->stapriv.padapter = padapter;
-       padapter->setband = GHZ24_50;
-       rtw_init_bcmc_stainfo23a(padapter);
-
-       rtw_init_pwrctrl_priv23a(padapter);
-
-       ret8 = rtw_init_default_value(padapter);
-
-       rtl8723a_init_dm_priv(padapter);
-
-       rtw_sreset_init(padapter);
-
-exit:
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "-rtw_init_drv_sw23a\n");
-       return ret8;
-}
-
-void rtw_cancel_all_timer23a(struct rtw_adapter *padapter)
-{
-       RT_TRACE(_module_os_intfs_c_, _drv_info_,
-                "+rtw_cancel_all_timer23a\n");
-
-       del_timer_sync(&padapter->mlmepriv.assoc_timer);
-       RT_TRACE(_module_os_intfs_c_, _drv_info_,
-                "%s:cancel association timer complete!\n", __func__);
-
-       del_timer_sync(&padapter->mlmepriv.scan_to_timer);
-       RT_TRACE(_module_os_intfs_c_, _drv_info_,
-                "%s:cancel scan_to_timer!\n", __func__);
-
-       del_timer_sync(&padapter->mlmepriv.dynamic_chk_timer);
-       RT_TRACE(_module_os_intfs_c_, _drv_info_,
-                "%s:cancel dynamic_chk_timer!\n", __func__);
-
-       del_timer_sync(&padapter->pwrctrlpriv.pwr_state_check_timer);
-
-       del_timer_sync(&padapter->mlmepriv.set_scan_deny_timer);
-       rtw_clear_scan_deny(padapter);
-       RT_TRACE(_module_os_intfs_c_, _drv_info_,
-                "%s:cancel set_scan_deny_timer!\n", __func__);
-
-       del_timer_sync(&padapter->recvpriv.signal_stat_timer);
-}
-
-int rtw_free_drv_sw23a(struct rtw_adapter *padapter)
-{
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "==>rtw_free_drv_sw23a\n");
-
-       free_mlme_ext_priv23a(&padapter->mlmeextpriv);
-
-       rtw_free_evt_priv23a(&padapter->evtpriv);
-
-       rtw_free_mlme_priv23a(&padapter->mlmepriv);
-
-       _rtw_free_xmit_priv23a(&padapter->xmitpriv);
-
-       /* will free bcmc_stainfo here */
-       _rtw_free_sta_priv23a(&padapter->stapriv);
-
-       _rtw_free_recv_priv23a(&padapter->recvpriv);
-
-       rtw_free_pwrctrl_priv(padapter);
-
-       kfree(padapter->HalData);
-       padapter->HalData = NULL;
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "-rtw_free_drv_sw23a\n");
-       return _SUCCESS;
-}
-
-static int _rtw_drv_register_netdev(struct rtw_adapter *padapter, char *name)
-{
-       struct net_device *pnetdev = padapter->pnetdev;
-       int ret = _SUCCESS;
-
-       /* alloc netdev name */
-       rtw_init_netdev23a_name23a(pnetdev, name);
-
-       ether_addr_copy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr);
-
-       /* Tell the network stack we exist */
-       if (register_netdev(pnetdev)) {
-               DBG_8723A("%s(%s): Failed!\n", __func__, pnetdev->name);
-               ret = _FAIL;
-               goto error_register_netdev;
-       }
-       DBG_8723A("%s, MAC Address (if%d) = %pM\n",
-                 __func__, padapter->iface_id + 1, pnetdev->dev_addr);
-       return ret;
-
-error_register_netdev:
-
-       if (padapter->iface_id > IFACE_ID0) {
-               rtw_free_drv_sw23a(padapter);
-
-               free_netdev(pnetdev);
-       }
-       return ret;
-}
-
-int rtw_drv_register_netdev(struct rtw_adapter *if1)
-{
-       struct dvobj_priv *dvobj = if1->dvobj;
-       int i, status = _SUCCESS;
-
-       if (dvobj->iface_nums >= IFACE_ID_MAX) {
-               status = _FAIL; /* -EINVAL */
-               goto exit;
-       }
-
-       for (i = 0; i < dvobj->iface_nums; i++) {
-               struct rtw_adapter *padapter = dvobj->padapters[i];
-
-               if (padapter) {
-                       char *name;
-
-                       if (padapter->iface_id == IFACE_ID0)
-                               name = if1->registrypriv.ifname;
-                       else if (padapter->iface_id == IFACE_ID1)
-                               name = if1->registrypriv.if2name;
-                       else
-                               name = "wlan%d";
-                       status = _rtw_drv_register_netdev(padapter, name);
-                       if (status != _SUCCESS)
-                               break;
-               }
-       }
-
-exit:
-       return status;
-}
-
-int netdev_open23a(struct net_device *pnetdev)
-{
-       struct rtw_adapter *padapter = netdev_priv(pnetdev);
-       struct pwrctrl_priv *pwrctrlpriv;
-       int ret = 0;
-       int status;
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "+871x_drv - dev_open\n");
-       DBG_8723A("+871x_drv - drv_open, bup =%d\n", padapter->bup);
-
-       mutex_lock(&adapter_to_dvobj(padapter)->hw_init_mutex);
-
-       pwrctrlpriv = &padapter->pwrctrlpriv;
-
-       if (!padapter->bup) {
-               padapter->bDriverStopped = false;
-               padapter->bSurpriseRemoved = false;
-               padapter->bCardDisableWOHSM = false;
-
-               status = rtl8723au_hal_init(padapter);
-               if (status == _FAIL) {
-                       RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                                "rtl871x_hal_init(): Can't init h/w!\n");
-                       goto netdev_open23a_error;
-               }
-
-               DBG_8723A("MAC Address = %pM\n", pnetdev->dev_addr);
-
-               if (init_hw_mlme_ext23a(padapter) == _FAIL) {
-                       DBG_8723A("can't init mlme_ext_priv\n");
-                       goto netdev_open23a_error;
-               }
-
-               rtl8723au_inirp_init(padapter);
-
-               rtw_cfg80211_init_wiphy(padapter);
-
-               padapter->bup = true;
-       }
-       padapter->net_closed = false;
-
-       mod_timer(&padapter->mlmepriv.dynamic_chk_timer,
-                 jiffies + msecs_to_jiffies(2000));
-
-       padapter->pwrctrlpriv.bips_processing = false;
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-
-       /* netif_carrier_on(pnetdev);call this func when
-          rtw23a_joinbss_event_cb return success */
-       if (!rtw_netif_queue_stopped(pnetdev))
-               netif_tx_start_all_queues(pnetdev);
-       else
-               netif_tx_wake_all_queues(pnetdev);
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "-871x_drv - dev_open\n");
-       DBG_8723A("-871x_drv - drv_open, bup =%d\n", padapter->bup);
-exit:
-       mutex_unlock(&adapter_to_dvobj(padapter)->hw_init_mutex);
-       return ret;
-
-netdev_open23a_error:
-       padapter->bup = false;
-
-       netif_carrier_off(pnetdev);
-       netif_tx_stop_all_queues(pnetdev);
-
-       RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                "-871x_drv - dev_open, fail!\n");
-       DBG_8723A("-871x_drv - drv_open fail, bup =%d\n", padapter->bup);
-
-       ret = -1;
-       goto exit;
-}
-
-static int ips_netdrv_open(struct rtw_adapter *padapter)
-{
-       int status = _SUCCESS;
-
-       padapter->net_closed = false;
-       DBG_8723A("===> %s.........\n", __func__);
-
-       padapter->bDriverStopped = false;
-       padapter->bSurpriseRemoved = false;
-       padapter->bCardDisableWOHSM = false;
-
-       status = rtl8723au_hal_init(padapter);
-       if (status == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "ips_netdrv_open(): Can't init h/w!\n");
-               goto netdev_open23a_error;
-       }
-
-       rtl8723au_inirp_init(padapter);
-
-       rtw_set_pwr_state_check_timer(&padapter->pwrctrlpriv);
-       mod_timer(&padapter->mlmepriv.dynamic_chk_timer,
-                 jiffies + msecs_to_jiffies(5000));
-
-       return _SUCCESS;
-
-netdev_open23a_error:
-       /* padapter->bup = false; */
-       DBG_8723A("-ips_netdrv_open - drv_open failure, bup =%d\n",
-                 padapter->bup);
-
-       return _FAIL;
-}
-
-int rtw_ips_pwr_up23a(struct rtw_adapter *padapter)
-{
-       int result;
-       unsigned long start_time = jiffies;
-
-       DBG_8723A("===>  rtw_ips_pwr_up23a..............\n");
-       rtw_reset_drv_sw23a(padapter);
-
-       result = ips_netdrv_open(padapter);
-
-       DBG_8723A("<===  rtw_ips_pwr_up23a.............. in %dms\n",
-                 jiffies_to_msecs(jiffies - start_time));
-       return result;
-}
-
-void rtw_ips_pwr_down23a(struct rtw_adapter *padapter)
-{
-       unsigned long start_time = jiffies;
-
-       DBG_8723A("===> rtw_ips_pwr_down23a...................\n");
-
-       padapter->bCardDisableWOHSM = true;
-       padapter->net_closed = true;
-
-       rtw_ips_dev_unload23a(padapter);
-       padapter->bCardDisableWOHSM = false;
-       DBG_8723A("<=== rtw_ips_pwr_down23a..................... in %dms\n",
-                 jiffies_to_msecs(jiffies - start_time));
-}
-
-void rtw_ips_dev_unload23a(struct rtw_adapter *padapter)
-{
-       rtl8723a_fifo_cleanup(padapter);
-
-       rtl8723a_usb_intf_stop(padapter);
-
-       /* s5. */
-       if (!padapter->bSurpriseRemoved)
-               rtl8723au_hal_deinit(padapter);
-}
-
-int pm_netdev_open23a(struct net_device *pnetdev, u8 bnormal)
-{
-       int status;
-
-       if (bnormal)
-               status = netdev_open23a(pnetdev);
-       else
-               status = (_SUCCESS == ips_netdrv_open(netdev_priv(pnetdev))) ?
-                        (0) : (-1);
-
-       return status;
-}
-
-static int netdev_close(struct net_device *pnetdev)
-{
-       struct rtw_adapter *padapter = netdev_priv(pnetdev);
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "+871x_drv - drv_close\n");
-
-       padapter->net_closed = true;
-
-       if (padapter->pwrctrlpriv.rf_pwrstate == rf_on) {
-               DBG_8723A("(2)871x_drv - drv_close, bup =%d, "
-                         "hw_init_completed =%d\n", padapter->bup,
-                         padapter->hw_init_completed);
-
-               /* s1. */
-               if (pnetdev) {
-                       if (!rtw_netif_queue_stopped(pnetdev))
-                               netif_tx_stop_all_queues(pnetdev);
-               }
-
-               /* s2. */
-               LeaveAllPowerSaveMode23a(padapter);
-               rtw_disassoc_cmd23a(padapter, 500, false);
-               /* s2-2.  indicate disconnect to os */
-               rtw_indicate_disconnect23a(padapter);
-               /* s2-3. */
-               rtw_free_assoc_resources23a(padapter, 1);
-               /* s2-4. */
-               rtw_free_network_queue23a(padapter);
-       }
-
-       rtw_scan_abort23a(padapter);
-
-       RT_TRACE(_module_os_intfs_c_, _drv_info_, "-871x_drv - drv_close\n");
-       DBG_8723A("-871x_drv - drv_close, bup =%d\n", padapter->bup);
-
-       return 0;
-}
-
-void rtw_ndev_destructor(struct net_device *ndev)
-{
-       DBG_8723A("%s(%s)\n", __func__, ndev->name);
-       kfree(ndev->ieee80211_ptr);
-       free_netdev(ndev);
-}
-
-void _rtw_init_queue23a(struct rtw_queue *pqueue)
-{
-       INIT_LIST_HEAD(&pqueue->queue);
-       spin_lock_init(&pqueue->lock);
-}
diff --git a/drivers/staging/rtl8723au/os_dep/recv_linux.c b/drivers/staging/rtl8723au/os_dep/recv_linux.c
deleted file mode 100644 (file)
index 084b506..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RECV_OSDEP_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <wifi.h>
-#include <recv_osdep.h>
-
-#include <osdep_intf.h>
-
-#include <usb_ops.h>
-
-void rtw_handle_tkip_mic_err23a(struct rtw_adapter *padapter, u8 bgroup)
-{
-       enum nl80211_key_type key_type = 0;
-       union iwreq_data wrqu;
-       struct iw_michaelmicfailure ev;
-       struct mlme_priv *pmlmepriv  = &padapter->mlmepriv;
-       struct security_priv *psecuritypriv = &padapter->securitypriv;
-       unsigned long cur_time;
-
-       if (psecuritypriv->last_mic_err_time == 0) {
-               psecuritypriv->last_mic_err_time = jiffies;
-       } else {
-               cur_time = jiffies;
-
-               if (cur_time - psecuritypriv->last_mic_err_time < 60*HZ) {
-                       psecuritypriv->btkip_countermeasure = true;
-                       psecuritypriv->last_mic_err_time = 0;
-                       psecuritypriv->btkip_countermeasure_time = cur_time;
-               } else {
-                       psecuritypriv->last_mic_err_time = jiffies;
-               }
-       }
-
-       if (bgroup)
-               key_type |= NL80211_KEYTYPE_GROUP;
-       else
-               key_type |= NL80211_KEYTYPE_PAIRWISE;
-
-       cfg80211_michael_mic_failure(padapter->pnetdev,
-                                    (u8 *)&pmlmepriv->assoc_bssid[0],
-                                    key_type, -1, NULL, GFP_ATOMIC);
-
-       memset(&ev, 0x00, sizeof(ev));
-       if (bgroup)
-               ev.flags |= IW_MICFAILURE_GROUP;
-       else
-               ev.flags |= IW_MICFAILURE_PAIRWISE;
-
-       ev.src_addr.sa_family = ARPHRD_ETHER;
-       ether_addr_copy(ev.src_addr.sa_data, &pmlmepriv->assoc_bssid[0]);
-
-       memset(&wrqu, 0x00, sizeof(wrqu));
-       wrqu.data.length = sizeof(ev);
-}
-
-int rtw_recv_indicatepkt23a(struct rtw_adapter *padapter,
-                        struct recv_frame *precv_frame)
-{
-       struct recv_priv *precvpriv;
-       struct sk_buff *skb;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
-       precvpriv = &padapter->recvpriv;
-
-       skb = precv_frame->pkt;
-       if (!skb) {
-               RT_TRACE(_module_recv_osdep_c_, _drv_err_,
-                        "rtw_recv_indicatepkt23a():skb == NULL!!!!\n");
-               goto _recv_indicatepkt_drop;
-       }
-
-       RT_TRACE(_module_recv_osdep_c_, _drv_info_,
-                "rtw_recv_indicatepkt23a():skb != NULL !!!\n");
-       RT_TRACE(_module_recv_osdep_c_, _drv_info_,
-                "rtw_recv_indicatepkt23a():precv_frame->hdr.rx_data =%p\n",
-                precv_frame->pkt->data);
-       RT_TRACE(_module_recv_osdep_c_, _drv_info_,
-                "skb->head =%p skb->data =%p skb->tail =%p skb->end =%p skb->len =%d\n",
-                skb->head, skb->data,
-                skb_tail_pointer(skb), skb_end_pointer(skb), skb->len);
-
-       if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true) {
-               struct sk_buff *pskb2 = NULL;
-               struct sta_info *psta = NULL;
-               struct sta_priv *pstapriv = &padapter->stapriv;
-               struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
-               int bmcast = is_multicast_ether_addr(pattrib->dst);
-
-               /* DBG_8723A("bmcast =%d\n", bmcast); */
-
-               if (!ether_addr_equal(pattrib->dst,
-                                     myid(&padapter->eeprompriv))) {
-                       /* DBG_8723A("not ap psta =%p, addr =%pM\n", psta, pattrib->dst); */
-                       if (bmcast) {
-                               psta = rtw_get_bcmc_stainfo23a(padapter);
-                               pskb2 = skb_clone(skb, GFP_ATOMIC);
-                       } else {
-                               psta = rtw_get_stainfo23a(pstapriv, pattrib->dst);
-                       }
-
-                       if (psta) {
-                               struct net_device *pnetdev = padapter->pnetdev;
-
-                               /* DBG_8723A("directly forwarding to the rtw_xmit23a_entry23a\n"); */
-
-                               /* skb->ip_summed = CHECKSUM_NONE; */
-                               skb->dev = pnetdev;
-                               skb_set_queue_mapping(skb, rtw_recv_select_queue23a(skb));
-
-                               rtw_xmit23a_entry23a(skb, pnetdev);
-
-                               if (bmcast)
-                                       skb = pskb2;
-                               else
-                                       goto _recv_indicatepkt_end;
-                       }
-               } else { /*  to APself */
-                       /* DBG_8723A("to APSelf\n"); */
-               }
-       }
-
-       skb->ip_summed = CHECKSUM_NONE;
-       skb->dev = padapter->pnetdev;
-       skb->protocol = eth_type_trans(skb, padapter->pnetdev);
-
-       netif_rx(skb);
-
-_recv_indicatepkt_end:
-
-       precv_frame->pkt = NULL; /*  pointers to NULL before rtw_free_recvframe23a() */
-
-       rtw_free_recvframe23a(precv_frame);
-
-       RT_TRACE(_module_recv_osdep_c_, _drv_info_,
-                "rtw_recv_indicatepkt23a :after netif_rx!!!!\n");
-       return _SUCCESS;
-
-_recv_indicatepkt_drop:
-
-        rtw_free_recvframe23a(precv_frame);
-        return _FAIL;
-}
-
-void rtw_init_recv_timer23a(struct recv_reorder_ctrl *preorder_ctrl)
-{
-       setup_timer(&preorder_ctrl->reordering_ctrl_timer,
-                   rtw_reordering_ctrl_timeout_handler23a,
-                   (unsigned long)preorder_ctrl);
-}
diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c
deleted file mode 100644 (file)
index cf83eff..0000000
+++ /dev/null
@@ -1,627 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _HCI_INTF_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <recv_osdep.h>
-#include <xmit_osdep.h>
-#include <hal_intf.h>
-#include <rtw_version.h>
-#include <osdep_intf.h>
-#include <usb_ops.h>
-#include <rtl8723a_hal.h>
-
-static int rtw_suspend(struct usb_interface *intf, pm_message_t message);
-static int rtw_resume(struct usb_interface *intf);
-static int rtw_drv_init(struct usb_interface *pusb_intf,
-                       const struct usb_device_id *pdid);
-static void rtw_disconnect(struct usb_interface *pusb_intf);
-
-#define USB_VENDER_ID_REALTEK          0x0BDA
-
-#define RTL8723A_USB_IDS \
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x8724,   \
-        0xff, 0xff, 0xff)}, /* 8723AU 1*1 */ \
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x1724,   \
-        0xff, 0xff, 0xff)}, /* 8723AU 1*1 */ \
-       {USB_DEVICE_AND_INTERFACE_INFO(USB_VENDER_ID_REALTEK, 0x0724,   \
-        0xff, 0xff, 0xff)}, /* 8723AU 1*1 */
-
-static struct usb_device_id rtl8723a_usb_id_tbl[] = {
-       RTL8723A_USB_IDS
-       {}      /* Terminating entry */
-};
-
-MODULE_DEVICE_TABLE(usb, rtl8723a_usb_id_tbl);
-
-static struct usb_driver rtl8723a_usb_drv = {
-       .name = (char *)"rtl8723au",
-       .probe = rtw_drv_init,
-       .disconnect = rtw_disconnect,
-       .id_table = rtl8723a_usb_id_tbl,
-       .suspend = rtw_suspend,
-       .resume = rtw_resume,
-       .reset_resume  = rtw_resume,
-};
-
-static struct usb_driver *usb_drv = &rtl8723a_usb_drv;
-
-static int rtw_init_intf_priv(struct dvobj_priv *dvobj)
-{
-       mutex_init(&dvobj->usb_vendor_req_mutex);
-
-       return _SUCCESS;
-}
-
-static int rtw_deinit_intf_priv(struct dvobj_priv *dvobj)
-{
-       mutex_destroy(&dvobj->usb_vendor_req_mutex);
-
-       return _SUCCESS;
-}
-
-static struct dvobj_priv *usb_dvobj_init(struct usb_interface *usb_intf)
-{
-       struct dvobj_priv *pdvobjpriv;
-       struct usb_host_config   *phost_conf;
-       struct usb_config_descriptor *pconf_desc;
-       struct usb_host_interface *phost_iface;
-       struct usb_interface_descriptor *piface_desc;
-       struct usb_endpoint_descriptor *pendp_desc;
-       struct usb_device *pusbd;
-       int i, status = _FAIL;
-
-       pdvobjpriv = kzalloc(sizeof(*pdvobjpriv), GFP_KERNEL);
-       if (!pdvobjpriv)
-               goto exit;
-
-       mutex_init(&pdvobjpriv->hw_init_mutex);
-       mutex_init(&pdvobjpriv->h2c_fwcmd_mutex);
-       mutex_init(&pdvobjpriv->setch_mutex);
-       mutex_init(&pdvobjpriv->setbw_mutex);
-
-       pdvobjpriv->pusbintf = usb_intf;
-       pusbd = interface_to_usbdev(usb_intf);
-       pdvobjpriv->pusbdev = pusbd;
-       usb_set_intfdata(usb_intf, pdvobjpriv);
-
-       pdvobjpriv->RtNumInPipes = 0;
-       pdvobjpriv->RtNumOutPipes = 0;
-
-       phost_conf = pusbd->actconfig;
-       pconf_desc = &phost_conf->desc;
-
-       phost_iface = &usb_intf->altsetting[0];
-       piface_desc = &phost_iface->desc;
-
-       pdvobjpriv->NumInterfaces = pconf_desc->bNumInterfaces;
-       pdvobjpriv->InterfaceNumber = piface_desc->bInterfaceNumber;
-       pdvobjpriv->nr_endpoint = piface_desc->bNumEndpoints;
-
-       for (i = 0; i < pdvobjpriv->nr_endpoint; i++) {
-               pendp_desc = &phost_iface->endpoint[i].desc;
-
-               DBG_8723A("\nusb_endpoint_descriptor(%d):\n", i);
-               DBG_8723A("bLength =%x\n", pendp_desc->bLength);
-               DBG_8723A("bDescriptorType =%x\n", pendp_desc->bDescriptorType);
-               DBG_8723A("bEndpointAddress =%x\n",
-                         pendp_desc->bEndpointAddress);
-               DBG_8723A("wMaxPacketSize =%d\n",
-                         le16_to_cpu(pendp_desc->wMaxPacketSize));
-               DBG_8723A("bInterval =%x\n", pendp_desc->bInterval);
-
-               if (usb_endpoint_is_bulk_in(pendp_desc)) {
-                       DBG_8723A("usb_endpoint_is_bulk_in = %x\n",
-                                 usb_endpoint_num(pendp_desc));
-                       pdvobjpriv->RtInPipe[pdvobjpriv->RtNumInPipes] =
-                               usb_endpoint_num(pendp_desc);
-                       pdvobjpriv->RtNumInPipes++;
-               } else if (usb_endpoint_is_int_in(pendp_desc)) {
-                       DBG_8723A("usb_endpoint_is_int_in = %x, Interval = "
-                                 "%x\n", usb_endpoint_num(pendp_desc),
-                                 pendp_desc->bInterval);
-                       pdvobjpriv->RtInPipe[pdvobjpriv->RtNumInPipes] =
-                               usb_endpoint_num(pendp_desc);
-                       pdvobjpriv->RtNumInPipes++;
-               } else if (usb_endpoint_is_bulk_out(pendp_desc)) {
-                       DBG_8723A("usb_endpoint_is_bulk_out = %x\n",
-                                 usb_endpoint_num(pendp_desc));
-                       pdvobjpriv->RtOutPipe[pdvobjpriv->RtNumOutPipes] =
-                               usb_endpoint_num(pendp_desc);
-                       pdvobjpriv->RtNumOutPipes++;
-               }
-               pdvobjpriv->ep_num[i] = usb_endpoint_num(pendp_desc);
-       }
-       DBG_8723A("nr_endpoint =%d, in_num =%d, out_num =%d\n\n",
-                 pdvobjpriv->nr_endpoint, pdvobjpriv->RtNumInPipes,
-                 pdvobjpriv->RtNumOutPipes);
-
-       if (pusbd->speed == USB_SPEED_HIGH) {
-               pdvobjpriv->ishighspeed = true;
-               DBG_8723A("USB_SPEED_HIGH\n");
-       } else {
-               pdvobjpriv->ishighspeed = false;
-               DBG_8723A("NON USB_SPEED_HIGH\n");
-       }
-
-       if (rtw_init_intf_priv(pdvobjpriv) == _FAIL) {
-               RT_TRACE(_module_os_intfs_c_, _drv_err_,
-                        "Can't INIT rtw_init_intf_priv\n");
-               goto free_dvobj;
-       }
-       /* 3 misc */
-       rtw_reset_continual_urb_error(pdvobjpriv);
-       usb_get_dev(pusbd);
-       status = _SUCCESS;
-free_dvobj:
-       if (status != _SUCCESS && pdvobjpriv) {
-               usb_set_intfdata(usb_intf, NULL);
-               mutex_destroy(&pdvobjpriv->hw_init_mutex);
-               mutex_destroy(&pdvobjpriv->h2c_fwcmd_mutex);
-               mutex_destroy(&pdvobjpriv->setch_mutex);
-               mutex_destroy(&pdvobjpriv->setbw_mutex);
-               kfree(pdvobjpriv);
-               pdvobjpriv = NULL;
-       }
-exit:
-       return pdvobjpriv;
-}
-
-static void usb_dvobj_deinit(struct usb_interface *usb_intf)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(usb_intf);
-
-       usb_set_intfdata(usb_intf, NULL);
-       if (dvobj) {
-               /* Modify condition for 92DU DMDP 2010.11.18, by Thomas */
-               if ((dvobj->NumInterfaces != 2 && dvobj->NumInterfaces != 3) ||
-                   (dvobj->InterfaceNumber == 1)) {
-                       if (interface_to_usbdev(usb_intf)->state !=
-                           USB_STATE_NOTATTACHED) {
-                               /* If we didn't unplug usb dongle and
-                                * remove/insert module, driver fails on
-                                * sitesurvey for the first time when
-                                * device is up .
-                                * Reset usb port for sitesurvey fail issue.
-                                */
-                               DBG_8723A("usb attached..., try to reset usb device\n");
-                               usb_reset_device(interface_to_usbdev(usb_intf));
-                       }
-               }
-               rtw_deinit_intf_priv(dvobj);
-               mutex_destroy(&dvobj->hw_init_mutex);
-               mutex_destroy(&dvobj->h2c_fwcmd_mutex);
-               mutex_destroy(&dvobj->setch_mutex);
-               mutex_destroy(&dvobj->setbw_mutex);
-               kfree(dvobj);
-       }
-       usb_put_dev(interface_to_usbdev(usb_intf));
-}
-
-void rtl8723a_usb_intf_stop(struct rtw_adapter *padapter)
-{
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+usb_intf_stop\n");
-
-       /* disable_hw_interrupt */
-       if (!padapter->bSurpriseRemoved) {
-               /* device still exists, so driver can do i/o operation
-                * TODO:
-                */
-               RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-                        "SurpriseRemoved == false\n");
-       }
-
-       /* cancel in irp */
-       rtl8723au_inirp_deinit(padapter);
-
-       /* cancel out irp */
-       rtl8723au_write_port_cancel(padapter);
-
-       /* todo:cancel other irps */
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "-usb_intf_stop\n");
-}
-
-static void rtw_dev_unload(struct rtw_adapter *padapter)
-{
-       struct submit_ctx *pack_tx_ops = &padapter->xmitpriv.ack_tx_ops;
-
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+rtw_dev_unload\n");
-
-       if (padapter->bup) {
-               DBG_8723A("===> rtw_dev_unload\n");
-
-               padapter->bDriverStopped = true;
-               if (padapter->xmitpriv.ack_tx)
-                       rtw23a_sctx_done_err(&pack_tx_ops,
-                                            RTW_SCTX_DONE_DRV_STOP);
-
-               /* s3. */
-               rtl8723a_usb_intf_stop(padapter);
-
-               /* s4. */
-               flush_workqueue(padapter->cmdpriv.wq);
-
-               /* s5. */
-               if (!padapter->bSurpriseRemoved) {
-                       rtl8723au_hal_deinit(padapter);
-                       padapter->bSurpriseRemoved = true;
-               }
-               padapter->bup = false;
-       } else {
-               RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-                        "r871x_dev_unload():padapter->bup == false\n");
-       }
-       DBG_8723A("<=== rtw_dev_unload\n");
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "-rtw_dev_unload\n");
-}
-
-static int rtw_suspend(struct usb_interface *pusb_intf, pm_message_t message)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
-       struct rtw_adapter *padapter = dvobj->if1;
-       struct net_device *pnetdev = padapter->pnetdev;
-       struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-       int ret = 0;
-       unsigned long start_time = jiffies;
-
-       DBG_8723A("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
-
-       if ((!padapter->bup) || (padapter->bDriverStopped) ||
-           (padapter->bSurpriseRemoved)) {
-               DBG_8723A("padapter->bup =%d bDriverStopped =%d bSurpriseRemoved = %d\n",
-                         padapter->bup, padapter->bDriverStopped,
-                         padapter->bSurpriseRemoved);
-               goto exit;
-       }
-       pwrpriv->bInSuspend = true;
-       rtw_cancel_all_timer23a(padapter);
-       LeaveAllPowerSaveMode23a(padapter);
-
-       down(&pwrpriv->lock);
-       /* padapter->net_closed = true; */
-       /* s1. */
-       if (pnetdev) {
-               netif_carrier_off(pnetdev);
-               netif_tx_stop_all_queues(pnetdev);
-       }
-
-       /* s2. */
-       rtw_disassoc_cmd23a(padapter, 0, false);
-
-       if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) &&
-           check_fwstate(pmlmepriv, _FW_LINKED)) {
-               DBG_8723A("%s:%d %s(%pM), length:%d assoc_ssid.length:%d\n",
-                         __func__, __LINE__,
-                         pmlmepriv->cur_network.network.Ssid.ssid,
-                         pmlmepriv->cur_network.network.MacAddress,
-                         pmlmepriv->cur_network.network.Ssid.ssid_len,
-                         pmlmepriv->assoc_ssid.ssid_len);
-
-               rtw_set_roaming(padapter, 1);
-       }
-       /* s2-2.  indicate disconnect to os */
-       rtw_indicate_disconnect23a(padapter);
-       /* s2-3. */
-       rtw_free_assoc_resources23a(padapter, 1);
-       /* s2-4. */
-       rtw_free_network_queue23a(padapter);
-
-       rtw_dev_unload(padapter);
-       up(&pwrpriv->lock);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
-               rtw_cfg80211_indicate_scan_done(
-                       wdev_to_priv(padapter->rtw_wdev), true);
-
-       if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
-               rtw_indicate_disconnect23a(padapter);
-
-exit:
-       DBG_8723A("<===  %s return %d.............. in %dms\n", __func__,
-                 ret, jiffies_to_msecs(jiffies - start_time));
-
-       return ret;
-}
-
-static int rtw_resume(struct usb_interface *pusb_intf)
-{
-       struct dvobj_priv *dvobj = usb_get_intfdata(pusb_intf);
-       struct rtw_adapter *padapter = dvobj->if1;
-       struct net_device *pnetdev;
-       struct pwrctrl_priv *pwrpriv = NULL;
-       int ret = -1;
-       unsigned long start_time = jiffies;
-
-       DBG_8723A("==> %s (%s:%d)\n", __func__, current->comm, current->pid);
-
-       if (!padapter)
-               goto exit;
-       pnetdev = padapter->pnetdev;
-       pwrpriv = &padapter->pwrctrlpriv;
-
-       down(&pwrpriv->lock);
-       rtw_reset_drv_sw23a(padapter);
-       pwrpriv->bkeepfwalive = false;
-
-       DBG_8723A("bkeepfwalive(%x)\n", pwrpriv->bkeepfwalive);
-       if (pm_netdev_open23a(pnetdev, true) != 0) {
-               up(&pwrpriv->lock);
-               goto exit;
-       }
-
-       netif_device_attach(pnetdev);
-       netif_carrier_on(pnetdev);
-
-       up(&pwrpriv->lock);
-
-       if (padapter->pid[1] != 0) {
-               DBG_8723A("pid[1]:%d\n", padapter->pid[1]);
-               kill_pid(find_vpid(padapter->pid[1]), SIGUSR2, 1);
-       }
-
-       rtw23a_roaming(padapter, NULL);
-
-       ret = 0;
-exit:
-       if (pwrpriv)
-               pwrpriv->bInSuspend = false;
-       DBG_8723A("<===  %s return %d.............. in %dms\n", __func__,
-                 ret, jiffies_to_msecs(jiffies - start_time));
-
-       return ret;
-}
-
-/*
- * drv_init() - a device potentially for us
- *
- * notes: drv_init() is called when the bus driver has located a card
- * for us to support.
- *        We accept the new device by returning 0.
- */
-static struct rtw_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
-                                           struct usb_interface *pusb_intf,
-                                           const struct usb_device_id *pdid)
-{
-       struct rtw_adapter *padapter = NULL;
-       struct net_device *pnetdev = NULL;
-       int status = _FAIL;
-
-       pnetdev = rtw_init_netdev23a(padapter);
-       if (!pnetdev)
-               goto free_adapter;
-       padapter = netdev_priv(pnetdev);
-
-       padapter->dvobj = dvobj;
-       padapter->bDriverStopped = true;
-       dvobj->if1 = padapter;
-       dvobj->padapters[dvobj->iface_nums++] = padapter;
-       padapter->iface_id = IFACE_ID0;
-
-       rtl8723au_set_hw_type(padapter);
-
-       SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
-
-       if (rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)))
-               goto free_adapter;
-
-       /* step 2. allocate HalData */
-       padapter->HalData = kzalloc(sizeof(struct hal_data_8723a), GFP_KERNEL);
-       if (!padapter->HalData)
-               goto free_wdev;
-
-       /* step read_chip_version */
-       rtl8723a_read_chip_version(padapter);
-
-       /* step usb endpoint mapping */
-       if (!rtl8723au_chip_configure(padapter))
-               goto free_hal_data;
-
-       /* step read efuse/eeprom data and get mac_addr */
-       rtl8723a_read_adapter_info(padapter);
-
-       /* step 5. */
-       if (rtw_init_drv_sw23a(padapter) == _FAIL) {
-               RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-                        "Initialize driver software resource Failed!\n");
-               goto free_hal_data;
-       }
-
-#ifdef CONFIG_PM
-       if (padapter->pwrctrlpriv.bSupportRemoteWakeup) {
-               dvobj->pusbdev->do_remote_wakeup = 1;
-               pusb_intf->needs_remote_wakeup = 1;
-               device_init_wakeup(&pusb_intf->dev, 1);
-               DBG_8723A("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~~~~\n");
-               DBG_8723A("\n  padapter->pwrctrlpriv.bSupportRemoteWakeup~~~[%d]~~~\n",
-                         device_may_wakeup(&pusb_intf->dev));
-       }
-#endif
-       /* 2012-07-11 Move here to prevent the 8723AS-VAU BT
-        * auto suspend influence
-        */
-       if (usb_autopm_get_interface(pusb_intf) < 0)
-               DBG_8723A("can't get autopm:\n");
-#ifdef CONFIG_8723AU_BT_COEXIST
-       padapter->pwrctrlpriv.autopm_cnt = 1;
-#endif
-
-       /* If the eeprom mac address is corrupted, assign a random address */
-       if (is_broadcast_ether_addr(padapter->eeprompriv.mac_addr) ||
-           is_zero_ether_addr(padapter->eeprompriv.mac_addr))
-               eth_random_addr(padapter->eeprompriv.mac_addr);
-
-       DBG_8723A("bDriverStopped:%d, bSurpriseRemoved:%d, bup:%d, hw_init_completed:%d\n",
-                 padapter->bDriverStopped, padapter->bSurpriseRemoved,
-                 padapter->bup, padapter->hw_init_completed
-       );
-       status = _SUCCESS;
-
-free_hal_data:
-       if (status != _SUCCESS)
-               kfree(padapter->HalData);
-free_wdev:
-       if (status != _SUCCESS) {
-               rtw_wdev_unregister(padapter->rtw_wdev);
-               rtw_wdev_free(padapter->rtw_wdev);
-       }
-free_adapter:
-       if (status != _SUCCESS) {
-               if (pnetdev)
-                       free_netdev(pnetdev);
-               padapter = NULL;
-       }
-       return padapter;
-}
-
-static void rtw_usb_if1_deinit(struct rtw_adapter *if1)
-{
-       struct net_device *pnetdev = if1->pnetdev;
-       struct mlme_priv *pmlmepriv = &if1->mlmepriv;
-
-       if (check_fwstate(pmlmepriv, _FW_LINKED))
-               rtw_disassoc_cmd23a(if1, 0, false);
-
-#ifdef CONFIG_8723AU_AP_MODE
-       free_mlme_ap_info23a(if1);
-#endif
-
-       if (pnetdev)
-               unregister_netdev(pnetdev); /* will call netdev_close() */
-
-       rtw_cancel_all_timer23a(if1);
-
-       rtw_dev_unload(if1);
-
-       DBG_8723A("+r871xu_dev_remove, hw_init_completed =%d\n",
-                 if1->hw_init_completed);
-
-       if (if1->rtw_wdev) {
-               rtw_wdev_unregister(if1->rtw_wdev);
-               rtw_wdev_free(if1->rtw_wdev);
-       }
-
-#ifdef CONFIG_8723AU_BT_COEXIST
-       if (1 == if1->pwrctrlpriv.autopm_cnt) {
-               usb_autopm_put_interface(adapter_to_dvobj(if1)->pusbintf);
-               if1->pwrctrlpriv.autopm_cnt--;
-       }
-#endif
-
-       rtw_free_drv_sw23a(if1);
-
-       if (pnetdev)
-               free_netdev(pnetdev);
-}
-
-static int rtw_drv_init(struct usb_interface *pusb_intf,
-                       const struct usb_device_id *pdid)
-{
-       struct rtw_adapter *if1 = NULL;
-       struct dvobj_priv *dvobj;
-       struct usb_device *udev;
-       int status = _FAIL;
-
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+rtw_drv_init\n");
-
-       /* Initialize dvobj_priv */
-       dvobj = usb_dvobj_init(pusb_intf);
-       if (!dvobj) {
-               RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-                        "initialize device object priv Failed!\n");
-               goto exit;
-       }
-
-       udev = dvobj->pusbdev;
-       dev_warn(&udev->dev, "WARNING: The rtl8723au driver is deprecated!");
-       dev_warn(&udev->dev, "Please use the rtl8xxxu driver for this device!");
-
-       if1 = rtw_usb_if1_init(dvobj, pusb_intf, pdid);
-       if (!if1) {
-               DBG_8723A("rtw_init_primary_adapter Failed!\n");
-               goto free_dvobj;
-       }
-
-       /* dev_alloc_name && register_netdev */
-       status = rtw_drv_register_netdev(if1);
-       if (status != _SUCCESS)
-               goto free_if1;
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-                "-871x_drv - drv_init, success!\n");
-
-       status = _SUCCESS;
-
-free_if1:
-       if (status != _SUCCESS && if1)
-               rtw_usb_if1_deinit(if1);
-free_dvobj:
-       if (status != _SUCCESS)
-               usb_dvobj_deinit(pusb_intf);
-exit:
-       return status == _SUCCESS ? 0 : -ENODEV;
-}
-
-/* dev_remove() - our device is being removed */
-static void rtw_disconnect(struct usb_interface *pusb_intf)
-{
-       struct dvobj_priv *dvobj;
-       struct rtw_adapter *padapter;
-       struct net_device *pnetdev;
-       struct mlme_priv *pmlmepriv;
-
-       dvobj = usb_get_intfdata(pusb_intf);
-       if (!dvobj)
-               return;
-
-       padapter = dvobj->if1;
-       pnetdev = padapter->pnetdev;
-       pmlmepriv = &padapter->mlmepriv;
-
-       usb_set_intfdata(pusb_intf, NULL);
-
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+dev_remove()\n");
-
-       rtw_pm_set_ips23a(padapter, IPS_NONE);
-       rtw_pm_set_lps23a(padapter, PS_MODE_ACTIVE);
-
-       LeaveAllPowerSaveMode23a(padapter);
-
-       rtw_usb_if1_deinit(padapter);
-
-       usb_dvobj_deinit(pusb_intf);
-
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "-dev_remove()\n");
-       DBG_8723A("-r871xu_dev_remove, done\n");
-}
-
-static int __init rtw_drv_entry(void)
-{
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+rtw_drv_entry\n");
-       return usb_register(usb_drv);
-}
-
-static void __exit rtw_drv_halt(void)
-{
-       RT_TRACE(_module_hci_intfs_c_, _drv_err_, "+rtw_drv_halt\n");
-       DBG_8723A("+rtw_drv_halt\n");
-
-       usb_deregister(usb_drv);
-
-       DBG_8723A("-rtw_drv_halt\n");
-}
-
-module_init(rtw_drv_entry);
-module_exit(rtw_drv_halt);
diff --git a/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c b/drivers/staging/rtl8723au/os_dep/usb_ops_linux.c
deleted file mode 100644 (file)
index cf4a506..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _USB_OPS_LINUX_C_
-
-#include <drv_types.h>
-#include <usb_ops_linux.h>
-#include <rtw_sreset.h>
-
-void rtl8723au_read_port_cancel(struct rtw_adapter *padapter)
-{
-       struct recv_buf *precvbuf;
-       int i;
-
-       precvbuf = (struct recv_buf *)padapter->recvpriv.precv_buf;
-
-       DBG_8723A("%s\n", __func__);
-
-       padapter->bReadPortCancel = true;
-
-       for (i = 0; i < NR_RECVBUFF ; i++) {
-               if (precvbuf->purb)
-                       usb_kill_urb(precvbuf->purb);
-               precvbuf++;
-       }
-       usb_kill_urb(padapter->recvpriv.int_in_urb);
-}
-
-static void usb_write_port23a_complete(struct urb *purb)
-{
-       struct xmit_buf *pxmitbuf = (struct xmit_buf *)purb->context;
-       struct rtw_adapter *padapter = pxmitbuf->padapter;
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct hal_data_8723a *phaldata;
-       unsigned long irqL;
-
-       switch (pxmitbuf->flags) {
-       case HIGH_QUEUE_INX:
-#ifdef CONFIG_8723AU_AP_MODE
-               rtw_chk_hi_queue_cmd23a(padapter);
-#endif
-               break;
-       default:
-               break;
-       }
-
-       if (padapter->bSurpriseRemoved || padapter->bDriverStopped ||
-           padapter->bWritePortCancel) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_write_port23a_complete:bDriverStopped(%d) OR bSurpriseRemoved(%d)\n",
-                        padapter->bDriverStopped, padapter->bSurpriseRemoved);
-               DBG_8723A("%s(): TX Warning! bDriverStopped(%d) OR "
-                         "bSurpriseRemoved(%d) bWritePortCancel(%d) "
-                         "pxmitbuf->ext_tag(%x)\n", __func__,
-                         padapter->bDriverStopped, padapter->bSurpriseRemoved,
-                         padapter->bReadPortCancel, pxmitbuf->ext_tag);
-
-               goto check_completion;
-       }
-
-       if (purb->status) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_write_port23a_complete : purb->status(%d) != 0\n",
-                        purb->status);
-               DBG_8723A("###=> urb_write_port_complete status(%d)\n",
-                         purb->status);
-               if (purb->status == -EPIPE || purb->status == -EPROTO) {
-               } else if (purb->status == -EINPROGRESS) {
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_write_port23a_complete: EINPROGESS\n");
-                       goto check_completion;
-               } else if (purb->status == -ENOENT) {
-                       DBG_8723A("%s: -ENOENT\n", __func__);
-                       goto check_completion;
-               } else if (purb->status == -ECONNRESET) {
-                       DBG_8723A("%s: -ECONNRESET\n", __func__);
-                       goto check_completion;
-               } else if (purb->status == -ESHUTDOWN) {
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_write_port23a_complete: ESHUTDOWN\n");
-                       padapter->bDriverStopped = true;
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_write_port23a_complete:bDriverStopped = true\n");
-                       goto check_completion;
-               } else {
-                       padapter->bSurpriseRemoved = true;
-                       DBG_8723A("bSurpriseRemoved = true\n");
-                       RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                                "usb_write_port23a_complete:bSurpriseRemoved = true\n");
-                       goto check_completion;
-               }
-       }
-       phaldata = GET_HAL_DATA(padapter);
-       phaldata->srestpriv.last_tx_complete_time = jiffies;
-
-check_completion:
-       spin_lock_irqsave(&pxmitpriv->lock_sctx, irqL);
-       rtw23a_sctx_done_err(&pxmitbuf->sctx,
-                            purb->status ? RTW_SCTX_DONE_WRITE_PORT_ERR :
-                            RTW_SCTX_DONE_SUCCESS);
-       spin_unlock_irqrestore(&pxmitpriv->lock_sctx, irqL);
-
-       rtw_free_xmitbuf23a(pxmitpriv, pxmitbuf);
-
-       tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-}
-
-int rtl8723au_write_port(struct rtw_adapter *padapter, u32 addr, u32 cnt,
-                        struct xmit_buf *pxmitbuf)
-{
-       struct urb *purb = NULL;
-       struct dvobj_priv *pdvobj = adapter_to_dvobj(padapter);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       struct xmit_frame *pxmitframe;
-       struct usb_device *pusbd = pdvobj->pusbdev;
-       unsigned long irqL;
-       unsigned int pipe, ep_num;
-       int status;
-       int ret = _FAIL;
-
-       RT_TRACE(_module_hci_ops_os_c_, _drv_err_, "+usb_write_port23a\n");
-
-       if (padapter->bDriverStopped || padapter->bSurpriseRemoved) {
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "%s:(padapter->bDriverStopped || padapter->bSurpriseRemoved)!!!\n",
-                        __func__);
-               rtw23a_sctx_done_err(&pxmitbuf->sctx, RTW_SCTX_DONE_TX_DENY);
-               goto exit;
-       }
-
-       pxmitframe = (struct xmit_frame *)pxmitbuf->priv_data;
-       spin_lock_irqsave(&pxmitpriv->lock, irqL);
-
-       switch (addr) {
-       case VO_QUEUE_INX:
-               pxmitbuf->flags = VO_QUEUE_INX;
-               break;
-       case VI_QUEUE_INX:
-               pxmitbuf->flags = VI_QUEUE_INX;
-               break;
-       case BE_QUEUE_INX:
-               pxmitbuf->flags = BE_QUEUE_INX;
-               break;
-       case BK_QUEUE_INX:
-               pxmitbuf->flags = BK_QUEUE_INX;
-               break;
-       case HIGH_QUEUE_INX:
-               pxmitbuf->flags = HIGH_QUEUE_INX;
-               break;
-       default:
-               pxmitbuf->flags = MGT_QUEUE_INX;
-               break;
-       }
-
-       spin_unlock_irqrestore(&pxmitpriv->lock, irqL);
-
-       purb = pxmitbuf->pxmit_urb[0];
-
-       /* translate DMA FIFO addr to pipehandle */
-       ep_num = pdvobj->Queue2Pipe[addr];
-       pipe = usb_sndbulkpipe(pusbd, ep_num);
-
-       usb_fill_bulk_urb(purb, pusbd, pipe,
-                         pxmitframe->buf_addr, /*  pxmitbuf->pbuf */
-                         cnt, usb_write_port23a_complete,
-                         pxmitbuf);/* context is pxmitbuf */
-
-       status = usb_submit_urb(purb, GFP_ATOMIC);
-       if (!status) {
-               struct hal_data_8723a *phaldata = GET_HAL_DATA(padapter);
-               phaldata->srestpriv.last_tx_time = jiffies;
-       } else {
-               rtw23a_sctx_done_err(&pxmitbuf->sctx,
-                                    RTW_SCTX_DONE_WRITE_PORT_ERR);
-               DBG_8723A("usb_write_port23a, status =%d\n", status);
-               RT_TRACE(_module_hci_ops_os_c_, _drv_err_,
-                        "usb_write_port23a(): usb_submit_urb, status =%x\n",
-                        status);
-
-               switch (status) {
-               case -ENODEV:
-                       padapter->bDriverStopped = true;
-                       break;
-               default:
-                       break;
-               }
-               goto exit;
-       }
-       ret = _SUCCESS;
-       RT_TRACE(_module_hci_ops_os_c_, _drv_err_, "-usb_write_port23a\n");
-
-exit:
-       if (ret != _SUCCESS)
-               rtw_free_xmitbuf23a(pxmitpriv, pxmitbuf);
-
-       return ret;
-}
-
-void rtl8723au_write_port_cancel(struct rtw_adapter *padapter)
-{
-       struct xmit_buf *pxmitbuf;
-       int j;
-
-       DBG_8723A("%s\n", __func__);
-
-       padapter->bWritePortCancel = true;
-
-       list_for_each_entry(pxmitbuf, &padapter->xmitpriv.xmitbuf_list,
-                           list2) {
-               for (j = 0; j < 8; j++) {
-                       if (pxmitbuf->pxmit_urb[j])
-                               usb_kill_urb(pxmitbuf->pxmit_urb[j]);
-               }
-       }
-       list_for_each_entry(pxmitbuf, &padapter->xmitpriv.xmitextbuf_list,
-                           list2) {
-               for (j = 0; j < 8; j++) {
-                       if (pxmitbuf->pxmit_urb[j])
-                               usb_kill_urb(pxmitbuf->pxmit_urb[j]);
-               }
-       }
-}
diff --git a/drivers/staging/rtl8723au/os_dep/xmit_linux.c b/drivers/staging/rtl8723au/os_dep/xmit_linux.c
deleted file mode 100644 (file)
index 64be72a..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _XMIT_OSDEP_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-
-#include <linux/if_ether.h>
-#include <linux/ip.h>
-#include <wifi.h>
-#include <mlme_osdep.h>
-#include <xmit_osdep.h>
-#include <osdep_intf.h>
-
-int rtw_os_xmit_resource_alloc23a(struct rtw_adapter *padapter,
-                              struct xmit_buf *pxmitbuf, u32 alloc_sz)
-{
-       int i;
-
-       pxmitbuf->pallocated_buf = kzalloc(alloc_sz, GFP_KERNEL);
-       if (pxmitbuf->pallocated_buf == NULL)
-               return _FAIL;
-
-       pxmitbuf->pbuf = PTR_ALIGN(pxmitbuf->pallocated_buf, XMITBUF_ALIGN_SZ);
-
-       for (i = 0; i < 8; i++) {
-               pxmitbuf->pxmit_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
-               if (!pxmitbuf->pxmit_urb[i]) {
-                       DBG_8723A("pxmitbuf->pxmit_urb[i]==NULL");
-                       return _FAIL;
-               }
-       }
-       return _SUCCESS;
-}
-
-void rtw_os_xmit_resource_free23a(struct rtw_adapter *padapter,
-                              struct xmit_buf *pxmitbuf)
-{
-       int i;
-
-       for (i = 0; i < 8; i++)
-               usb_free_urb(pxmitbuf->pxmit_urb[i]);
-       kfree(pxmitbuf->pallocated_buf);
-}
-
-#define WMM_XMIT_THRESHOLD     (NR_XMITFRAME*2/5)
-
-void rtw_os_pkt_complete23a(struct rtw_adapter *padapter, struct sk_buff *pkt)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       u16     queue;
-
-       queue = skb_get_queue_mapping(pkt);
-       if (padapter->registrypriv.wifi_spec) {
-               if (__netif_subqueue_stopped(padapter->pnetdev, queue) &&
-                   (pxmitpriv->hwxmits[queue].accnt < WMM_XMIT_THRESHOLD))
-                       netif_wake_subqueue(padapter->pnetdev, queue);
-       } else {
-               if (__netif_subqueue_stopped(padapter->pnetdev, queue))
-                       netif_wake_subqueue(padapter->pnetdev, queue);
-       }
-       dev_kfree_skb_any(pkt);
-}
-
-void rtw_os_xmit_complete23a(struct rtw_adapter *padapter,
-                         struct xmit_frame *pxframe)
-{
-       if (pxframe->pkt)
-               rtw_os_pkt_complete23a(padapter, pxframe->pkt);
-
-       pxframe->pkt = NULL;
-}
-
-void rtw_os_xmit_schedule23a(struct rtw_adapter *padapter)
-{
-       struct xmit_priv *pxmitpriv;
-
-       if (!padapter)
-               return;
-       pxmitpriv = &padapter->xmitpriv;
-
-       spin_lock_bh(&pxmitpriv->lock);
-
-       if (rtw_txframes_pending23a(padapter))
-               tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);
-       spin_unlock_bh(&pxmitpriv->lock);
-}
-
-static void rtw_check_xmit_resource(struct rtw_adapter *padapter,
-                                   struct sk_buff *pkt)
-{
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       u16     queue;
-
-       queue = skb_get_queue_mapping(pkt);
-       if (padapter->registrypriv.wifi_spec) {
-               /* No free space for Tx, tx_worker is too slow */
-               if (pxmitpriv->hwxmits[queue].accnt > WMM_XMIT_THRESHOLD)
-                       netif_stop_subqueue(padapter->pnetdev, queue);
-       } else {
-               if (pxmitpriv->free_xmitframe_cnt <= 4) {
-                       if (!netif_tx_queue_stopped(netdev_get_tx_queue(padapter->pnetdev, queue)))
-                               netif_stop_subqueue(padapter->pnetdev, queue);
-               }
-       }
-}
-
-int rtw_xmit23a_entry23a(struct sk_buff *skb, struct net_device *pnetdev)
-{
-       struct rtw_adapter *padapter = netdev_priv(pnetdev);
-       struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
-       int res = 0;
-
-       RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_, "+xmit_enry\n");
-
-       if (!rtw_if_up23a(padapter)) {
-               RT_TRACE(_module_xmit_osdep_c_, _drv_err_,
-                        "rtw_xmit23a_entry23a: rtw_if_up23a fail\n");
-               goto drop_packet;
-       }
-
-       rtw_check_xmit_resource(padapter, skb);
-
-       res = rtw_xmit23a(padapter, skb);
-       if (res < 0)
-               goto drop_packet;
-
-       pxmitpriv->tx_pkts++;
-       RT_TRACE(_module_xmit_osdep_c_, _drv_info_,
-                "rtw_xmit23a_entry23a: tx_pkts=%d\n",
-                (u32)pxmitpriv->tx_pkts);
-       goto exit;
-
-drop_packet:
-       pxmitpriv->tx_drop++;
-       dev_kfree_skb_any(skb);
-       RT_TRACE(_module_xmit_osdep_c_, _drv_notice_,
-                "rtw_xmit23a_entry23a: drop, tx_drop=%d\n",
-                (u32)pxmitpriv->tx_drop);
-exit:
-       return 0;
-}
index 0f0cd4a03cd47d684ed741050861875c774cfffe..f927ba66f7eddd36987d6799555137785922b594 100644 (file)
@@ -1417,7 +1417,6 @@ static int ms_read_status_reg(struct rtsx_chip *chip)
        return STATUS_SUCCESS;
 }
 
-
 static int ms_read_extra_data(struct rtsx_chip *chip,
                u16 block_addr, u8 page_num, u8 *buf, int buf_len)
 {
@@ -1582,7 +1581,6 @@ static int ms_write_extra_data(struct rtsx_chip *chip,
        return STATUS_SUCCESS;
 }
 
-
 static int ms_read_page(struct rtsx_chip *chip, u16 block_addr, u8 page_num)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -1667,7 +1665,6 @@ static int ms_read_page(struct rtsx_chip *chip, u16 block_addr, u8 page_num)
        return STATUS_SUCCESS;
 }
 
-
 static int ms_set_bad_block(struct rtsx_chip *chip, u16 phy_blk)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -1738,7 +1735,6 @@ static int ms_set_bad_block(struct rtsx_chip *chip, u16 phy_blk)
        return STATUS_SUCCESS;
 }
 
-
 static int ms_erase_block(struct rtsx_chip *chip, u16 phy_blk)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -1808,7 +1804,6 @@ ERASE_RTY:
        return STATUS_SUCCESS;
 }
 
-
 static void ms_set_page_status(u16 log_blk, u8 type, u8 *extra, int extra_len)
 {
        if (!extra || (extra_len < MS_EXTRA_SIZE))
@@ -2152,7 +2147,6 @@ static int ms_copy_page(struct rtsx_chip *chip, u16 old_blk, u16 new_blk,
        return STATUS_SUCCESS;
 }
 
-
 static int reset_ms(struct rtsx_chip *chip)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -2809,7 +2803,6 @@ BUILD_FAIL:
        return STATUS_FAIL;
 }
 
-
 int reset_ms_card(struct rtsx_chip *chip)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -2896,7 +2889,6 @@ static int mspro_set_rw_cmd(struct rtsx_chip *chip,
        return STATUS_SUCCESS;
 }
 
-
 void mspro_stop_seq_mode(struct rtsx_chip *chip)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -3312,7 +3304,6 @@ int mspro_format(struct scsi_cmnd *srb, struct rtsx_chip *chip,
        return STATUS_FAIL;
 }
 
-
 static int ms_read_multiple_pages(struct rtsx_chip *chip, u16 phy_blk,
                                u16 log_blk, u8 start_page, u8 end_page,
                                u8 *buf, unsigned int *index,
@@ -3719,7 +3710,6 @@ static int ms_write_multiple_pages(struct rtsx_chip *chip, u16 old_blk,
        return STATUS_SUCCESS;
 }
 
-
 static int ms_finish_write(struct rtsx_chip *chip, u16 old_blk, u16 new_blk,
                u16 log_blk, u8 page_off)
 {
@@ -4082,7 +4072,6 @@ int ms_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip,
        return retval;
 }
 
-
 void ms_free_l2p_tbl(struct rtsx_chip *chip)
 {
        struct ms_info *ms_card = &chip->ms_card;
@@ -4313,7 +4302,7 @@ int mg_get_local_EKB(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        if (retval != STATUS_SUCCESS) {
                set_sense_type(chip, lun, SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN);
                rtsx_trace(chip);
-               goto GetEKBFinish;
+               goto free_buffer;
        }
 
        retval = ms_transfer_data(chip, MS_TM_AUTO_READ, PRO_READ_LONG_DATA,
@@ -4322,19 +4311,20 @@ int mg_get_local_EKB(struct scsi_cmnd *srb, struct rtsx_chip *chip)
                set_sense_type(chip, lun, SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN);
                rtsx_clear_ms_error(chip);
                rtsx_trace(chip);
-               goto GetEKBFinish;
+               goto free_buffer;
        }
        if (check_ms_err(chip)) {
                set_sense_type(chip, lun, SENSE_TYPE_MG_KEY_FAIL_NOT_AUTHEN);
                rtsx_clear_ms_error(chip);
                rtsx_trace(chip);
-               return STATUS_FAIL;
+               retval = STATUS_FAIL;
+               goto free_buffer;
        }
 
        bufflen = min_t(int, 1052, scsi_bufflen(srb));
        rtsx_stor_set_xfer_buf(buf, bufflen, srb);
 
-GetEKBFinish:
+free_buffer:
        kfree(buf);
        return retval;
 }
@@ -4566,7 +4556,7 @@ int mg_get_ICV(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        if (retval != STATUS_SUCCESS) {
                set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
                rtsx_trace(chip);
-               goto GetICVFinish;
+               goto free_buffer;
        }
 
        retval = ms_transfer_data(chip, MS_TM_AUTO_READ, PRO_READ_LONG_DATA,
@@ -4575,19 +4565,20 @@ int mg_get_ICV(struct scsi_cmnd *srb, struct rtsx_chip *chip)
                set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
                rtsx_clear_ms_error(chip);
                rtsx_trace(chip);
-               goto GetICVFinish;
+               goto free_buffer;
        }
        if (check_ms_err(chip)) {
                set_sense_type(chip, lun, SENSE_TYPE_MEDIA_UNRECOVER_READ_ERR);
                rtsx_clear_ms_error(chip);
                rtsx_trace(chip);
-               return STATUS_FAIL;
+               retval = STATUS_FAIL;
+               goto free_buffer;
        }
 
        bufflen = min_t(int, 1028, scsi_bufflen(srb));
        rtsx_stor_set_xfer_buf(buf, bufflen, srb);
 
-GetICVFinish:
+free_buffer:
        kfree(buf);
        return retval;
 }
index d919170f2720ee485d6a6a9bf80a8f2b322e5950..d7686399df97d8fd2abcdb704f6ab887b2dfad1c 100644 (file)
 #define Pro_CatagoryReg                0x06
 #define Pro_ClassReg           0x07
 
-
 #define Pro_SystemParm         0x10
 #define Pro_DataCount1         0x11
 #define Pro_DataCount0         0x12
index 25d095a5ade7055bd61a8eca3e911ef7dc733df6..d75fa8d0c3215d439482f0c7a7be57006205ee22 100644 (file)
@@ -81,14 +81,16 @@ static int slave_alloc(struct scsi_device *sdev)
 
 static int slave_configure(struct scsi_device *sdev)
 {
-       /* Scatter-gather buffers (all but the last) must have a length
+       /*
+        * Scatter-gather buffers (all but the last) must have a length
         * divisible by the bulk maxpacket size.  Otherwise a data packet
         * would end up being short, causing a premature end to the data
         * transfer.  Since high-speed bulk pipes have a maxpacket size
         * of 512, we'll use that as the scsi device queue's DMA alignment
         * mask.  Guaranteeing proper alignment of the first buffer will
         * have the desired effect because, except at the beginning and
-        * the end, scatter-gather buffers follow page boundaries. */
+        * the end, scatter-gather buffers follow page boundaries.
+        */
        blk_queue_dma_alignment(sdev->request_queue, (512 - 1));
 
        /* Set the SCSI level to at least 2.  We'll leave it at 3 if that's
@@ -111,7 +113,6 @@ static int slave_configure(struct scsi_device *sdev)
        return 0;
 }
 
-
 /***********************************************************************
  * /proc/scsi/ functions
  ***********************************************************************/
@@ -186,8 +187,10 @@ static int command_abort(struct scsi_cmnd *srb)
        return SUCCESS;
 }
 
-/* This invokes the transport reset mechanism to reset the state of the
- * device */
+/*
+ * This invokes the transport reset mechanism to reset the state of the
+ * device
+ */
 static int device_reset(struct scsi_cmnd *srb)
 {
        int result = 0;
@@ -209,7 +212,6 @@ static int bus_reset(struct scsi_cmnd *srb)
        return result < 0 ? FAILED : SUCCESS;
 }
 
-
 /*
  * this defines our host template, with which we'll allocate hosts
  */
@@ -259,7 +261,6 @@ static struct scsi_host_template rtsx_host_template = {
        .module =                       THIS_MODULE
 };
 
-
 static int rtsx_acquire_irq(struct rtsx_dev *dev)
 {
        struct rtsx_chip *chip = dev->chip;
@@ -282,7 +283,6 @@ static int rtsx_acquire_irq(struct rtsx_dev *dev)
        return 0;
 }
 
-
 int rtsx_read_pci_cfg_byte(u8 bus, u8 dev, u8 func, u8 offset, u8 *val)
 {
        struct pci_dev *pdev;
@@ -515,7 +515,6 @@ SkipForAbort:
        complete_and_exit(&dev->control_exit, 0);
 }
 
-
 static int rtsx_polling_thread(void *__dev)
 {
        struct rtsx_dev *dev = __dev;
@@ -625,7 +624,6 @@ Exit:
        return IRQ_HANDLED;
 }
 
-
 /* Release all our dynamic resources */
 static void rtsx_release_resources(struct rtsx_dev *dev)
 {
@@ -660,15 +658,19 @@ static void rtsx_release_resources(struct rtsx_dev *dev)
        kfree(dev->chip);
 }
 
-/* First stage of disconnect processing: stop all commands and remove
- * the host */
+/*
+ * First stage of disconnect processing: stop all commands and remove
+ * the host
+ */
 static void quiesce_and_remove_host(struct rtsx_dev *dev)
 {
        struct Scsi_Host *host = rtsx_to_host(dev);
        struct rtsx_chip *chip = dev->chip;
 
-       /* Prevent new transfers, stop the current command, and
-        * interrupt a SCSI-scan or device-reset delay */
+       /*
+        * Prevent new transfers, stop the current command, and
+        * interrupt a SCSI-scan or device-reset delay
+        */
        mutex_lock(&dev->dev_mutex);
        scsi_lock(host);
        rtsx_set_stat(chip, RTSX_STAT_DISCONNECT);
@@ -680,9 +682,11 @@ static void quiesce_and_remove_host(struct rtsx_dev *dev)
        /* Wait some time to let other threads exist */
        wait_timeout(100);
 
-       /* queuecommand won't accept any new commands and the control
+       /*
+        * queuecommand won't accept any new commands and the control
         * thread won't execute a previously-queued command.  If there
-        * is such a command pending, complete it with an error. */
+        * is such a command pending, complete it with an error.
+        */
        mutex_lock(&dev->dev_mutex);
        if (chip->srb) {
                chip->srb->result = DID_NO_CONNECT << 16;
@@ -702,8 +706,10 @@ static void release_everything(struct rtsx_dev *dev)
 {
        rtsx_release_resources(dev);
 
-       /* Drop our reference to the host; the SCSI core will free it
-        * when the refcount becomes 0. */
+       /*
+        * Drop our reference to the host; the SCSI core will free it
+        * when the refcount becomes 0.
+        */
        scsi_host_put(rtsx_to_host(dev));
 }
 
@@ -942,8 +948,10 @@ static int rtsx_probe(struct pci_dev *pci,
 
        rtsx_init_chip(dev->chip);
 
-       /* set the supported max_lun and max_id for the scsi host
-        * NOTE: the minimal value of max_id is 1 */
+       /*
+        * set the supported max_lun and max_id for the scsi host
+        * NOTE: the minimal value of max_id is 1
+        */
        host->max_id = 1;
        host->max_lun = dev->chip->max_lun;
 
@@ -994,7 +1002,6 @@ errout:
        return err;
 }
 
-
 static void rtsx_remove(struct pci_dev *pci)
 {
        struct rtsx_dev *dev = pci_get_drvdata(pci);
index 1396263e13e6e7215b58a4aa7dca16609acf5862..2f902d5e1a1d81e71c5d3625d4aeec6235ca97e1 100644 (file)
@@ -77,7 +77,6 @@ do {                                                  \
 } while (0)
 #define wait_timeout(msecs)    wait_timeout_x(TASK_INTERRUPTIBLE, (msecs))
 
-
 #define STATE_TRANS_NONE       0
 #define STATE_TRANS_CMD                1
 #define STATE_TRANS_BUF                2
@@ -138,6 +137,7 @@ static inline struct Scsi_Host *rtsx_to_host(struct rtsx_dev *dev)
 {
        return container_of((void *) dev, struct Scsi_Host, hostdata);
 }
+
 static inline struct rtsx_dev *host_to_rtsx(struct Scsi_Host *host)
 {
        return (struct rtsx_dev *) host->hostdata;
index 231833a3045ed5429c248b0a54c1874a90db385a..9a5cd630d41ec06c5f656788e63423a2d4e3ae70 100644 (file)
@@ -1065,7 +1065,6 @@ int card_share_mode(struct rtsx_chip *chip, int card)
        return STATUS_SUCCESS;
 }
 
-
 int select_card(struct rtsx_chip *chip, int card)
 {
        int retval;
index c08164f3247e78757ae52d2098bca46183a07644..79d1df6ff8736c487db4bbbbb55524c366a79d2a 100644 (file)
 #define TRANSPORT_NO_SENSE     2  /* Command failed, no auto-sense    */
 #define TRANSPORT_ERROR                3   /* Transport bad (i.e. device dead) */
 
-
 /*-----------------------------------
     Start-Stop-Unit
 -----------------------------------*/
 #define ASCQ_LOAD_EJCT_ERR      0x00
 #define        ASCQ_WRITE_PROTECT      0x00
 
-
 struct sense_data_t {
        unsigned char   err_code;       /* error code */
        /* bit7 : valid */
@@ -305,7 +303,6 @@ struct sense_data_t {
 #define MS_OC_INT_EN           (1 << 23)
 #define SD_OC_INT_EN           (1 << 22)
 
-
 #define READ_REG_CMD           0
 #define WRITE_REG_CMD          1
 #define CHECK_REG_CMD          2
@@ -313,7 +310,6 @@ struct sense_data_t {
 #define HOST_TO_DEVICE         0
 #define DEVICE_TO_HOST         1
 
-
 #define RTSX_RESV_BUF_LEN      4096
 #define HOST_CMDS_BUF_LEN      1024
 #define HOST_SG_TBL_BUF_LEN    (RTSX_RESV_BUF_LEN - HOST_CMDS_BUF_LEN)
@@ -332,7 +328,6 @@ struct sense_data_t {
 #define XD_FREE_TABLE_CNT      1200
 #define MS_FREE_TABLE_CNT      512
 
-
 /* Bit Operation */
 #define SET_BIT(data, idx)     ((data) |= 1 << (idx))
 #define CLR_BIT(data, idx)     ((data) &= ~(1 << (idx)))
@@ -618,7 +613,6 @@ struct spi_info {
        int spi_clock;
 };
 
-
 #ifdef _MSG_TRACE
 struct trace_msg_t {
        u16 line;
index d2031044ea349270f7e1ca7630aaa9994e103cdb..def53d9ef1a7cd474207a253a70b1cba61d2e934 100644 (file)
@@ -558,7 +558,6 @@ static int inquiry(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        return TRANSPORT_GOOD;
 }
 
-
 static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 {
        unsigned int lun = SCSI_LUN(srb);
@@ -594,7 +593,6 @@ static int start_stop_unit(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        return TRANSPORT_ERROR;
 }
 
-
 static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 {
        int prevent;
@@ -613,7 +611,6 @@ static int allow_medium_removal(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        return TRANSPORT_GOOD;
 }
 
-
 static int request_sense(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 {
        struct sense_data_t *sense;
@@ -1521,7 +1518,7 @@ static int write_host_reg(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 
 static int set_variable(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 {
-       unsigned lun = SCSI_LUN(srb);
+       unsigned int lun = SCSI_LUN(srb);
 
        if (srb->cmnd[3] == 1) {
                /* Variable Clock */
@@ -2604,7 +2601,6 @@ static int app_cmd(struct scsi_cmnd *srb, struct rtsx_chip *chip)
        return result;
 }
 
-
 static int read_status(struct scsi_cmnd *srb, struct rtsx_chip *chip)
 {
        u8 rtsx_status[16];
index 899bc2079dbe4bacf913fb4774ef6dc24f1e685c..479137398c3d65e66859114e4d892566dbc2149a 100644 (file)
@@ -38,7 +38,6 @@ void rtsx_stor_get_xfer_buf(unsigned char *buffer,
        unsigned int buflen, struct scsi_cmnd *srb);
 void rtsx_invoke_transport(struct scsi_cmnd *srb, struct rtsx_chip *chip);
 
-
 #define rtsx_init_cmd(chip)                    ((chip)->ci = 0)
 
 void rtsx_add_cmd(struct rtsx_chip *chip,
index 6219e047557e346826ff4f3fd5e566ecc0775c69..345313a11af87dd442dc157d99a64bd4c4e88a41 100644 (file)
@@ -1428,7 +1428,6 @@ static int sd_switch_function(struct rtsx_chip *chip, u8 bus_width)
                        continue;
                }
 
-
                if (func_to_switch)
                        break;
 
@@ -2975,7 +2974,6 @@ SD_UNLOCK_ENTRY:
        return STATUS_SUCCESS;
 }
 
-
 static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
 {
        struct sd_info *sd_card = &(chip->sd_card);
@@ -3105,7 +3103,6 @@ static int mmc_test_switch_bus(struct rtsx_chip *chip, u8 width)
        return SWITCH_FAIL;
 }
 
-
 static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr)
 {
        struct sd_info *sd_card = &(chip->sd_card);
@@ -3230,7 +3227,6 @@ static int mmc_switch_timing_bus(struct rtsx_chip *chip, bool switch_ddr)
        return STATUS_SUCCESS;
 }
 
-
 static int reset_mmc(struct rtsx_chip *chip)
 {
        struct sd_info *sd_card = &(chip->sd_card);
index fc824b5d8d592d33fe76e86b2e6c13807af7b5bf..c8d2beacd9e553baa45a16da047f98fe130353ac 100644 (file)
@@ -61,5 +61,4 @@ int spi_write_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip);
 int spi_erase_flash(struct scsi_cmnd *srb, struct rtsx_chip *chip);
 int spi_write_flash_status(struct scsi_cmnd *srb, struct rtsx_chip *chip);
 
-
 #endif  /* __REALTEK_RTSX_SPI_H */
index fc1dfe0991d424a5cbcc8900eb8c0f3a9ecb936b..126a2dc85b4e21e7f8fd5fffd5364ace366ab679 100644 (file)
@@ -834,7 +834,6 @@ static int xd_check_data_blank(u8 *redunt)
                != (XD_ECC1_ALL1 | XD_ECC2_ALL1))
                return 0;
 
-
        for (i = 0; i < 4; i++) {
                if (redunt[RESERVED0 + i] != 0xFF)
                        return 0;
@@ -1402,7 +1401,6 @@ static int xd_erase_block(struct rtsx_chip *chip, u32 phy_blk)
        return STATUS_FAIL;
 }
 
-
 static int xd_build_l2p_tbl(struct rtsx_chip *chip, int zone_no)
 {
        struct xd_info *xd_card = &(chip->xd_card);
@@ -1830,7 +1828,6 @@ static int xd_prepare_write(struct rtsx_chip *chip,
        return STATUS_SUCCESS;
 }
 
-
 static int xd_write_multiple_pages(struct rtsx_chip *chip, u32 old_blk,
                                u32 new_blk, u32 log_blk, u8 start_page,
                                u8 end_page, u8 *buf, unsigned int *index,
@@ -2000,7 +1997,6 @@ int xd_rw(struct scsi_cmnd *srb, struct rtsx_chip *chip,
                return STATUS_FAIL;
        }
 
-
        if (detect_card_cd(chip, XD_CARD) != STATUS_SUCCESS) {
                chip->card_fail |= XD_CARD;
                set_sense_type(chip, lun, SENSE_TYPE_MEDIA_NOT_PRESENT);
index cc0afeeb68c1b46f3a4facdbe1161a6fa8707642..fe1d2cee65b7bc83f87d29a21ed96e2ccd49bf26 100644 (file)
@@ -351,10 +351,35 @@ struct base_driver {
        uint                 cardnuminuse[SLIC_MAX_CARDS];
 };
 
-struct slic_shmem {
-       volatile u32          isr;
-       volatile u32          linkstatus;
-       volatile struct slic_stats     inicstats;
+struct slic_stats {
+       /* xmit stats */
+       u64 xmit_tcp_bytes;
+       u64 xmit_tcp_segs;
+       u64 xmit_bytes;
+       u64 xmit_collisions;
+       u64 xmit_unicasts;
+       u64 xmit_other_error;
+       u64 xmit_excess_collisions;
+       /* rcv stats */
+       u64 rcv_tcp_bytes;
+       u64 rcv_tcp_segs;
+       u64 rcv_bytes;
+       u64 rcv_unicasts;
+       u64 rcv_other_error;
+       u64 rcv_drops;
+};
+
+struct slic_shmem_data {
+       u32 isr;
+       u32 lnkstatus;
+       struct slic_stats stats;
+};
+
+struct slic_shmemory {
+       dma_addr_t isr_phaddr;
+       dma_addr_t lnkstatus_phaddr;
+       dma_addr_t stats_phaddr;
+       struct slic_shmem_data __iomem *shmem_data;
 };
 
 struct slic_upr {
@@ -414,10 +439,9 @@ struct adapter {
        u32             intrregistered;
        uint                isp_initialized;
        uint                gennumber;
-       struct slic_shmem      *pshmem;
+       struct slic_shmemory shmem;
        dma_addr_t          phys_shmem;
-       u32             isrcopy;
-       __iomem struct slic_regs       *slic_regs;
+       void __iomem *regs;
        unsigned char               state;
        unsigned char               linkstate;
        unsigned char               linkspeed;
@@ -487,6 +511,34 @@ struct adapter {
        struct slicnet_stats     slic_stats;
 };
 
+static inline u32 slic_read32(struct adapter *adapter, unsigned int reg)
+{
+       return ioread32(adapter->regs + reg);
+}
+
+static inline void slic_write32(struct adapter *adapter, unsigned int reg,
+                               u32 val)
+{
+       iowrite32(val, adapter->regs + reg);
+}
+
+static inline void slic_write64(struct adapter *adapter, unsigned int reg,
+                               u32 val, u32 hiaddr)
+{
+       unsigned long flags;
+
+       spin_lock_irqsave(&adapter->bit64reglock, flags);
+       slic_write32(adapter, SLIC_REG_ADDR_UPPER, hiaddr);
+       slic_write32(adapter, reg, val);
+       mmiowb();
+       spin_unlock_irqrestore(&adapter->bit64reglock, flags);
+}
+
+static inline void slic_flush_write(struct adapter *adapter)
+{
+       ioread32(adapter->regs + SLIC_REG_HOSTID);
+}
+
 #define UPDATE_STATS(largestat, newstat, oldstat)                        \
 {                                                                        \
        if ((newstat) < (oldstat))                                       \
index 9723b4a104f79733ed055a07e45839019bc5dd26..49cb91aa02bb597dd0d010a235ab349dd2e02fa4 100644 (file)
@@ -289,224 +289,118 @@ struct slic_rspbuf {
        u32 pad2[4];
 };
 
-struct slic_regs {
-       u32     slic_reset;     /* Reset Register */
-       u32     pad0;
-
-       u32     slic_icr;       /* Interrupt Control Register */
-       u32     pad2;
-#define SLIC_ICR               0x0008
-
-       u32     slic_isp;       /* Interrupt status pointer */
-       u32     pad1;
-#define SLIC_ISP               0x0010
-
-       u32     slic_isr;       /* Interrupt status */
-       u32     pad3;
-#define SLIC_ISR               0x0018
-
-       u32     slic_hbar;      /* Header buffer address reg */
-       u32     pad4;
-       /*
-        * 31-8 - phy addr of set of contiguous hdr buffers
-        *  7-0 - number of buffers passed
-        * Buffers are 256 bytes long on 256-byte boundaries.
-        */
-#define SLIC_HBAR              0x0020
-#define SLIC_HBAR_CNT_MSK      0x000000FF
-
-       u32     slic_dbar;      /* Data buffer handle & address reg */
-       u32     pad5;
-
-       /* 4 sets of registers; Buffers are 2K bytes long 2 per 4K page. */
-#define SLIC_DBAR              0x0028
-#define SLIC_DBAR_SIZE         2048
-
-       u32     slic_cbar;      /* Xmt Cmd buf addr regs.*/
-       /*
-        * 1 per XMT interface
-        * 31-5 - phy addr of host command buffer
-        *  4-0 - length of cmd in multiples of 32 bytes
-        * Buffers are 32 bytes up to 512 bytes long
-        */
-#define SLIC_CBAR              0x0030
-#define SLIC_CBAR_LEN_MSK      0x0000001F
-#define SLIC_CBAR_ALIGN                0x00000020
-
-       u32     slic_wcs;       /* write control store*/
-#define        SLIC_WCS                0x0034
-#define SLIC_WCS_START         0x80000000      /*Start the SLIC (Jump to WCS)*/
-#define SLIC_WCS_COMPARE       0x40000000      /* Compare with value in WCS*/
-
-       u32     slic_rbar;      /* Response buffer address reg.*/
-       u32     pad7;
-       /*
-        * 31-8 - phy addr of set of contiguous response buffers
-        * 7-0 - number of buffers passed
-        * Buffers are 32 bytes long on 32-byte boundaries.
-        */
-#define SLIC_RBAR              0x0038
-#define SLIC_RBAR_CNT_MSK      0x000000FF
-#define SLIC_RBAR_SIZE         32
-
-       u32     slic_stats;     /* read statistics (UPR) */
-       u32     pad8;
-#define        SLIC_RSTAT              0x0040
-
-       u32     slic_rlsr;      /* read link status */
-       u32     pad9;
-#define SLIC_LSTAT             0x0048
-
-       u32     slic_wmcfg;     /* Write Mac Config */
-       u32     pad10;
-#define        SLIC_WMCFG              0x0050
-
-       u32     slic_wphy;      /* Write phy register */
-       u32     pad11;
-#define SLIC_WPHY              0x0058
-
-       u32     slic_rcbar;     /* Rcv Cmd buf addr reg */
-       u32     pad12;
-#define        SLIC_RCBAR              0x0060
-
-       u32     slic_rconfig;   /* Read SLIC Config*/
-       u32     pad13;
-#define SLIC_RCONFIG   0x0068
-
-       u32     slic_intagg;    /* Interrupt aggregation time */
-       u32     pad14;
-#define SLIC_INTAGG            0x0070
-
-       u32     slic_wxcfg;     /* Write XMIT config reg*/
-       u32     pad16;
-#define        SLIC_WXCFG              0x0078
-
-       u32     slic_wrcfg;     /* Write RCV config reg*/
-       u32     pad17;
-#define        SLIC_WRCFG              0x0080
-
-       u32     slic_wraddral;  /* Write rcv addr a low*/
-       u32     pad18;
-#define        SLIC_WRADDRAL   0x0088
-
-       u32     slic_wraddrah;  /* Write rcv addr a high*/
-       u32     pad19;
-#define        SLIC_WRADDRAH   0x0090
-
-       u32     slic_wraddrbl;  /* Write rcv addr b low*/
-       u32     pad20;
-#define        SLIC_WRADDRBL   0x0098
-
-       u32     slic_wraddrbh;  /* Write rcv addr b high*/
-       u32             pad21;
-#define        SLIC_WRADDRBH   0x00a0
-
-       u32     slic_mcastlow;  /* Low bits of mcast mask*/
-       u32             pad22;
-#define        SLIC_MCASTLOW   0x00a8
-
-       u32     slic_mcasthigh; /* High bits of mcast mask*/
-       u32             pad23;
-#define        SLIC_MCASTHIGH  0x00b0
-
-       u32     slic_ping;      /* Ping the card*/
-       u32     pad24;
-#define SLIC_PING              0x00b8
-
-       u32     slic_dump_cmd;  /* Dump command */
-       u32     pad25;
-#define SLIC_DUMP_CMD  0x00c0
-
-       u32     slic_dump_data; /* Dump data pointer */
-       u32     pad26;
-#define SLIC_DUMP_DATA 0x00c8
-
-       u32     slic_pcistatus; /* Read card's pci_status register */
-       u32     pad27;
-#define        SLIC_PCISTATUS  0x00d0
-
-       u32     slic_wrhostid;  /* Write hostid field */
-       u32             pad28;
-#define SLIC_WRHOSTID           0x00d8
-#define SLIC_RDHOSTID_1GB       0x1554
-#define SLIC_RDHOSTID_2GB       0x1554
-
-       u32     slic_low_power; /* Put card in a low power state */
-       u32     pad29;
-#define SLIC_LOW_POWER 0x00e0
-
-       u32     slic_quiesce;   /* force slic into quiescent state
-                                * before soft reset
-                                */
-       u32     pad30;
-#define SLIC_QUIESCE   0x00e8
-
-       u32     slic_reset_iface;/* reset interface queues */
-       u32     pad31;
-#define SLIC_RESET_IFACE 0x00f0
-
-       u32     slic_addr_upper;/* Bits 63-32 for host i/f addrs */
-       u32     pad32;
-#define SLIC_ADDR_UPPER        0x00f8 /*Register is only written when it has changed*/
-
-       u32     slic_hbar64;    /* 64 bit Header buffer address reg */
-       u32     pad33;
-#define SLIC_HBAR64            0x0100
-
-       u32     slic_dbar64;    /* 64 bit Data buffer handle & address reg */
-       u32     pad34;
-#define SLIC_DBAR64            0x0108
-
-       u32     slic_cbar64;    /* 64 bit Xmt Cmd buf addr regs. */
-       u32     pad35;
-#define SLIC_CBAR64            0x0110
-
-       u32     slic_rbar64;    /* 64 bit Response buffer address reg.*/
-       u32     pad36;
-#define SLIC_RBAR64            0x0118
-
-       u32     slic_rcbar64;   /* 64 bit Rcv Cmd buf addr reg*/
-       u32     pad37;
-#define        SLIC_RCBAR64    0x0120
-
-       u32     slic_stats64;   /* read statistics (64 bit UPR) */
-       u32     pad38;
-#define        SLIC_RSTAT64    0x0128
-
-       u32     slic_rcv_wcs;   /*Download Gigabit RCV sequencer ucode*/
-       u32     pad39;
-#define SLIC_RCV_WCS   0x0130
-#define SLIC_RCVWCS_BEGIN      0x40000000
-#define SLIC_RCVWCS_FINISH     0x80000000
-
-       u32     slic_wrvlanid;  /* Write VlanId field */
-       u32     pad40;
-#define SLIC_WRVLANID  0x0138
-
-       u32     slic_read_xf_info;      /* Read Transformer info */
-       u32     pad41;
-#define SLIC_READ_XF_INFO      0x0140
-
-       u32     slic_write_xf_info;     /* Write Transformer info */
-       u32     pad42;
-#define SLIC_WRITE_XF_INFO     0x0148
-
-       u32     RSVD1;          /* TOE Only */
-       u32     pad43;
-
-       u32     RSVD2;          /* TOE Only */
-       u32     pad44;
-
-       u32     RSVD3;          /* TOE Only */
-       u32     pad45;
-
-       u32     RSVD4;          /* TOE Only */
-       u32     pad46;
-
-       u32     slic_ticks_per_sec; /* Write card ticks per second */
-       u32     pad47;
-#define SLIC_TICKS_PER_SEC     0x0170
-};
+/* Reset Register */
+#define SLIC_REG_RESET         0x0000
+/* Interrupt Control Register */
+#define SLIC_REG_ICR           0x0008
+/* Interrupt status pointer */
+#define SLIC_REG_ISP           0x0010
+/* Interrupt status */
+#define SLIC_REG_ISR           0x0018
+/*
+ * Header buffer address reg
+ * 31-8 - phy addr of set of contiguous hdr buffers
+ *  7-0 - number of buffers passed
+ * Buffers are 256 bytes long on 256-byte boundaries.
+ */
+#define SLIC_REG_HBAR          0x0020
+/*
+ * Data buffer handle & address reg
+ * 4 sets of registers; Buffers are 2K bytes long 2 per 4K page.
+ */
+#define SLIC_REG_DBAR          0x0028
+/*
+ * Xmt Cmd buf addr regs.
+ * 1 per XMT interface
+ * 31-5 - phy addr of host command buffer
+ *  4-0 - length of cmd in multiples of 32 bytes
+ * Buffers are 32 bytes up to 512 bytes long
+ */
+#define SLIC_REG_CBAR          0x0030
+/* Write control store */
+#define        SLIC_REG_WCS            0x0034
+/*
+ * Response buffer address reg.
+ * 31-8 - phy addr of set of contiguous response buffers
+ * 7-0 - number of buffers passed
+ * Buffers are 32 bytes long on 32-byte boundaries.
+ */
+#define        SLIC_REG_RBAR           0x0038
+/* Read statistics (UPR) */
+#define        SLIC_REG_RSTAT          0x0040
+/* Read link status */
+#define        SLIC_REG_LSTAT          0x0048
+/* Write Mac Config */
+#define        SLIC_REG_WMCFG          0x0050
+/* Write phy register */
+#define SLIC_REG_WPHY          0x0058
+/* Rcv Cmd buf addr reg */
+#define        SLIC_REG_RCBAR          0x0060
+/* Read SLIC Config*/
+#define SLIC_REG_RCONFIG       0x0068
+/* Interrupt aggregation time */
+#define SLIC_REG_INTAGG                0x0070
+/* Write XMIT config reg */
+#define        SLIC_REG_WXCFG          0x0078
+/* Write RCV config reg */
+#define        SLIC_REG_WRCFG          0x0080
+/* Write rcv addr a low */
+#define        SLIC_REG_WRADDRAL       0x0088
+/* Write rcv addr a high */
+#define        SLIC_REG_WRADDRAH       0x0090
+/* Write rcv addr b low */
+#define        SLIC_REG_WRADDRBL       0x0098
+/* Write rcv addr b high */
+#define        SLIC_REG_WRADDRBH       0x00a0
+/* Low bits of mcast mask */
+#define        SLIC_REG_MCASTLOW       0x00a8
+/* High bits of mcast mask */
+#define        SLIC_REG_MCASTHIGH      0x00b0
+/* Ping the card */
+#define SLIC_REG_PING          0x00b8
+/* Dump command */
+#define SLIC_REG_DUMP_CMD      0x00c0
+/* Dump data pointer */
+#define SLIC_REG_DUMP_DATA     0x00c8
+/* Read card's pci_status register */
+#define        SLIC_REG_PCISTATUS      0x00d0
+/* Write hostid field */
+#define SLIC_REG_WRHOSTID      0x00d8
+/* Put card in a low power state */
+#define SLIC_REG_LOW_POWER     0x00e0
+/* Force slic into quiescent state  before soft reset */
+#define SLIC_REG_QUIESCE       0x00e8
+/* Reset interface queues */
+#define SLIC_REG_RESET_IFACE   0x00f0
+/*
+ * Register is only written when it has changed.
+ * Bits 63-32 for host i/f addrs.
+ */
+#define SLIC_REG_ADDR_UPPER    0x00f8
+/* 64 bit Header buffer address reg */
+#define SLIC_REG_HBAR64                0x0100
+/* 64 bit Data buffer handle & address reg */
+#define SLIC_REG_DBAR64                0x0108
+/* 64 bit Xmt Cmd buf addr regs. */
+#define SLIC_REG_CBAR64                0x0110
+/* 64 bit Response buffer address reg.*/
+#define SLIC_REG_RBAR64                0x0118
+/* 64 bit Rcv Cmd buf addr reg*/
+#define        SLIC_REG_RCBAR64        0x0120
+/* Read statistics (64 bit UPR) */
+#define        SLIC_REG_RSTAT64        0x0128
+/* Download Gigabit RCV sequencer ucode */
+#define SLIC_REG_RCV_WCS       0x0130
+/* Write VlanId field */
+#define SLIC_REG_WRVLANID      0x0138
+/* Read Transformer info */
+#define SLIC_REG_READ_XF_INFO  0x0140
+/* Write Transformer info */
+#define SLIC_REG_WRITE_XF_INFO 0x0148
+/* Write card ticks per second */
+#define SLIC_REG_TICKS_PER_SEC 0x0170
+
+#define SLIC_REG_HOSTID                0x1554
 
 enum UPR_REQUEST {
        SLIC_UPR_STATS,
@@ -565,85 +459,6 @@ struct slic_pnp_capabilities {
        struct slicpm_wakeup_capabilities wakeup_capabilities;
 };
 
-struct xmt_stats {
-       u32 xmit_tcp_bytes;
-       u32 xmit_tcp_segs;
-       u32 xmit_bytes;
-       u32 xmit_collisions;
-       u32 xmit_unicasts;
-       u32 xmit_other_error;
-       u32 xmit_excess_collisions;
-};
-
-struct rcv_stats {
-       u32 rcv_tcp_bytes;
-       u32 rcv_tcp_segs;
-       u32 rcv_bytes;
-       u32 rcv_unicasts;
-       u32 rcv_other_error;
-       u32 rcv_drops;
-};
-
-struct xmt_statsgb {
-       u64 xmit_tcp_bytes;
-       u64 xmit_tcp_segs;
-       u64 xmit_bytes;
-       u64 xmit_collisions;
-       u64 xmit_unicasts;
-       u64 xmit_other_error;
-       u64 xmit_excess_collisions;
-};
-
-struct rcv_statsgb {
-       u64 rcv_tcp_bytes;
-       u64 rcv_tcp_segs;
-       u64 rcv_bytes;
-       u64 rcv_unicasts;
-       u64 rcv_other_error;
-       u64 rcv_drops;
-};
-
-struct slic_stats {
-       union {
-               struct {
-                       struct xmt_stats xmt100;
-                       struct rcv_stats rcv100;
-               } stats_100;
-               struct {
-                       struct xmt_statsgb xmtGB;
-                       struct rcv_statsgb rcvGB;
-               } stats_GB;
-       } u;
-};
-
-#define xmit_tcp_segs100               u.stats_100.xmt100.xmit_tcp_segs
-#define xmit_tcp_bytes100              u.stats_100.xmt100.xmit_tcp_bytes
-#define xmit_bytes100                  u.stats_100.xmt100.xmit_bytes
-#define xmit_collisions100             u.stats_100.xmt100.xmit_collisions
-#define xmit_unicasts100               u.stats_100.xmt100.xmit_unicasts
-#define xmit_other_error100            u.stats_100.xmt100.xmit_other_error
-#define xmit_excess_collisions100      u.stats_100.xmt100.xmit_excess_collisions
-#define rcv_tcp_segs100                        u.stats_100.rcv100.rcv_tcp_segs
-#define rcv_tcp_bytes100               u.stats_100.rcv100.rcv_tcp_bytes
-#define rcv_bytes100                   u.stats_100.rcv100.rcv_bytes
-#define rcv_unicasts100                        u.stats_100.rcv100.rcv_unicasts
-#define rcv_other_error100             u.stats_100.rcv100.rcv_other_error
-#define rcv_drops100                   u.stats_100.rcv100.rcv_drops
-#define xmit_tcp_segs_gb               u.stats_GB.xmtGB.xmit_tcp_segs
-#define xmit_tcp_bytes_gb              u.stats_GB.xmtGB.xmit_tcp_bytes
-#define xmit_bytes_gb                  u.stats_GB.xmtGB.xmit_bytes
-#define xmit_collisions_gb             u.stats_GB.xmtGB.xmit_collisions
-#define xmit_unicasts_gb               u.stats_GB.xmtGB.xmit_unicasts
-#define xmit_other_error_gb            u.stats_GB.xmtGB.xmit_other_error
-#define xmit_excess_collisions_gb      u.stats_GB.xmtGB.xmit_excess_collisions
-
-#define rcv_tcp_segs_gb                        u.stats_GB.rcvGB.rcv_tcp_segs
-#define rcv_tcp_bytes_gb               u.stats_GB.rcvGB.rcv_tcp_bytes
-#define rcv_bytes_gb                   u.stats_GB.rcvGB.rcv_bytes
-#define rcv_unicasts_gb                        u.stats_GB.rcvGB.rcv_unicasts
-#define rcv_other_error_gb             u.stats_GB.rcvGB.rcv_other_error
-#define rcv_drops_gb                   u.stats_GB.rcvGB.rcv_drops
-
 struct slic_config_mac {
        u8 macaddrA[6];
 };
index ac126d4f31172983fcdec97de13de8ff5e6ce161..21280a3a31bbca6c777f5b3ee70be9349af1608b 100644 (file)
@@ -124,31 +124,10 @@ static const struct pci_device_id slic_pci_tbl[] = {
        { 0 }
 };
 
-static struct ethtool_ops slic_ethtool_ops;
+static const struct ethtool_ops slic_ethtool_ops;
 
 MODULE_DEVICE_TABLE(pci, slic_pci_tbl);
 
-static inline void slic_reg32_write(void __iomem *reg, u32 value, bool flush)
-{
-       writel(value, reg);
-       if (flush)
-               mb();
-}
-
-static inline void slic_reg64_write(struct adapter *adapter, void __iomem *reg,
-                                   u32 value, void __iomem *regh, u32 paddrh,
-                                   bool flush)
-{
-       unsigned long flags;
-
-       spin_lock_irqsave(&adapter->bit64reglock, flags);
-       writel(paddrh, regh);
-       writel(value, reg);
-       if (flush)
-               mb();
-       spin_unlock_irqrestore(&adapter->bit64reglock, flags);
-}
-
 static void slic_mcast_set_bit(struct adapter *adapter, char *address)
 {
        unsigned char crcpoly;
@@ -172,8 +151,6 @@ static void slic_mcast_set_bit(struct adapter *adapter, char *address)
 
 static void slic_mcast_set_mask(struct adapter *adapter)
 {
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
-
        if (adapter->macopts & (MAC_ALLMCAST | MAC_PROMISC)) {
                /*
                 * Turn on all multicast addresses. We have to do this for
@@ -181,18 +158,17 @@ static void slic_mcast_set_mask(struct adapter *adapter)
                 * Microcode from having to keep state about the MAC
                 * configuration.
                 */
-               slic_reg32_write(&slic_regs->slic_mcastlow, 0xFFFFFFFF, FLUSH);
-               slic_reg32_write(&slic_regs->slic_mcasthigh, 0xFFFFFFFF,
-                                FLUSH);
+               slic_write32(adapter, SLIC_REG_MCASTLOW, 0xFFFFFFFF);
+               slic_write32(adapter, SLIC_REG_MCASTHIGH, 0xFFFFFFFF);
        } else {
                /*
                 * Commit our multicast mast to the SLIC by writing to the
                 * multicast address mask registers
                 */
-               slic_reg32_write(&slic_regs->slic_mcastlow,
-                       (u32)(adapter->mcastmask & 0xFFFFFFFF), FLUSH);
-               slic_reg32_write(&slic_regs->slic_mcasthigh,
-                       (u32)((adapter->mcastmask >> 32) & 0xFFFFFFFF), FLUSH);
+               slic_write32(adapter, SLIC_REG_MCASTLOW,
+                            (u32)(adapter->mcastmask & 0xFFFFFFFF));
+               slic_write32(adapter, SLIC_REG_MCASTHIGH,
+                            (u32)((adapter->mcastmask >> 32) & 0xFFFFFFFF));
        }
 }
 
@@ -208,13 +184,6 @@ static void slic_timer_ping(ulong dev)
        add_timer(&adapter->pingtimer);
 }
 
-static void slic_unmap_mmio_space(struct adapter *adapter)
-{
-       if (adapter->slic_regs)
-               iounmap(adapter->slic_regs);
-       adapter->slic_regs = NULL;
-}
-
 /*
  *  slic_link_config
  *
@@ -224,7 +193,6 @@ static void slic_unmap_mmio_space(struct adapter *adapter)
 static void slic_link_config(struct adapter *adapter,
                      u32 linkspeed, u32 linkduplex)
 {
-       u32 __iomem *wphy;
        u32 speed;
        u32 duplex;
        u32 phy_config;
@@ -239,8 +207,6 @@ static void slic_link_config(struct adapter *adapter,
        if (linkduplex > LINK_AUTOD)
                linkduplex = LINK_AUTOD;
 
-       wphy = &adapter->slic_regs->slic_wphy;
-
        if ((linkspeed == LINK_AUTOSPEED) || (linkspeed == LINK_1000MB)) {
                if (adapter->flags & ADAPT_FLAGS_FIBERMEDIA) {
                        /*
@@ -252,7 +218,7 @@ static void slic_link_config(struct adapter *adapter,
                        phy_advreg = (MIICR_REG_4 | (PAR_ADV1000XFD));
                        /* enable PAUSE frames        */
                        phy_advreg |= PAR_ASYMPAUSE_FIBER;
-                       slic_reg32_write(wphy, phy_advreg, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_advreg);
 
                        if (linkspeed == LINK_AUTOSPEED) {
                                /* reset phy, enable auto-neg  */
@@ -260,14 +226,17 @@ static void slic_link_config(struct adapter *adapter,
                                    (MIICR_REG_PCR |
                                     (PCR_RESET | PCR_AUTONEG |
                                      PCR_AUTONEG_RST));
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
                        } else {        /* forced 1000 Mb FD*/
                                /*
                                 * power down phy to break link
                                 * this may not work)
                                 */
                                phy_config = (MIICR_REG_PCR | PCR_POWERDOWN);
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
+                               slic_flush_write(adapter);
                                /*
                                 * wait, Marvell says 1 sec,
                                 * try to get away with 10 ms
@@ -282,7 +251,8 @@ static void slic_link_config(struct adapter *adapter,
                                    (MIICR_REG_PCR |
                                     (PCR_RESET | PCR_SPEED_1000 |
                                      PCR_DUPLEX_FULL));
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
                        }
                } else {        /* copper gigabit */
 
@@ -309,10 +279,10 @@ static void slic_link_config(struct adapter *adapter,
                        phy_advreg |= PAR_ASYMPAUSE;
                        /* required by the Cicada PHY  */
                        phy_advreg |= PAR_802_3;
-                       slic_reg32_write(wphy, phy_advreg, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_advreg);
                        /* advertise FD only @1000 Mb  */
                        phy_gctlreg = (MIICR_REG_9 | (PGC_ADV1000FD));
-                       slic_reg32_write(wphy, phy_gctlreg, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_gctlreg);
 
                        if (adapter->subsysid != SLIC_1GB_CICADA_SUBSYS_ID) {
                                /*
@@ -321,20 +291,23 @@ static void slic_link_config(struct adapter *adapter,
                                 */
                                phy_config =
                                    (MIICR_REG_16 | (MRV_REG16_XOVERON));
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
 
                                /* reset phy, enable auto-neg  */
                                phy_config =
                                    (MIICR_REG_PCR |
                                     (PCR_RESET | PCR_AUTONEG |
                                      PCR_AUTONEG_RST));
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
                        } else {        /* it's a Cicada PHY  */
                                /* enable and restart auto-neg (don't reset)  */
                                phy_config =
                                    (MIICR_REG_PCR |
                                     (PCR_AUTONEG | PCR_AUTONEG_RST));
-                               slic_reg32_write(wphy, phy_config, FLUSH);
+                               slic_write32(adapter, SLIC_REG_WPHY,
+                                            phy_config);
                        }
                }
        } else {
@@ -354,13 +327,13 @@ static void slic_link_config(struct adapter *adapter,
                         * disable auto crossover
                         */
                        phy_config = (MIICR_REG_16 | (MRV_REG16_XOVEROFF));
-                       slic_reg32_write(wphy, phy_config, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_config);
                }
 
                /* power down phy to break link (this may not work)  */
                phy_config = (MIICR_REG_PCR | (PCR_POWERDOWN | speed | duplex));
-               slic_reg32_write(wphy, phy_config, FLUSH);
-
+               slic_write32(adapter, SLIC_REG_WPHY, phy_config);
+               slic_flush_write(adapter);
                /* wait, Marvell says 1 sec, try to get away with 10 ms */
                mdelay(10);
 
@@ -372,11 +345,11 @@ static void slic_link_config(struct adapter *adapter,
                         */
                        phy_config =
                            (MIICR_REG_PCR | (PCR_RESET | speed | duplex));
-                       slic_reg32_write(wphy, phy_config, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_config);
                } else {        /* it's a Cicada PHY  */
                        /* disable auto-neg, set speed, powerup  */
                        phy_config = (MIICR_REG_PCR | (speed | duplex));
-                       slic_reg32_write(wphy, phy_config, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WPHY, phy_config);
                }
        }
 }
@@ -386,7 +359,6 @@ static int slic_card_download_gbrcv(struct adapter *adapter)
        const struct firmware *fw;
        const char *file = "";
        int ret;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
        u32 codeaddr;
        u32 instruction;
        int index = 0;
@@ -427,27 +399,28 @@ static int slic_card_download_gbrcv(struct adapter *adapter)
                break;
        }
        /* start download */
-       slic_reg32_write(&slic_regs->slic_rcv_wcs, SLIC_RCVWCS_BEGIN, FLUSH);
+       slic_write32(adapter, SLIC_REG_RCV_WCS, SLIC_RCVWCS_BEGIN);
        /* download the rcv sequencer ucode */
        for (codeaddr = 0; codeaddr < rcvucodelen; codeaddr++) {
                /* write out instruction address */
-               slic_reg32_write(&slic_regs->slic_rcv_wcs, codeaddr, FLUSH);
+               slic_write32(adapter, SLIC_REG_RCV_WCS, codeaddr);
 
                instruction = *(u32 *)(fw->data + index);
                index += 4;
                /* write out the instruction data low addr */
-               slic_reg32_write(&slic_regs->slic_rcv_wcs, instruction, FLUSH);
+               slic_write32(adapter, SLIC_REG_RCV_WCS, instruction);
 
                instruction = *(u8 *)(fw->data + index);
                index++;
                /* write out the instruction data high addr */
-               slic_reg32_write(&slic_regs->slic_rcv_wcs, (u8)instruction,
-                                FLUSH);
+               slic_write32(adapter, SLIC_REG_RCV_WCS, instruction);
        }
 
        /* download finished */
        release_firmware(fw);
-       slic_reg32_write(&slic_regs->slic_rcv_wcs, SLIC_RCVWCS_FINISH, FLUSH);
+       slic_write32(adapter, SLIC_REG_RCV_WCS, SLIC_RCVWCS_FINISH);
+       slic_flush_write(adapter);
+
        return 0;
 }
 
@@ -462,7 +435,6 @@ static int slic_card_download(struct adapter *adapter)
        u32 section;
        int thissectionsize;
        int codeaddr;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
        u32 instruction;
        u32 baseaddress;
        u32 i;
@@ -506,17 +478,17 @@ static int slic_card_download(struct adapter *adapter)
 
                for (codeaddr = 0; codeaddr < thissectionsize; codeaddr++) {
                        /* Write out instruction address */
-                       slic_reg32_write(&slic_regs->slic_wcs,
-                                        baseaddress + codeaddr, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS,
+                                    baseaddress + codeaddr);
                        /* Write out instruction to low addr */
-                       slic_reg32_write(&slic_regs->slic_wcs,
-                                       instruction, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS,
+                                    instruction);
                        instruction = *(u32 *)(fw->data + index);
                        index += 4;
 
                        /* Write out instruction to high addr */
-                       slic_reg32_write(&slic_regs->slic_wcs,
-                                       instruction, FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS,
+                                    instruction);
                        instruction = *(u32 *)(fw->data + index);
                        index += 4;
                }
@@ -531,17 +503,15 @@ static int slic_card_download(struct adapter *adapter)
 
                for (codeaddr = 0; codeaddr < thissectionsize; codeaddr++) {
                        /* Write out instruction address */
-                       slic_reg32_write(&slic_regs->slic_wcs,
-                               SLIC_WCS_COMPARE | (baseaddress + codeaddr),
-                               FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS,
+                                    SLIC_WCS_COMPARE | (baseaddress +
+                                                        codeaddr));
                        /* Write out instruction to low addr */
-                       slic_reg32_write(&slic_regs->slic_wcs, instruction,
-                                        FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS, instruction);
                        instruction = *(u32 *)(fw->data + index);
                        index += 4;
                        /* Write out instruction to high addr */
-                       slic_reg32_write(&slic_regs->slic_wcs, instruction,
-                                        FLUSH);
+                       slic_write32(adapter, SLIC_REG_WCS, instruction);
                        instruction = *(u32 *)(fw->data + index);
                        index += 4;
 
@@ -550,8 +520,9 @@ static int slic_card_download(struct adapter *adapter)
        release_firmware(fw);
        /* Everything OK, kick off the card */
        mdelay(10);
-       slic_reg32_write(&slic_regs->slic_wcs, SLIC_WCS_START, FLUSH);
 
+       slic_write32(adapter, SLIC_REG_WCS, SLIC_WCS_START);
+       slic_flush_write(adapter);
        /*
         * stall for 20 ms, long enough for ucode to init card
         * and reach mainloop
@@ -583,19 +554,21 @@ static void slic_adapter_set_hwaddr(struct adapter *adapter)
 
 static void slic_intagg_set(struct adapter *adapter, u32 value)
 {
-       slic_reg32_write(&adapter->slic_regs->slic_intagg, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_INTAGG, value);
        adapter->card->loadlevel_current = value;
 }
 
 static void slic_soft_reset(struct adapter *adapter)
 {
        if (adapter->card->state == CARD_UP) {
-               slic_reg32_write(&adapter->slic_regs->slic_quiesce, 0, FLUSH);
+               slic_write32(adapter, SLIC_REG_QUIESCE, 0);
+               slic_flush_write(adapter);
                mdelay(1);
        }
 
-       slic_reg32_write(&adapter->slic_regs->slic_reset, SLIC_RESET_MAGIC,
-                        FLUSH);
+       slic_write32(adapter, SLIC_REG_RESET, SLIC_RESET_MAGIC);
+       slic_flush_write(adapter);
+
        mdelay(1);
 }
 
@@ -603,17 +576,16 @@ static void slic_mac_address_config(struct adapter *adapter)
 {
        u32 value;
        u32 value2;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
 
        value = ntohl(*(__be32 *)&adapter->currmacaddr[2]);
-       slic_reg32_write(&slic_regs->slic_wraddral, value, FLUSH);
-       slic_reg32_write(&slic_regs->slic_wraddrbl, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_WRADDRAL, value);
+       slic_write32(adapter, SLIC_REG_WRADDRBL, value);
 
        value2 = (u32)((adapter->currmacaddr[0] << 8 |
                             adapter->currmacaddr[1]) & 0xFFFF);
 
-       slic_reg32_write(&slic_regs->slic_wraddrah, value2, FLUSH);
-       slic_reg32_write(&slic_regs->slic_wraddrbh, value2, FLUSH);
+       slic_write32(adapter, SLIC_REG_WRADDRAH, value2);
+       slic_write32(adapter, SLIC_REG_WRADDRBH, value2);
 
        /*
         * Write our multicast mask out to the card.  This is done
@@ -626,7 +598,6 @@ static void slic_mac_address_config(struct adapter *adapter)
 static void slic_mac_config(struct adapter *adapter)
 {
        u32 value;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
 
        /* Setup GMAC gaps */
        if (adapter->linkspeed == LINK_1000MB) {
@@ -650,7 +621,7 @@ static void slic_mac_config(struct adapter *adapter)
        }
 
        /* write mac config */
-       slic_reg32_write(&slic_regs->slic_wmcfg, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_WMCFG, value);
 
        /* setup mac addresses */
        slic_mac_address_config(adapter);
@@ -660,7 +631,6 @@ static void slic_config_set(struct adapter *adapter, bool linkchange)
 {
        u32 value;
        u32 RcrReset;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
 
        if (linkchange) {
                /* Setup MAC */
@@ -677,7 +647,7 @@ static void slic_config_set(struct adapter *adapter, bool linkchange)
                         GXCR_XMTEN |   /* Enable transmit  */
                         GXCR_PAUSEEN); /* Enable pause     */
 
-               slic_reg32_write(&slic_regs->slic_wxcfg, value, FLUSH);
+               slic_write32(adapter, SLIC_REG_WXCFG, value);
 
                /* Setup rcvcfg last */
                value = (RcrReset |     /* Reset, if linkchange */
@@ -690,7 +660,7 @@ static void slic_config_set(struct adapter *adapter, bool linkchange)
                value = (GXCR_RESET |   /* Always reset     */
                         GXCR_XMTEN);   /* Enable transmit  */
 
-               slic_reg32_write(&slic_regs->slic_wxcfg, value, FLUSH);
+               slic_write32(adapter, SLIC_REG_WXCFG, value);
 
                /* Setup rcvcfg last */
                value = (RcrReset |     /* Reset, if linkchange */
@@ -707,7 +677,7 @@ static void slic_config_set(struct adapter *adapter, bool linkchange)
        if (adapter->macopts & MAC_PROMISC)
                value |= GRCR_RCVALL;
 
-       slic_reg32_write(&slic_regs->slic_wrcfg, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_WRCFG, value);
 }
 
 /*
@@ -717,24 +687,23 @@ static void slic_config_clear(struct adapter *adapter)
 {
        u32 value;
        u32 phy_config;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
 
        /* Setup xmtcfg */
        value = (GXCR_RESET |   /* Always reset */
                 GXCR_PAUSEEN); /* Enable pause */
 
-       slic_reg32_write(&slic_regs->slic_wxcfg, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_WXCFG, value);
 
        value = (GRCR_RESET |   /* Always reset      */
                 GRCR_CTLEN |   /* Enable CTL frames */
                 GRCR_ADDRAEN | /* Address A enable  */
                 (GRCR_HASHSIZE << GRCR_HASHSIZE_SHIFT));
 
-       slic_reg32_write(&slic_regs->slic_wrcfg, value, FLUSH);
+       slic_write32(adapter, SLIC_REG_WRCFG, value);
 
        /* power down phy */
        phy_config = (MIICR_REG_PCR | (PCR_POWERDOWN));
-       slic_reg32_write(&slic_regs->slic_wphy, phy_config, FLUSH);
+       slic_write32(adapter, SLIC_REG_WPHY, phy_config);
 }
 
 static bool slic_mac_filter(struct adapter *adapter,
@@ -810,13 +779,11 @@ static void slic_timer_load_check(ulong cardaddr)
 {
        struct sliccard *card = (struct sliccard *)cardaddr;
        struct adapter *adapter = card->master;
-       u32 __iomem *intagg;
        u32 load = card->events;
        u32 level = 0;
 
        if ((adapter) && (adapter->state == ADAPT_UP) &&
            (card->state == CARD_UP) && (slic_global.dynamic_intagg)) {
-               intagg = &adapter->slic_regs->slic_intagg;
                if (adapter->devid == SLIC_1GB_DEVICE_ID) {
                        if (adapter->linkspeed == LINK_1000MB)
                                level = 100;
@@ -836,7 +803,7 @@ static void slic_timer_load_check(ulong cardaddr)
                        }
                        if (card->loadlevel_current != level) {
                                card->loadlevel_current = level;
-                               slic_reg32_write(intagg, level, FLUSH);
+                               slic_write32(adapter, SLIC_REG_INTAGG, level);
                        }
                } else {
                        if (load > SLIC_LOAD_5)
@@ -853,7 +820,7 @@ static void slic_timer_load_check(ulong cardaddr)
                                level = SLIC_INTAGG_0;
                        if (card->loadlevel_current != level) {
                                card->loadlevel_current = level;
-                               slic_reg32_write(intagg, level, FLUSH);
+                               slic_write32(adapter, SLIC_REG_INTAGG, level);
                        }
                }
        }
@@ -897,7 +864,6 @@ static int slic_upr_queue_request(struct adapter *adapter,
 static void slic_upr_start(struct adapter *adapter)
 {
        struct slic_upr *upr;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
 
        upr = adapter->upr_list;
        if (!upr)
@@ -909,31 +875,27 @@ static void slic_upr_start(struct adapter *adapter)
        switch (upr->upr_request) {
        case SLIC_UPR_STATS:
                if (upr->upr_data_h == 0) {
-                       slic_reg32_write(&slic_regs->slic_stats, upr->upr_data,
-                                        FLUSH);
+                       slic_write32(adapter, SLIC_REG_RSTAT, upr->upr_data);
                } else {
-                       slic_reg64_write(adapter, &slic_regs->slic_stats64,
-                                        upr->upr_data,
-                                        &slic_regs->slic_addr_upper,
-                                        upr->upr_data_h, FLUSH);
+                       slic_write64(adapter, SLIC_REG_RSTAT64, upr->upr_data,
+                                    upr->upr_data_h);
                }
                break;
 
        case SLIC_UPR_RLSR:
-               slic_reg64_write(adapter, &slic_regs->slic_rlsr, upr->upr_data,
-                                &slic_regs->slic_addr_upper, upr->upr_data_h,
-                                FLUSH);
+               slic_write64(adapter, SLIC_REG_LSTAT, upr->upr_data,
+                            upr->upr_data_h);
                break;
 
        case SLIC_UPR_RCONFIG:
-               slic_reg64_write(adapter, &slic_regs->slic_rconfig,
-                                upr->upr_data, &slic_regs->slic_addr_upper,
-                                upr->upr_data_h, FLUSH);
+               slic_write64(adapter, SLIC_REG_RCONFIG, upr->upr_data,
+                            upr->upr_data_h);
                break;
        case SLIC_UPR_PING:
-               slic_reg32_write(&slic_regs->slic_ping, 1, FLUSH);
+               slic_write32(adapter, SLIC_REG_PING, 1);
                break;
        }
+       slic_flush_write(adapter);
 }
 
 static int slic_upr_request(struct adapter *adapter,
@@ -961,42 +923,34 @@ err_unlock_irq:
 
 static void slic_link_upr_complete(struct adapter *adapter, u32 isr)
 {
-       u32 linkstatus = adapter->pshmem->linkstatus;
+       struct slic_shmemory *sm = &adapter->shmem;
+       struct slic_shmem_data *sm_data = sm->shmem_data;
+       u32 lst = sm_data->lnkstatus;
        uint linkup;
        unsigned char linkspeed;
        unsigned char linkduplex;
 
        if ((isr & ISR_UPCERR) || (isr & ISR_UPCBSY)) {
-               struct slic_shmem *pshmem;
+               dma_addr_t phaddr = sm->lnkstatus_phaddr;
 
-               pshmem = (struct slic_shmem *)(unsigned long)
-                        adapter->phys_shmem;
-#if BITS_PER_LONG == 64
-               slic_upr_queue_request(adapter,
-                                      SLIC_UPR_RLSR,
-                                      SLIC_GET_ADDR_LOW(&pshmem->linkstatus),
-                                      SLIC_GET_ADDR_HIGH(&pshmem->linkstatus),
+               slic_upr_queue_request(adapter, SLIC_UPR_RLSR,
+                                      cpu_to_le32(lower_32_bits(phaddr)),
+                                      cpu_to_le32(upper_32_bits(phaddr)),
                                       0, 0);
-#else
-               slic_upr_queue_request(adapter,
-                                      SLIC_UPR_RLSR,
-                                      (u32)&pshmem->linkstatus,
-                                      SLIC_GET_ADDR_HIGH(pshmem), 0, 0);
-#endif
                return;
        }
        if (adapter->state != ADAPT_UP)
                return;
 
-       linkup = linkstatus & GIG_LINKUP ? LINK_UP : LINK_DOWN;
-       if (linkstatus & GIG_SPEED_1000)
+       linkup = lst & GIG_LINKUP ? LINK_UP : LINK_DOWN;
+       if (lst & GIG_SPEED_1000)
                linkspeed = LINK_1000MB;
-       else if (linkstatus & GIG_SPEED_100)
+       else if (lst & GIG_SPEED_100)
                linkspeed = LINK_100MB;
        else
                linkspeed = LINK_10MB;
 
-       if (linkstatus & GIG_FULLDUPLEX)
+       if (lst & GIG_FULLDUPLEX)
                linkduplex = LINK_FULLD;
        else
                linkduplex = LINK_HALFD;
@@ -1016,6 +970,7 @@ static void slic_link_upr_complete(struct adapter *adapter, u32 isr)
        /* link has gone from up to down */
        if (linkup == LINK_DOWN) {
                adapter->linkstate = LINK_DOWN;
+               netif_carrier_off(adapter->netdev);
                return;
        }
 
@@ -1027,7 +982,7 @@ static void slic_link_upr_complete(struct adapter *adapter, u32 isr)
                /* setup the mac */
                slic_config_set(adapter, true);
                adapter->linkstate = LINK_UP;
-               netif_start_queue(adapter->netdev);
+               netif_carrier_on(adapter->netdev);
        }
 }
 
@@ -1047,81 +1002,65 @@ static void slic_upr_request_complete(struct adapter *adapter, u32 isr)
        upr->next = NULL;
        adapter->upr_busy = 0;
        switch (upr->upr_request) {
-       case SLIC_UPR_STATS:
-               {
-                       struct slic_stats *slicstats =
-                           (struct slic_stats *)&adapter->pshmem->inicstats;
-                       struct slic_stats *newstats = slicstats;
-                       struct slic_stats  *old = &adapter->inicstats_prev;
-                       struct slicnet_stats *stst = &adapter->slic_stats;
-
-                       if (isr & ISR_UPCERR) {
-                               dev_err(&adapter->netdev->dev,
-                                       "SLIC_UPR_STATS command failed isr[%x]\n",
-                                       isr);
-
-                               break;
-                       }
-                       UPDATE_STATS_GB(stst->tcp.xmit_tcp_segs,
-                                       newstats->xmit_tcp_segs_gb,
-                                       old->xmit_tcp_segs_gb);
-
-                       UPDATE_STATS_GB(stst->tcp.xmit_tcp_bytes,
-                                       newstats->xmit_tcp_bytes_gb,
-                                       old->xmit_tcp_bytes_gb);
-
-                       UPDATE_STATS_GB(stst->tcp.rcv_tcp_segs,
-                                       newstats->rcv_tcp_segs_gb,
-                                       old->rcv_tcp_segs_gb);
-
-                       UPDATE_STATS_GB(stst->tcp.rcv_tcp_bytes,
-                                       newstats->rcv_tcp_bytes_gb,
-                                       old->rcv_tcp_bytes_gb);
-
-                       UPDATE_STATS_GB(stst->iface.xmt_bytes,
-                                       newstats->xmit_bytes_gb,
-                                       old->xmit_bytes_gb);
-
-                       UPDATE_STATS_GB(stst->iface.xmt_ucast,
-                                       newstats->xmit_unicasts_gb,
-                                       old->xmit_unicasts_gb);
-
-                       UPDATE_STATS_GB(stst->iface.rcv_bytes,
-                                       newstats->rcv_bytes_gb,
-                                       old->rcv_bytes_gb);
-
-                       UPDATE_STATS_GB(stst->iface.rcv_ucast,
-                                       newstats->rcv_unicasts_gb,
-                                       old->rcv_unicasts_gb);
-
-                       UPDATE_STATS_GB(stst->iface.xmt_errors,
-                                       newstats->xmit_collisions_gb,
-                                       old->xmit_collisions_gb);
-
-                       UPDATE_STATS_GB(stst->iface.xmt_errors,
-                                       newstats->xmit_excess_collisions_gb,
-                                       old->xmit_excess_collisions_gb);
-
-                       UPDATE_STATS_GB(stst->iface.xmt_errors,
-                                       newstats->xmit_other_error_gb,
-                                       old->xmit_other_error_gb);
-
-                       UPDATE_STATS_GB(stst->iface.rcv_errors,
-                                       newstats->rcv_other_error_gb,
-                                       old->rcv_other_error_gb);
-
-                       UPDATE_STATS_GB(stst->iface.rcv_discards,
-                                       newstats->rcv_drops_gb,
-                                       old->rcv_drops_gb);
-
-                       if (newstats->rcv_drops_gb > old->rcv_drops_gb) {
-                               adapter->rcv_drops +=
-                                   (newstats->rcv_drops_gb -
-                                    old->rcv_drops_gb);
-                       }
-                       memcpy(old, newstats, sizeof(struct slic_stats));
+       case SLIC_UPR_STATS: {
+               struct slic_shmemory *sm = &adapter->shmem;
+               struct slic_shmem_data *sm_data = sm->shmem_data;
+               struct slic_stats *stats = &sm_data->stats;
+               struct slic_stats *old = &adapter->inicstats_prev;
+               struct slicnet_stats *stst = &adapter->slic_stats;
+
+               if (isr & ISR_UPCERR) {
+                       dev_err(&adapter->netdev->dev,
+                               "SLIC_UPR_STATS command failed isr[%x]\n", isr);
                        break;
                }
+
+               UPDATE_STATS_GB(stst->tcp.xmit_tcp_segs, stats->xmit_tcp_segs,
+                               old->xmit_tcp_segs);
+
+               UPDATE_STATS_GB(stst->tcp.xmit_tcp_bytes, stats->xmit_tcp_bytes,
+                               old->xmit_tcp_bytes);
+
+               UPDATE_STATS_GB(stst->tcp.rcv_tcp_segs, stats->rcv_tcp_segs,
+                               old->rcv_tcp_segs);
+
+               UPDATE_STATS_GB(stst->tcp.rcv_tcp_bytes, stats->rcv_tcp_bytes,
+                               old->rcv_tcp_bytes);
+
+               UPDATE_STATS_GB(stst->iface.xmt_bytes, stats->xmit_bytes,
+                               old->xmit_bytes);
+
+               UPDATE_STATS_GB(stst->iface.xmt_ucast, stats->xmit_unicasts,
+                               old->xmit_unicasts);
+
+               UPDATE_STATS_GB(stst->iface.rcv_bytes, stats->rcv_bytes,
+                               old->rcv_bytes);
+
+               UPDATE_STATS_GB(stst->iface.rcv_ucast, stats->rcv_unicasts,
+                               old->rcv_unicasts);
+
+               UPDATE_STATS_GB(stst->iface.xmt_errors, stats->xmit_collisions,
+                               old->xmit_collisions);
+
+               UPDATE_STATS_GB(stst->iface.xmt_errors,
+                               stats->xmit_excess_collisions,
+                               old->xmit_excess_collisions);
+
+               UPDATE_STATS_GB(stst->iface.xmt_errors, stats->xmit_other_error,
+                               old->xmit_other_error);
+
+               UPDATE_STATS_GB(stst->iface.rcv_errors, stats->rcv_other_error,
+                               old->rcv_other_error);
+
+               UPDATE_STATS_GB(stst->iface.rcv_discards, stats->rcv_drops,
+                               old->rcv_drops);
+
+               if (stats->rcv_drops > old->rcv_drops)
+                       adapter->rcv_drops += (stats->rcv_drops -
+                                              old->rcv_drops);
+               memcpy_fromio(old, stats, sizeof(*stats));
+               break;
+       }
        case SLIC_UPR_RLSR:
                slic_link_upr_complete(adapter, isr);
                break;
@@ -1186,7 +1125,6 @@ static int slic_rspqueue_init(struct adapter *adapter)
 {
        int i;
        struct slic_rspqueue *rspq = &adapter->rspqueue;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
        u32 paddrh = 0;
 
        memset(rspq, 0, sizeof(struct slic_rspqueue));
@@ -1205,14 +1143,12 @@ static int slic_rspqueue_init(struct adapter *adapter)
                }
 
                if (paddrh == 0) {
-                       slic_reg32_write(&slic_regs->slic_rbar,
-                               (rspq->paddr[i] | SLIC_RSPQ_BUFSINPAGE),
-                               DONT_FLUSH);
+                       slic_write32(adapter, SLIC_REG_RBAR,
+                                    rspq->paddr[i] | SLIC_RSPQ_BUFSINPAGE);
                } else {
-                       slic_reg64_write(adapter, &slic_regs->slic_rbar64,
-                               (rspq->paddr[i] | SLIC_RSPQ_BUFSINPAGE),
-                               &slic_regs->slic_addr_upper,
-                               paddrh, DONT_FLUSH);
+                       slic_write64(adapter, SLIC_REG_RBAR64,
+                                    rspq->paddr[i] | SLIC_RSPQ_BUFSINPAGE,
+                                    paddrh);
                }
        }
        rspq->offset = 0;
@@ -1233,9 +1169,9 @@ static struct slic_rspbuf *slic_rspqueue_getnext(struct adapter *adapter)
        if (++rspq->offset < SLIC_RSPQ_BUFSINPAGE) {
                rspq->rspbuf++;
        } else {
-               slic_reg64_write(adapter, &adapter->slic_regs->slic_rbar64,
-                       (rspq->paddr[rspq->pageindex] | SLIC_RSPQ_BUFSINPAGE),
-                       &adapter->slic_regs->slic_addr_upper, 0, DONT_FLUSH);
+               slic_write64(adapter, SLIC_REG_RBAR64,
+                            rspq->paddr[rspq->pageindex] |
+                            SLIC_RSPQ_BUFSINPAGE, 0);
                rspq->pageindex = (rspq->pageindex + 1) % rspq->num_pages;
                rspq->offset = 0;
                rspq->rspbuf = (struct slic_rspbuf *)
@@ -1569,14 +1505,11 @@ retry_rcvqfill:
                        }
 #endif
                        if (paddrh == 0) {
-                               slic_reg32_write(&adapter->slic_regs->slic_hbar,
-                                                (u32)paddrl, DONT_FLUSH);
+                               slic_write32(adapter, SLIC_REG_HBAR,
+                                            (u32)paddrl);
                        } else {
-                               slic_reg64_write(adapter,
-                                       &adapter->slic_regs->slic_hbar64,
-                                       paddrl,
-                                       &adapter->slic_regs->slic_addr_upper,
-                                       paddrh, DONT_FLUSH);
+                               slic_write64(adapter, SLIC_REG_HBAR64, paddrl,
+                                            paddrh);
                        }
                        if (rcvq->head)
                                rcvq->tail->next = skb;
@@ -1699,12 +1632,9 @@ static u32 slic_rcvqueue_reinsert(struct adapter *adapter, struct sk_buff *skb)
                dev_err(dev, "         rcvq->count[%x]\n", rcvq->count);
        }
        if (paddrh == 0) {
-               slic_reg32_write(&adapter->slic_regs->slic_hbar, (u32)paddrl,
-                                DONT_FLUSH);
+               slic_write32(adapter, SLIC_REG_HBAR, (u32)paddrl);
        } else {
-               slic_reg64_write(adapter, &adapter->slic_regs->slic_hbar64,
-                                paddrl, &adapter->slic_regs->slic_addr_upper,
-                                paddrh, DONT_FLUSH);
+               slic_write64(adapter, SLIC_REG_HBAR64, paddrl, paddrh);
        }
        if (rcvq->head)
                rcvq->tail->next = skb;
@@ -1728,26 +1658,18 @@ static u32 slic_rcvqueue_reinsert(struct adapter *adapter, struct sk_buff *skb)
 static int slic_link_event_handler(struct adapter *adapter)
 {
        int status;
-       struct slic_shmem *pshmem;
+       struct slic_shmemory *sm = &adapter->shmem;
+       dma_addr_t phaddr = sm->lnkstatus_phaddr;
+
 
        if (adapter->state != ADAPT_UP) {
                /* Adapter is not operational.  Ignore.  */
                return -ENODEV;
        }
-
-       pshmem = (struct slic_shmem *)(unsigned long)adapter->phys_shmem;
-
-#if BITS_PER_LONG == 64
-       status = slic_upr_request(adapter,
-                                 SLIC_UPR_RLSR,
-                                 SLIC_GET_ADDR_LOW(&pshmem->linkstatus),
-                                 SLIC_GET_ADDR_HIGH(&pshmem->linkstatus),
-                                 0, 0);
-#else
+       /* no 4GB wrap guaranteed */
        status = slic_upr_request(adapter, SLIC_UPR_RLSR,
-               (u32)&pshmem->linkstatus,       /* no 4GB wrap guaranteed */
-                                 0, 0, 0);
-#endif
+                                 cpu_to_le32(lower_32_bits(phaddr)),
+                                 cpu_to_le32(upper_32_bits(phaddr)), 0, 0);
        return status;
 }
 
@@ -1757,12 +1679,13 @@ static void slic_init_cleanup(struct adapter *adapter)
                adapter->intrregistered = 0;
                free_irq(adapter->netdev->irq, adapter->netdev);
        }
-       if (adapter->pshmem) {
-               pci_free_consistent(adapter->pcidev,
-                                   sizeof(struct slic_shmem),
-                                   adapter->pshmem, adapter->phys_shmem);
-               adapter->pshmem = NULL;
-               adapter->phys_shmem = (dma_addr_t)(unsigned long)NULL;
+
+       if (adapter->shmem.shmem_data) {
+               struct slic_shmemory *sm = &adapter->shmem;
+               struct slic_shmem_data *sm_data = sm->shmem_data;
+
+               pci_free_consistent(adapter->pcidev, sizeof(*sm_data), sm_data,
+                                   sm->isr_phaddr);
        }
 
        if (adapter->pingtimerset) {
@@ -2147,13 +2070,16 @@ static irqreturn_t slic_interrupt(int irq, void *dev_id)
 {
        struct net_device *dev = dev_id;
        struct adapter *adapter = netdev_priv(dev);
+       struct slic_shmemory *sm = &adapter->shmem;
+       struct slic_shmem_data *sm_data = sm->shmem_data;
        u32 isr;
 
-       if ((adapter->pshmem) && (adapter->pshmem->isr)) {
-               slic_reg32_write(&adapter->slic_regs->slic_icr,
-                                ICR_INT_MASK, FLUSH);
-               isr = adapter->isrcopy = adapter->pshmem->isr;
-               adapter->pshmem->isr = 0;
+       if (sm_data->isr) {
+               slic_write32(adapter, SLIC_REG_ICR, ICR_INT_MASK);
+               slic_flush_write(adapter);
+
+               isr = sm_data->isr;
+               sm_data->isr = 0;
                adapter->num_isrs++;
                switch (adapter->card->state) {
                case CARD_UP:
@@ -2169,10 +2095,9 @@ static irqreturn_t slic_interrupt(int irq, void *dev_id)
                        break;
                }
 
-               adapter->isrcopy = 0;
                adapter->all_reg_writes += 2;
                adapter->isr_reg_writes++;
-               slic_reg32_write(&adapter->slic_regs->slic_isr, 0, FLUSH);
+               slic_write32(adapter, SLIC_REG_ISR, 0);
        } else {
                adapter->false_interrupts++;
        }
@@ -2224,13 +2149,11 @@ static netdev_tx_t slic_xmit_start(struct sk_buff *skb, struct net_device *dev)
        }
 #endif
        if (hcmd->paddrh == 0) {
-               slic_reg32_write(&adapter->slic_regs->slic_cbar,
-                                (hcmd->paddrl | hcmd->cmdsize), DONT_FLUSH);
+               slic_write32(adapter, SLIC_REG_CBAR, (hcmd->paddrl |
+                                                     hcmd->cmdsize));
        } else {
-               slic_reg64_write(adapter, &adapter->slic_regs->slic_cbar64,
-                                (hcmd->paddrl | hcmd->cmdsize),
-                                &adapter->slic_regs->slic_addr_upper,
-                                hcmd->paddrh, DONT_FLUSH);
+               slic_write64(adapter, SLIC_REG_CBAR64,
+                            hcmd->paddrl | hcmd->cmdsize, hcmd->paddrh);
        }
 xmit_done:
        return NETDEV_TX_OK;
@@ -2290,8 +2213,8 @@ static int slic_if_init(struct adapter *adapter, unsigned long *flags)
 {
        struct sliccard *card = adapter->card;
        struct net_device *dev = adapter->netdev;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
-       struct slic_shmem *pshmem;
+       struct slic_shmemory *sm = &adapter->shmem;
+       struct slic_shmem_data *sm_data = sm->shmem_data;
        int rc;
 
        /* adapter should be down at this point */
@@ -2335,28 +2258,20 @@ static int slic_if_init(struct adapter *adapter, unsigned long *flags)
                adapter->queues_initialized = 1;
        }
 
-       slic_reg32_write(&slic_regs->slic_icr, ICR_INT_OFF, FLUSH);
+       slic_write32(adapter, SLIC_REG_ICR, ICR_INT_OFF);
+       slic_flush_write(adapter);
        mdelay(1);
 
        if (!adapter->isp_initialized) {
                unsigned long flags;
 
-               pshmem = (struct slic_shmem *)(unsigned long)
-                        adapter->phys_shmem;
-
                spin_lock_irqsave(&adapter->bit64reglock, flags);
-
-#if BITS_PER_LONG == 64
-               slic_reg32_write(&slic_regs->slic_addr_upper,
-                                SLIC_GET_ADDR_HIGH(&pshmem->isr), DONT_FLUSH);
-               slic_reg32_write(&slic_regs->slic_isp,
-                                SLIC_GET_ADDR_LOW(&pshmem->isr), FLUSH);
-#else
-               slic_reg32_write(&slic_regs->slic_addr_upper, 0, DONT_FLUSH);
-               slic_reg32_write(&slic_regs->slic_isp, (u32)&pshmem->isr,
-                               FLUSH);
-#endif
+               slic_write32(adapter, SLIC_REG_ADDR_UPPER,
+                            cpu_to_le32(upper_32_bits(sm->isr_phaddr)));
+               slic_write32(adapter, SLIC_REG_ISP,
+                            cpu_to_le32(lower_32_bits(sm->isr_phaddr)));
                spin_unlock_irqrestore(&adapter->bit64reglock, flags);
+
                adapter->isp_initialized = 1;
        }
 
@@ -2383,17 +2298,20 @@ static int slic_if_init(struct adapter *adapter, unsigned long *flags)
        /*
         *    clear any pending events, then enable interrupts
         */
-       adapter->isrcopy = 0;
-       adapter->pshmem->isr = 0;
-       slic_reg32_write(&slic_regs->slic_isr, 0, FLUSH);
-       slic_reg32_write(&slic_regs->slic_icr, ICR_INT_ON, FLUSH);
+       sm_data->isr = 0;
+       slic_write32(adapter, SLIC_REG_ISR, 0);
+       slic_write32(adapter, SLIC_REG_ICR, ICR_INT_ON);
 
        slic_link_config(adapter, LINK_AUTOSPEED, LINK_AUTOD);
+       slic_flush_write(adapter);
+
        rc = slic_link_event_handler(adapter);
        if (rc) {
                /* disable interrupts then clear pending events */
-               slic_reg32_write(&slic_regs->slic_icr, ICR_INT_OFF, FLUSH);
-               slic_reg32_write(&slic_regs->slic_isr, 0, FLUSH);
+               slic_write32(adapter, SLIC_REG_ICR, ICR_INT_OFF);
+               slic_write32(adapter, SLIC_REG_ISR, 0);
+               slic_flush_write(adapter);
+
                if (adapter->pingtimerset) {
                        del_timer(&adapter->pingtimer);
                        adapter->pingtimerset = 0;
@@ -2417,7 +2335,7 @@ static int slic_entry_open(struct net_device *dev)
        unsigned long flags;
        int status;
 
-       netif_stop_queue(adapter->netdev);
+       netif_carrier_off(dev);
 
        spin_lock_irqsave(&slic_global.driver_lock, flags);
        if (!adapter->activated) {
@@ -2440,6 +2358,9 @@ static int slic_entry_open(struct net_device *dev)
 
 spin_unlock:
        spin_unlock_irqrestore(&slic_global.driver_lock, flags);
+
+       netif_start_queue(adapter->netdev);
+
        return status;
 }
 
@@ -2463,7 +2384,7 @@ static void slic_entry_remove(struct pci_dev *pcidev)
        unregister_netdev(dev);
 
        slic_adapter_freeresources(adapter);
-       slic_unmap_mmio_space(adapter);
+       iounmap(adapter->regs);
 
        /* free multicast addresses */
        mlist = adapter->mcastaddrs;
@@ -2497,7 +2418,6 @@ static int slic_entry_halt(struct net_device *dev)
 {
        struct adapter *adapter = netdev_priv(dev);
        struct sliccard *card = adapter->card;
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
        unsigned long flags;
 
        spin_lock_irqsave(&slic_global.driver_lock, flags);
@@ -2507,7 +2427,7 @@ static int slic_entry_halt(struct net_device *dev)
        adapter->upr_list = NULL;
        adapter->upr_busy = 0;
        adapter->devflags_prev = 0;
-       slic_reg32_write(&slic_regs->slic_icr, ICR_INT_OFF, FLUSH);
+       slic_write32(adapter, SLIC_REG_ICR, ICR_INT_OFF);
        adapter->all_reg_writes++;
        adapter->icr_reg_writes++;
        slic_config_clear(adapter);
@@ -2517,8 +2437,10 @@ static int slic_entry_halt(struct net_device *dev)
                adapter->activated = 0;
        }
 #ifdef AUTOMATIC_RESET
-       slic_reg32_write(&slic_regs->slic_reset_iface, 0, FLUSH);
+       slic_write32(adapter, SLIC_REG_RESET_IFACE, 0);
 #endif
+       slic_flush_write(adapter);
+
        /*
         *  Reset the adapter's cmd queues
         */
@@ -2530,6 +2452,9 @@ static int slic_entry_halt(struct net_device *dev)
 #endif
 
        spin_unlock_irqrestore(&slic_global.driver_lock, flags);
+
+       netif_carrier_off(dev);
+
        return 0;
 }
 
@@ -2661,14 +2586,14 @@ static void slic_config_pci(struct pci_dev *pcidev)
 
 static int slic_card_init(struct sliccard *card, struct adapter *adapter)
 {
-       __iomem struct slic_regs *slic_regs = adapter->slic_regs;
+       struct slic_shmemory *sm = &adapter->shmem;
+       struct slic_shmem_data *sm_data = sm->shmem_data;
        struct slic_eeprom *peeprom;
        struct oslic_eeprom *pOeeprom;
        dma_addr_t phys_config;
        u32 phys_configh;
        u32 phys_configl;
        u32 i = 0;
-       struct slic_shmem *pshmem;
        int status;
        uint macaddrs = card->card_size;
        ushort eecodesize;
@@ -2706,16 +2631,15 @@ static int slic_card_init(struct sliccard *card, struct adapter *adapter)
 
                memset(peeprom, 0, sizeof(struct slic_eeprom));
 
-               slic_reg32_write(&slic_regs->slic_icr, ICR_INT_OFF, FLUSH);
+               slic_write32(adapter, SLIC_REG_ICR, ICR_INT_OFF);
+               slic_flush_write(adapter);
                mdelay(1);
-               pshmem = (struct slic_shmem *)(unsigned long)
-                        adapter->phys_shmem;
 
                spin_lock_irqsave(&adapter->bit64reglock, flags);
-               slic_reg32_write(&slic_regs->slic_addr_upper,
-                                SLIC_GET_ADDR_HIGH(&pshmem->isr), DONT_FLUSH);
-               slic_reg32_write(&slic_regs->slic_isp,
-                                SLIC_GET_ADDR_LOW(&pshmem->isr), FLUSH);
+               slic_write32(adapter, SLIC_REG_ADDR_UPPER,
+                            cpu_to_le32(upper_32_bits(sm->isr_phaddr)));
+               slic_write32(adapter, SLIC_REG_ISP,
+                            cpu_to_le32(lower_32_bits(sm->isr_phaddr)));
                spin_unlock_irqrestore(&adapter->bit64reglock, flags);
 
                status = slic_config_get(adapter, phys_configl, phys_configh);
@@ -2726,33 +2650,31 @@ static int slic_card_init(struct sliccard *card, struct adapter *adapter)
                }
 
                for (;;) {
-                       if (adapter->pshmem->isr) {
-                               if (adapter->pshmem->isr & ISR_UPC) {
-                                       adapter->pshmem->isr = 0;
-                                       slic_reg64_write(adapter,
-                                               &slic_regs->slic_isp, 0,
-                                               &slic_regs->slic_addr_upper,
-                                               0, FLUSH);
-                                       slic_reg32_write(&slic_regs->slic_isr,
-                                                        0, FLUSH);
+                       if (sm_data->isr) {
+                               if (sm_data->isr & ISR_UPC) {
+                                       sm_data->isr = 0;
+                                       slic_write64(adapter, SLIC_REG_ISP, 0,
+                                                    0);
+                                       slic_write32(adapter, SLIC_REG_ISR, 0);
+                                       slic_flush_write(adapter);
 
                                        slic_upr_request_complete(adapter, 0);
                                        break;
                                }
 
-                               adapter->pshmem->isr = 0;
-                               slic_reg32_write(&slic_regs->slic_isr,
-                                                0, FLUSH);
+                               sm_data->isr = 0;
+                               slic_write32(adapter, SLIC_REG_ISR, 0);
+                               slic_flush_write(adapter);
                        } else {
                                mdelay(1);
                                i++;
                                if (i > 5000) {
                                        dev_err(&adapter->pcidev->dev,
                                                "Fetch of config data timed out.\n");
-                                       slic_reg64_write(adapter,
-                                               &slic_regs->slic_isp, 0,
-                                               &slic_regs->slic_addr_upper,
-                                               0, FLUSH);
+                                       slic_write64(adapter, SLIC_REG_ISP,
+                                                    0, 0);
+                                       slic_flush_write(adapter);
+
                                        status = -EINVAL;
                                        goto card_init_err;
                                }
@@ -2830,9 +2752,8 @@ static int slic_card_init(struct sliccard *card, struct adapter *adapter)
                                    peeprom, phys_config);
 
                if (!card->config.EepromValid) {
-                       slic_reg64_write(adapter, &slic_regs->slic_isp, 0,
-                                        &slic_regs->slic_addr_upper,
-                                        0, FLUSH);
+                       slic_write64(adapter, SLIC_REG_ISP, 0, 0);
+                       slic_flush_write(adapter);
                        dev_err(&adapter->pcidev->dev, "EEPROM invalid.\n");
                        return -EINVAL;
                }
@@ -2896,14 +2817,17 @@ static void slic_init_driver(void)
        }
 }
 
-static void slic_init_adapter(struct net_device *netdev,
-                             struct pci_dev *pcidev,
-                             const struct pci_device_id *pci_tbl_entry,
-                             void __iomem *memaddr, int chip_idx)
+static int slic_init_adapter(struct net_device *netdev,
+                            struct pci_dev *pcidev,
+                            const struct pci_device_id *pci_tbl_entry,
+                            void __iomem *memaddr, int chip_idx)
 {
        ushort index;
        struct slic_handle *pslic_handle;
        struct adapter *adapter = netdev_priv(netdev);
+       struct slic_shmemory *sm = &adapter->shmem;
+       struct slic_shmem_data *sm_data;
+       dma_addr_t phaddr;
 
 /*     adapter->pcidev = pcidev;*/
        adapter->vendid = pci_tbl_entry->vendor;
@@ -2912,7 +2836,7 @@ static void slic_init_adapter(struct net_device *netdev,
        adapter->busnumber = pcidev->bus->number;
        adapter->slotnumber = ((pcidev->devfn >> 3) & 0x1F);
        adapter->functionnumber = (pcidev->devfn & 0x7);
-       adapter->slic_regs = memaddr;
+       adapter->regs = memaddr;
        adapter->irq = pcidev->irq;
        adapter->chipid = chip_idx;
        adapter->port = 0;
@@ -2938,13 +2862,18 @@ static void slic_init_adapter(struct net_device *netdev,
                pslic_handle->next = adapter->pfree_slic_handles;
                adapter->pfree_slic_handles = pslic_handle;
        }
-       adapter->pshmem = (struct slic_shmem *)
-                                       pci_alloc_consistent(adapter->pcidev,
-                                       sizeof(struct slic_shmem),
-                                       &adapter->
-                                       phys_shmem);
-       if (adapter->pshmem)
-               memset(adapter->pshmem, 0, sizeof(struct slic_shmem));
+       sm_data = pci_zalloc_consistent(adapter->pcidev, sizeof(*sm_data),
+                                       &phaddr);
+       if (!sm_data)
+               return -ENOMEM;
+
+       sm->shmem_data = sm_data;
+       sm->isr_phaddr = phaddr;
+       sm->lnkstatus_phaddr = phaddr + offsetof(struct slic_shmem_data,
+                                                lnkstatus);
+       sm->stats_phaddr = phaddr + offsetof(struct slic_shmem_data, stats);
+
+       return 0;
 }
 
 static const struct net_device_ops slic_netdev_ops = {
@@ -2964,27 +2893,9 @@ static u32 slic_card_locate(struct adapter *adapter)
        struct sliccard *card = slic_global.slic_card;
        struct physcard *physcard = slic_global.phys_card;
        ushort card_hostid;
-       u16 __iomem *hostid_reg;
        uint i;
-       uint rdhostid_offset = 0;
-
-       switch (adapter->devid) {
-       case SLIC_2GB_DEVICE_ID:
-               rdhostid_offset = SLIC_RDHOSTID_2GB;
-               break;
-       case SLIC_1GB_DEVICE_ID:
-               rdhostid_offset = SLIC_RDHOSTID_1GB;
-               break;
-       default:
-               return -ENODEV;
-       }
-
-       hostid_reg =
-           (u16 __iomem *)(((u8 __iomem *)(adapter->slic_regs)) +
-           rdhostid_offset);
 
-       /* read the 16 bit hostid from SRAM */
-       card_hostid = (ushort)readw(hostid_reg);
+       card_hostid = slic_read32(adapter, SLIC_REG_HOSTID);
 
        /* Initialize a new card structure if need be */
        if (card_hostid == SLIC_HOSTID_DEFAULT) {
@@ -3130,7 +3041,7 @@ static int slic_entry_probe(struct pci_dev *pcidev,
        mmio_start = pci_resource_start(pcidev, 0);
        mmio_len = pci_resource_len(pcidev, 0);
 
-       memmapped_ioaddr = ioremap(mmio_start, mmio_len);
+       memmapped_ioaddr = ioremap_nocache(mmio_start, mmio_len);
        if (!memmapped_ioaddr) {
                dev_err(&pcidev->dev, "cannot remap MMIO region %lx @ %lx\n",
                        mmio_len, mmio_start);
@@ -3142,13 +3053,17 @@ static int slic_entry_probe(struct pci_dev *pcidev,
 
        slic_init_driver();
 
-       slic_init_adapter(netdev,
-                         pcidev, pci_tbl_entry, memmapped_ioaddr, cards_found);
+       err = slic_init_adapter(netdev, pcidev, pci_tbl_entry, memmapped_ioaddr,
+                               cards_found);
+       if (err) {
+               dev_err(&pcidev->dev, "failed to init adapter: %i\n", err);
+               goto err_out_unmap;
+       }
 
        err = slic_card_locate(adapter);
        if (err) {
                dev_err(&pcidev->dev, "cannot locate card\n");
-               goto err_out_unmap;
+               goto err_clean_init;
        }
 
        card = adapter->card;
@@ -3160,7 +3075,7 @@ static int slic_entry_probe(struct pci_dev *pcidev,
 
        err = slic_card_init(card, adapter);
        if (err)
-               goto err_out_unmap;
+               goto err_clean_init;
 
        slic_adapter_set_hwaddr(adapter);
 
@@ -3168,17 +3083,21 @@ static int slic_entry_probe(struct pci_dev *pcidev,
        netdev->irq = adapter->irq;
        netdev->netdev_ops = &slic_netdev_ops;
 
+       netif_carrier_off(netdev);
+
        strcpy(netdev->name, "eth%d");
        err = register_netdev(netdev);
        if (err) {
                dev_err(&pcidev->dev, "Cannot register net device, aborting.\n");
-               goto err_out_unmap;
+               goto err_clean_init;
        }
 
        cards_found++;
 
        return 0;
 
+err_clean_init:
+       slic_init_cleanup(adapter);
 err_out_unmap:
        iounmap(memmapped_ioaddr);
 err_out_free_netdev:
@@ -3209,7 +3128,7 @@ static void __exit slic_module_cleanup(void)
        pci_unregister_driver(&slic_driver);
 }
 
-static struct ethtool_ops slic_ethtool_ops = {
+static const struct ethtool_ops slic_ethtool_ops = {
        .get_coalesce = slic_get_coalesce,
        .set_coalesce = slic_set_coalesce
 };
index f80ee776677fcebd5ca23e7eca0bf7be443b9211..c1356bb501a6018ec213598173e3b4238c6a0908 100644 (file)
@@ -86,13 +86,17 @@ static void setMemoryClock(unsigned int frequency)
 {
        unsigned int reg, divisor;
 
-       /* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
+       /* Cheok_0509: For SM750LE, the memory clock is fixed.
+        * Nothing to set.
+        */
        if (getChipType() == SM750LE)
                return;
 
        if (frequency) {
-               /* Set the frequency to the maximum frequency that the DDR Memory can take
-               which is 336MHz. */
+               /*
+                * Set the frequency to the maximum frequency that the DDR Memory can take
+                * which is 336MHz.
+                */
                if (frequency > MHz(336))
                        frequency = MHz(336);
 
@@ -133,7 +137,9 @@ static void setMasterClock(unsigned int frequency)
 {
        unsigned int reg, divisor;
 
-       /* Cheok_0509: For SM750LE, the memory clock is fixed. Nothing to set. */
+       /* Cheok_0509: For SM750LE, the memory clock is fixed.
+        * Nothing to set.
+        */
        if (getChipType() == SM750LE)
                return;
 
index ca4973ee49e4204780026434071c4220b1d2af6d..a040042aabff39fb41319e44742f737a1534d17b 100644 (file)
@@ -68,8 +68,10 @@ static void waitNextVerticalSync(int ctrl, int delay)
        if (!ctrl) {
                /* primary controller */
 
-               /* Do not wait when the Primary PLL is off or display control is already off.
-                  This will prevent the software to wait forever. */
+               /*
+                * Do not wait when the Primary PLL is off or display control is
+                * already off. This will prevent the software to wait forever.
+                */
                if (!(PEEK32(PANEL_PLL_CTRL) & PLL_CTRL_POWER) ||
                    !(PEEK32(PANEL_DISPLAY_CTRL) & DISPLAY_CTRL_TIMING)) {
                        return;
@@ -88,9 +90,10 @@ static void waitNextVerticalSync(int ctrl, int delay)
                }
 
        } else {
-
-               /* Do not wait when the Primary PLL is off or display control is already off.
-                          This will prevent the software to wait forever. */
+               /*
+                * Do not wait when the Primary PLL is off or display control is
+                * already off. This will prevent the software to wait forever.
+                */
                if (!(PEEK32(CRT_PLL_CTRL) & PLL_CTRL_POWER) ||
                    !(PEEK32(CRT_DISPLAY_CTRL) & DISPLAY_CTRL_TIMING)) {
                        return;
index a4a255007c8d1f06526b12ccf1527f7f91f3278f..8252f771ef9e3c04be4766fe03b2fd8ddc8a5423 100644 (file)
@@ -6,9 +6,11 @@
 #include "ddk750_sii164.h"
 
 
-/* This global variable contains all the supported driver and its corresponding
-   function API. Please set the function pointer to NULL whenever the function
-   is not supported. */
+/*
+ * This global variable contains all the supported driver and its corresponding
+ * function API. Please set the function pointer to NULL whenever the function
+ * is not supported.
+ */
 static dvi_ctrl_device_t g_dcftSupportedDviController[] = {
 #ifdef DVI_CTRL_SII164
        {
index ccb4e067661a8647b3e967cf4ac58fc1f63a3b8c..e29d4bd5dcec02f78af304553831778bab81a5b2 100644 (file)
@@ -63,7 +63,7 @@ static unsigned long displayControlAdjust_SM750LE(mode_parameter_t *pModeParam,
        dispControl |= (CRT_DISPLAY_CTRL_CRTSELECT | CRT_DISPLAY_CTRL_RGBBIT);
 
        /* Set bit 14 of display controller */
-       dispControl = DISPLAY_CTRL_CLOCK_PHASE;
+       dispControl |= DISPLAY_CTRL_CLOCK_PHASE;
 
        POKE32(CRT_DISPLAY_CTRL, dispControl);
 
index 2daeedd88c30bb0ef76f64b660d4d021f84939b3..1de9f81df029d3b87d0bbdde23b13e0ebdff7ee1 100644 (file)
@@ -35,17 +35,17 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
        pr_info("mmio phyAddr = %lx\n", sm750_dev->vidreg_start);
 
        /* reserve the vidreg space of smi adaptor
-        * if you do this, u need to add release region code
+        * if you do this, you need to add release region code
         * in lynxfb_remove, or memory will not be mapped again
         * successfully
-        * */
+        */
        ret = pci_request_region(pdev, 1, "sm750fb");
        if (ret) {
                pr_err("Can not request PCI regions.\n");
                goto exit;
        }
 
-       /* now map mmio and vidmem*/
+       /* now map mmio and vidmem */
        sm750_dev->pvReg = ioremap_nocache(sm750_dev->vidreg_start,
                                           sm750_dev->vidreg_size);
        if (!sm750_dev->pvReg) {
@@ -56,7 +56,6 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
                pr_info("mmio virtual addr = %p\n", sm750_dev->pvReg);
        }
 
-
        sm750_dev->accel.dprBase = sm750_dev->pvReg + DE_BASE_ADDR_TYPE1;
        sm750_dev->accel.dpPortBase = sm750_dev->pvReg + DE_PORT_ADDR_TYPE1;
 
@@ -64,10 +63,10 @@ int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
 
        sm750_dev->vidmem_start = pci_resource_start(pdev, 0);
        /* don't use pdev_resource[x].end - resource[x].start to
-        * calculate the resource size,its only the maximum available
-        * size but not the actual size,use
+        * calculate the resource size, it's only the maximum available
+        * size but not the actual size, using
         * @ddk750_getVMSize function can be safe.
-        * */
+        */
        sm750_dev->vidmem_size = ddk750_getVMSize();
        pr_info("video memory phyAddr = %lx, size = %u bytes\n",
                sm750_dev->vidmem_start, sm750_dev->vidmem_size);
@@ -86,8 +85,6 @@ exit:
        return ret;
 }
 
-
-
 int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
 {
        struct init_status *parm;
@@ -101,10 +98,10 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
        if (parm->mem_clk == 0)
                parm->mem_clk = parm->chip_clk;
        if (parm->master_clk == 0)
-               parm->master_clk = parm->chip_clk/3;
+               parm->master_clk = parm->chip_clk / 3;
 
        ddk750_initHw((initchip_param_t *)&sm750_dev->initParm);
-       /* for sm718,open pci burst */
+       /* for sm718, open pci burst */
        if (sm750_dev->devid == 0x718) {
                POKE32(SYSTEM_CTRL,
                       PEEK32(SYSTEM_CTRL) | SYSTEM_CTRL_PCI_BURST);
@@ -112,7 +109,7 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
 
        if (getChipType() != SM750LE) {
                unsigned int val;
-               /* does user need CRT ?*/
+               /* does user need CRT*/
                if (sm750_dev->nocrt) {
                        POKE32(MISC_CTRL,
                               PEEK32(MISC_CTRL) | MISC_CTRL_DAC_POWER_OFF);
@@ -144,19 +141,21 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
                }
                POKE32(PANEL_DISPLAY_CTRL, val);
        } else {
-               /* for 750LE ,no DVI chip initialization makes Monitor no signal */
-               /* Set up GPIO for software I2C to program DVI chip in the
-                  Xilinx SP605 board, in order to have video signal.
+               /* for 750LE, no DVI chip initialization
+                * makes Monitor no signal
+                *
+                * Set up GPIO for software I2C to program DVI chip in the
+                * Xilinx SP605 board, in order to have video signal.
                 */
                sm750_sw_i2c_init(0, 1);
 
                /* Customer may NOT use CH7301 DVI chip, which has to be
-               initialized differently.
-               */
+                * initialized differently.
+                */
                if (sm750_sw_i2c_read_reg(0xec, 0x4a) == 0x95) {
                /* The following register values for CH7301 are from
-                  Chrontel app note and our experiment.
-               */
+                * Chrontel app note and our experiment.
+                */
                        pr_info("yes,CH7301 DVI chip found\n");
                        sm750_sw_i2c_write_reg(0xec, 0x1d, 0x16);
                        sm750_sw_i2c_write_reg(0xec, 0x21, 0x9);
@@ -173,7 +172,8 @@ int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev)
 }
 
 int hw_sm750_output_setMode(struct lynxfb_output *output,
-                                                                       struct fb_var_screeninfo *var, struct fb_fix_screeninfo *fix)
+                           struct fb_var_screeninfo *var,
+                           struct fb_fix_screeninfo *fix)
 {
        int ret;
        disp_output_t dispSet;
@@ -183,7 +183,6 @@ int hw_sm750_output_setMode(struct lynxfb_output *output,
        dispSet = 0;
        channel = *output->channel;
 
-
        if (getChipType() != SM750LE) {
                if (channel == sm750_primary) {
                        pr_info("primary channel\n");
@@ -198,11 +197,10 @@ int hw_sm750_output_setMode(struct lynxfb_output *output,
                                dispSet |= do_LCD1_SEC;
                        if (output->paths & sm750_crt)
                                dispSet |= do_CRT_SEC;
-
                }
                ddk750_setLogicalDispOut(dispSet);
        } else {
-               /* just open DISPLAY_CONTROL_750LE register bit 3:0*/
+               /* just open DISPLAY_CONTROL_750LE register bit 3:0 */
                u32 reg;
 
                reg = PEEK32(DISPLAY_CONTROL_750LE);
@@ -214,7 +212,8 @@ int hw_sm750_output_setMode(struct lynxfb_output *output,
        return ret;
 }
 
-int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc, struct fb_var_screeninfo *var)
+int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc,
+                           struct fb_var_screeninfo *var)
 {
        struct sm750_dev *sm750_dev;
        struct lynxfb_par *par = container_of(crtc, struct lynxfb_par, crtc);
@@ -233,19 +232,15 @@ int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc, struct fb_var_screeninfo *
                break;
        default:
                return -EINVAL;
-
        }
 
        return 0;
 }
 
-
-/*
-       set the controller's mode for @crtc charged with @var and @fix parameters
-*/
+/* set the controller's mode for @crtc charged with @var and @fix parameters */
 int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
-                                                               struct fb_var_screeninfo *var,
-                                                               struct fb_fix_screeninfo *fix)
+                         struct fb_var_screeninfo *var,
+                         struct fb_fix_screeninfo *fix)
 {
        int ret, fmt;
        u32 reg;
@@ -254,7 +249,6 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
        struct sm750_dev *sm750_dev;
        struct lynxfb_par *par;
 
-
        ret = 0;
        par = container_of(crtc, struct lynxfb_par, crtc);
        sm750_dev = par->dev;
@@ -278,17 +272,22 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
 
        /* set timing */
        modparm.pixel_clock = ps_to_hz(var->pixclock);
-       modparm.vertical_sync_polarity = (var->sync & FB_SYNC_HOR_HIGH_ACT) ? POS:NEG;
-       modparm.horizontal_sync_polarity = (var->sync & FB_SYNC_VERT_HIGH_ACT) ? POS:NEG;
-       modparm.clock_phase_polarity = (var->sync & FB_SYNC_COMP_HIGH_ACT) ? POS:NEG;
+       modparm.vertical_sync_polarity = (var->sync & FB_SYNC_HOR_HIGH_ACT)
+                                        ? POS : NEG;
+       modparm.horizontal_sync_polarity = (var->sync & FB_SYNC_VERT_HIGH_ACT)
+                                          ? POS : NEG;
+       modparm.clock_phase_polarity = (var->sync & FB_SYNC_COMP_HIGH_ACT)
+                                      ? POS : NEG;
        modparm.horizontal_display_end = var->xres;
        modparm.horizontal_sync_width = var->hsync_len;
        modparm.horizontal_sync_start = var->xres + var->right_margin;
-       modparm.horizontal_total = var->xres + var->left_margin + var->right_margin + var->hsync_len;
+       modparm.horizontal_total = var->xres + var->left_margin +
+                                  var->right_margin + var->hsync_len;
        modparm.vertical_display_end = var->yres;
        modparm.vertical_sync_height = var->vsync_len;
        modparm.vertical_sync_start = var->yres + var->lower_margin;
-       modparm.vertical_total = var->yres + var->upper_margin + var->lower_margin + var->vsync_len;
+       modparm.vertical_total = var->yres + var->upper_margin +
+                                var->lower_margin + var->vsync_len;
 
        /* choose pll */
        if (crtc->channel != sm750_secondary)
@@ -304,12 +303,14 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
        }
 
        if (crtc->channel != sm750_secondary) {
-               /* set pitch, offset ,width,start address ,etc... */
+               /* set pitch, offset, width, start address, etc... */
                POKE32(PANEL_FB_ADDRESS,
                       crtc->oScreen & PANEL_FB_ADDRESS_ADDRESS_MASK);
 
                reg = var->xres * (var->bits_per_pixel >> 3);
-               /* crtc->channel is not equal to par->index on numeric,be aware of that */
+               /* crtc->channel is not equal to par->index on numeric,
+                * be aware of that
+                */
                reg = ALIGN(reg, crtc->line_pad);
                reg = (reg << PANEL_FB_WIDTH_WIDTH_SHIFT) &
                       PANEL_FB_WIDTH_WIDTH_MASK;
@@ -341,7 +342,9 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
                /* not implemented now */
                POKE32(CRT_FB_ADDRESS, crtc->oScreen);
                reg = var->xres * (var->bits_per_pixel >> 3);
-               /* crtc->channel is not equal to par->index on numeric,be aware of that */
+               /* crtc->channel is not equal to par->index on numeric,
+                * be aware of that
+                */
                reg = ALIGN(reg, crtc->line_pad) << CRT_FB_WIDTH_WIDTH_SHIFT;
                reg &= CRT_FB_WIDTH_WIDTH_MASK;
                reg |= (fix->line_length & CRT_FB_WIDTH_OFFSET_MASK);
@@ -352,20 +355,19 @@ int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
                reg |= ((var->bits_per_pixel >> 4) &
                        CRT_DISPLAY_CTRL_FORMAT_MASK);
                POKE32(CRT_DISPLAY_CTRL, reg);
-
        }
 
-
 exit:
        return ret;
 }
 
 int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index,
-                                                               ushort red, ushort green, ushort blue)
+                      ushort red, ushort green, ushort blue)
 {
        static unsigned int add[] = {PANEL_PALETTE_RAM, CRT_PALETTE_RAM};
 
-       POKE32(add[crtc->channel] + index*4, (red<<16)|(green<<8)|blue);
+       POKE32(add[crtc->channel] + index * 4,
+              (red << 16) | (green << 8) | blue);
        return 0;
 }
 
@@ -414,7 +416,9 @@ int hw_sm750_setBLANK(struct lynxfb_output *output, int blank)
 {
        unsigned int dpms, pps, crtdb;
 
-       dpms = pps = crtdb = 0;
+       dpms = 0;
+       pps = 0;
+       crtdb = 0;
 
        switch (blank) {
        case FB_BLANK_UNBLANK:
@@ -461,7 +465,6 @@ int hw_sm750_setBLANK(struct lynxfb_output *output, int blank)
        return 0;
 }
 
-
 void hw_sm750_initAccel(struct sm750_dev *sm750_dev)
 {
        u32 reg;
@@ -509,7 +512,6 @@ int hw_sm750le_deWait(void)
        return -1;
 }
 
-
 int hw_sm750_deWait(void)
 {
        int i = 0x10000000;
@@ -529,8 +531,8 @@ int hw_sm750_deWait(void)
 }
 
 int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
-       const struct fb_var_screeninfo *var,
-       const struct fb_info *info)
+                        const struct fb_var_screeninfo *var,
+                        const struct fb_info *info)
 {
        uint32_t total;
        /* check params */
index 84989711ae6745fb9acc4434c7ed596852b35eed..58abd1d85105bd38246c12e8e429510f877859ec 100644 (file)
@@ -34,7 +34,7 @@ static ssize_t speakup_file_write(struct file *fp, const char __user *buffer,
                synth_write(buf, bytes);
                spin_unlock_irqrestore(&speakup_info.spinlock, flags);
        }
-       return (ssize_t) nbytes;
+       return (ssize_t)nbytes;
 }
 
 static ssize_t speakup_file_read(struct file *fp, char __user *buf,
index 528cbdce4227e95579694a41e14b9873c2963b6d..7fedee363455a70299208273ffc9efea6c1c9731 100644 (file)
@@ -411,11 +411,13 @@ static ssize_t synth_direct_store(struct kobject *kobj,
        int len;
        int bytes;
        const char *ptr = buf;
+       unsigned long flags;
 
        if (!synth)
                return -EPERM;
 
        len = strlen(buf);
+       spin_lock_irqsave(&speakup_info.spinlock, flags);
        while (len > 0) {
                bytes = min_t(size_t, len, 250);
                strncpy(tmp, ptr, bytes);
@@ -425,6 +427,7 @@ static ssize_t synth_direct_store(struct kobject *kobj,
                ptr += bytes;
                len -= bytes;
        }
+       spin_unlock_irqrestore(&speakup_info.spinlock, flags);
        return count;
 }
 
index 4f462c35fdd98dd12d8a96d63d6ff08d0b9c65e7..810a21408715e69d4b8b2f49352b158bd1a9d333 100644 (file)
@@ -18,7 +18,7 @@
 #include "serialio.h"
 
 #define MAXSYNTHS       16      /* Max number of synths in array. */
-static struct spk_synth *synths[MAXSYNTHS];
+static struct spk_synth *synths[MAXSYNTHS + 1];
 struct spk_synth *synth;
 char spk_pitch_buff[32] = "";
 static int module_status;
index db4e6b28755b45066c73023fade02524d8a17765..ff86f7af2c3d8d89c86008047c716e28ae1fd2e4 100644 (file)
@@ -569,4 +569,45 @@ unsigned int spar_signal_remove_all(struct channel_header *ch, u32 queue,
 unsigned char spar_signalqueue_empty(struct channel_header __iomem *ch,
                                     u32 queue);
 
+/*
+ * CHANNEL Guids
+ */
+
+/* {414815ed-c58c-11da-95a9-00e08161165f} */
+#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID \
+               UUID_LE(0x414815ed, 0xc58c, 0x11da, \
+                               0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
+static const uuid_le spar_vhba_channel_protocol_uuid =
+       SPAR_VHBA_CHANNEL_PROTOCOL_UUID;
+#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID_STR \
+       "414815ed-c58c-11da-95a9-00e08161165f"
+
+/* {8cd5994d-c58e-11da-95a9-00e08161165f} */
+#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID \
+               UUID_LE(0x8cd5994d, 0xc58e, 0x11da, \
+                               0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
+static const uuid_le spar_vnic_channel_protocol_uuid =
+       SPAR_VNIC_CHANNEL_PROTOCOL_UUID;
+#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID_STR \
+       "8cd5994d-c58e-11da-95a9-00e08161165f"
+
+/* {72120008-4AAB-11DC-8530-444553544200} */
+#define SPAR_SIOVM_UUID \
+               UUID_LE(0x72120008, 0x4AAB, 0x11DC, \
+                               0x85, 0x30, 0x44, 0x45, 0x53, 0x54, 0x42, 0x00)
+static const uuid_le spar_siovm_uuid = SPAR_SIOVM_UUID;
+
+/* {5b52c5ac-e5f5-4d42-8dff-429eaecd221f} */
+#define SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID  \
+               UUID_LE(0x5b52c5ac, 0xe5f5, 0x4d42, \
+                               0x8d, 0xff, 0x42, 0x9e, 0xae, 0xcd, 0x22, 0x1f)
+
+static const uuid_le spar_controldirector_channel_protocol_uuid =
+       SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID;
+
+/* {b4e79625-aede-4eAA-9e11-D3eddcd4504c} */
+#define SPAR_DIAG_POOL_CHANNEL_PROTOCOL_UUID                           \
+               UUID_LE(0xb4e79625, 0xaede, 0x4eaa, \
+                               0x9e, 0x11, 0xd3, 0xed, 0xdc, 0xd4, 0x50, 0x4c)
+
 #endif
diff --git a/drivers/staging/unisys/include/channel_guid.h b/drivers/staging/unisys/include/channel_guid.h
deleted file mode 100644 (file)
index 17cb499..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-/*
- * CHANNEL Guids
- */
-
-/* {414815ed-c58c-11da-95a9-00e08161165f} */
-#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID \
-               UUID_LE(0x414815ed, 0xc58c, 0x11da, \
-                               0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
-static const uuid_le spar_vhba_channel_protocol_uuid =
-       SPAR_VHBA_CHANNEL_PROTOCOL_UUID;
-#define SPAR_VHBA_CHANNEL_PROTOCOL_UUID_STR \
-       "414815ed-c58c-11da-95a9-00e08161165f"
-
-/* {8cd5994d-c58e-11da-95a9-00e08161165f} */
-#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID \
-               UUID_LE(0x8cd5994d, 0xc58e, 0x11da, \
-                               0x95, 0xa9, 0x0, 0xe0, 0x81, 0x61, 0x16, 0x5f)
-static const uuid_le spar_vnic_channel_protocol_uuid =
-       SPAR_VNIC_CHANNEL_PROTOCOL_UUID;
-#define SPAR_VNIC_CHANNEL_PROTOCOL_UUID_STR \
-       "8cd5994d-c58e-11da-95a9-00e08161165f"
-
-/* {72120008-4AAB-11DC-8530-444553544200} */
-#define SPAR_SIOVM_UUID \
-               UUID_LE(0x72120008, 0x4AAB, 0x11DC, \
-                               0x85, 0x30, 0x44, 0x45, 0x53, 0x54, 0x42, 0x00)
-static const uuid_le spar_siovm_uuid = SPAR_SIOVM_UUID;
-
-/* {5b52c5ac-e5f5-4d42-8dff-429eaecd221f} */
-#define SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID  \
-               UUID_LE(0x5b52c5ac, 0xe5f5, 0x4d42, \
-                               0x8d, 0xff, 0x42, 0x9e, 0xae, 0xcd, 0x22, 0x1f)
-
-static const uuid_le spar_controldirector_channel_protocol_uuid =
-       SPAR_CONTROLDIRECTOR_CHANNEL_PROTOCOL_UUID;
-
-/* {b4e79625-aede-4eAA-9e11-D3eddcd4504c} */
-#define SPAR_DIAG_POOL_CHANNEL_PROTOCOL_UUID                           \
-               UUID_LE(0xb4e79625, 0xaede, 0x4eaa, \
-                               0x9e, 0x11, 0xd3, 0xed, 0xdc, 0xd4, 0x50, 0x4c)
diff --git a/drivers/staging/unisys/include/diagchannel.h b/drivers/staging/unisys/include/diagchannel.h
deleted file mode 100644 (file)
index 6e813c7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#ifndef _DIAG_CHANNEL_H_
-#define _DIAG_CHANNEL_H_
-
-/* Levels of severity for diagnostic events, in order from lowest severity to
- * highest (i.e. fatal errors are the most severe, and should always be logged,
- * but info events rarely need to be logged except during debugging). The
- * values DIAG_SEVERITY_ENUM_BEGIN and DIAG_SEVERITY_ENUM_END are not valid
- * severity values.  They exist merely to dilineate the list, so that future
- * additions won't require changes to the driver (i.e. when checking for
- * out-of-range severities in SetSeverity). The values DIAG_SEVERITY_OVERRIDE
- * and DIAG_SEVERITY_SHUTOFF are not valid severity values for logging events
- * but they are valid for controlling the amount of event data. Changes made
- * to the enum, need to be reflected in s-Par.
- */
-enum diag_severity {
-               DIAG_SEVERITY_VERBOSE = 0,
-               DIAG_SEVERITY_INFO = 1,
-               DIAG_SEVERITY_WARNING = 2,
-               DIAG_SEVERITY_ERR = 3,
-               DIAG_SEVERITY_PRINT = 4,
-};
-
-#endif
diff --git a/drivers/staging/unisys/include/guestlinuxdebug.h b/drivers/staging/unisys/include/guestlinuxdebug.h
deleted file mode 100644 (file)
index b81287f..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/* Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#ifndef __GUESTLINUXDEBUG_H__
-#define __GUESTLINUXDEBUG_H__
-
-/*
- * This file contains supporting interface for "vmcallinterface.h", particularly
- * regarding adding additional structure and functionality to linux
- * ISSUE_IO_VMCALL_POSTCODE_SEVERITY
- */
-
-/******* INFO ON ISSUE_POSTCODE_LINUX() BELOW *******/
-enum driver_pc {               /* POSTCODE driver identifier tuples */
-       /* visorchipset driver files */
-       VISOR_CHIPSET_PC = 0xA0,
-       VISOR_CHIPSET_PC_controlvm_c = 0xA1,
-       VISOR_CHIPSET_PC_controlvm_cm2 = 0xA2,
-       VISOR_CHIPSET_PC_controlvm_direct_c = 0xA3,
-       VISOR_CHIPSET_PC_file_c = 0xA4,
-       VISOR_CHIPSET_PC_parser_c = 0xA5,
-       VISOR_CHIPSET_PC_testing_c = 0xA6,
-       VISOR_CHIPSET_PC_visorchipset_main_c = 0xA7,
-       VISOR_CHIPSET_PC_visorswitchbus_c = 0xA8,
-       /* visorbus driver files */
-       VISOR_BUS_PC = 0xB0,
-       VISOR_BUS_PC_businst_attr_c = 0xB1,
-       VISOR_BUS_PC_channel_attr_c = 0xB2,
-       VISOR_BUS_PC_devmajorminor_attr_c = 0xB3,
-       VISOR_BUS_PC_visorbus_main_c = 0xB4,
-       /* visorclientbus driver files */
-       VISOR_CLIENT_BUS_PC = 0xC0,
-       VISOR_CLIENT_BUS_PC_visorclientbus_main_c = 0xC1,
-       /* virt hba driver files */
-       VIRT_HBA_PC = 0xC2,
-       VIRT_HBA_PC_virthba_c = 0xC3,
-       /* virtpci driver files */
-       VIRT_PCI_PC = 0xC4,
-       VIRT_PCI_PC_virtpci_c = 0xC5,
-       /* virtnic driver files */
-       VIRT_NIC_PC = 0xC6,
-       VIRT_NIC_P_virtnic_c = 0xC7,
-       /* uislib driver files */
-       UISLIB_PC = 0xD0,
-       UISLIB_PC_uislib_c = 0xD1,
-       UISLIB_PC_uisqueue_c = 0xD2,
-       UISLIB_PC_uisthread_c = 0xD3,
-       UISLIB_PC_uisutils_c = 0xD4,
-};
-
-enum event_pc {                        /* POSTCODE event identifier tuples */
-       ATTACH_PORT_ENTRY_PC = 0x001,
-       ATTACH_PORT_FAILURE_PC = 0x002,
-       ATTACH_PORT_SUCCESS_PC = 0x003,
-       BUS_FAILURE_PC = 0x004,
-       BUS_CREATE_ENTRY_PC = 0x005,
-       BUS_CREATE_FAILURE_PC = 0x006,
-       BUS_CREATE_EXIT_PC = 0x007,
-       BUS_CONFIGURE_ENTRY_PC = 0x008,
-       BUS_CONFIGURE_FAILURE_PC = 0x009,
-       BUS_CONFIGURE_EXIT_PC = 0x00A,
-       CHIPSET_INIT_ENTRY_PC = 0x00B,
-       CHIPSET_INIT_SUCCESS_PC = 0x00C,
-       CHIPSET_INIT_FAILURE_PC = 0x00D,
-       CHIPSET_INIT_EXIT_PC = 0x00E,
-       CREATE_WORKQUEUE_PC = 0x00F,
-       CREATE_WORKQUEUE_FAILED_PC = 0x0A0,
-       CONTROLVM_INIT_FAILURE_PC = 0x0A1,
-       DEVICE_CREATE_ENTRY_PC = 0x0A2,
-       DEVICE_CREATE_FAILURE_PC = 0x0A3,
-       DEVICE_CREATE_SUCCESS_PC = 0x0A4,
-       DEVICE_CREATE_EXIT_PC = 0x0A5,
-       DEVICE_ADD_PC = 0x0A6,
-       DEVICE_REGISTER_FAILURE_PC = 0x0A7,
-       DEVICE_CHANGESTATE_ENTRY_PC = 0x0A8,
-       DEVICE_CHANGESTATE_FAILURE_PC = 0x0A9,
-       DEVICE_CHANGESTATE_EXIT_PC = 0x0AA,
-       DRIVER_ENTRY_PC = 0x0AB,
-       DRIVER_EXIT_PC = 0x0AC,
-       MALLOC_FAILURE_PC = 0x0AD,
-       QUEUE_DELAYED_WORK_PC = 0x0AE,
-       UISLIB_THREAD_FAILURE_PC = 0x0B7,
-       VBUS_CHANNEL_ENTRY_PC = 0x0B8,
-       VBUS_CHANNEL_FAILURE_PC = 0x0B9,
-       VBUS_CHANNEL_EXIT_PC = 0x0BA,
-       VHBA_CREATE_ENTRY_PC = 0x0BB,
-       VHBA_CREATE_FAILURE_PC = 0x0BC,
-       VHBA_CREATE_EXIT_PC = 0x0BD,
-       VHBA_CREATE_SUCCESS_PC = 0x0BE,
-       VHBA_COMMAND_HANDLER_PC = 0x0BF,
-       VHBA_PROBE_ENTRY_PC = 0x0C0,
-       VHBA_PROBE_FAILURE_PC = 0x0C1,
-       VHBA_PROBE_EXIT_PC = 0x0C2,
-       VNIC_CREATE_ENTRY_PC = 0x0C3,
-       VNIC_CREATE_FAILURE_PC = 0x0C4,
-       VNIC_CREATE_SUCCESS_PC = 0x0C5,
-       VNIC_PROBE_ENTRY_PC = 0x0C6,
-       VNIC_PROBE_FAILURE_PC = 0x0C7,
-       VNIC_PROBE_EXIT_PC = 0x0C8,
-       VPCI_CREATE_ENTRY_PC = 0x0C9,
-       VPCI_CREATE_FAILURE_PC = 0x0CA,
-       VPCI_CREATE_EXIT_PC = 0x0CB,
-       VPCI_PROBE_ENTRY_PC = 0x0CC,
-       VPCI_PROBE_FAILURE_PC = 0x0CD,
-       VPCI_PROBE_EXIT_PC = 0x0CE,
-       CRASH_DEV_ENTRY_PC = 0x0CF,
-       CRASH_DEV_EXIT_PC = 0x0D0,
-       CRASH_DEV_HADDR_NULL = 0x0D1,
-       CRASH_DEV_CONTROLVM_NULL = 0x0D2,
-       CRASH_DEV_RD_BUS_FAIULRE_PC = 0x0D3,
-       CRASH_DEV_RD_DEV_FAIULRE_PC = 0x0D4,
-       CRASH_DEV_BUS_NULL_FAILURE_PC = 0x0D5,
-       CRASH_DEV_DEV_NULL_FAILURE_PC = 0x0D6,
-       CRASH_DEV_CTRL_RD_FAILURE_PC = 0x0D7,
-       CRASH_DEV_COUNT_FAILURE_PC = 0x0D8,
-       SAVE_MSG_BUS_FAILURE_PC = 0x0D9,
-       SAVE_MSG_DEV_FAILURE_PC = 0x0DA,
-       CALLHOME_INIT_FAILURE_PC = 0x0DB
-};
-
-#ifdef __GNUC__
-
-#define POSTCODE_SEVERITY_ERR DIAG_SEVERITY_ERR
-#define POSTCODE_SEVERITY_WARNING DIAG_SEVERITY_WARNING
-/* TODO-> Info currently doesn't show, so we set info=warning */
-#define POSTCODE_SEVERITY_INFO DIAG_SEVERITY_PRINT
-
-/* example call of POSTCODE_LINUX_2(VISOR_CHIPSET_PC, POSTCODE_SEVERITY_ERR);
- * Please also note that the resulting postcode is in hex, so if you are
- * searching for the __LINE__ number, convert it first to decimal.  The line
- * number combined with driver and type of call, will allow you to track down
- * exactly what line an error occurred on, or where the last driver
- * entered/exited from.
- */
-
-/* BASE FUNCTIONS */
-#define POSTCODE_LINUX_A(DRIVER_PC, EVENT_PC, pc32bit, severity)       \
-do {                                                                   \
-       unsigned long long post_code_temp;                              \
-       post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \
-               ((((u64)__LINE__) & 0xFFF) << 32) |                     \
-               (((u64)pc32bit) & 0xFFFFFFFF);                          \
-       ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity);    \
-} while (0)
-
-#define POSTCODE_LINUX_B(DRIVER_PC, EVENT_PC, pc16bit1, pc16bit2, severity) \
-do {                                                                   \
-       unsigned long long post_code_temp;                              \
-       post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \
-               ((((u64)__LINE__) & 0xFFF) << 32) |                     \
-               ((((u64)pc16bit1) & 0xFFFF) << 16) |                    \
-               (((u64)pc16bit2) & 0xFFFF);                             \
-       ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity);    \
-} while (0)
-
-/* MOST COMMON */
-#define POSTCODE_LINUX_2(EVENT_PC, severity)                           \
-       POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, 0x0000, severity)
-
-#define POSTCODE_LINUX_3(EVENT_PC, pc32bit, severity)                  \
-       POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, pc32bit, severity)
-
-#define POSTCODE_LINUX_4(EVENT_PC, pc16bit1, pc16bit2, severity)       \
-       POSTCODE_LINUX_B(CURRENT_FILE_PC, EVENT_PC, pc16bit1,           \
-                        pc16bit2, severity)
-
-#endif
-#endif
index 5ccf81485d7289345fe71b22041d855ddfbbd59c..cba4433bcd51963d4f50db940dbcf6e31e5ada07 100644 (file)
@@ -33,7 +33,6 @@
 
 #include <linux/dma-direction.h>
 #include "channel.h"
-#include "channel_guid.h"
 
 #define ULTRA_VHBA_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE
 #define ULTRA_VNIC_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE
diff --git a/drivers/staging/unisys/include/periodic_work.h b/drivers/staging/unisys/include/periodic_work.h
deleted file mode 100644 (file)
index 0b3335a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* periodic_work.h
- *
- * Copyright (C) 2010 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#ifndef __PERIODIC_WORK_H__
-#define __PERIODIC_WORK_H__
-
-#include <linux/seq_file.h>
-#include <linux/slab.h>
-
-/* PERIODIC_WORK an opaque structure to users.
- * Fields are declared only in the implementation .c files.
- */
-struct periodic_work;
-
-struct periodic_work *
-visor_periodic_work_create(ulong jiffy_interval,
-                          struct workqueue_struct *workqueue,
-                          void (*workfunc)(void *),
-                          void *workfuncarg,
-                          const char *devnam);
-void visor_periodic_work_destroy(struct periodic_work *pw);
-bool visor_periodic_work_nextperiod(struct periodic_work *pw);
-bool visor_periodic_work_start(struct periodic_work *pw);
-bool visor_periodic_work_stop(struct periodic_work *pw);
-
-#endif
diff --git a/drivers/staging/unisys/include/vbushelper.h b/drivers/staging/unisys/include/vbushelper.h
deleted file mode 100644 (file)
index f1b6aac..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* vbushelper.h
- *
- * Copyright (C) 2011 - 2013 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#ifndef __VBUSHELPER_H__
-#define __VBUSHELPER_H__
-
-/* TARGET_HOSTNAME specified as -DTARGET_HOSTNAME=\"thename\" on the
- * command line
- */
-
-#define TARGET_HOSTNAME "linuxguest"
-
-static inline void bus_device_info_init(
-               struct ultra_vbus_deviceinfo *bus_device_info_ptr,
-               const char *dev_type, const char *drv_name,
-               const char *ver, const char *ver_tag)
-{
-       memset(bus_device_info_ptr, 0, sizeof(struct ultra_vbus_deviceinfo));
-       snprintf(bus_device_info_ptr->devtype,
-                sizeof(bus_device_info_ptr->devtype),
-                "%s", (dev_type) ? dev_type : "unknownType");
-       snprintf(bus_device_info_ptr->drvname,
-                sizeof(bus_device_info_ptr->drvname),
-                "%s", (drv_name) ? drv_name : "unknownDriver");
-       snprintf(bus_device_info_ptr->infostrs,
-                sizeof(bus_device_info_ptr->infostrs), "%s\t%s\t%s",
-                (ver) ? ver : "unknownVer",
-                (ver_tag) ? ver_tag : "unknownVerTag",
-                TARGET_HOSTNAME);
-}
-
-#endif
index 9baf1ec70d0132eab09b751cc21eafbcf6ab43d4..993cf1947723b93a10a6fa85ca5f3e11d1be9ab7 100644 (file)
@@ -34,8 +34,9 @@
 #include <linux/poll.h>
 #include <linux/kernel.h>
 #include <linux/uuid.h>
+#include <linux/seq_file.h>
+#include <linux/slab.h>
 
-#include "periodic_work.h"
 #include "channel.h"
 
 struct visor_driver;
@@ -120,33 +121,33 @@ struct visor_driver {
 /**
  * struct visor_device - A device type for things "plugged" into the visorbus
  * bus
- * visorchannel:               Points to the channel that the device is
+ * @visorchannel:              Points to the channel that the device is
  *                             associated with.
- * channel_type_guid:          Identifies the channel type to the bus driver.
- * device:                     Device struct meant for use by the bus driver
+ * @channel_type_guid:         Identifies the channel type to the bus driver.
+ * @device:                    Device struct meant for use by the bus driver
  *                             only.
- * list_all:                   Used by the bus driver to enumerate devices.
- * periodic_work:              Device work queue. Private use by bus driver
- *                             only.
- * being_removed:              Indicates that the device is being removed from
+ * @list_all:                  Used by the bus driver to enumerate devices.
+ * @timer:                     Timer fired periodically to do interrupt-type
+ *                             activity.
+ * @being_removed:             Indicates that the device is being removed from
  *                             the bus. Private bus driver use only.
- * visordriver_callback_lock:  Used by the bus driver to lock when handling
+ * @visordriver_callback_lock: Used by the bus driver to lock when handling
  *                             channel events.
- * pausing:                    Indicates that a change towards a paused state.
+ * @pausing:                   Indicates that a change towards a paused state.
  *                             is in progress. Only modified by the bus driver.
- * resuming:                   Indicates that a change towards a running state
+ * @resuming:                  Indicates that a change towards a running state
  *                             is in progress. Only modified by the bus driver.
- * chipset_bus_no:             Private field used by the bus driver.
- * chipset_dev_no:             Private field used the bus driver.
- * state:                      Used to indicate the current state of the
+ * @chipset_bus_no:            Private field used by the bus driver.
+ * @chipset_dev_no:            Private field used the bus driver.
+ * @state:                     Used to indicate the current state of the
  *                             device.
- * inst:                       Unique GUID for this instance of the device.
- * name:                       Name of the device.
- * pending_msg_hdr:            For private use by bus driver to respond to
+ * @inst:                      Unique GUID for this instance of the device.
+ * @name:                      Name of the device.
+ * @pending_msg_hdr:           For private use by bus driver to respond to
  *                             hypervisor requests.
- * vbus_hdr_info:              A pointer to header info. Private use by bus
+ * @vbus_hdr_info:             A pointer to header info. Private use by bus
  *                             driver.
- * partition_uuid:             Indicates client partion id. This should be the
+ * @partition_uuid:            Indicates client partion id. This should be the
  *                             same across all visor_devices in the current
  *                             guest. Private use by bus driver only.
  */
@@ -157,9 +158,10 @@ struct visor_device {
        /* These fields are for private use by the bus driver only. */
        struct device device;
        struct list_head list_all;
-       struct periodic_work *periodic_work;
+       struct timer_list timer;
+       bool timer_active;
        bool being_removed;
-       struct semaphore visordriver_callback_lock;
+       struct mutex visordriver_callback_lock;
        bool pausing;
        bool resuming;
        u32 chipset_bus_no;
@@ -174,7 +176,6 @@ struct visor_device {
 
 #define to_visor_device(x) container_of(x, struct visor_device, device)
 
-#ifndef STANDALONE_CLIENT
 int visorbus_register_visor_driver(struct visor_driver *);
 void visorbus_unregister_visor_driver(struct visor_driver *);
 int visorbus_read_channel(struct visor_device *dev,
@@ -183,50 +184,34 @@ int visorbus_read_channel(struct visor_device *dev,
 int visorbus_write_channel(struct visor_device *dev,
                           unsigned long offset, void *src,
                           unsigned long nbytes);
-int visorbus_clear_channel(struct visor_device *dev,
-                          unsigned long offset, u8 ch, unsigned long nbytes);
 void visorbus_enable_channel_interrupts(struct visor_device *dev);
 void visorbus_disable_channel_interrupts(struct visor_device *dev);
-#endif
 
-/* Note that for visorchannel_create()
- * <channel_bytes> and <guid> arguments may be 0 if we are a channel CLIENT.
- * In this case, the values can simply be read from the channel header.
+/* Levels of severity for diagnostic events, in order from lowest severity to
+ * highest (i.e. fatal errors are the most severe, and should always be logged,
+ * but info events rarely need to be logged except during debugging). The
+ * values DIAG_SEVERITY_ENUM_BEGIN and DIAG_SEVERITY_ENUM_END are not valid
+ * severity values.  They exist merely to dilineate the list, so that future
+ * additions won't require changes to the driver (i.e. when checking for
+ * out-of-range severities in SetSeverity). The values DIAG_SEVERITY_OVERRIDE
+ * and DIAG_SEVERITY_SHUTOFF are not valid severity values for logging events
+ * but they are valid for controlling the amount of event data. Changes made
+ * to the enum, need to be reflected in s-Par.
  */
-struct visorchannel *visorchannel_create(u64 physaddr,
-                                        unsigned long channel_bytes,
-                                        gfp_t gfp, uuid_le guid);
-struct visorchannel *visorchannel_create_with_lock(u64 physaddr,
-                                                  unsigned long channel_bytes,
-                                                  gfp_t gfp, uuid_le guid);
-void visorchannel_destroy(struct visorchannel *channel);
-int visorchannel_read(struct visorchannel *channel, ulong offset,
-                     void *local, ulong nbytes);
-int visorchannel_write(struct visorchannel *channel, ulong offset,
-                      void *local, ulong nbytes);
-int visorchannel_clear(struct visorchannel *channel, ulong offset,
-                      u8 ch, ulong nbytes);
+enum diag_severity {
+       DIAG_SEVERITY_VERBOSE = 0,
+       DIAG_SEVERITY_INFO = 1,
+       DIAG_SEVERITY_WARNING = 2,
+       DIAG_SEVERITY_ERR = 3,
+       DIAG_SEVERITY_PRINT = 4,
+};
+
 bool visorchannel_signalremove(struct visorchannel *channel, u32 queue,
                               void *msg);
 bool visorchannel_signalinsert(struct visorchannel *channel, u32 queue,
                               void *msg);
 bool visorchannel_signalempty(struct visorchannel *channel, u32 queue);
-
-int visorchannel_signalqueue_slots_avail(struct visorchannel *channel,
-                                        u32 queue);
-int visorchannel_signalqueue_max_slots(struct visorchannel *channel, u32 queue);
-u64 visorchannel_get_physaddr(struct visorchannel *channel);
-ulong visorchannel_get_nbytes(struct visorchannel *channel);
-char *visorchannel_id(struct visorchannel *channel, char *s);
-char *visorchannel_zoneid(struct visorchannel *channel, char *s);
-u64 visorchannel_get_clientpartition(struct visorchannel *channel);
-int visorchannel_set_clientpartition(struct visorchannel *channel,
-                                    u64 partition_handle);
 uuid_le visorchannel_get_uuid(struct visorchannel *channel);
-char *visorchannel_uuid_id(uuid_le *guid, char *s);
-void visorchannel_debug(struct visorchannel *channel, int num_queues,
-                       struct seq_file *seq, u32 off);
-void __iomem *visorchannel_get_header(struct visorchannel *channel);
 
 #define BUS_ROOT_DEVICE                UINT_MAX
 struct visor_device *visorbus_get_device_by_id(u32 bus_no, u32 dev_no,
index fc790e7592fce7ccd97548b5d5917abe1b081d24..f3730d8c953e5359cf3963590a091915f99d2999 100644 (file)
@@ -7,6 +7,5 @@ obj-$(CONFIG_UNISYS_VISORBUS)   += visorbus.o
 visorbus-y := visorbus_main.o
 visorbus-y += visorchannel.o
 visorbus-y += visorchipset.o
-visorbus-y += periodic_work.o
 
 ccflags-y += -Idrivers/staging/unisys/include
index 03e36fb6a5a0492abe1801bbf4d4e824b8a3752f..f0bfc4ded892457481cc55342b616f41de7ac713 100644 (file)
@@ -482,4 +482,80 @@ struct spar_controlvm_parameters_header {
        u32 reserved;           /* Natural alignment */
 };
 
+/* General Errors------------------------------------------------------[0-99] */
+#define CONTROLVM_RESP_SUCCESS                                  0
+#define CONTROLVM_RESP_ERROR_ALREADY_DONE                       1
+#define CONTROLVM_RESP_ERROR_IOREMAP_FAILED                     2
+#define CONTROLVM_RESP_ERROR_KMALLOC_FAILED                     3
+#define CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN                 4
+#define CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT      5
+
+/* CONTROLVM_INIT_CHIPSET-------------------------------------------[100-199] */
+#define CONTROLVM_RESP_ERROR_CLIENT_SWITCHCOUNT_NONZERO         100
+#define CONTROLVM_RESP_ERROR_EXPECTED_CHIPSET_INIT              101
+
+/* Maximum Limit----------------------------------------------------[200-299] */
+#define CONTROLVM_RESP_ERROR_MAX_BUSES         201     /* BUS_CREATE */
+#define CONTROLVM_RESP_ERROR_MAX_DEVICES        202    /* DEVICE_CREATE */
+/* Payload and Parameter Related------------------------------------[400-499] */
+#define CONTROLVM_RESP_ERROR_PAYLOAD_INVALID   400     /* SWITCH_ATTACHEXTPORT,
+                                                        * DEVICE_CONFIGURE
+                                                        */
+#define CONTROLVM_RESP_ERROR_INITIATOR_PARAMETER_INVALID 401   /* Multiple */
+#define CONTROLVM_RESP_ERROR_TARGET_PARAMETER_INVALID 402 /* DEVICE_CONFIGURE */
+#define CONTROLVM_RESP_ERROR_CLIENT_PARAMETER_INVALID 403 /* DEVICE_CONFIGURE */
+/* Specified[Packet Structure] Value-------------------------------[500-599] */
+#define CONTROLVM_RESP_ERROR_BUS_INVALID       500     /* SWITCH_ATTACHINTPORT,
+                                                        * BUS_CONFIGURE,
+                                                        * DEVICE_CREATE,
+                                                        * DEVICE_CONFIG
+                                                        * DEVICE_DESTROY
+                                                        */
+#define CONTROLVM_RESP_ERROR_DEVICE_INVALID    501 /* SWITCH_ATTACHINTPORT */
+                                                   /* DEVICE_CREATE,
+                                                    * DEVICE_CONFIGURE,
+                                                    * DEVICE_DESTROY
+                                                    */
+#define CONTROLVM_RESP_ERROR_CHANNEL_INVALID   502 /* DEVICE_CREATE,
+                                                    * DEVICE_CONFIGURE
+                                                    */
+/* Partition Driver Callback Interface----------------------[600-699] */
+#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_FAILURE 604        /* BUS_CREATE,
+                                                        * BUS_DESTROY,
+                                                        * DEVICE_CREATE,
+                                                        * DEVICE_DESTROY
+                                                        */
+/* Unable to invoke VIRTPCI callback */
+#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_CALLBACK_ERROR 605
+                                                       /* BUS_CREATE,
+                                                        * BUS_DESTROY,
+                                                        * DEVICE_CREATE,
+                                                        * DEVICE_DESTROY
+                                                        */
+/* VIRTPCI Callback returned error */
+#define CONTROLVM_RESP_ERROR_GENERIC_DRIVER_CALLBACK_ERROR 606
+                                                       /* SWITCH_ATTACHEXTPORT,
+                                                        * SWITCH_DETACHEXTPORT
+                                                        * DEVICE_CONFIGURE
+                                                        */
+
+/* generic device callback returned error */
+/* Bus Related------------------------------------------------------[700-799] */
+#define CONTROLVM_RESP_ERROR_BUS_DEVICE_ATTACHED 700   /* BUS_DESTROY */
+/* Channel Related--------------------------------------------------[800-899] */
+#define CONTROLVM_RESP_ERROR_CHANNEL_TYPE_UNKNOWN 800  /* GET_CHANNELINFO,
+                                                        * DEVICE_DESTROY
+                                                        */
+#define CONTROLVM_RESP_ERROR_CHANNEL_SIZE_TOO_SMALL 801        /* DEVICE_CREATE */
+/* Chipset Shutdown Related---------------------------------------[1000-1099] */
+#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_FAILED            1000
+#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_ALREADY_ACTIVE    1001
+
+/* Chipset Stop Related-------------------------------------------[1100-1199] */
+#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_BUS            1100
+#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_SWITCH         1101
+
+/* Device Related-------------------------------------------------[1400-1499] */
+#define CONTROLVM_RESP_ERROR_DEVICE_UDEV_TIMEOUT                1400
+
 #endif                         /* __CONTROLVMCHANNEL_H__ */
diff --git a/drivers/staging/unisys/visorbus/controlvmcompletionstatus.h b/drivers/staging/unisys/visorbus/controlvmcompletionstatus.h
deleted file mode 100644 (file)
index 23ad0ea..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-/* controlvmcompletionstatus.c
- *
- * Copyright (C) 2010 - 2015 UNISYS CORPORATION
- * All Rights Reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-/*  Defines for all valid values returned in the response message header
- *  completionStatus field.  See controlvmchannel.h for description of
- *  the header: _CONTROLVM_MESSAGE_HEADER.
- */
-
-#ifndef __CONTROLVMCOMPLETIONSTATUS_H__
-#define __CONTROLVMCOMPLETIONSTATUS_H__
-
-/* General Errors------------------------------------------------------[0-99] */
-#define CONTROLVM_RESP_SUCCESS                                  0
-#define CONTROLVM_RESP_ERROR_ALREADY_DONE                       1
-#define CONTROLVM_RESP_ERROR_IOREMAP_FAILED                     2
-#define CONTROLVM_RESP_ERROR_KMALLOC_FAILED                     3
-#define CONTROLVM_RESP_ERROR_MESSAGE_ID_UNKNOWN                 4
-#define CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT      5
-
-/* CONTROLVM_INIT_CHIPSET-------------------------------------------[100-199] */
-#define CONTROLVM_RESP_ERROR_CLIENT_SWITCHCOUNT_NONZERO         100
-#define CONTROLVM_RESP_ERROR_EXPECTED_CHIPSET_INIT              101
-
-/* Maximum Limit----------------------------------------------------[200-299] */
-#define CONTROLVM_RESP_ERROR_MAX_BUSES         201     /* BUS_CREATE */
-#define CONTROLVM_RESP_ERROR_MAX_DEVICES        202    /* DEVICE_CREATE */
-/* Payload and Parameter Related------------------------------------[400-499] */
-#define CONTROLVM_RESP_ERROR_PAYLOAD_INVALID   400     /* SWITCH_ATTACHEXTPORT,
-                                                        * DEVICE_CONFIGURE
-                                                        */
-#define CONTROLVM_RESP_ERROR_INITIATOR_PARAMETER_INVALID 401   /* Multiple */
-#define CONTROLVM_RESP_ERROR_TARGET_PARAMETER_INVALID 402 /* DEVICE_CONFIGURE */
-#define CONTROLVM_RESP_ERROR_CLIENT_PARAMETER_INVALID 403 /* DEVICE_CONFIGURE */
-/* Specified[Packet Structure] Value-------------------------------[500-599] */
-#define CONTROLVM_RESP_ERROR_BUS_INVALID       500     /* SWITCH_ATTACHINTPORT,
-                                                        * BUS_CONFIGURE,
-                                                        * DEVICE_CREATE,
-                                                        * DEVICE_CONFIG
-                                                        * DEVICE_DESTROY
-                                                        */
-#define CONTROLVM_RESP_ERROR_DEVICE_INVALID    501 /* SWITCH_ATTACHINTPORT */
-                                                   /* DEVICE_CREATE,
-                                                    * DEVICE_CONFIGURE,
-                                                    * DEVICE_DESTROY
-                                                    */
-#define CONTROLVM_RESP_ERROR_CHANNEL_INVALID   502 /* DEVICE_CREATE,
-                                                    * DEVICE_CONFIGURE
-                                                    */
-/* Partition Driver Callback Interface----------------------[600-699] */
-#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_FAILURE 604        /* BUS_CREATE,
-                                                        * BUS_DESTROY,
-                                                        * DEVICE_CREATE,
-                                                        * DEVICE_DESTROY
-                                                        */
-/* Unable to invoke VIRTPCI callback */
-#define CONTROLVM_RESP_ERROR_VIRTPCI_DRIVER_CALLBACK_ERROR 605
-                                                       /* BUS_CREATE,
-                                                        * BUS_DESTROY,
-                                                        * DEVICE_CREATE,
-                                                        * DEVICE_DESTROY
-                                                        */
-/* VIRTPCI Callback returned error */
-#define CONTROLVM_RESP_ERROR_GENERIC_DRIVER_CALLBACK_ERROR 606
-                                                       /* SWITCH_ATTACHEXTPORT,
-                                                        * SWITCH_DETACHEXTPORT
-                                                        * DEVICE_CONFIGURE
-                                                        */
-
-/* generic device callback returned error */
-/* Bus Related------------------------------------------------------[700-799] */
-#define CONTROLVM_RESP_ERROR_BUS_DEVICE_ATTACHED 700   /* BUS_DESTROY */
-/* Channel Related--------------------------------------------------[800-899] */
-#define CONTROLVM_RESP_ERROR_CHANNEL_TYPE_UNKNOWN 800  /* GET_CHANNELINFO,
-                                                        * DEVICE_DESTROY
-                                                        */
-#define CONTROLVM_RESP_ERROR_CHANNEL_SIZE_TOO_SMALL 801        /* DEVICE_CREATE */
-/* Chipset Shutdown Related---------------------------------------[1000-1099] */
-#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_FAILED            1000
-#define CONTROLVM_RESP_ERROR_CHIPSET_SHUTDOWN_ALREADY_ACTIVE    1001
-
-/* Chipset Stop Related-------------------------------------------[1100-1199] */
-#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_BUS            1100
-#define CONTROLVM_RESP_ERROR_CHIPSET_STOP_FAILED_SWITCH         1101
-
-/* Device Related-------------------------------------------------[1400-1499] */
-#define CONTROLVM_RESP_ERROR_DEVICE_UDEV_TIMEOUT                1400
-
-#endif /* __CONTROLVMCOMPLETIONSTATUS_H__ not defined */
diff --git a/drivers/staging/unisys/visorbus/iovmcall_gnuc.h b/drivers/staging/unisys/visorbus/iovmcall_gnuc.h
deleted file mode 100644 (file)
index 98ea7f3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright (C) 2010 - 2015 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-/* Linux GCC Version (32-bit and 64-bit) */
-static inline unsigned long
-__unisys_vmcall_gnuc(unsigned long tuple, unsigned long reg_ebx,
-                    unsigned long reg_ecx)
-{
-       unsigned long result = 0;
-       unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx;
-
-       cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx);
-       if (!(cpuid_ecx & 0x80000000))
-               return -EPERM;
-
-       __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) :
-               "a"(tuple), "b"(reg_ebx), "c"(reg_ecx));
-       return result;
-}
-
-static inline unsigned long
-__unisys_extended_vmcall_gnuc(unsigned long long tuple,
-                             unsigned long long reg_ebx,
-                             unsigned long long reg_ecx,
-                             unsigned long long reg_edx)
-{
-       unsigned long result = 0;
-       unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx;
-
-       cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx);
-       if (!(cpuid_ecx & 0x80000000))
-               return -EPERM;
-
-       __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) :
-               "a"(tuple), "b"(reg_ebx), "c"(reg_ecx), "d"(reg_edx));
-       return result;
-}
diff --git a/drivers/staging/unisys/visorbus/periodic_work.c b/drivers/staging/unisys/visorbus/periodic_work.c
deleted file mode 100644 (file)
index 00b1527..0000000
+++ /dev/null
@@ -1,204 +0,0 @@
-/* periodic_work.c
- *
- * Copyright (C) 2010 - 2015 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-/*
- *  Helper functions to schedule periodic work in Linux kernel mode.
- */
-#include <linux/sched.h>
-
-#include "periodic_work.h"
-
-#define MYDRVNAME "periodic_work"
-
-struct periodic_work {
-       rwlock_t lock;
-       struct delayed_work work;
-       void (*workfunc)(void *);
-       void *workfuncarg;
-       bool is_scheduled;
-       bool want_to_stop;
-       ulong jiffy_interval;
-       struct workqueue_struct *workqueue;
-       const char *devnam;
-};
-
-static void periodic_work_func(struct work_struct *work)
-{
-       struct periodic_work *pw;
-
-       pw = container_of(work, struct periodic_work, work.work);
-       (*pw->workfunc)(pw->workfuncarg);
-}
-
-struct periodic_work
-*visor_periodic_work_create(ulong jiffy_interval,
-                           struct workqueue_struct *workqueue,
-                           void (*workfunc)(void *),
-                           void *workfuncarg,
-                           const char *devnam)
-{
-       struct periodic_work *pw;
-
-       pw = kzalloc(sizeof(*pw), GFP_KERNEL | __GFP_NORETRY);
-       if (!pw)
-               return NULL;
-
-       rwlock_init(&pw->lock);
-       pw->jiffy_interval = jiffy_interval;
-       pw->workqueue = workqueue;
-       pw->workfunc = workfunc;
-       pw->workfuncarg = workfuncarg;
-       pw->devnam = devnam;
-       return pw;
-}
-EXPORT_SYMBOL_GPL(visor_periodic_work_create);
-
-void visor_periodic_work_destroy(struct periodic_work *pw)
-{
-       kfree(pw);
-}
-EXPORT_SYMBOL_GPL(visor_periodic_work_destroy);
-
-/** Call this from your periodic work worker function to schedule the next
- *  call.
- *  If this function returns false, there was a failure and the
- *  periodic work is no longer scheduled
- */
-bool visor_periodic_work_nextperiod(struct periodic_work *pw)
-{
-       bool rc = false;
-
-       write_lock(&pw->lock);
-       if (pw->want_to_stop) {
-               pw->is_scheduled = false;
-               pw->want_to_stop = false;
-               rc = true;  /* yes, true; see visor_periodic_work_stop() */
-               goto unlock;
-       } else if (!queue_delayed_work(pw->workqueue, &pw->work,
-                                      pw->jiffy_interval)) {
-               pw->is_scheduled = false;
-               rc = false;
-               goto unlock;
-       }
-       rc = true;
-unlock:
-       write_unlock(&pw->lock);
-       return rc;
-}
-EXPORT_SYMBOL_GPL(visor_periodic_work_nextperiod);
-
-/** This function returns true iff new periodic work was actually started.
- *  If this function returns false, then no work was started
- *  (either because it was already started, or because of a failure).
- */
-bool visor_periodic_work_start(struct periodic_work *pw)
-{
-       bool rc = false;
-
-       write_lock(&pw->lock);
-       if (pw->is_scheduled) {
-               rc = false;
-               goto unlock;
-       }
-       if (pw->want_to_stop) {
-               rc = false;
-               goto unlock;
-       }
-       INIT_DELAYED_WORK(&pw->work, &periodic_work_func);
-       if (!queue_delayed_work(pw->workqueue, &pw->work,
-                               pw->jiffy_interval)) {
-               rc = false;
-               goto unlock;
-       }
-       pw->is_scheduled = true;
-       rc = true;
-unlock:
-       write_unlock(&pw->lock);
-       return rc;
-}
-EXPORT_SYMBOL_GPL(visor_periodic_work_start);
-
-/** This function returns true iff your call actually stopped the periodic
- *  work.
- *
- *  -- PAY ATTENTION... this is important --
- *
- *  NO NO #1
- *
- *     Do NOT call this function from some function that is running on the
- *     same workqueue as the work you are trying to stop might be running
- *     on!  If you violate this rule, visor_periodic_work_stop() MIGHT work,
- *     but it also MIGHT get hung up in an infinite loop saying
- *     "waiting for delayed work...".  This will happen if the delayed work
- *     you are trying to cancel has been put in the workqueue list, but can't
- *     run yet because we are running that same workqueue thread right now.
- *
- *     Bottom line: If you need to call visor_periodic_work_stop() from a
- *     workitem, be sure the workitem is on a DIFFERENT workqueue than the
- *     workitem that you are trying to cancel.
- *
- *     If I could figure out some way to check for this "no no" condition in
- *     the code, I would.  It would have saved me the trouble of writing this
- *     long comment.  And also, don't think this is some "theoretical" race
- *     condition.  It is REAL, as I have spent the day chasing it.
- *
- *  NO NO #2
- *
- *     Take close note of the locks that you own when you call this function.
- *     You must NOT own any locks that are needed by the periodic work
- *     function that is currently installed.  If you DO, a deadlock may result,
- *     because stopping the periodic work often involves waiting for the last
- *     iteration of the periodic work function to complete.  Again, if you hit
- *     this deadlock, you will get hung up in an infinite loop saying
- *     "waiting for delayed work...".
- */
-bool visor_periodic_work_stop(struct periodic_work *pw)
-{
-       bool stopped_something = false;
-
-       write_lock(&pw->lock);
-       stopped_something = pw->is_scheduled && (!pw->want_to_stop);
-       while (pw->is_scheduled) {
-               pw->want_to_stop = true;
-               if (cancel_delayed_work(&pw->work)) {
-                       /* We get here if the delayed work was pending as
-                        * delayed work, but was NOT run.
-                        */
-                       WARN_ON(!pw->is_scheduled);
-                       pw->is_scheduled = false;
-               } else {
-                       /* If we get here, either the delayed work:
-                        * - was run, OR,
-                        * - is running RIGHT NOW on another processor, OR,
-                        * - wasn't even scheduled (there is a miniscule
-                        *   timing window where this could be the case)
-                        * flush_workqueue() would make sure it is finished
-                        * executing, but that still isn't very useful, which
-                        * explains the loop...
-                        */
-               }
-               if (pw->is_scheduled) {
-                       write_unlock(&pw->lock);
-                       schedule_timeout_interruptible(msecs_to_jiffies(10));
-                       write_lock(&pw->lock);
-               } else {
-                       pw->want_to_stop = false;
-               }
-       }
-       write_unlock(&pw->lock);
-       return stopped_something;
-}
-EXPORT_SYMBOL_GPL(visor_periodic_work_stop);
index 90fa12e62f26c88e3ff29b5faa9abd82706ad810..3f7830bbd22e2dbfd149d88d57a159d9bd4613fe 100644 (file)
@@ -23,7 +23,6 @@
  *  the client devices and client drivers for the server end to see.
  */
 #include <linux/uuid.h>
-#include "vbusdeviceinfo.h"
 #include "channel.h"
 
 /* {193b331b-c58f-11da-95a9-00e08161165f} */
@@ -58,6 +57,217 @@ static const uuid_le spar_vbus_channel_protocol_uuid =
                                   actual_bytes))
 
 #pragma pack(push, 1)          /* both GCC and VC now allow this pragma */
+
+/*
+ * An array of this struct is present in the channel area for each vbus.
+ * (See vbuschannel.h.)
+ * It is filled in by the client side to provide info about the device
+ * and driver from the client's perspective.
+ */
+struct ultra_vbus_deviceinfo {
+       u8 devtype[16];         /* short string identifying the device type */
+       u8 drvname[16];         /* driver .sys file name */
+       u8 infostrs[96];        /* sequence of tab-delimited id strings: */
+       /* <DRIVER_REV> <DRIVER_VERTAG> <DRIVER_COMPILETIME> */
+       u8 reserved[128];       /* pad size to 256 bytes */
+};
+
+/**
+ * vbuschannel_sanitize_buffer() - remove non-printable chars from buffer
+ * @p: destination buffer where chars are written to
+ * @remain: number of bytes that can be written starting at #p
+ * @src: pointer to source buffer
+ * @srcmax: number of valid characters at #src
+ *
+ * Reads chars from the buffer at @src for @srcmax bytes, and writes to
+ * the buffer at @p, which is @remain bytes long, ensuring never to
+ * overflow the buffer at @p, using the following rules:
+ * - printable characters are simply copied from the buffer at @src to the
+ *   buffer at @p
+ * - intervening streaks of non-printable characters in the buffer at @src
+ *   are replaced with a single space in the buffer at @p
+ * Note that we pay no attention to '\0'-termination.
+ *
+ * Pass @p == NULL and @remain == 0 for this special behavior -- In this
+ * case, we simply return the number of bytes that WOULD HAVE been written
+ * to a buffer at @p, had it been infinitely big.
+ *
+ * Return: the number of bytes written to @p (or WOULD HAVE been written to
+ *         @p, as described in the previous paragraph)
+ */
+static inline int
+vbuschannel_sanitize_buffer(char *p, int remain, char *src, int srcmax)
+{
+       int chars = 0;
+       int nonprintable_streak = 0;
+
+       while (srcmax > 0) {
+               if ((*src >= ' ') && (*src < 0x7f)) {
+                       if (nonprintable_streak) {
+                               if (remain > 0) {
+                                       *p = ' ';
+                                       p++;
+                                       remain--;
+                                       chars++;
+                               } else if (!p) {
+                                       chars++;
+                               }
+                               nonprintable_streak = 0;
+                       }
+                       if (remain > 0) {
+                               *p = *src;
+                               p++;
+                               remain--;
+                               chars++;
+                       } else if (!p) {
+                               chars++;
+                       }
+               } else {
+                       nonprintable_streak = 1;
+               }
+               src++;
+               srcmax--;
+       }
+       return chars;
+}
+
+#define VBUSCHANNEL_ADDACHAR(ch, p, remain, chars) \
+       do {                                       \
+               if (remain <= 0)                   \
+                       break;                     \
+               *p = ch;                           \
+               p++;  chars++;  remain--;          \
+       } while (0)
+
+/**
+ * vbuschannel_itoa() - convert non-negative int to string
+ * @p: destination string
+ * @remain: max number of bytes that can be written to @p
+ * @num: input int to convert
+ *
+ * Converts the non-negative value at @num to an ascii decimal string
+ * at @p, writing at most @remain bytes.  Note there is NO '\0' termination
+ * written to @p.
+ *
+ * Return: number of bytes written to @p
+ *
+ */
+static inline int
+vbuschannel_itoa(char *p, int remain, int num)
+{
+       int digits = 0;
+       char s[32];
+       int i;
+
+       if (num == 0) {
+               /* '0' is a special case */
+               if (remain <= 0)
+                       return 0;
+               *p = '0';
+               return 1;
+       }
+       /* form a backwards decimal ascii string in <s> */
+       while (num > 0) {
+               if (digits >= (int)sizeof(s))
+                       return 0;
+               s[digits++] = (num % 10) + '0';
+               num = num / 10;
+       }
+       if (remain < digits) {
+               /* not enough room left at <p> to hold number, so fill with
+                * '?'
+                */
+               for (i = 0; i < remain; i++, p++)
+                       *p = '?';
+               return remain;
+       }
+       /* plug in the decimal ascii string representing the number, by */
+       /* reversing the string we just built in <s> */
+       i = digits;
+       while (i > 0) {
+               i--;
+               *p = s[i];
+               p++;
+       }
+       return digits;
+}
+
+/**
+ * vbuschannel_devinfo_to_string() - format a struct ultra_vbus_deviceinfo
+ *                                   to a printable string
+ * @devinfo: the struct ultra_vbus_deviceinfo to format
+ * @p: destination string area
+ * @remain: size of destination string area in bytes
+ * @devix: the device index to be included in the output data, or -1 if no
+ *         device index is to be included
+ *
+ * Reads @devInfo, and converts its contents to a printable string at @p,
+ * writing at most @remain bytes. Note there is NO '\0' termination
+ * written to @p.
+ *
+ * Return: number of bytes written to @p
+ */
+static inline int
+vbuschannel_devinfo_to_string(struct ultra_vbus_deviceinfo *devinfo,
+                             char *p, int remain, int devix)
+{
+       char *psrc;
+       int nsrc, x, i, pad;
+       int chars = 0;
+
+       psrc = &devinfo->devtype[0];
+       nsrc = sizeof(devinfo->devtype);
+       if (vbuschannel_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0)
+               return 0;
+
+       /* emit device index */
+       if (devix >= 0) {
+               VBUSCHANNEL_ADDACHAR('[', p, remain, chars);
+               x = vbuschannel_itoa(p, remain, devix);
+               p += x;
+               remain -= x;
+               chars += x;
+               VBUSCHANNEL_ADDACHAR(']', p, remain, chars);
+       } else {
+               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+       }
+
+       /* emit device type */
+       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
+       p += x;
+       remain -= x;
+       chars += x;
+       pad = 15 - x;           /* pad device type to be exactly 15 chars */
+       for (i = 0; i < pad; i++)
+               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+       VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+
+       /* emit driver name */
+       psrc = &devinfo->drvname[0];
+       nsrc = sizeof(devinfo->drvname);
+       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
+       p += x;
+       remain -= x;
+       chars += x;
+       pad = 15 - x;           /* pad driver name to be exactly 15 chars */
+       for (i = 0; i < pad; i++)
+               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+       VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
+
+       /* emit strings */
+       psrc = &devinfo->infostrs[0];
+       nsrc = sizeof(devinfo->infostrs);
+       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
+       p += x;
+       remain -= x;
+       chars += x;
+       VBUSCHANNEL_ADDACHAR('\n', p, remain, chars);
+
+       return chars;
+}
+
 struct spar_vbus_headerinfo {
        u32 struct_bytes;       /* size of this struct in bytes */
        u32 device_info_struct_bytes;   /* sizeof(ULTRA_VBUS_DEVICEINFO) */
diff --git a/drivers/staging/unisys/visorbus/vbusdeviceinfo.h b/drivers/staging/unisys/visorbus/vbusdeviceinfo.h
deleted file mode 100644 (file)
index abdab4a..0000000
+++ /dev/null
@@ -1,213 +0,0 @@
-/* Copyright (C) 2010 - 2015 UNISYS CORPORATION
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
- * NON INFRINGEMENT.  See the GNU General Public License for more
- * details.
- */
-
-#ifndef __VBUSDEVICEINFO_H__
-#define __VBUSDEVICEINFO_H__
-
-#include <linux/types.h>
-
-#pragma pack(push, 1)          /* both GCC and VC now allow this pragma */
-
-/* An array of this struct is present in the channel area for each vbus.
- * (See vbuschannel.h.)
- * It is filled in by the client side to provide info about the device
- * and driver from the client's perspective.
- */
-struct ultra_vbus_deviceinfo {
-       u8 devtype[16];         /* short string identifying the device type */
-       u8 drvname[16];         /* driver .sys file name */
-       u8 infostrs[96];        /* sequence of tab-delimited id strings: */
-       /* <DRIVER_REV> <DRIVER_VERTAG> <DRIVER_COMPILETIME> */
-       u8 reserved[128];       /* pad size to 256 bytes */
-};
-
-#pragma pack(pop)
-
-/* Reads chars from the buffer at <src> for <srcmax> bytes, and writes to
- * the buffer at <p>, which is <remain> bytes long, ensuring never to
- * overflow the buffer at <p>, using the following rules:
- * - printable characters are simply copied from the buffer at <src> to the
- *   buffer at <p>
- * - intervening streaks of non-printable characters in the buffer at <src>
- *   are replaced with a single space in the buffer at <p>
- * Note that we pay no attention to '\0'-termination.
- * Returns the number of bytes written to <p>.
- *
- * Pass <p> == NULL and <remain> == 0 for this special behavior.  In this
- * case, we simply return the number of bytes that WOULD HAVE been written
- * to a buffer at <p>, had it been infinitely big.
- */
-static inline int
-vbuschannel_sanitize_buffer(char *p, int remain, char *src, int srcmax)
-{
-       int chars = 0;
-       int nonprintable_streak = 0;
-
-       while (srcmax > 0) {
-               if ((*src >= ' ') && (*src < 0x7f)) {
-                       if (nonprintable_streak) {
-                               if (remain > 0) {
-                                       *p = ' ';
-                                       p++;
-                                       remain--;
-                                       chars++;
-                               } else if (!p) {
-                                       chars++;
-                               }
-                               nonprintable_streak = 0;
-                       }
-                       if (remain > 0) {
-                               *p = *src;
-                               p++;
-                               remain--;
-                               chars++;
-                       } else if (!p) {
-                               chars++;
-                       }
-               } else {
-                       nonprintable_streak = 1;
-               }
-               src++;
-               srcmax--;
-       }
-       return chars;
-}
-
-#define VBUSCHANNEL_ADDACHAR(ch, p, remain, chars) \
-       do {                                       \
-               if (remain <= 0)                   \
-                       break;                     \
-               *p = ch;                           \
-               p++;  chars++;  remain--;          \
-       } while (0)
-
-/* Converts the non-negative value at <num> to an ascii decimal string
- * at <p>, writing at most <remain> bytes.  Note there is NO '\0' termination
- * written to <p>.
- *
- * Returns the number of bytes written to <p>.
- *
- * Note that we create this function because we need to do this operation in
- * an environment-independent way (since we are in a common header file).
- */
-static inline int
-vbuschannel_itoa(char *p, int remain, int num)
-{
-       int digits = 0;
-       char s[32];
-       int i;
-
-       if (num == 0) {
-               /* '0' is a special case */
-               if (remain <= 0)
-                       return 0;
-               *p = '0';
-               return 1;
-       }
-       /* form a backwards decimal ascii string in <s> */
-       while (num > 0) {
-               if (digits >= (int)sizeof(s))
-                       return 0;
-               s[digits++] = (num % 10) + '0';
-               num = num / 10;
-       }
-       if (remain < digits) {
-               /* not enough room left at <p> to hold number, so fill with
-                * '?'
-                */
-               for (i = 0; i < remain; i++, p++)
-                       *p = '?';
-               return remain;
-       }
-       /* plug in the decimal ascii string representing the number, by */
-       /* reversing the string we just built in <s> */
-       i = digits;
-       while (i > 0) {
-               i--;
-               *p = s[i];
-               p++;
-       }
-       return digits;
-}
-
-/* Reads <devInfo>, and converts its contents to a printable string at <p>,
- * writing at most <remain> bytes.  Note there is NO '\0' termination
- * written to <p>.
- *
- * Pass <devix> >= 0 if you want a device index presented.
- *
- * Returns the number of bytes written to <p>.
- */
-static inline int
-vbuschannel_devinfo_to_string(struct ultra_vbus_deviceinfo *devinfo,
-                             char *p, int remain, int devix)
-{
-       char *psrc;
-       int nsrc, x, i, pad;
-       int chars = 0;
-
-       psrc = &devinfo->devtype[0];
-       nsrc = sizeof(devinfo->devtype);
-       if (vbuschannel_sanitize_buffer(NULL, 0, psrc, nsrc) <= 0)
-               return 0;
-
-       /* emit device index */
-       if (devix >= 0) {
-               VBUSCHANNEL_ADDACHAR('[', p, remain, chars);
-               x = vbuschannel_itoa(p, remain, devix);
-               p += x;
-               remain -= x;
-               chars += x;
-               VBUSCHANNEL_ADDACHAR(']', p, remain, chars);
-       } else {
-               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-       }
-
-       /* emit device type */
-       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
-       p += x;
-       remain -= x;
-       chars += x;
-       pad = 15 - x;           /* pad device type to be exactly 15 chars */
-       for (i = 0; i < pad; i++)
-               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-       VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-
-       /* emit driver name */
-       psrc = &devinfo->drvname[0];
-       nsrc = sizeof(devinfo->drvname);
-       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
-       p += x;
-       remain -= x;
-       chars += x;
-       pad = 15 - x;           /* pad driver name to be exactly 15 chars */
-       for (i = 0; i < pad; i++)
-               VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-       VBUSCHANNEL_ADDACHAR(' ', p, remain, chars);
-
-       /* emit strings */
-       psrc = &devinfo->infostrs[0];
-       nsrc = sizeof(devinfo->infostrs);
-       x = vbuschannel_sanitize_buffer(p, remain, psrc, nsrc);
-       p += x;
-       remain -= x;
-       chars += x;
-       VBUSCHANNEL_ADDACHAR('\n', p, remain, chars);
-
-       return chars;
-}
-
-#endif
index d32b8980a1cfef7e80ae820c8f434a6f2b16dbce..fe5fc2149024c84f28b37c1ffd99c69105bcf6b7 100644 (file)
 #include "visorbus.h"
 #include "visorbus_private.h"
 #include "version.h"
-#include "periodic_work.h"
-#include "vbuschannel.h"
-#include "guestlinuxdebug.h"
 #include "vmcallinterface.h"
 
 #define MYDRVNAME "visorbus"
 
 /* module parameters */
-static int visorbus_debug;
 static int visorbus_forcematch;
 static int visorbus_forcenomatch;
-static int visorbus_debugref;
-#define SERIALLOOPBACKCHANADDR (100 * 1024 * 1024)
 
 /* Display string that is guaranteed to be no longer the 99 characters*/
 #define LINESIZE 99
 
 #define CURRENT_FILE_PC VISOR_BUS_PC_visorbus_main_c
-#define POLLJIFFIES_TESTWORK         100
 #define POLLJIFFIES_NORMALCHANNEL     10
 
 static int busreg_rc = -ENODEV; /* stores the result from bus registration */
@@ -46,11 +39,11 @@ static int visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env);
 static int visorbus_match(struct device *xdev, struct device_driver *xdrv);
 static void fix_vbus_dev_info(struct visor_device *visordev);
 
-/*  BUS type attributes
- *
- *  define & implement display of bus attributes under
- *  /sys/bus/visorbus.
+/*
+ * BUS type attributes
  *
+ * define & implement display of bus attributes under
+ * /sys/bus/visorbus.
  */
 
 static ssize_t version_show(struct bus_type *bus, char *buf)
@@ -106,7 +99,8 @@ static const struct attribute_group *visorbus_dev_groups[] = {
        NULL,
 };
 
-/** This describes the TYPE of bus.
+/*
+ * This describes the TYPE of bus.
  *  (Don't confuse this with an INSTANCE of the bus.)
  */
 struct bus_type visorbus_type = {
@@ -117,50 +111,17 @@ struct bus_type visorbus_type = {
        .bus_groups = visorbus_bus_groups,
 };
 
-static struct delayed_work periodic_work;
-
-/* YES, we need 2 workqueues.
- * The reason is, workitems on the test queue may need to cancel
- * workitems on the other queue.  You will be in for trouble if you try to
- * do this with workitems queued on the same workqueue.
- */
-static struct workqueue_struct *periodic_test_workqueue;
-static struct workqueue_struct *periodic_dev_workqueue;
-static long long bus_count;    /** number of bus instances */
-                                       /** ever-increasing */
-
-static void chipset_bus_create(struct visor_device *bus_info);
-static void chipset_bus_destroy(struct visor_device *bus_info);
-static void chipset_device_create(struct visor_device *dev_info);
-static void chipset_device_destroy(struct visor_device *dev_info);
-static void chipset_device_pause(struct visor_device *dev_info);
-static void chipset_device_resume(struct visor_device *dev_info);
-
-/** These functions are implemented herein, and are called by the chipset
- *  driver to notify us about specific events.
- */
-static struct visorchipset_busdev_notifiers chipset_notifiers = {
-       .bus_create = chipset_bus_create,
-       .bus_destroy = chipset_bus_destroy,
-       .device_create = chipset_device_create,
-       .device_destroy = chipset_device_destroy,
-       .device_pause = chipset_device_pause,
-       .device_resume = chipset_device_resume,
-};
-
-/** These functions are implemented in the chipset driver, and we call them
- *  herein when we want to acknowledge a specific event.
- */
-static struct visorchipset_busdev_responders chipset_responders;
+static long long bus_count;    /* number of bus instances */
+                                       /* ever-increasing */
 
 /* filled in with info about parent chipset driver when we register with it */
 static struct ultra_vbus_deviceinfo chipset_driverinfo;
 /* filled in with info about this driver, wrt it servicing client busses */
 static struct ultra_vbus_deviceinfo clientbus_driverinfo;
 
-/** list of visor_device structs, linked via .list_all */
+/* list of visor_device structs, linked via .list_all */
 static LIST_HEAD(list_all_bus_instances);
-/** list of visor_device structs, linked via .list_all */
+/* list of visor_device structs, linked via .list_all */
 static LIST_HEAD(list_all_device_instances);
 
 static int
@@ -177,9 +138,14 @@ visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env)
        return 0;
 }
 
-/* This is called automatically upon adding a visor_device (device_add), or
- * adding a visor_driver (visorbus_register_visor_driver), and returns 1 iff the
- * provided driver can control the specified device.
+/**
+ * visorbus_match() - called automatically upon adding a visor_device
+ *                    (device_add), or adding a visor_driver
+ *                    (visorbus_register_visor_driver)
+ * @xdev: struct device for the device being matched
+ * @xdrv: struct device_driver for driver to match device against
+ *
+ * Return: 1 iff the provided driver can control the specified device
  */
 static int
 visorbus_match(struct device *xdev, struct device_driver *xdrv)
@@ -211,9 +177,11 @@ visorbus_match(struct device *xdev, struct device_driver *xdrv)
        return 0;
 }
 
-/** This is called when device_unregister() is called for the bus device
- *  instance, after all other tasks involved with destroying the device
- *  are complete.
+/**
+ * visorbus_releae_busdevice() - called when device_unregister() is called for
+ *                               the bus device instance, after all other tasks
+ *                               involved with destroying the dev are complete
+ * @xdev: struct device for the bus being released
  */
 static void
 visorbus_release_busdevice(struct device *xdev)
@@ -223,18 +191,16 @@ visorbus_release_busdevice(struct device *xdev)
        kfree(dev);
 }
 
-/** This is called when device_unregister() is called for each child
- *  device instance.
+/**
+ * visorbus_release_device() - called when device_unregister() is called for
+ *                             each child device instance
+ * @xdev: struct device for the visor device being released
  */
 static void
 visorbus_release_device(struct device *xdev)
 {
        struct visor_device *dev = to_visor_device(xdev);
 
-       if (dev->periodic_work) {
-               visor_periodic_work_destroy(dev->periodic_work);
-               dev->periodic_work = NULL;
-       }
        if (dev->visorchannel) {
                visorchannel_destroy(dev->visorchannel);
                dev->visorchannel = NULL;
@@ -242,9 +208,11 @@ visorbus_release_device(struct device *xdev)
        kfree(dev);
 }
 
-/* begin implementation of specific channel attributes to appear under
-* /sys/bus/visorbus<x>/dev<y>/channel
-*/
+/*
+ * begin implementation of specific channel attributes to appear under
+ * /sys/bus/visorbus<x>/dev<y>/channel
+ */
+
 static ssize_t physaddr_show(struct device *dev, struct device_attribute *attr,
                             char *buf)
 {
@@ -349,15 +317,11 @@ static const struct attribute_group *visorbus_channel_groups[] = {
 
 /* end implementation of specific channel attributes */
 
-/*  BUS instance attributes
+/*
+ *  BUS instance attributes
  *
  *  define & implement display of bus attributes under
- *  /sys/bus/visorbus/busses/visorbus<n>.
- *
- *  This is a bit hoaky because the kernel does not yet have the infrastructure
- *  to separate bus INSTANCE attributes from bus TYPE attributes...
- *  so we roll our own.  See businst.c / businst.h.
- *
+ *  /sys/bus/visorbus/devices/visorbus<n>.
  */
 
 static ssize_t partition_handle_show(struct device *dev,
@@ -434,7 +398,7 @@ static ssize_t client_bus_info_show(struct device *dev,
                if (vdev->name)
                        partition_name = vdev->name;
                shift = snprintf(pos, remain,
-                                "Client device / client driver info for %s eartition (vbus #%d):\n",
+                                "Client device / client driver info for %s eartition (vbus #%u):\n",
                                 partition_name, vdev->chipset_dev_no);
                pos += shift;
                remain -= shift;
@@ -508,11 +472,11 @@ static const struct attribute_group *visorbus_groups[] = {
                NULL
 };
 
-/*  DRIVER attributes
+/*
+ *  DRIVER attributes
  *
  *  define & implement display of driver attributes under
  *  /sys/bus/visorbus/drivers/<drivername>.
- *
  */
 
 static ssize_t
@@ -539,41 +503,52 @@ unregister_driver_attributes(struct visor_driver *drv)
 }
 
 static void
-dev_periodic_work(void *xdev)
+dev_periodic_work(unsigned long __opaque)
 {
-       struct visor_device *dev = xdev;
+       struct visor_device *dev = (struct visor_device *)__opaque;
        struct visor_driver *drv = to_visor_driver(dev->device.driver);
 
-       down(&dev->visordriver_callback_lock);
        if (drv->channel_interrupt)
                drv->channel_interrupt(dev);
-       up(&dev->visordriver_callback_lock);
-       if (!visor_periodic_work_nextperiod(dev->periodic_work))
-               put_device(&dev->device);
+       mod_timer(&dev->timer, jiffies + POLLJIFFIES_NORMALCHANNEL);
 }
 
 static void
 dev_start_periodic_work(struct visor_device *dev)
 {
-       if (dev->being_removed)
+       if (dev->being_removed || dev->timer_active)
                return;
        /* now up by at least 2 */
        get_device(&dev->device);
-       if (!visor_periodic_work_start(dev->periodic_work))
-               put_device(&dev->device);
+       dev->timer.expires = jiffies + POLLJIFFIES_NORMALCHANNEL;
+       add_timer(&dev->timer);
+       dev->timer_active = true;
 }
 
 static void
 dev_stop_periodic_work(struct visor_device *dev)
 {
-       if (visor_periodic_work_stop(dev->periodic_work))
-               put_device(&dev->device);
+       if (!dev->timer_active)
+               return;
+       del_timer_sync(&dev->timer);
+       dev->timer_active = false;
+       put_device(&dev->device);
 }
 
-/** This is called automatically upon adding a visor_device (device_add), or
- *  adding a visor_driver (visorbus_register_visor_driver), but only after
- *  visorbus_match has returned 1 to indicate a successful match between
- *  driver and device.
+/**
+ * visordriver_probe_device() - handle new visor device coming online
+ * @xdev: struct device for the visor device being probed
+ *
+ * This is called automatically upon adding a visor_device (device_add), or
+ * adding a visor_driver (visorbus_register_visor_driver), but only after
+ * visorbus_match() has returned 1 to indicate a successful match between
+ * driver and device.
+ *
+ * If successful, a reference to the device will be held onto via get_device().
+ *
+ * Return: 0 if successful, meaning the function driver's probe() function
+ *         was successful with this device, otherwise a negative errno
+ *         value indicating failure reason
  */
 static int
 visordriver_probe_device(struct device *xdev)
@@ -588,7 +563,7 @@ visordriver_probe_device(struct device *xdev)
        if (!drv->probe)
                return -ENODEV;
 
-       down(&dev->visordriver_callback_lock);
+       mutex_lock(&dev->visordriver_callback_lock);
        dev->being_removed = false;
 
        res = drv->probe(dev);
@@ -598,13 +573,19 @@ visordriver_probe_device(struct device *xdev)
                fix_vbus_dev_info(dev);
        }
 
-       up(&dev->visordriver_callback_lock);
+       mutex_unlock(&dev->visordriver_callback_lock);
        return res;
 }
 
-/** This is called when device_unregister() is called for each child device
- *  instance, to notify the appropriate visorbus_driver that the device is
- *  going away, and to decrease the reference count of the device.
+/**
+ * visordriver_remove_device() - handle visor device going away
+ * @xdev: struct device for the visor device being removed
+ *
+ * This is called when device_unregister() is called for each child device
+ * instance, to notify the appropriate visorbus function driver that the device
+ * is going away, and to decrease the reference count of the device.
+ *
+ * Return: 0 iff successful
  */
 static int
 visordriver_remove_device(struct device *xdev)
@@ -614,58 +595,65 @@ visordriver_remove_device(struct device *xdev)
 
        dev = to_visor_device(xdev);
        drv = to_visor_driver(xdev->driver);
-       down(&dev->visordriver_callback_lock);
+       mutex_lock(&dev->visordriver_callback_lock);
        dev->being_removed = true;
        if (drv->remove)
                drv->remove(dev);
-       up(&dev->visordriver_callback_lock);
+       mutex_unlock(&dev->visordriver_callback_lock);
        dev_stop_periodic_work(dev);
 
        put_device(&dev->device);
        return 0;
 }
 
-/** A particular type of visor driver calls this function to register
- *  the driver.  The caller MUST fill in the following fields within the
- *  #drv structure:
- *      name, version, owner, channel_types, probe, remove
+/**
+ * visorbus_register_visor_driver() - registers the provided visor driver
+ *                                    for handling one or more visor device
+ *                                    types (channel_types)
+ * @drv: the driver to register
+ *
+ * A visor function driver calls this function to register
+ * the driver.  The caller MUST fill in the following fields within the
+ * #drv structure:
+ *     name, version, owner, channel_types, probe, remove
  *
- *  Here's how the whole Linux bus / driver / device model works.
+ * Here's how the whole Linux bus / driver / device model works.
  *
- *  At system start-up, the visorbus kernel module is loaded, which registers
- *  visorbus_type as a bus type, using bus_register().
+ * At system start-up, the visorbus kernel module is loaded, which registers
+ * visorbus_type as a bus type, using bus_register().
  *
- *  All kernel modules that support particular device types on a
- *  visorbus bus are loaded.  Each of these kernel modules calls
- *  visorbus_register_visor_driver() in their init functions, passing a
- *  visor_driver struct.  visorbus_register_visor_driver() in turn calls
- *  register_driver(&visor_driver.driver).  This .driver member is
- *  initialized with generic methods (like probe), whose sole responsibility
- *  is to act as a broker for the real methods, which are within the
- *  visor_driver struct.  (This is the way the subclass behavior is
- *  implemented, since visor_driver is essentially a subclass of the
- *  generic driver.)  Whenever a driver_register() happens, core bus code in
- *  the kernel does (see device_attach() in drivers/base/dd.c):
+ * All kernel modules that support particular device types on a
+ * visorbus bus are loaded.  Each of these kernel modules calls
+ * visorbus_register_visor_driver() in their init functions, passing a
+ * visor_driver struct.  visorbus_register_visor_driver() in turn calls
+ * register_driver(&visor_driver.driver).  This .driver member is
+ * initialized with generic methods (like probe), whose sole responsibility
+ * is to act as a broker for the real methods, which are within the
+ * visor_driver struct.  (This is the way the subclass behavior is
+ * implemented, since visor_driver is essentially a subclass of the
+ * generic driver.)  Whenever a driver_register() happens, core bus code in
+ * the kernel does (see device_attach() in drivers/base/dd.c):
  *
- *      for each dev associated with the bus (the bus that driver is on) that
- *      does not yet have a driver
- *          if bus.match(dev,newdriver) == yes_matched  ** .match specified
- *                                                 ** during bus_register().
- *              newdriver.probe(dev)  ** for visor drivers, this will call
- *                    ** the generic driver.probe implemented in visorbus.c,
- *                    ** which in turn calls the probe specified within the
- *                    ** struct visor_driver (which was specified by the
- *                    ** actual device driver as part of
- *                    ** visorbus_register_visor_driver()).
+ *     for each dev associated with the bus (the bus that driver is on) that
+ *     does not yet have a driver
+ *         if bus.match(dev,newdriver) == yes_matched  ** .match specified
+ *                                                ** during bus_register().
+ *             newdriver.probe(dev)  ** for visor drivers, this will call
+ *                   ** the generic driver.probe implemented in visorbus.c,
+ *                   ** which in turn calls the probe specified within the
+ *                   ** struct visor_driver (which was specified by the
+ *                   ** actual device driver as part of
+ *                   ** visorbus_register_visor_driver()).
  *
- *  The above dance also happens when a new device appears.
- *  So the question is, how are devices created within the system?
- *  Basically, just call device_add(dev).  See pci_bus_add_devices().
- *  pci_scan_device() shows an example of how to build a device struct.  It
- *  returns the newly-created struct to pci_scan_single_device(), who adds it
- *  to the list of devices at PCIBUS.devices.  That list of devices is what
- *  is traversed by pci_bus_add_devices().
+ * The above dance also happens when a new device appears.
+ * So the question is, how are devices created within the system?
+ * Basically, just call device_add(dev).  See pci_bus_add_devices().
+ * pci_scan_device() shows an example of how to build a device struct.  It
+ * returns the newly-created struct to pci_scan_single_device(), who adds it
+ * to the list of devices at PCIBUS.devices.  That list of devices is what
+ * is traversed by pci_bus_add_devices().
  *
+ * Return: integer indicating success (zero) or failure (non-zero)
  */
 int visorbus_register_visor_driver(struct visor_driver *drv)
 {
@@ -680,7 +668,8 @@ int visorbus_register_visor_driver(struct visor_driver *drv)
        drv->driver.remove = visordriver_remove_device;
        drv->driver.owner = drv->owner;
 
-       /* driver_register does this:
+       /*
+        * driver_register does this:
         *   bus_add_driver(drv)
         *   ->if (drv.bus)  ** (bus_type) **
         *       driver_attach(drv)
@@ -702,8 +691,12 @@ int visorbus_register_visor_driver(struct visor_driver *drv)
 }
 EXPORT_SYMBOL_GPL(visorbus_register_visor_driver);
 
-/** A particular type of visor driver calls this function to unregister
- *  the driver, i.e., within its module_exit function.
+/**
+ * visorbus_unregister_visor_driver() - unregisters the provided driver
+ * @drv: the driver to unregister
+ *
+ * A visor function driver calls this function to unregister the driver,
+ * i.e., within its module_exit function.
  */
 void
 visorbus_unregister_visor_driver(struct visor_driver *drv)
@@ -713,6 +706,19 @@ visorbus_unregister_visor_driver(struct visor_driver *drv)
 }
 EXPORT_SYMBOL_GPL(visorbus_unregister_visor_driver);
 
+/**
+ * visorbus_read_channel() - reads from the designated channel into
+ *                           the provided buffer
+ * @dev:    the device whose channel is read from
+ * @offset: the offset into the channel at which reading starts
+ * @dest:   the destination buffer that is written into from the channel
+ * @nbytes: the number of bytes to read from the channel
+ *
+ * If receiving a message, use the visorchannel_signalremove()
+ * function instead.
+ *
+ * Return: integer indicating success (zero) or failure (non-zero)
+ */
 int
 visorbus_read_channel(struct visor_device *dev, unsigned long offset,
                      void *dest, unsigned long nbytes)
@@ -721,6 +727,19 @@ visorbus_read_channel(struct visor_device *dev, unsigned long offset,
 }
 EXPORT_SYMBOL_GPL(visorbus_read_channel);
 
+/**
+ * visorbus_write_channel() - writes the provided buffer into the designated
+ *                            channel
+ * @dev:    the device whose channel is written to
+ * @offset: the offset into the channel at which writing starts
+ * @src:    the source buffer that is written into the channel
+ * @nbytes: the number of bytes to write into the channel
+ *
+ * If sending a message, use the visorchannel_signalinsert()
+ * function instead.
+ *
+ * Return: integer indicating success (zero) or failure (non-zero)
+ */
 int
 visorbus_write_channel(struct visor_device *dev, unsigned long offset,
                       void *src, unsigned long nbytes)
@@ -729,16 +748,13 @@ visorbus_write_channel(struct visor_device *dev, unsigned long offset,
 }
 EXPORT_SYMBOL_GPL(visorbus_write_channel);
 
-int
-visorbus_clear_channel(struct visor_device *dev, unsigned long offset, u8 ch,
-                      unsigned long nbytes)
-{
-       return visorchannel_clear(dev->visorchannel, offset, ch, nbytes);
-}
-EXPORT_SYMBOL_GPL(visorbus_clear_channel);
-
-/** We don't really have a real interrupt, so for now we just call the
- *  interrupt function periodically...
+/**
+ * visorbus_enable_channel_interrupts() - enables interrupts on the
+ *                                        designated device
+ * @dev: the device on which to enable interrupts
+ *
+ * Currently we don't yet have a real interrupt, so for now we just call the
+ * interrupt function periodically via a timer.
  */
 void
 visorbus_enable_channel_interrupts(struct visor_device *dev)
@@ -747,6 +763,11 @@ visorbus_enable_channel_interrupts(struct visor_device *dev)
 }
 EXPORT_SYMBOL_GPL(visorbus_enable_channel_interrupts);
 
+/**
+ * visorbus_disable_channel_interrupts() - disables interrupts on the
+ *                                         designated device
+ * @dev: the device on which to disable interrupts
+ */
 void
 visorbus_disable_channel_interrupts(struct visor_device *dev)
 {
@@ -754,19 +775,28 @@ visorbus_disable_channel_interrupts(struct visor_device *dev)
 }
 EXPORT_SYMBOL_GPL(visorbus_disable_channel_interrupts);
 
-/** This is how everything starts from the device end.
- *  This function is called when a channel first appears via a ControlVM
- *  message.  In response, this function allocates a visor_device to
- *  correspond to the new channel, and attempts to connect it the appropriate
- *  driver.  If the appropriate driver is found, the visor_driver.probe()
- *  function for that driver will be called, and will be passed the new
- *  visor_device that we just created.
+/**
+ * create_visor_device() - create visor device as a result of receiving the
+ *                         controlvm device_create message for a new device
+ * @dev: a freshly-zeroed struct visor_device, containing only filled-in values
+ *       for chipset_bus_no and chipset_dev_no, that will be initialized
+ *
+ * This is how everything starts from the device end.
+ * This function is called when a channel first appears via a ControlVM
+ * message.  In response, this function allocates a visor_device to
+ * correspond to the new channel, and attempts to connect it the appropriate
+ * driver.  If the appropriate driver is found, the visor_driver.probe()
+ * function for that driver will be called, and will be passed the new
+ * visor_device that we just created.
  *
- *  It's ok if the appropriate driver is not yet loaded, because in that case
- *  the new device struct will just stick around in the bus' list of devices.
- *  When the appropriate driver calls visorbus_register_visor_driver(), the
- *  visor_driver.probe() for the new driver will be called with the new
- *  device.
+ * It's ok if the appropriate driver is not yet loaded, because in that case
+ * the new device struct will just stick around in the bus' list of devices.
+ * When the appropriate driver calls visorbus_register_visor_driver(), the
+ * visor_driver.probe() for the new driver will be called with the new
+ * device.
+ *
+ * Return: 0 if successful, otherwise the negative value returned by
+ *         device_add() indicating the reason for failure
  */
 static int
 create_visor_device(struct visor_device *dev)
@@ -778,33 +808,27 @@ create_visor_device(struct visor_device *dev)
        POSTCODE_LINUX_4(DEVICE_CREATE_ENTRY_PC, chipset_dev_no, chipset_bus_no,
                         POSTCODE_SEVERITY_INFO);
 
-       sema_init(&dev->visordriver_callback_lock, 1);  /* unlocked */
+       mutex_init(&dev->visordriver_callback_lock);
        dev->device.bus = &visorbus_type;
        dev->device.groups = visorbus_channel_groups;
        device_initialize(&dev->device);
        dev->device.release = visorbus_release_device;
        /* keep a reference just for us (now 2) */
        get_device(&dev->device);
-       dev->periodic_work =
-               visor_periodic_work_create(POLLJIFFIES_NORMALCHANNEL,
-                                          periodic_dev_workqueue,
-                                          dev_periodic_work,
-                                          dev, dev_name(&dev->device));
-       if (!dev->periodic_work) {
-               POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, chipset_dev_no,
-                                DIAG_SEVERITY_ERR);
-               err = -EINVAL;
-               goto err_put;
-       }
+       init_timer(&dev->timer);
+       dev->timer.data = (unsigned long)(dev);
+       dev->timer.function = dev_periodic_work;
 
-       /* bus_id must be a unique name with respect to this bus TYPE
+       /*
+        * bus_id must be a unique name with respect to this bus TYPE
         * (NOT bus instance).  That's why we need to include the bus
         * number within the name.
         */
        dev_set_name(&dev->device, "vbus%u:dev%u",
                     chipset_bus_no, chipset_dev_no);
 
-       /*  device_add does this:
+       /*
+        * device_add does this:
         *    bus_add_device(dev)
         *    ->device_attach(dev)
         *      ->for each driver drv registered on the bus that dev is on
@@ -864,11 +888,20 @@ get_vbus_header_info(struct visorchannel *chan,
        return 0;
 }
 
-/* Write the contents of <info> to the struct
- * spar_vbus_channel_protocol.chp_info.
+/**
+ * write_vbus_chp_info() - write the contents of <info> to the struct
+ *                         spar_vbus_channel_protocol.chp_info
+ * @chan:     indentifies the s-Par channel that will be updated
+ * @hdr_info: used to find appropriate channel offset to write data
+ * @info:     contains the information to write
+ *
+ * Writes chipset info into the channel memory to be used for diagnostic
+ * purposes.
+ *
+ * Returns no value since this is debug information and not needed for
+ * device functionality.
  */
-
-static int
+static void
 write_vbus_chp_info(struct visorchannel *chan,
                    struct spar_vbus_headerinfo *hdr_info,
                    struct ultra_vbus_deviceinfo *info)
@@ -876,18 +909,25 @@ write_vbus_chp_info(struct visorchannel *chan,
        int off = sizeof(struct channel_header) + hdr_info->chp_info_offset;
 
        if (hdr_info->chp_info_offset == 0)
-               return -EFAULT;
+               return;
 
-       if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-               return -EFAULT;
-       return 0;
+       visorchannel_write(chan, off, info, sizeof(*info));
 }
 
-/* Write the contents of <info> to the struct
- * spar_vbus_channel_protocol.bus_info.
+/**
+ * write_vbus_bus_info() - write the contents of <info> to the struct
+ *                         spar_vbus_channel_protocol.bus_info
+ * @chan:     indentifies the s-Par channel that will be updated
+ * @hdr_info: used to find appropriate channel offset to write data
+ * @info:     contains the information to write
+ *
+ * Writes bus info into the channel memory to be used for diagnostic
+ * purposes.
+ *
+ * Returns no value since this is debug information and not needed for
+ * device functionality.
  */
-
-static int
+static void
 write_vbus_bus_info(struct visorchannel *chan,
                    struct spar_vbus_headerinfo *hdr_info,
                    struct ultra_vbus_deviceinfo *info)
@@ -895,17 +935,26 @@ write_vbus_bus_info(struct visorchannel *chan,
        int off = sizeof(struct channel_header) + hdr_info->bus_info_offset;
 
        if (hdr_info->bus_info_offset == 0)
-               return -EFAULT;
+               return;
 
-       if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-               return -EFAULT;
-       return 0;
+       visorchannel_write(chan, off, info, sizeof(*info));
 }
 
-/* Write the contents of <info> to the
- * struct spar_vbus_channel_protocol.dev_info[<devix>].
+/**
+ * write_vbus_dev_info() - write the contents of <info> to the struct
+ *                         spar_vbus_channel_protocol.dev_info[<devix>]
+ * @chan:     indentifies the s-Par channel that will be updated
+ * @hdr_info: used to find appropriate channel offset to write data
+ * @info:     contains the information to write
+ * @devix:    the relative device number (0..n-1) of the device on the bus
+ *
+ * Writes device info into the channel memory to be used for diagnostic
+ * purposes.
+ *
+ * Returns no value since this is debug information and not needed for
+ * device functionality.
  */
-static int
+static void
 write_vbus_dev_info(struct visorchannel *chan,
                    struct spar_vbus_headerinfo *hdr_info,
                    struct ultra_vbus_deviceinfo *info, int devix)
@@ -915,17 +964,17 @@ write_vbus_dev_info(struct visorchannel *chan,
            (hdr_info->device_info_struct_bytes * devix);
 
        if (hdr_info->dev_info_offset == 0)
-               return -EFAULT;
+               return;
 
-       if (visorchannel_write(chan, off, info, sizeof(*info)) < 0)
-               return -EFAULT;
-       return 0;
+       visorchannel_write(chan, off, info, sizeof(*info));
 }
 
-/* For a child device just created on a client bus, fill in
- * information about the driver that is controlling this device into
- * the the appropriate slot within the vbus channel of the bus
- * instance.
+/**
+ * fix_vbus_dev_info() - for a child device just created on a client bus, fill
+ *                       in information about the driver that is controlling
+ *                       this device into the the appropriate slot within the
+ *                       vbus channel of the bus instance
+ * @visordev: struct visor_device for the desired device
  */
 static void
 fix_vbus_dev_info(struct visor_device *visordev)
@@ -952,7 +1001,8 @@ fix_vbus_dev_info(struct visor_device *visordev)
 
        visordrv = to_visor_driver(visordev->device.driver);
 
-       /* Within the list of device types (by GUID) that the driver
+       /*
+        * Within the list of device types (by GUID) that the driver
         * says it supports, find out which one of those types matches
         * the type of this device, so that we can include the device
         * type name
@@ -971,15 +1021,21 @@ fix_vbus_dev_info(struct visor_device *visordev)
                             visordrv->vertag);
        write_vbus_dev_info(bdev->visorchannel, hdr_info, &dev_info, dev_no);
 
-       /* Re-write bus+chipset info, because it is possible that this
-       * was previously written by our evil counterpart, virtpci.
-       */
+       /*
+        * Re-write bus+chipset info, because it is possible that this
+        * was previously written by our evil counterpart, virtpci.
+        */
        write_vbus_chp_info(bdev->visorchannel, hdr_info, &chipset_driverinfo);
        write_vbus_bus_info(bdev->visorchannel, hdr_info,
                            &clientbus_driverinfo);
 }
 
-/** Create a device instance for the visor bus itself.
+/**
+ * create_bus_instance() - create a device instance for the visor bus itself
+ * @dev: struct visor_device indicating the bus instance
+ *
+ * Return: 0 for success, otherwise negative errno value indicating reason for
+ *         failure
  */
 static int
 create_bus_instance(struct visor_device *dev)
@@ -1020,12 +1076,15 @@ create_bus_instance(struct visor_device *dev)
        return 0;
 }
 
-/** Remove a device instance for the visor bus itself.
+/**
+ * remove_bus_instance() - remove a device instance for the visor bus itself
+ * @dev: struct visor_device indentifying the bus to remove
  */
 static void
 remove_bus_instance(struct visor_device *dev)
 {
-       /* Note that this will result in the release method for
+       /*
+        * Note that this will result in the release method for
         * dev->dev being called, which will call
         * visorbus_release_busdevice().  This has something to do with
         * the put_device() done in device_unregister(), but I have never
@@ -1042,8 +1101,11 @@ remove_bus_instance(struct visor_device *dev)
        device_unregister(&dev->device);
 }
 
-/** Create and register the one-and-only one instance of
- *  the visor bus type (visorbus_type).
+/**
+ * create_bus_type() - create and register the one-and-only one instance of
+ *                     the visor bus type (visorbus_type)
+ * Return: 0 for success, otherwise negative errno value returned by
+ *         bus_register() indicating the reason for failure
  */
 static int
 create_bus_type(void)
@@ -1052,7 +1114,9 @@ create_bus_type(void)
        return busreg_rc;
 }
 
-/** Remove the one-and-only one instance of the visor bus type (visorbus_type).
+/**
+ * remove_bus_type() - remove the one-and-only one instance of the visor bus
+ *                     type (visorbus_type)
  */
 static void
 remove_bus_type(void)
@@ -1060,7 +1124,8 @@ remove_bus_type(void)
        bus_unregister(&visorbus_type);
 }
 
-/** Remove all child visor bus device instances.
+/**
+ * remove_all_visor_devices() - remove all child visor bus device instances
  */
 static void
 remove_all_visor_devices(void)
@@ -1075,7 +1140,7 @@ remove_all_visor_devices(void)
        }
 }
 
-static void
+void
 chipset_bus_create(struct visor_device *dev)
 {
        int rc;
@@ -1092,19 +1157,17 @@ chipset_bus_create(struct visor_device *dev)
                POSTCODE_LINUX_3(CHIPSET_INIT_SUCCESS_PC, bus_no,
                                 POSTCODE_SEVERITY_INFO);
 
-       if (chipset_responders.bus_create)
-               (*chipset_responders.bus_create) (dev, rc);
+       bus_create_response(dev, rc);
 }
 
-static void
+void
 chipset_bus_destroy(struct visor_device *dev)
 {
        remove_bus_instance(dev);
-       if (chipset_responders.bus_destroy)
-               (*chipset_responders.bus_destroy)(dev, 0);
+       bus_destroy_response(dev, 0);
 }
 
-static void
+void
 chipset_device_create(struct visor_device *dev_info)
 {
        int rc;
@@ -1115,8 +1178,7 @@ chipset_device_create(struct visor_device *dev_info)
                         POSTCODE_SEVERITY_INFO);
 
        rc = create_visor_device(dev_info);
-       if (chipset_responders.device_create)
-               chipset_responders.device_create(dev_info, rc);
+       device_create_response(dev_info, rc);
 
        if (rc < 0)
                POSTCODE_LINUX_4(DEVICE_CREATE_FAILURE_PC, dev_no, bus_no,
@@ -1126,18 +1188,22 @@ chipset_device_create(struct visor_device *dev_info)
                                 POSTCODE_SEVERITY_INFO);
 }
 
-static void
+void
 chipset_device_destroy(struct visor_device *dev_info)
 {
        remove_visor_device(dev_info);
 
-       if (chipset_responders.device_destroy)
-               (*chipset_responders.device_destroy) (dev_info, 0);
+       device_destroy_response(dev_info, 0);
 }
 
-/* This is the callback function specified for a function driver, to
- * be called when a pending "pause device" operation has been
- * completed.
+/**
+ * pause_state_change_complete() - the callback function to be called by a
+ *                                 visorbus function driver when a
+ *                                 pending "pause device" operation has
+ *                                 completed
+ * @dev: struct visor_device identifying the paused device
+ * @status: 0 iff the pause state change completed successfully, otherwise
+ *          a negative errno value indicating the reason for failure
  */
 static void
 pause_state_change_complete(struct visor_device *dev, int status)
@@ -1146,19 +1212,18 @@ pause_state_change_complete(struct visor_device *dev, int status)
                return;
 
        dev->pausing = false;
-       if (!chipset_responders.device_pause) /* this can never happen! */
-               return;
 
-       /* Notify the chipset driver that the pause is complete, which
-        * will presumably want to send some sort of response to the
-        * initiator.
-        */
-       (*chipset_responders.device_pause) (dev, status);
+       device_pause_response(dev, status);
 }
 
-/* This is the callback function specified for a function driver, to
- * be called when a pending "resume device" operation has been
- * completed.
+/**
+ * resume_state_change_complete() - the callback function to be called by a
+ *                                  visorbus function driver when a
+ *                                  pending "resume device" operation has
+ *                                  completed
+ * @dev: struct visor_device identifying the resumed device
+ * @status: 0 iff the resume state change completed successfully, otherwise
+ *          a negative errno value indicating the reason for failure
  */
 static void
 resume_state_change_complete(struct visor_device *dev, int status)
@@ -1167,19 +1232,25 @@ resume_state_change_complete(struct visor_device *dev, int status)
                return;
 
        dev->resuming = false;
-       if (!chipset_responders.device_resume) /* this can never happen! */
-               return;
 
-       /* Notify the chipset driver that the resume is complete,
+       /*
+        * Notify the chipset driver that the resume is complete,
         * which will presumably want to send some sort of response to
         * the initiator.
         */
-       (*chipset_responders.device_resume) (dev, status);
+       device_resume_response(dev, status);
 }
 
-/* Tell the subordinate function driver for a specific device to pause
- * or resume that device.  Result is returned asynchronously via a
- * callback function.
+/**
+ * initiate_chipset_device_pause_resume() - start a pause or resume operation
+ *                                          for a visor device
+ * @dev: struct visor_device identifying the device being paused or resumed
+ * @is_pause: true to indicate pause operation, false to indicate resume
+ *
+ * Tell the subordinate function driver for a specific device to pause
+ * or resume that device.  Success/failure result is returned asynchronously
+ * via a callback function; see pause_state_change_complete() and
+ * resume_state_change_complete().
  */
 static void
 initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
@@ -1189,9 +1260,9 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
        void (*notify_func)(struct visor_device *dev, int response) = NULL;
 
        if (is_pause)
-               notify_func = chipset_responders.device_pause;
+               notify_func = device_pause_response;
        else
-               notify_func = chipset_responders.device_resume;
+               notify_func = device_resume_response;
        if (!notify_func)
                return;
 
@@ -1206,7 +1277,8 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
                return;
        }
 
-       /* Note that even though both drv->pause() and drv->resume
+       /*
+        * Note that even though both drv->pause() and drv->resume
         * specify a callback function, it is NOT necessary for us to
         * increment our local module usage count.  Reason is, there
         * is already a linkage dependency between child function
@@ -1246,24 +1318,34 @@ initiate_chipset_device_pause_resume(struct visor_device *dev, bool is_pause)
        }
 }
 
-static void
+/**
+ * chipset_device_pause() - start a pause operation for a visor device
+ * @dev_info: struct visor_device identifying the device being paused
+ *
+ * Tell the subordinate function driver for a specific device to pause
+ * that device.  Success/failure result is returned asynchronously
+ * via a callback function; see pause_state_change_complete().
+ */
+void
 chipset_device_pause(struct visor_device *dev_info)
 {
        initiate_chipset_device_pause_resume(dev_info, true);
 }
 
-static void
+/**
+ * chipset_device_resume() - start a resume operation for a visor device
+ * @dev_info: struct visor_device identifying the device being resumed
+ *
+ * Tell the subordinate function driver for a specific device to resume
+ * that device.  Success/failure result is returned asynchronously
+ * via a callback function; see resume_state_change_complete().
+ */
+void
 chipset_device_resume(struct visor_device *dev_info)
 {
        initiate_chipset_device_pause_resume(dev_info, false);
 }
 
-struct channel_size_info {
-       uuid_le guid;
-       unsigned long min_size;
-       unsigned long max_size;
-};
-
 int
 visorbus_init(void)
 {
@@ -1280,19 +1362,9 @@ visorbus_init(void)
                goto error;
        }
 
-       periodic_dev_workqueue = create_singlethread_workqueue("visorbus_dev");
-       if (!periodic_dev_workqueue) {
-               POSTCODE_LINUX_2(CREATE_WORKQUEUE_PC, DIAG_SEVERITY_ERR);
-               err = -ENOMEM;
-               goto error;
-       }
-
-       /* This enables us to receive notifications when devices appear for
-        * which this service partition is to be a server for.
-        */
-       visorchipset_register_busdev(&chipset_notifiers,
-                                    &chipset_responders,
-                                    &chipset_driverinfo);
+       bus_device_info_init(&chipset_driverinfo,
+                            "chipset", "visorchipset",
+                            VERSION, NULL);
 
        return 0;
 
@@ -1306,20 +1378,8 @@ visorbus_exit(void)
 {
        struct list_head *listentry, *listtmp;
 
-       visorchipset_register_busdev(NULL, NULL, NULL);
        remove_all_visor_devices();
 
-       flush_workqueue(periodic_dev_workqueue); /* better not be any work! */
-       destroy_workqueue(periodic_dev_workqueue);
-       periodic_dev_workqueue = NULL;
-
-       if (periodic_test_workqueue) {
-               cancel_delayed_work(&periodic_work);
-               flush_workqueue(periodic_test_workqueue);
-               destroy_workqueue(periodic_test_workqueue);
-               periodic_test_workqueue = NULL;
-       }
-
        list_for_each_safe(listentry, listtmp, &list_all_bus_instances) {
                struct visor_device *dev = list_entry(listentry,
                                                      struct visor_device,
@@ -1329,9 +1389,6 @@ visorbus_exit(void)
        remove_bus_type();
 }
 
-module_param_named(debug, visorbus_debug, int, S_IRUGO);
-MODULE_PARM_DESC(visorbus_debug, "1 to debug");
-
 module_param_named(forcematch, visorbus_forcematch, int, S_IRUGO);
 MODULE_PARM_DESC(visorbus_forcematch,
                 "1 to force a successful dev <--> drv match");
@@ -1339,6 +1396,3 @@ MODULE_PARM_DESC(visorbus_forcematch,
 module_param_named(forcenomatch, visorbus_forcenomatch, int, S_IRUGO);
 MODULE_PARM_DESC(visorbus_forcenomatch,
                 "1 to force an UNsuccessful dev <--> drv match");
-
-module_param_named(debugref, visorbus_debugref, int, S_IRUGO);
-MODULE_PARM_DESC(visorbus_debugref, "1 to debug reference counting");
index 39edd20184531f89b4174f3abaaa12807e6dbb35..2f4e1e6071f50c9d491bd900b6c3205fab97a12f 100644 (file)
@@ -1,4 +1,4 @@
-/* visorchipset.h
+/* visorbus_private.h
  *
  * Copyright (C) 2010 - 2015 UNISYS CORPORATION
  * All rights reserved.
  * details.
  */
 
-#ifndef __VISORCHIPSET_H__
-#define __VISORCHIPSET_H__
+#ifndef __VISORBUS_PRIVATE_H__
+#define __VISORBUS_PRIVATE_H__
 
 #include <linux/uuid.h>
 
 #include "controlvmchannel.h"
-#include "vbusdeviceinfo.h"
-#include "vbushelper.h"
+#include "vbuschannel.h"
 
-/*  These functions will be called from within visorchipset when certain
- *  events happen.  (The implementation of these functions is outside of
- *  visorchipset.)
+/* TARGET_HOSTNAME specified as -DTARGET_HOSTNAME=\"thename\" on the
+ * command line
  */
-struct visorchipset_busdev_notifiers {
-       void (*bus_create)(struct visor_device *bus_info);
-       void (*bus_destroy)(struct visor_device *bus_info);
-       void (*device_create)(struct visor_device *bus_info);
-       void (*device_destroy)(struct visor_device *bus_info);
-       void (*device_pause)(struct visor_device *bus_info);
-       void (*device_resume)(struct visor_device *bus_info);
-};
 
-/*  These functions live inside visorchipset, and will be called to indicate
- *  responses to specific events (by code outside of visorchipset).
- *  For now, the value for each response is simply either:
- *       0 = it worked
- *      -1 = it failed
- */
-struct visorchipset_busdev_responders {
-       void (*bus_create)(struct visor_device *p, int response);
-       void (*bus_destroy)(struct visor_device *p, int response);
-       void (*device_create)(struct visor_device *p, int response);
-       void (*device_destroy)(struct visor_device *p, int response);
-       void (*device_pause)(struct visor_device *p, int response);
-       void (*device_resume)(struct visor_device *p, int response);
-};
+#define TARGET_HOSTNAME "linuxguest"
 
-/** Register functions (in the bus driver) to get called by visorchipset
- *  whenever a bus or device appears for which this guest is to be the
- *  client for.  visorchipset will fill in <responders>, to indicate
- *  functions the bus driver should call to indicate message responses.
- */
-void
-visorchipset_register_busdev(
-                       struct visorchipset_busdev_notifiers *notifiers,
-                       struct visorchipset_busdev_responders *responders,
-                       struct ultra_vbus_deviceinfo *driver_info);
+static inline void bus_device_info_init(
+               struct ultra_vbus_deviceinfo *bus_device_info_ptr,
+               const char *dev_type, const char *drv_name,
+               const char *ver, const char *ver_tag)
+{
+       memset(bus_device_info_ptr, 0, sizeof(struct ultra_vbus_deviceinfo));
+       snprintf(bus_device_info_ptr->devtype,
+                sizeof(bus_device_info_ptr->devtype),
+                "%s", (dev_type) ? dev_type : "unknownType");
+       snprintf(bus_device_info_ptr->drvname,
+                sizeof(bus_device_info_ptr->drvname),
+                "%s", (drv_name) ? drv_name : "unknownDriver");
+       snprintf(bus_device_info_ptr->infostrs,
+                sizeof(bus_device_info_ptr->infostrs), "%s\t%s\t%s",
+                (ver) ? ver : "unknownVer",
+                (ver_tag) ? ver_tag : "unknownVerTag",
+                TARGET_HOSTNAME);
+}
+
+void chipset_bus_create(struct visor_device *bus_info);
+void chipset_bus_destroy(struct visor_device *bus_info);
+void chipset_device_create(struct visor_device *dev_info);
+void chipset_device_destroy(struct visor_device *dev_info);
+void chipset_device_pause(struct visor_device *dev_info);
+void chipset_device_resume(struct visor_device *dev_info);
+
+void bus_create_response(struct visor_device *p, int response);
+void bus_destroy_response(struct visor_device *p, int response);
+void device_create_response(struct visor_device *p, int response);
+void device_destroy_response(struct visor_device *p, int response);
+void device_resume_response(struct visor_device *p, int response);
+void device_pause_response(struct visor_device *p, int response);
 
-/* visorbus init and exit functions */
 int visorbus_init(void);
 void visorbus_exit(void);
+
+/* visorchannel access functions */
+
+struct visorchannel *visorchannel_create(u64 physaddr,
+                                        unsigned long channel_bytes,
+                                        gfp_t gfp, uuid_le guid);
+struct visorchannel *visorchannel_create_with_lock(u64 physaddr,
+                                                  unsigned long channel_bytes,
+                                                  gfp_t gfp, uuid_le guid);
+void visorchannel_destroy(struct visorchannel *channel);
+int visorchannel_read(struct visorchannel *channel, ulong offset,
+                     void *local, ulong nbytes);
+int visorchannel_write(struct visorchannel *channel, ulong offset,
+                      void *local, ulong nbytes);
+u64 visorchannel_get_physaddr(struct visorchannel *channel);
+ulong visorchannel_get_nbytes(struct visorchannel *channel);
+char *visorchannel_id(struct visorchannel *channel, char *s);
+char *visorchannel_zoneid(struct visorchannel *channel, char *s);
+u64 visorchannel_get_clientpartition(struct visorchannel *channel);
+int visorchannel_set_clientpartition(struct visorchannel *channel,
+                                    u64 partition_handle);
+char *visorchannel_uuid_id(uuid_le *guid, char *s);
+void __iomem *visorchannel_get_header(struct visorchannel *channel);
 #endif
index 43373582cf1d52b1437236df8c263cc96437f034..b84c8d800c8e26e50137beb85daebd4b7799c2e1 100644 (file)
@@ -15,7 +15,7 @@
  */
 
 /*
- *  This provides Supervisor channel communication primitives, which are
+ *  This provides s-Par channel communication primitives, which are
  *  independent of the mechanism used to access the channel data.
  */
 
@@ -55,110 +55,6 @@ struct visorchannel {
        uuid_le inst;
 };
 
-/* Creates the struct visorchannel abstraction for a data area in memory,
- * but does NOT modify this data area.
- */
-static struct visorchannel *
-visorchannel_create_guts(u64 physaddr, unsigned long channel_bytes,
-                        gfp_t gfp, unsigned long off,
-                        uuid_le guid, bool needs_lock)
-{
-       struct visorchannel *channel;
-       int err;
-       size_t size = sizeof(struct channel_header);
-
-       if (physaddr == 0)
-               return NULL;
-
-       channel = kzalloc(sizeof(*channel), gfp);
-       if (!channel)
-               return NULL;
-
-       channel->needs_lock = needs_lock;
-       spin_lock_init(&channel->insert_lock);
-       spin_lock_init(&channel->remove_lock);
-
-       /* Video driver constains the efi framebuffer so it will get a
-        * conflict resource when requesting its full mem region. Since
-        * we are only using the efi framebuffer for video we can ignore
-        * this. Remember that we haven't requested it so we don't try to
-        * release later on.
-        */
-       channel->requested = request_mem_region(physaddr, size, MYDRVNAME);
-       if (!channel->requested) {
-               if (uuid_le_cmp(guid, spar_video_guid)) {
-                       /* Not the video channel we care about this */
-                       goto err_destroy_channel;
-               }
-       }
-
-       channel->mapped = memremap(physaddr, size, MEMREMAP_WB);
-       if (!channel->mapped) {
-               release_mem_region(physaddr, size);
-               goto err_destroy_channel;
-       }
-
-       channel->physaddr = physaddr;
-       channel->nbytes = size;
-
-       err = visorchannel_read(channel, 0, &channel->chan_hdr,
-                               sizeof(struct channel_header));
-       if (err)
-               goto err_destroy_channel;
-
-       /* we had better be a CLIENT of this channel */
-       if (channel_bytes == 0)
-               channel_bytes = (ulong)channel->chan_hdr.size;
-       if (uuid_le_cmp(guid, NULL_UUID_LE) == 0)
-               guid = channel->chan_hdr.chtype;
-
-       memunmap(channel->mapped);
-       if (channel->requested)
-               release_mem_region(channel->physaddr, channel->nbytes);
-       channel->mapped = NULL;
-       channel->requested = request_mem_region(channel->physaddr,
-                                               channel_bytes, MYDRVNAME);
-       if (!channel->requested) {
-               if (uuid_le_cmp(guid, spar_video_guid)) {
-                       /* Different we care about this */
-                       goto err_destroy_channel;
-               }
-       }
-
-       channel->mapped = memremap(channel->physaddr, channel_bytes,
-                       MEMREMAP_WB);
-       if (!channel->mapped) {
-               release_mem_region(channel->physaddr, channel_bytes);
-               goto err_destroy_channel;
-       }
-
-       channel->nbytes = channel_bytes;
-       channel->guid = guid;
-       return channel;
-
-err_destroy_channel:
-       visorchannel_destroy(channel);
-       return NULL;
-}
-
-struct visorchannel *
-visorchannel_create(u64 physaddr, unsigned long channel_bytes,
-                   gfp_t gfp, uuid_le guid)
-{
-       return visorchannel_create_guts(physaddr, channel_bytes, gfp, 0, guid,
-                                       false);
-}
-EXPORT_SYMBOL_GPL(visorchannel_create);
-
-struct visorchannel *
-visorchannel_create_with_lock(u64 physaddr, unsigned long channel_bytes,
-                             gfp_t gfp, uuid_le guid)
-{
-       return visorchannel_create_guts(physaddr, channel_bytes, gfp, 0, guid,
-                                       true);
-}
-EXPORT_SYMBOL_GPL(visorchannel_create_with_lock);
-
 void
 visorchannel_destroy(struct visorchannel *channel)
 {
@@ -171,21 +67,18 @@ visorchannel_destroy(struct visorchannel *channel)
        }
        kfree(channel);
 }
-EXPORT_SYMBOL_GPL(visorchannel_destroy);
 
 u64
 visorchannel_get_physaddr(struct visorchannel *channel)
 {
        return channel->physaddr;
 }
-EXPORT_SYMBOL_GPL(visorchannel_get_physaddr);
 
 ulong
 visorchannel_get_nbytes(struct visorchannel *channel)
 {
        return channel->nbytes;
 }
-EXPORT_SYMBOL_GPL(visorchannel_get_nbytes);
 
 char *
 visorchannel_uuid_id(uuid_le *guid, char *s)
@@ -193,28 +86,24 @@ visorchannel_uuid_id(uuid_le *guid, char *s)
        sprintf(s, "%pUL", guid);
        return s;
 }
-EXPORT_SYMBOL_GPL(visorchannel_uuid_id);
 
 char *
 visorchannel_id(struct visorchannel *channel, char *s)
 {
        return visorchannel_uuid_id(&channel->guid, s);
 }
-EXPORT_SYMBOL_GPL(visorchannel_id);
 
 char *
 visorchannel_zoneid(struct visorchannel *channel, char *s)
 {
        return visorchannel_uuid_id(&channel->chan_hdr.zone_uuid, s);
 }
-EXPORT_SYMBOL_GPL(visorchannel_zoneid);
 
 u64
 visorchannel_get_clientpartition(struct visorchannel *channel)
 {
        return channel->chan_hdr.partition_handle;
 }
-EXPORT_SYMBOL_GPL(visorchannel_get_clientpartition);
 
 int
 visorchannel_set_clientpartition(struct visorchannel *channel,
@@ -223,8 +112,13 @@ visorchannel_set_clientpartition(struct visorchannel *channel,
        channel->chan_hdr.partition_handle = partition_handle;
        return 0;
 }
-EXPORT_SYMBOL_GPL(visorchannel_set_clientpartition);
 
+/**
+ * visorchannel_get_uuid() - queries the UUID of the designated channel
+ * @channel: the channel to query
+ *
+ * Return: the UUID of the provided channel
+ */
 uuid_le
 visorchannel_get_uuid(struct visorchannel *channel)
 {
@@ -243,7 +137,6 @@ visorchannel_read(struct visorchannel *channel, ulong offset,
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(visorchannel_read);
 
 int
 visorchannel_write(struct visorchannel *channel, ulong offset,
@@ -265,67 +158,32 @@ visorchannel_write(struct visorchannel *channel, ulong offset,
 
        return 0;
 }
-EXPORT_SYMBOL_GPL(visorchannel_write);
-
-int
-visorchannel_clear(struct visorchannel *channel, ulong offset, u8 ch,
-                  ulong nbytes)
-{
-       int err;
-       int bufsize = PAGE_SIZE;
-       int written = 0;
-       u8 *buf;
-
-       buf = (u8 *)__get_free_page(GFP_KERNEL);
-       if (!buf)
-               return -ENOMEM;
-
-       memset(buf, ch, bufsize);
-
-       while (nbytes > 0) {
-               int thisbytes = bufsize;
-
-               if (nbytes < thisbytes)
-                       thisbytes = nbytes;
-               err = visorchannel_write(channel, offset + written,
-                                        buf, thisbytes);
-               if (err)
-                       goto out_free_page;
-
-               written += thisbytes;
-               nbytes -= thisbytes;
-       }
-       err = 0;
-
-out_free_page:
-       free_page((unsigned long)buf);
-       return err;
-}
-EXPORT_SYMBOL_GPL(visorchannel_clear);
 
 void __iomem  *
 visorchannel_get_header(struct visorchannel *channel)
 {
        return (void __iomem *)&channel->chan_hdr;
 }
-EXPORT_SYMBOL_GPL(visorchannel_get_header);
 
-/** Return offset of a specific SIGNAL_QUEUE_HEADER from the beginning of a
- *  channel header
+/*
+ * Return offset of a specific SIGNAL_QUEUE_HEADER from the beginning of a
+ * channel header
  */
 #define SIG_QUEUE_OFFSET(chan_hdr, q) \
        ((chan_hdr)->ch_space_offset + \
         ((q) * sizeof(struct signal_queue_header)))
 
-/** Return offset of a specific queue entry (data) from the beginning of a
- *  channel header
+/*
+ * Return offset of a specific queue entry (data) from the beginning of a
+ * channel header
  */
 #define SIG_DATA_OFFSET(chan_hdr, q, sig_hdr, slot) \
        (SIG_QUEUE_OFFSET(chan_hdr, q) + (sig_hdr)->sig_base_offset + \
            ((slot) * (sig_hdr)->signal_size))
 
-/** Write the contents of a specific field within a SIGNAL_QUEUE_HEADER back
- *  into host memory
+/*
+ * Write the contents of a specific field within a SIGNAL_QUEUE_HEADER back
+ * into host memory
  */
 #define SIG_WRITE_FIELD(channel, queue, sig_hdr, FIELD)                         \
        (visorchannel_write(channel,                                     \
@@ -400,7 +258,8 @@ signalremove_inner(struct visorchannel *channel, u32 queue, void *msg)
                return false;
        sig_hdr.num_received++;
 
-       /* For each data field in SIGNAL_QUEUE_HEADER that was modified,
+       /*
+        * For each data field in SIGNAL_QUEUE_HEADER that was modified,
         * update host memory.
         */
        mb(); /* required for channel synch */
@@ -411,6 +270,15 @@ signalremove_inner(struct visorchannel *channel, u32 queue, void *msg)
        return true;
 }
 
+/**
+ * visorchannel_signalremove() - removes a message from the designated
+ *                               channel/queue
+ * @channel: the channel the message will be removed from
+ * @queue:   the queue the message will be removed from
+ * @msg:     the message to remove
+ *
+ * Return: boolean indicating whether the removal succeeded or failed
+ */
 bool
 visorchannel_signalremove(struct visorchannel *channel, u32 queue, void *msg)
 {
@@ -429,6 +297,15 @@ visorchannel_signalremove(struct visorchannel *channel, u32 queue, void *msg)
 }
 EXPORT_SYMBOL_GPL(visorchannel_signalremove);
 
+/**
+ * visorchannel_signalempty() - checks if the designated channel/queue
+ *                              contains any messages
+ * @channel: the channel to query
+ * @queue:   the queue in the channel to query
+ *
+ * Return: boolean indicating whether any messages in the designated
+ *         channel/queue are present
+ */
 bool
 visorchannel_signalempty(struct visorchannel *channel, u32 queue)
 {
@@ -475,7 +352,8 @@ signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
 
        sig_hdr.num_sent++;
 
-       /* For each data field in SIGNAL_QUEUE_HEADER that was modified,
+       /*
+        * For each data field in SIGNAL_QUEUE_HEADER that was modified,
         * update host memory.
         */
        mb(); /* required for channel synch */
@@ -487,149 +365,151 @@ signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
        return true;
 }
 
-bool
-visorchannel_signalinsert(struct visorchannel *channel, u32 queue, void *msg)
+/**
+ * visorchannel_create_guts() - creates the struct visorchannel abstraction
+ *                              for a data area in memory, but does NOT modify
+ *                              this data area
+ * @physaddr:      physical address of start of channel
+ * @channel_bytes: size of the channel in bytes; this may 0 if the channel has
+ *                 already been initialized in memory (which is true for all
+ *                 channels provided to guest environments by the s-Par
+ *                 back-end), in which case the actual channel size will be
+ *                 read from the channel header in memory
+ * @gfp:           gfp_t to use when allocating memory for the data struct
+ * @guid:          uuid that identifies channel type; this may 0 if the channel
+ *                 has already been initialized in memory (which is true for all
+ *                 channels provided to guest environments by the s-Par
+ *                 back-end), in which case the actual channel guid will be
+ *                 read from the channel header in memory
+ * @needs_lock:    must specify true if you have multiple threads of execution
+ *                 that will be calling visorchannel methods of this
+ *                 visorchannel at the same time
+ *
+ * Return: pointer to visorchannel that was created if successful,
+ *         otherwise NULL
+ */
+static struct visorchannel *
+visorchannel_create_guts(u64 physaddr, unsigned long channel_bytes,
+                        gfp_t gfp, uuid_le guid, bool needs_lock)
 {
-       bool rc;
-       unsigned long flags;
+       struct visorchannel *channel;
+       int err;
+       size_t size = sizeof(struct channel_header);
 
-       if (channel->needs_lock) {
-               spin_lock_irqsave(&channel->insert_lock, flags);
-               rc = signalinsert_inner(channel, queue, msg);
-               spin_unlock_irqrestore(&channel->insert_lock, flags);
-       } else {
-               rc = signalinsert_inner(channel, queue, msg);
+       if (physaddr == 0)
+               return NULL;
+
+       channel = kzalloc(sizeof(*channel), gfp);
+       if (!channel)
+               return NULL;
+
+       channel->needs_lock = needs_lock;
+       spin_lock_init(&channel->insert_lock);
+       spin_lock_init(&channel->remove_lock);
+
+       /*
+        * Video driver constains the efi framebuffer so it will get a
+        * conflict resource when requesting its full mem region. Since
+        * we are only using the efi framebuffer for video we can ignore
+        * this. Remember that we haven't requested it so we don't try to
+        * release later on.
+        */
+       channel->requested = request_mem_region(physaddr, size, MYDRVNAME);
+       if (!channel->requested) {
+               if (uuid_le_cmp(guid, spar_video_guid)) {
+                       /* Not the video channel we care about this */
+                       goto err_destroy_channel;
+               }
        }
 
-       return rc;
-}
-EXPORT_SYMBOL_GPL(visorchannel_signalinsert);
+       channel->mapped = memremap(physaddr, size, MEMREMAP_WB);
+       if (!channel->mapped) {
+               release_mem_region(physaddr, size);
+               goto err_destroy_channel;
+       }
 
-int
-visorchannel_signalqueue_slots_avail(struct visorchannel *channel, u32 queue)
-{
-       struct signal_queue_header sig_hdr;
-       u32 slots_avail, slots_used;
-       u32 head, tail;
+       channel->physaddr = physaddr;
+       channel->nbytes = size;
 
-       if (!sig_read_header(channel, queue, &sig_hdr))
-               return 0;
-       head = sig_hdr.head;
-       tail = sig_hdr.tail;
-       if (head < tail)
-               head = head + sig_hdr.max_slots;
-       slots_used = head - tail;
-       slots_avail = sig_hdr.max_signals - slots_used;
-       return (int)slots_avail;
-}
-EXPORT_SYMBOL_GPL(visorchannel_signalqueue_slots_avail);
+       err = visorchannel_read(channel, 0, &channel->chan_hdr,
+                               sizeof(struct channel_header));
+       if (err)
+               goto err_destroy_channel;
 
-int
-visorchannel_signalqueue_max_slots(struct visorchannel *channel, u32 queue)
-{
-       struct signal_queue_header sig_hdr;
+       /* we had better be a CLIENT of this channel */
+       if (channel_bytes == 0)
+               channel_bytes = (ulong)channel->chan_hdr.size;
+       if (uuid_le_cmp(guid, NULL_UUID_LE) == 0)
+               guid = channel->chan_hdr.chtype;
 
-       if (!sig_read_header(channel, queue, &sig_hdr))
-               return 0;
-       return (int)sig_hdr.max_signals;
+       memunmap(channel->mapped);
+       if (channel->requested)
+               release_mem_region(channel->physaddr, channel->nbytes);
+       channel->mapped = NULL;
+       channel->requested = request_mem_region(channel->physaddr,
+                                               channel_bytes, MYDRVNAME);
+       if (!channel->requested) {
+               if (uuid_le_cmp(guid, spar_video_guid)) {
+                       /* Different we care about this */
+                       goto err_destroy_channel;
+               }
+       }
+
+       channel->mapped = memremap(channel->physaddr, channel_bytes,
+                       MEMREMAP_WB);
+       if (!channel->mapped) {
+               release_mem_region(channel->physaddr, channel_bytes);
+               goto err_destroy_channel;
+       }
+
+       channel->nbytes = channel_bytes;
+       channel->guid = guid;
+       return channel;
+
+err_destroy_channel:
+       visorchannel_destroy(channel);
+       return NULL;
 }
-EXPORT_SYMBOL_GPL(visorchannel_signalqueue_max_slots);
 
-static void
-sigqueue_debug(struct signal_queue_header *q, int which, struct seq_file *seq)
+struct visorchannel *
+visorchannel_create(u64 physaddr, unsigned long channel_bytes,
+                   gfp_t gfp, uuid_le guid)
 {
-       seq_printf(seq, "Signal Queue #%d\n", which);
-       seq_printf(seq, "   VersionId          = %lu\n", (ulong)q->version);
-       seq_printf(seq, "   Type               = %lu\n", (ulong)q->chtype);
-       seq_printf(seq, "   oSignalBase        = %llu\n",
-                  (long long)q->sig_base_offset);
-       seq_printf(seq, "   SignalSize         = %lu\n", (ulong)q->signal_size);
-       seq_printf(seq, "   MaxSignalSlots     = %lu\n",
-                  (ulong)q->max_slots);
-       seq_printf(seq, "   MaxSignals         = %lu\n", (ulong)q->max_signals);
-       seq_printf(seq, "   FeatureFlags       = %-16.16Lx\n",
-                  (long long)q->features);
-       seq_printf(seq, "   NumSignalsSent     = %llu\n",
-                  (long long)q->num_sent);
-       seq_printf(seq, "   NumSignalsReceived = %llu\n",
-                  (long long)q->num_received);
-       seq_printf(seq, "   NumOverflows       = %llu\n",
-                  (long long)q->num_overflows);
-       seq_printf(seq, "   Head               = %lu\n", (ulong)q->head);
-       seq_printf(seq, "   Tail               = %lu\n", (ulong)q->tail);
+       return visorchannel_create_guts(physaddr, channel_bytes, gfp, guid,
+                                       false);
 }
 
-void
-visorchannel_debug(struct visorchannel *channel, int num_queues,
-                  struct seq_file *seq, u32 off)
+struct visorchannel *
+visorchannel_create_with_lock(u64 physaddr, unsigned long channel_bytes,
+                             gfp_t gfp, uuid_le guid)
 {
-       u64 addr = 0;
-       ulong nbytes = 0, nbytes_region = 0;
-       struct channel_header hdr;
-       struct channel_header *phdr = &hdr;
-       int i = 0;
-       int errcode = 0;
+       return visorchannel_create_guts(physaddr, channel_bytes, gfp, guid,
+                                       true);
+}
 
-       if (!channel)
-               return;
+/**
+ * visorchannel_signalinsert() - inserts a message into the designated
+ *                               channel/queue
+ * @channel: the channel the message will be added to
+ * @queue:   the queue the message will be added to
+ * @msg:     the message to insert
+ *
+ * Return: boolean indicating whether the insertion succeeded or failed
+ */
+bool
+visorchannel_signalinsert(struct visorchannel *channel, u32 queue, void *msg)
+{
+       bool rc;
+       unsigned long flags;
 
-       addr = visorchannel_get_physaddr(channel);
-       nbytes_region = visorchannel_get_nbytes(channel);
-       errcode = visorchannel_read(channel, off,
-                                   phdr, sizeof(struct channel_header));
-       if (errcode < 0) {
-               seq_printf(seq,
-                          "Read of channel header failed with errcode=%d)\n",
-                          errcode);
-               if (off == 0) {
-                       phdr = &channel->chan_hdr;
-                       seq_puts(seq, "(following data may be stale)\n");
-               } else {
-                       return;
-               }
+       if (channel->needs_lock) {
+               spin_lock_irqsave(&channel->insert_lock, flags);
+               rc = signalinsert_inner(channel, queue, msg);
+               spin_unlock_irqrestore(&channel->insert_lock, flags);
+       } else {
+               rc = signalinsert_inner(channel, queue, msg);
        }
-       nbytes = (ulong)(phdr->size);
-       seq_printf(seq, "--- Begin channel @0x%-16.16Lx for 0x%lx bytes (region=0x%lx bytes) ---\n",
-                  addr + off, nbytes, nbytes_region);
-       seq_printf(seq, "Type            = %pUL\n", &phdr->chtype);
-       seq_printf(seq, "ZoneGuid        = %pUL\n", &phdr->zone_uuid);
-       seq_printf(seq, "Signature       = 0x%-16.16Lx\n",
-                  (long long)phdr->signature);
-       seq_printf(seq, "LegacyState     = %lu\n", (ulong)phdr->legacy_state);
-       seq_printf(seq, "SrvState        = %lu\n", (ulong)phdr->srv_state);
-       seq_printf(seq, "CliStateBoot    = %lu\n", (ulong)phdr->cli_state_boot);
-       seq_printf(seq, "CliStateOS      = %lu\n", (ulong)phdr->cli_state_os);
-       seq_printf(seq, "HeaderSize      = %lu\n", (ulong)phdr->header_size);
-       seq_printf(seq, "Size            = %llu\n", (long long)phdr->size);
-       seq_printf(seq, "Features        = 0x%-16.16llx\n",
-                  (long long)phdr->features);
-       seq_printf(seq, "PartitionHandle = 0x%-16.16llx\n",
-                  (long long)phdr->partition_handle);
-       seq_printf(seq, "Handle          = 0x%-16.16llx\n",
-                  (long long)phdr->handle);
-       seq_printf(seq, "VersionId       = %lu\n", (ulong)phdr->version_id);
-       seq_printf(seq, "oChannelSpace   = %llu\n",
-                  (long long)phdr->ch_space_offset);
-       if ((phdr->ch_space_offset == 0) || (errcode < 0))
-               ;
-       else
-               for (i = 0; i < num_queues; i++) {
-                       struct signal_queue_header q;
-
-                       errcode = visorchannel_read(channel,
-                                                   off +
-                                                   phdr->ch_space_offset +
-                                                   (i * sizeof(q)),
-                                                   &q, sizeof(q));
-                       if (errcode < 0) {
-                               seq_printf(seq,
-                                          "failed to read signal queue #%d from channel @0x%-16.16Lx errcode=%d\n",
-                                          i, addr, errcode);
-                               continue;
-                       }
-                       sigqueue_debug(&q, i, seq);
-               }
-       seq_printf(seq, "--- End   channel @0x%-16.16Lx for 0x%lx bytes ---\n",
-                  addr + off, nbytes);
+
+       return rc;
 }
-EXPORT_SYMBOL_GPL(visorchannel_debug);
+EXPORT_SYMBOL_GPL(visorchannel_signalinsert);
index d248c946a13b169dc877e7f53b5c5393779d479e..ad8a407679679f03dc917e110cd887d33fb19735 100644 (file)
 #include <linux/uuid.h>
 #include <linux/crash_dump.h>
 
-#include "channel_guid.h"
-#include "controlvmchannel.h"
-#include "controlvmcompletionstatus.h"
-#include "guestlinuxdebug.h"
-#include "periodic_work.h"
 #include "version.h"
 #include "visorbus.h"
 #include "visorbus_private.h"
@@ -37,9 +32,6 @@
 
 #define CURRENT_FILE_PC VISOR_CHIPSET_PC_visorchipset_main_c
 
-#define MAX_NAME_SIZE 128
-#define MAX_IP_SIZE   50
-#define MAXOUTSTANDINGCHANNELCOMMAND 256
 #define POLLJIFFIES_CONTROLVMCHANNEL_FAST   1
 #define POLLJIFFIES_CONTROLVMCHANNEL_SLOW 100
 
@@ -79,15 +71,15 @@ visorchipset_release(struct inode *inode, struct file *file)
        return 0;
 }
 
-/* When the controlvm channel is idle for at least MIN_IDLE_SECONDS,
-* we switch to slow polling mode.  As soon as we get a controlvm
-* message, we switch back to fast polling mode.
-*/
+/*
+ * When the controlvm channel is idle for at least MIN_IDLE_SECONDS,
+ * we switch to slow polling mode. As soon as we get a controlvm
+ * message, we switch back to fast polling mode.
+ */
 #define MIN_IDLE_SECONDS 10
 static unsigned long poll_jiffies = POLLJIFFIES_CONTROLVMCHANNEL_FAST;
 /* when we got our last controlvm message */
 static unsigned long most_recent_message_jiffies;
-static int visorbusregistered;
 
 struct parser_context {
        unsigned long allocbytes;
@@ -99,21 +91,17 @@ struct parser_context {
 };
 
 static struct delayed_work periodic_controlvm_work;
-static DEFINE_SEMAPHORE(notifier_lock);
 
 static struct cdev file_cdev;
 static struct visorchannel **file_controlvm_channel;
-static struct controlvm_message_packet g_devicechangestate_packet;
-
-static LIST_HEAD(bus_info_list);
-static LIST_HEAD(dev_info_list);
 
 static struct visorchannel *controlvm_channel;
 
 /* Manages the request payload in the controlvm channel */
 struct visor_controlvm_payload_info {
        u8 *ptr;                /* pointer to base address of payload pool */
-       u64 offset;             /* offset from beginning of controlvm
+       u64 offset;             /*
+                                * offset from beginning of controlvm
                                 * channel to beginning of payload * pool
                                 */
        u32 bytes;              /* number of bytes in payload pool */
@@ -121,29 +109,17 @@ struct visor_controlvm_payload_info {
 
 static struct visor_controlvm_payload_info controlvm_payload_info;
 
-/* The following globals are used to handle the scenario where we are unable to
- * offload the payload from a controlvm message due to memory requirements.  In
+/*
+ * The following globals are used to handle the scenario where we are unable to
+ * offload the payload from a controlvm message due to memory requirements. In
  * this scenario, we simply stash the controlvm message, then attempt to
  * process it again the next time controlvm_periodic_work() runs.
  */
 static struct controlvm_message controlvm_pending_msg;
 static bool controlvm_pending_msg_valid;
 
-/* This identifies a data buffer that has been received via a controlvm messages
- * in a remote --> local CONTROLVM_TRANSMIT_FILE conversation.
- */
-struct putfile_buffer_entry {
-       struct list_head next;  /* putfile_buffer_entry list */
-       struct parser_context *parser_ctx; /* points to input data buffer */
-};
-
-/* List of struct putfile_request *, via next_putfile_request member.
- * Each entry in this list identifies an outstanding TRANSMIT_FILE
- * conversation.
- */
-static LIST_HEAD(putfile_request_list);
-
-/* This describes a buffer and its current state of transfer (e.g., how many
+/*
+ * This describes a buffer and its current state of transfer (e.g., how many
  * bytes have already been supplied as putfile data, and how many bytes are
  * remaining) for a putfile_request.
  */
@@ -155,8 +131,9 @@ struct putfile_active_buffer {
 };
 
 #define PUTFILE_REQUEST_SIG 0x0906101302281211
-/* This identifies a single remote --> local CONTROLVM_TRANSMIT_FILE
- * conversation.  Structs of this type are dynamically linked into
+/*
+ * This identifies a single remote --> local CONTROLVM_TRANSMIT_FILE
+ * conversation. Structs of this type are dynamically linked into
  * <Putfile_request_list>.
  */
 struct putfile_request {
@@ -168,7 +145,8 @@ struct putfile_request {
        /* link to next struct putfile_request */
        struct list_head next_putfile_request;
 
-       /* head of putfile_buffer_entry list, which describes the data to be
+       /*
+        * head of putfile_buffer_entry list, which describes the data to be
         * supplied as putfile data;
         * - this list is added to when controlvm messages come in that supply
         * file data
@@ -184,11 +162,13 @@ struct putfile_request {
        /* data not yet read within current putfile_buffer_entry */
        struct putfile_active_buffer active_buf;
 
-       /* <0 = failed, 0 = in-progress, >0 = successful; */
-       /* note that this must be set with req_list_lock, and if you set <0, */
-       /* it is your responsibility to also free up all of the other objects */
-       /* in this struct (like input_buffer_list, active_buf.parser_ctx) */
-       /* before releasing the lock */
+       /*
+        * <0 = failed, 0 = in-progress, >0 = successful;
+        * note that this must be set with req_list_lock, and if you set <0,
+        * it is your responsibility to also free up all of the other objects
+        * in this struct (like input_buffer_list, active_buf.parser_ctx)
+        * before releasing the lock
+        */
        int completion_status;
 };
 
@@ -203,31 +183,8 @@ static LIST_HEAD(parahotplug_request_list);
 static DEFINE_SPINLOCK(parahotplug_request_list_lock); /* lock for above */
 static void parahotplug_process_list(void);
 
-/* Manages the info for a CONTROLVM_DUMP_CAPTURESTATE /
- * CONTROLVM_REPORTEVENT.
- */
-static struct visorchipset_busdev_notifiers busdev_notifiers;
-
-static void bus_create_response(struct visor_device *p, int response);
-static void bus_destroy_response(struct visor_device *p, int response);
-static void device_create_response(struct visor_device *p, int response);
-static void device_destroy_response(struct visor_device *p, int response);
-static void device_resume_response(struct visor_device *p, int response);
-
-static void visorchipset_device_pause_response(struct visor_device *p,
-                                              int response);
-
-static struct visorchipset_busdev_responders busdev_responders = {
-       .bus_create = bus_create_response,
-       .bus_destroy = bus_destroy_response,
-       .device_create = device_create_response,
-       .device_destroy = device_destroy_response,
-       .device_pause = visorchipset_device_pause_response,
-       .device_resume = device_resume_response,
-};
-
 /* info for /dev/visorchipset */
-static dev_t major_dev = -1; /**< indicates major num for device */
+static dev_t major_dev = -1; /*< indicates major num for device */
 
 /* prototypes for attributes */
 static ssize_t toolaction_show(struct device *dev,
@@ -397,8 +354,9 @@ parser_id_get(struct parser_context *ctx)
        return phdr->id;
 }
 
-/** Describes the state from the perspective of which controlvm messages have
- *  been received for a bus or device.
+/*
+ * Describes the state from the perspective of which controlvm messages have
+ * been received for a bus or device.
  */
 
 enum PARSER_WHICH_STRING {
@@ -683,32 +641,6 @@ struct visor_device *visorbus_get_device_by_id(u32 bus_no, u32 dev_no,
                vdev = to_visor_device(dev);
        return vdev;
 }
-EXPORT_SYMBOL(visorbus_get_device_by_id);
-
-void
-visorchipset_register_busdev(
-                       struct visorchipset_busdev_notifiers *notifiers,
-                       struct visorchipset_busdev_responders *responders,
-                       struct ultra_vbus_deviceinfo *driver_info)
-{
-       down(&notifier_lock);
-       if (!notifiers) {
-               memset(&busdev_notifiers, 0,
-                      sizeof(busdev_notifiers));
-               visorbusregistered = 0; /* clear flag */
-       } else {
-               busdev_notifiers = *notifiers;
-               visorbusregistered = 1; /* set flag */
-       }
-       if (responders)
-               *responders = busdev_responders;
-       if (driver_info)
-               bus_device_info_init(driver_info, "chipset", "visorchipset",
-                                    VERSION, NULL);
-
-       up(&notifier_lock);
-}
-EXPORT_SYMBOL_GPL(visorchipset_register_busdev);
 
 static void
 chipset_init(struct controlvm_message *inmsg)
@@ -725,14 +657,16 @@ chipset_init(struct controlvm_message *inmsg)
        chipset_inited = 1;
        POSTCODE_LINUX_2(CHIPSET_INIT_EXIT_PC, POSTCODE_SEVERITY_INFO);
 
-       /* Set features to indicate we support parahotplug (if Command
+       /*
+        * Set features to indicate we support parahotplug (if Command
         * also supports it).
         */
        features =
            inmsg->cmd.init_chipset.
            features & ULTRA_CHIPSET_FEATURE_PARA_HOTPLUG;
 
-       /* Set the "reply" bit so Command knows this is a
+       /*
+        * Set the "reply" bit so Command knows this is a
         * features-aware driver.
         */
        features |= ULTRA_CHIPSET_FEATURE_REPLY;
@@ -920,20 +854,20 @@ bus_epilog(struct visor_device *bus_info,
 {
        struct controlvm_message_header *pmsg_hdr = NULL;
 
-       down(&notifier_lock);
-
        if (!bus_info) {
-               /* relying on a valid passed in response code */
-               /* be lazy and re-use msg_hdr for this failure, is this ok?? */
+               /*
+                * relying on a valid passed in response code
+                * be lazy and re-use msg_hdr for this failure, is this ok??
+                */
                pmsg_hdr = msg_hdr;
-               goto out_respond_and_unlock;
+               goto out_respond;
        }
 
        if (bus_info->pending_msg_hdr) {
                /* only non-NULL if dev is still waiting on a response */
                response = -CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT;
                pmsg_hdr = bus_info->pending_msg_hdr;
-               goto out_respond_and_unlock;
+               goto out_respond;
        }
 
        if (need_response) {
@@ -942,7 +876,7 @@ bus_epilog(struct visor_device *bus_info,
                        POSTCODE_LINUX_4(MALLOC_FAILURE_PC, cmd,
                                         bus_info->chipset_bus_no,
                                         POSTCODE_SEVERITY_ERR);
-                       goto out_unlock;
+                       return;
                }
 
                memcpy(pmsg_hdr, msg_hdr,
@@ -953,25 +887,16 @@ bus_epilog(struct visor_device *bus_info,
        if (response == CONTROLVM_RESP_SUCCESS) {
                switch (cmd) {
                case CONTROLVM_BUS_CREATE:
-                       if (busdev_notifiers.bus_create) {
-                               (*busdev_notifiers.bus_create) (bus_info);
-                               goto out_unlock;
-                       }
+                       chipset_bus_create(bus_info);
                        break;
                case CONTROLVM_BUS_DESTROY:
-                       if (busdev_notifiers.bus_destroy) {
-                               (*busdev_notifiers.bus_destroy) (bus_info);
-                               goto out_unlock;
-                       }
+                       chipset_bus_destroy(bus_info);
                        break;
                }
        }
 
-out_respond_and_unlock:
+out_respond:
        bus_responder(cmd, pmsg_hdr, response);
-
-out_unlock:
-       up(&notifier_lock);
 }
 
 static void
@@ -980,31 +905,29 @@ device_epilog(struct visor_device *dev_info,
              struct controlvm_message_header *msg_hdr, int response,
              bool need_response, bool for_visorbus)
 {
-       struct visorchipset_busdev_notifiers *notifiers;
        struct controlvm_message_header *pmsg_hdr = NULL;
 
-       notifiers = &busdev_notifiers;
-
-       down(&notifier_lock);
        if (!dev_info) {
-               /* relying on a valid passed in response code */
-               /* be lazy and re-use msg_hdr for this failure, is this ok?? */
+               /*
+                * relying on a valid passed in response code
+                * be lazy and re-use msg_hdr for this failure, is this ok??
+                */
                pmsg_hdr = msg_hdr;
-               goto out_respond_and_unlock;
+               goto out_respond;
        }
 
        if (dev_info->pending_msg_hdr) {
                /* only non-NULL if dev is still waiting on a response */
                response = -CONTROLVM_RESP_ERROR_MESSAGE_ID_INVALID_FOR_CLIENT;
                pmsg_hdr = dev_info->pending_msg_hdr;
-               goto out_respond_and_unlock;
+               goto out_respond;
        }
 
        if (need_response) {
                pmsg_hdr = kzalloc(sizeof(*pmsg_hdr), GFP_KERNEL);
                if (!pmsg_hdr) {
                        response = -CONTROLVM_RESP_ERROR_KMALLOC_FAILED;
-                       goto out_respond_and_unlock;
+                       goto out_respond;
                }
 
                memcpy(pmsg_hdr, msg_hdr,
@@ -1015,48 +938,34 @@ device_epilog(struct visor_device *dev_info,
        if (response >= 0) {
                switch (cmd) {
                case CONTROLVM_DEVICE_CREATE:
-                       if (notifiers->device_create) {
-                               (*notifiers->device_create) (dev_info);
-                               goto out_unlock;
-                       }
+                       chipset_device_create(dev_info);
                        break;
                case CONTROLVM_DEVICE_CHANGESTATE:
                        /* ServerReady / ServerRunning / SegmentStateRunning */
                        if (state.alive == segment_state_running.alive &&
                            state.operating ==
                                segment_state_running.operating) {
-                               if (notifiers->device_resume) {
-                                       (*notifiers->device_resume) (dev_info);
-                                       goto out_unlock;
-                               }
+                               chipset_device_resume(dev_info);
                        }
                        /* ServerNotReady / ServerLost / SegmentStateStandby */
                        else if (state.alive == segment_state_standby.alive &&
                                 state.operating ==
                                 segment_state_standby.operating) {
-                               /* technically this is standby case
+                               /*
+                                * technically this is standby case
                                 * where server is lost
                                 */
-                               if (notifiers->device_pause) {
-                                       (*notifiers->device_pause) (dev_info);
-                                       goto out_unlock;
-                               }
+                               chipset_device_pause(dev_info);
                        }
                        break;
                case CONTROLVM_DEVICE_DESTROY:
-                       if (notifiers->device_destroy) {
-                               (*notifiers->device_destroy) (dev_info);
-                               goto out_unlock;
-                       }
+                       chipset_device_destroy(dev_info);
                        break;
                }
        }
 
-out_respond_and_unlock:
+out_respond:
        device_responder(cmd, pmsg_hdr, response);
-
-out_unlock:
-       up(&notifier_lock);
 }
 
 static void
@@ -1303,11 +1212,19 @@ my_device_destroy(struct controlvm_message *inmsg)
                              inmsg->hdr.flags.response_expected == 1, 1);
 }
 
-/* When provided with the physical address of the controlvm channel
+/**
+ * initialize_controlvm_payload_info() - init controlvm_payload_info struct
+ * @phys_addr: the physical address of controlvm channel
+ * @offset:    the offset to payload
+ * @bytes:     the size of the payload in bytes
+ * @info:      the returning valid struct
+ *
+ * When provided with the physical address of the controlvm channel
  * (phys_addr), the offset to the payload area we need to manage
  * (offset), and the size of this payload area (bytes), fills in the
- * controlvm_payload_info struct.  Returns true for success or false
- * for failure.
+ * controlvm_payload_info struct.
+ *
+ * Return: CONTROLVM_RESP_SUCCESS for success or a negative for failure
  */
 static int
 initialize_controlvm_payload_info(u64 phys_addr, u64 offset, u32 bytes,
@@ -1371,8 +1288,12 @@ initialize_controlvm_payload(void)
                                          &controlvm_payload_info);
 }
 
-/*  Send ACTION=online for DEVPATH=/sys/devices/platform/visorchipset.
- *  Returns CONTROLVM_RESP_xxx code.
+/**
+ * visorchipset_chipset_ready() - sends chipset_ready action
+ *
+ * Send ACTION=online for DEVPATH=/sys/devices/platform/visorchipset.
+ *
+ * Return: CONTROLVM_RESP_SUCCESS
  */
 static int
 visorchipset_chipset_ready(void)
@@ -1393,8 +1314,12 @@ visorchipset_chipset_selftest(void)
        return CONTROLVM_RESP_SUCCESS;
 }
 
-/*  Send ACTION=offline for DEVPATH=/sys/devices/platform/visorchipset.
- *  Returns CONTROLVM_RESP_xxx code.
+/**
+ * visorchipset_chipset_notready() - sends chipset_notready action
+ *
+ * Send ACTION=offline for DEVPATH=/sys/devices/platform/visorchipset.
+ *
+ * Return: CONTROLVM_RESP_SUCCESS
  */
 static int
 visorchipset_chipset_notready(void)
@@ -1436,8 +1361,13 @@ chipset_notready(struct controlvm_message_header *msg_hdr)
                controlvm_respond(msg_hdr, rc);
 }
 
-/* This is your "one-stop" shop for grabbing the next message from the
- * CONTROLVM_QUEUE_EVENT queue in the controlvm channel.
+/**
+ * read_controlvm_event() - retreives the next message from the
+ *                          CONTROLVM_QUEUE_EVENT queue in the controlvm
+ *                          channel
+ * @msg: pointer to the retrieved message
+ *
+ * Return: true if a valid message was retrieved or false otherwise
  */
 static bool
 read_controlvm_event(struct controlvm_message *msg)
@@ -1453,13 +1383,13 @@ read_controlvm_event(struct controlvm_message *msg)
 }
 
 /*
- * The general parahotplug flow works as follows.  The visorchipset
+ * The general parahotplug flow works as follows. The visorchipset
  * driver receives a DEVICE_CHANGESTATE message from Command
- * specifying a physical device to enable or disable.  The CONTROLVM
+ * specifying a physical device to enable or disable. The CONTROLVM
  * message handler calls parahotplug_process_message, which then adds
  * the message to a global list and kicks off a udev event which
  * causes a user level script to enable or disable the specified
- * device.  The udev script then writes to
+ * device. The udev script then writes to
  * /proc/visorchipset/parahotplug, which causes parahotplug_proc_write
  * to get called, at which point the appropriate CONTROLVM message is
  * retrieved from the list and responded to.
@@ -1467,9 +1397,11 @@ read_controlvm_event(struct controlvm_message *msg)
 
 #define PARAHOTPLUG_TIMEOUT_MS 2000
 
-/*
- * Generate unique int to match an outstanding CONTROLVM message with a
- * udev script /proc response
+/**
+ * parahotplug_next_id() - generate unique int to match an outstanding CONTROLVM
+ *                         message with a udev script /proc response
+ *
+ * Return: a unique integer value
  */
 static int
 parahotplug_next_id(void)
@@ -1479,9 +1411,12 @@ parahotplug_next_id(void)
        return atomic_inc_return(&id);
 }
 
-/*
- * Returns the time (in jiffies) when a CONTROLVM message on the list
- * should expire -- PARAHOTPLUG_TIMEOUT_MS in the future
+/**
+ * parahotplug_next_expiration() - returns the time (in jiffies) when a
+ *                                 CONTROLVM message on the list should expire
+ *                                 -- PARAHOTPLUG_TIMEOUT_MS in the future
+ *
+ * Return: expected expiration time (in jiffies)
  */
 static unsigned long
 parahotplug_next_expiration(void)
@@ -1489,9 +1424,13 @@ parahotplug_next_expiration(void)
        return jiffies + msecs_to_jiffies(PARAHOTPLUG_TIMEOUT_MS);
 }
 
-/*
- * Create a parahotplug_request, which is basically a wrapper for a
- * CONTROLVM_MESSAGE that we can stick on a list
+/**
+ * parahotplug_request_create() - create a parahotplug_request, which is
+ *                                basically a wrapper for a CONTROLVM_MESSAGE
+ *                                that we can stick on a list
+ * @msg: the message to insert in the request
+ *
+ * Return: the request containing the provided message
  */
 static struct parahotplug_request *
 parahotplug_request_create(struct controlvm_message *msg)
@@ -1509,8 +1448,9 @@ parahotplug_request_create(struct controlvm_message *msg)
        return req;
 }
 
-/*
- * Free a parahotplug_request.
+/**
+ * parahotplug_request_destroy() - free a parahotplug_request
+ * @req: the request to deallocate
  */
 static void
 parahotplug_request_destroy(struct parahotplug_request *req)
@@ -1518,10 +1458,12 @@ parahotplug_request_destroy(struct parahotplug_request *req)
        kfree(req);
 }
 
-/*
- * Cause uevent to run the user level script to do the disable/enable
- * specified in (the CONTROLVM message in) the specified
- * parahotplug_request
+/**
+ * parahotplug_request_kickoff() - initiate parahotplug request
+ * @req: the request to initiate
+ *
+ * Cause uevent to run the user level script to do the disable/enable specified
+ * in the parahotplug_request.
  */
 static void
 parahotplug_request_kickoff(struct parahotplug_request *req)
@@ -1548,9 +1490,9 @@ parahotplug_request_kickoff(struct parahotplug_request *req)
                           envp);
 }
 
-/*
- * Remove any request from the list that's been on there too long and
- * respond with an error.
+/**
+ * parahotplug_process_list() - remove any request from the list that's been on
+ *                              there too long and respond with an error
  */
 static void
 parahotplug_process_list(void)
@@ -1579,10 +1521,16 @@ parahotplug_process_list(void)
        spin_unlock(&parahotplug_request_list_lock);
 }
 
-/*
+/**
+ * parahotplug_request_complete() - mark request as complete
+ * @id:     the id of the request
+ * @active: indicates whether the request is assigned to active partition
+ *
  * Called from the /proc handler, which means the user script has
- * finished the enable/disable.  Find the matching identifier, and
+ * finished the enable/disable. Find the matching identifier, and
  * respond to the CONTROLVM message with success.
+ *
+ * Return: 0 on success or -EINVAL on failure
  */
 static int
 parahotplug_request_complete(int id, u16 active)
@@ -1597,7 +1545,8 @@ parahotplug_request_complete(int id, u16 active)
                struct parahotplug_request *req =
                    list_entry(pos, struct parahotplug_request, list);
                if (req->id == id) {
-                       /* Found a match.  Remove it from the list and
+                       /*
+                        * Found a match. Remove it from the list and
                         * respond.
                         */
                        list_del(pos);
@@ -1616,8 +1565,10 @@ parahotplug_request_complete(int id, u16 active)
        return -EINVAL;
 }
 
-/*
- * Enables or disables a PCI device by kicking off a udev script
+/**
+ * parahotplug_process_message() - enables or disables a PCI device by kicking
+ *                                 off a udev script
+ * @inmsg: the message indicating whether to enable or disable
  */
 static void
 parahotplug_process_message(struct controlvm_message *inmsg)
@@ -1630,14 +1581,16 @@ parahotplug_process_message(struct controlvm_message *inmsg)
                return;
 
        if (inmsg->cmd.device_change_state.state.active) {
-               /* For enable messages, just respond with success
-               * right away.  This is a bit of a hack, but there are
-               * issues with the early enable messages we get (with
-               * either the udev script not detecting that the device
-               * is up, or not getting called at all).  Fortunately
-               * the messages that get lost don't matter anyway, as
-               * devices are automatically enabled at
-               * initialization.
+               /*
+                * For enable messages, just respond with success
+                * right away. This is a bit of a hack, but there are
+                * issues with the early enable messages we get (with
+                * either the udev script not detecting that the device
+                * is up, or not getting called at all). Fortunately
+                * the messages that get lost don't matter anyway, as
+                *
+                * devices are automatically enabled at
+                * initialization.
                */
                parahotplug_request_kickoff(req);
                controlvm_respond_physdev_changestate
@@ -1646,11 +1599,12 @@ parahotplug_process_message(struct controlvm_message *inmsg)
                         inmsg->cmd.device_change_state.state);
                parahotplug_request_destroy(req);
        } else {
-               /* For disable messages, add the request to the
-               * request list before kicking off the udev script.  It
-               * won't get responded to until the script has
-               * indicated it's done.
-               */
+               /*
+                * For disable messages, add the request to the
+                * request list before kicking off the udev script. It
+                * won't get responded to until the script has
+                * indicated it's done.
+                */
                spin_lock(&parahotplug_request_list_lock);
                list_add_tail(&req->list, &parahotplug_request_list);
                spin_unlock(&parahotplug_request_list_lock);
@@ -1659,8 +1613,12 @@ parahotplug_process_message(struct controlvm_message *inmsg)
        }
 }
 
-/* Process a controlvm message.
- * Return result:
+/**
+ * handle_command() - process a controlvm message
+ * @inmsg:        the message to process
+ * @channel_addr: address of the controlvm channel
+ *
+ * Return:
  *    false - this function will return false only in the case where the
  *            controlvm message was NOT processed, but processing must be
  *            retried before reading the next controlvm message; a
@@ -1668,7 +1626,7 @@ parahotplug_process_message(struct controlvm_message *inmsg)
  *            the allocation of memory in which to copy out controlvm
  *            payload data
  *    true  - processing of the controlvm message completed,
- *            either successfully or with an error.
+ *            either successfully or with an error
  */
 static bool
 handle_command(struct controlvm_message inmsg, u64 channel_addr)
@@ -1687,8 +1645,9 @@ handle_command(struct controlvm_message inmsg, u64 channel_addr)
        parm_addr = channel_addr + inmsg.hdr.payload_vm_offset;
        parm_bytes = inmsg.hdr.payload_bytes;
 
-       /* Parameter and channel addresses within test messages actually lie
-        * within our OS-controlled memory.  We need to know that, because it
+       /*
+        * Parameter and channel addresses within test messages actually lie
+        * within our OS-controlled memory. We need to know that, because it
         * makes a difference in how we compute the virtual address.
         */
        if (parm_addr && parm_bytes) {
@@ -1729,10 +1688,11 @@ handle_command(struct controlvm_message inmsg, u64 channel_addr)
                if (cmd->device_change_state.flags.phys_device) {
                        parahotplug_process_message(&inmsg);
                } else {
-                       /* save the hdr and cmd structures for later use */
-                       /* when sending back the response to Command */
+                       /*
+                        * save the hdr and cmd structures for later use
+                        * when sending back the response to Command
+                        */
                        my_device_changestate(&inmsg);
-                       g_devicechangestate_packet = inmsg.cmd;
                        break;
                }
                break;
@@ -1802,20 +1762,17 @@ controlvm_periodic_work(struct work_struct *work)
        bool got_command = false;
        bool handle_command_failed = false;
 
-       /* make sure visorbus server is registered for controlvm callbacks */
-       if (visorchipset_visorbusregwait && !visorbusregistered)
-               goto cleanup;
-
        while (visorchannel_signalremove(controlvm_channel,
                                         CONTROLVM_QUEUE_RESPONSE,
                                         &inmsg))
                ;
        if (!got_command) {
                if (controlvm_pending_msg_valid) {
-                       /* we throttled processing of a prior
-                       * msg, so try to process it again
-                       * rather than reading a new one
-                       */
+                       /*
+                        * we throttled processing of a prior
+                        * msg, so try to process it again
+                        * rather than reading a new one
+                        */
                        inmsg = controlvm_pending_msg;
                        controlvm_pending_msg_valid = false;
                        got_command = true;
@@ -1832,12 +1789,13 @@ controlvm_periodic_work(struct work_struct *work)
                                   (controlvm_channel)))
                        got_command = read_controlvm_event(&inmsg);
                else {
-                       /* this is a scenario where throttling
-                       * is required, but probably NOT an
-                       * error...; we stash the current
-                       * controlvm msg so we will attempt to
-                       * reprocess it on our next loop
-                       */
+                       /*
+                        * this is a scenario where throttling
+                        * is required, but probably NOT an
+                        * error...; we stash the current
+                        * controlvm msg so we will attempt to
+                        * reprocess it on our next loop
+                        */
                        handle_command_failed = true;
                        controlvm_pending_msg = inmsg;
                        controlvm_pending_msg_valid = true;
@@ -1847,14 +1805,13 @@ controlvm_periodic_work(struct work_struct *work)
        /* parahotplug_worker */
        parahotplug_process_list();
 
-cleanup:
-
        if (time_after(jiffies,
                       most_recent_message_jiffies + (HZ * MIN_IDLE_SECONDS))) {
-               /* it's been longer than MIN_IDLE_SECONDS since we
-               * processed our last controlvm message; slow down the
-               * polling
-               */
+               /*
+                * it's been longer than MIN_IDLE_SECONDS since we
+                * processed our last controlvm message; slow down the
+                * polling
+                */
                if (poll_jiffies != POLLJIFFIES_CONTROLVMCHANNEL_SLOW)
                        poll_jiffies = POLLJIFFIES_CONTROLVMCHANNEL_SLOW;
        } else {
@@ -1874,13 +1831,6 @@ setup_crash_devices_work_queue(struct work_struct *work)
        u32 local_crash_msg_offset;
        u16 local_crash_msg_count;
 
-       /* make sure visorbus is registered for controlvm callbacks */
-       if (visorchipset_visorbusregwait && !visorbusregistered) {
-               poll_jiffies = POLLJIFFIES_CONTROLVMCHANNEL_SLOW;
-               schedule_delayed_work(&periodic_controlvm_work, poll_jiffies);
-               return;
-       }
-
        POSTCODE_LINUX_2(CRASH_DEV_ENTRY_PC, POSTCODE_SEVERITY_INFO);
 
        /* send init chipset msg */
@@ -1958,7 +1908,7 @@ setup_crash_devices_work_queue(struct work_struct *work)
        POSTCODE_LINUX_2(CRASH_DEV_EXIT_PC, POSTCODE_SEVERITY_INFO);
 }
 
-static void
+void
 bus_create_response(struct visor_device *bus_info, int response)
 {
        if (response >= 0)
@@ -1971,7 +1921,7 @@ bus_create_response(struct visor_device *bus_info, int response)
        bus_info->pending_msg_hdr = NULL;
 }
 
-static void
+void
 bus_destroy_response(struct visor_device *bus_info, int response)
 {
        bus_responder(CONTROLVM_BUS_DESTROY, bus_info->pending_msg_hdr,
@@ -1981,7 +1931,7 @@ bus_destroy_response(struct visor_device *bus_info, int response)
        bus_info->pending_msg_hdr = NULL;
 }
 
-static void
+void
 device_create_response(struct visor_device *dev_info, int response)
 {
        if (response >= 0)
@@ -1994,7 +1944,7 @@ device_create_response(struct visor_device *dev_info, int response)
        dev_info->pending_msg_hdr = NULL;
 }
 
-static void
+void
 device_destroy_response(struct visor_device *dev_info, int response)
 {
        device_responder(CONTROLVM_DEVICE_DESTROY, dev_info->pending_msg_hdr,
@@ -2004,9 +1954,9 @@ device_destroy_response(struct visor_device *dev_info, int response)
        dev_info->pending_msg_hdr = NULL;
 }
 
-static void
-visorchipset_device_pause_response(struct visor_device *dev_info,
-                                  int response)
+void
+device_pause_response(struct visor_device *dev_info,
+                     int response)
 {
        device_changestate_responder(CONTROLVM_DEVICE_CHANGESTATE,
                                     dev_info, response,
@@ -2016,7 +1966,7 @@ visorchipset_device_pause_response(struct visor_device *dev_info,
        dev_info->pending_msg_hdr = NULL;
 }
 
-static void
+void
 device_resume_response(struct visor_device *dev_info, int response)
 {
        device_changestate_responder(CONTROLVM_DEVICE_CHANGESTATE,
@@ -2027,26 +1977,47 @@ device_resume_response(struct visor_device *dev_info, int response)
        dev_info->pending_msg_hdr = NULL;
 }
 
-/* The parahotplug/devicedisabled interface gets called by our support script
+/**
+ * devicedisabled_store() - disables the hotplug device
+ * @dev:   sysfs interface variable not utilized in this function
+ * @attr:  sysfs interface variable not utilized in this function
+ * @buf:   buffer containing the device id
+ * @count: the size of the buffer
+ *
+ * The parahotplug/devicedisabled interface gets called by our support script
  * when an SR-IOV device has been shut down. The ID is passed to the script
  * and then passed back when the device has been removed.
+ *
+ * Return: the size of the buffer for success or negative for error
  */
 static ssize_t devicedisabled_store(struct device *dev,
                                    struct device_attribute *attr,
                                    const char *buf, size_t count)
 {
        unsigned int id;
+       int err;
 
        if (kstrtouint(buf, 10, &id))
                return -EINVAL;
 
-       parahotplug_request_complete(id, 0);
+       err = parahotplug_request_complete(id, 0);
+       if (err < 0)
+               return err;
        return count;
 }
 
-/* The parahotplug/deviceenabled interface gets called by our support script
+/**
+ * deviceenabled_store() - enables the hotplug device
+ * @dev:   sysfs interface variable not utilized in this function
+ * @attr:  sysfs interface variable not utilized in this function
+ * @buf:   buffer containing the device id
+ * @count: the size of the buffer
+ *
+ * The parahotplug/deviceenabled interface gets called by our support script
  * when an SR-IOV device has been recovered. The ID is passed to the script
  * and then passed back when the device has been brought back up.
+ *
+ * Return: the size of the buffer for success or negative for error
  */
 static ssize_t deviceenabled_store(struct device *dev,
                                   struct device_attribute *attr,
@@ -2202,7 +2173,6 @@ visorchipset_init(struct acpi_device *acpi_device)
        if (!addr)
                goto error;
 
-       memset(&busdev_notifiers, 0, sizeof(busdev_notifiers));
        memset(&controlvm_payload_info, 0, sizeof(controlvm_payload_info));
 
        controlvm_channel = visorchannel_create_with_lock(addr, 0,
index c043fa41cedaf54294f263bfd304189098ed8f1e..86e695d5a4414a9772d9c8a9458f05b842bfba91 100644 (file)
 * Virtualization.  The VMCALLs are provided by Monitor and used by IO code
 * running on IO Partitions.
 */
+static inline unsigned long
+__unisys_vmcall_gnuc(unsigned long tuple, unsigned long reg_ebx,
+                    unsigned long reg_ecx)
+{
+       unsigned long result = 0;
+       unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx;
 
-#ifdef __GNUC__
-#include "iovmcall_gnuc.h"
-#endif /*  */
-#include "diagchannel.h"
+       cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx);
+       if (!(cpuid_ecx & 0x80000000))
+               return -EPERM;
+
+       __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) :
+               "a"(tuple), "b"(reg_ebx), "c"(reg_ecx));
+       return result;
+}
+
+static inline unsigned long
+__unisys_extended_vmcall_gnuc(unsigned long long tuple,
+                             unsigned long long reg_ebx,
+                             unsigned long long reg_ecx,
+                             unsigned long long reg_edx)
+{
+       unsigned long result = 0;
+       unsigned int cpuid_eax, cpuid_ebx, cpuid_ecx, cpuid_edx;
+
+       cpuid(0x00000001, &cpuid_eax, &cpuid_ebx, &cpuid_ecx, &cpuid_edx);
+       if (!(cpuid_ecx & 0x80000000))
+               return -EPERM;
+
+       __asm__ __volatile__(".byte 0x00f, 0x001, 0x0c1" : "=a"(result) :
+               "a"(tuple), "b"(reg_ebx), "c"(reg_ecx), "d"(reg_edx));
+       return result;
+}
 
 #ifdef VMCALL_IO_CONTROLVM_ADDR
 #undef VMCALL_IO_CONTROLVM_ADDR
@@ -57,7 +85,6 @@ enum vmcall_monitor_interface_method_tuple { /* VMCALL identification tuples  */
 #define VMCALL_SUCCESS 0
 #define VMCALL_SUCCESSFUL(result)      (result == 0)
 
-#ifdef __GNUC__
 #define unisys_vmcall(tuple, reg_ebx, reg_ecx) \
        __unisys_vmcall_gnuc(tuple, reg_ebx, reg_ecx)
 #define unisys_extended_vmcall(tuple, reg_ebx, reg_ecx, reg_edx) \
@@ -74,7 +101,6 @@ enum vmcall_monitor_interface_method_tuple { /* VMCALL identification tuples  */
 #define ISSUE_IO_VMCALL_POSTCODE_SEVERITY(postcode, severity)          \
        ISSUE_IO_EXTENDED_VMCALL(VMCALL_POST_CODE_LOGEVENT, severity,   \
                                 MDS_APPOS, postcode)
-#endif
 
 /* Structures for IO VMCALLs */
 
@@ -89,4 +115,156 @@ struct vmcall_io_controlvm_addr_params {
        u8 unused[4];           /* Unused Bytes in the 64-Bit Aligned Struct */
 } __packed;
 
+/******* INFO ON ISSUE_POSTCODE_LINUX() BELOW *******/
+enum driver_pc {               /* POSTCODE driver identifier tuples */
+       /* visorchipset driver files */
+       VISOR_CHIPSET_PC = 0xA0,
+       VISOR_CHIPSET_PC_controlvm_c = 0xA1,
+       VISOR_CHIPSET_PC_controlvm_cm2 = 0xA2,
+       VISOR_CHIPSET_PC_controlvm_direct_c = 0xA3,
+       VISOR_CHIPSET_PC_file_c = 0xA4,
+       VISOR_CHIPSET_PC_parser_c = 0xA5,
+       VISOR_CHIPSET_PC_testing_c = 0xA6,
+       VISOR_CHIPSET_PC_visorchipset_main_c = 0xA7,
+       VISOR_CHIPSET_PC_visorswitchbus_c = 0xA8,
+       /* visorbus driver files */
+       VISOR_BUS_PC = 0xB0,
+       VISOR_BUS_PC_businst_attr_c = 0xB1,
+       VISOR_BUS_PC_channel_attr_c = 0xB2,
+       VISOR_BUS_PC_devmajorminor_attr_c = 0xB3,
+       VISOR_BUS_PC_visorbus_main_c = 0xB4,
+       /* visorclientbus driver files */
+       VISOR_CLIENT_BUS_PC = 0xC0,
+       VISOR_CLIENT_BUS_PC_visorclientbus_main_c = 0xC1,
+       /* virt hba driver files */
+       VIRT_HBA_PC = 0xC2,
+       VIRT_HBA_PC_virthba_c = 0xC3,
+       /* virtpci driver files */
+       VIRT_PCI_PC = 0xC4,
+       VIRT_PCI_PC_virtpci_c = 0xC5,
+       /* virtnic driver files */
+       VIRT_NIC_PC = 0xC6,
+       VIRT_NIC_P_virtnic_c = 0xC7,
+       /* uislib driver files */
+       UISLIB_PC = 0xD0,
+       UISLIB_PC_uislib_c = 0xD1,
+       UISLIB_PC_uisqueue_c = 0xD2,
+       /* 0xD3 RESERVED */
+       UISLIB_PC_uisutils_c = 0xD4,
+};
+
+enum event_pc {                        /* POSTCODE event identifier tuples */
+       ATTACH_PORT_ENTRY_PC = 0x001,
+       ATTACH_PORT_FAILURE_PC = 0x002,
+       ATTACH_PORT_SUCCESS_PC = 0x003,
+       BUS_FAILURE_PC = 0x004,
+       BUS_CREATE_ENTRY_PC = 0x005,
+       BUS_CREATE_FAILURE_PC = 0x006,
+       BUS_CREATE_EXIT_PC = 0x007,
+       BUS_CONFIGURE_ENTRY_PC = 0x008,
+       BUS_CONFIGURE_FAILURE_PC = 0x009,
+       BUS_CONFIGURE_EXIT_PC = 0x00A,
+       CHIPSET_INIT_ENTRY_PC = 0x00B,
+       CHIPSET_INIT_SUCCESS_PC = 0x00C,
+       CHIPSET_INIT_FAILURE_PC = 0x00D,
+       CHIPSET_INIT_EXIT_PC = 0x00E,
+       CREATE_WORKQUEUE_PC = 0x00F,
+       CREATE_WORKQUEUE_FAILED_PC = 0x0A0,
+       CONTROLVM_INIT_FAILURE_PC = 0x0A1,
+       DEVICE_CREATE_ENTRY_PC = 0x0A2,
+       DEVICE_CREATE_FAILURE_PC = 0x0A3,
+       DEVICE_CREATE_SUCCESS_PC = 0x0A4,
+       DEVICE_CREATE_EXIT_PC = 0x0A5,
+       DEVICE_ADD_PC = 0x0A6,
+       DEVICE_REGISTER_FAILURE_PC = 0x0A7,
+       DEVICE_CHANGESTATE_ENTRY_PC = 0x0A8,
+       DEVICE_CHANGESTATE_FAILURE_PC = 0x0A9,
+       DEVICE_CHANGESTATE_EXIT_PC = 0x0AA,
+       DRIVER_ENTRY_PC = 0x0AB,
+       DRIVER_EXIT_PC = 0x0AC,
+       MALLOC_FAILURE_PC = 0x0AD,
+       QUEUE_DELAYED_WORK_PC = 0x0AE,
+       /* 0x0B7 RESERVED */
+       VBUS_CHANNEL_ENTRY_PC = 0x0B8,
+       VBUS_CHANNEL_FAILURE_PC = 0x0B9,
+       VBUS_CHANNEL_EXIT_PC = 0x0BA,
+       VHBA_CREATE_ENTRY_PC = 0x0BB,
+       VHBA_CREATE_FAILURE_PC = 0x0BC,
+       VHBA_CREATE_EXIT_PC = 0x0BD,
+       VHBA_CREATE_SUCCESS_PC = 0x0BE,
+       VHBA_COMMAND_HANDLER_PC = 0x0BF,
+       VHBA_PROBE_ENTRY_PC = 0x0C0,
+       VHBA_PROBE_FAILURE_PC = 0x0C1,
+       VHBA_PROBE_EXIT_PC = 0x0C2,
+       VNIC_CREATE_ENTRY_PC = 0x0C3,
+       VNIC_CREATE_FAILURE_PC = 0x0C4,
+       VNIC_CREATE_SUCCESS_PC = 0x0C5,
+       VNIC_PROBE_ENTRY_PC = 0x0C6,
+       VNIC_PROBE_FAILURE_PC = 0x0C7,
+       VNIC_PROBE_EXIT_PC = 0x0C8,
+       VPCI_CREATE_ENTRY_PC = 0x0C9,
+       VPCI_CREATE_FAILURE_PC = 0x0CA,
+       VPCI_CREATE_EXIT_PC = 0x0CB,
+       VPCI_PROBE_ENTRY_PC = 0x0CC,
+       VPCI_PROBE_FAILURE_PC = 0x0CD,
+       VPCI_PROBE_EXIT_PC = 0x0CE,
+       CRASH_DEV_ENTRY_PC = 0x0CF,
+       CRASH_DEV_EXIT_PC = 0x0D0,
+       CRASH_DEV_HADDR_NULL = 0x0D1,
+       CRASH_DEV_CONTROLVM_NULL = 0x0D2,
+       CRASH_DEV_RD_BUS_FAIULRE_PC = 0x0D3,
+       CRASH_DEV_RD_DEV_FAIULRE_PC = 0x0D4,
+       CRASH_DEV_BUS_NULL_FAILURE_PC = 0x0D5,
+       CRASH_DEV_DEV_NULL_FAILURE_PC = 0x0D6,
+       CRASH_DEV_CTRL_RD_FAILURE_PC = 0x0D7,
+       CRASH_DEV_COUNT_FAILURE_PC = 0x0D8,
+       SAVE_MSG_BUS_FAILURE_PC = 0x0D9,
+       SAVE_MSG_DEV_FAILURE_PC = 0x0DA,
+       CALLHOME_INIT_FAILURE_PC = 0x0DB
+};
+
+#define POSTCODE_SEVERITY_ERR DIAG_SEVERITY_ERR
+#define POSTCODE_SEVERITY_WARNING DIAG_SEVERITY_WARNING
+/* TODO-> Info currently doesn't show, so we set info=warning */
+#define POSTCODE_SEVERITY_INFO DIAG_SEVERITY_PRINT
+
+/* example call of POSTCODE_LINUX_2(VISOR_CHIPSET_PC, POSTCODE_SEVERITY_ERR);
+ * Please also note that the resulting postcode is in hex, so if you are
+ * searching for the __LINE__ number, convert it first to decimal.  The line
+ * number combined with driver and type of call, will allow you to track down
+ * exactly what line an error occurred on, or where the last driver
+ * entered/exited from.
+ */
+
+/* BASE FUNCTIONS */
+#define POSTCODE_LINUX_A(DRIVER_PC, EVENT_PC, pc32bit, severity)       \
+do {                                                                   \
+       unsigned long long post_code_temp;                              \
+       post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \
+               ((((u64)__LINE__) & 0xFFF) << 32) |                     \
+               (((u64)pc32bit) & 0xFFFFFFFF);                          \
+       ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity);    \
+} while (0)
+
+#define POSTCODE_LINUX_B(DRIVER_PC, EVENT_PC, pc16bit1, pc16bit2, severity) \
+do {                                                                   \
+       unsigned long long post_code_temp;                              \
+       post_code_temp = (((u64)DRIVER_PC) << 56) | (((u64)EVENT_PC) << 44) | \
+               ((((u64)__LINE__) & 0xFFF) << 32) |                     \
+               ((((u64)pc16bit1) & 0xFFFF) << 16) |                    \
+               (((u64)pc16bit2) & 0xFFFF);                             \
+       ISSUE_IO_VMCALL_POSTCODE_SEVERITY(post_code_temp, severity);    \
+} while (0)
+
+/* MOST COMMON */
+#define POSTCODE_LINUX_2(EVENT_PC, severity)                           \
+       POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, 0x0000, severity)
+
+#define POSTCODE_LINUX_3(EVENT_PC, pc32bit, severity)                  \
+       POSTCODE_LINUX_A(CURRENT_FILE_PC, EVENT_PC, pc32bit, severity)
+
+#define POSTCODE_LINUX_4(EVENT_PC, pc16bit1, pc16bit2, severity)       \
+       POSTCODE_LINUX_B(CURRENT_FILE_PC, EVENT_PC, pc16bit1,           \
+                        pc16bit2, severity)
+
 #endif /* __IOMONINTF_H__ */
index 1bc3d20640804a0e683863ae932a913706d692c5..53dde7c53809f3459df98480e33cb1a50bde3ab5 100644 (file)
@@ -17,8 +17,6 @@
 
 #include <linux/types.h>
 
-#include "ultrainputreport.h"
-
 /* Identifies mouse and keyboard activity which is specified by the firmware to
  *  the host using the cmsimpleinput protocol.  @ingroup coretypes
  */
index d67cd76327c02f6d2288632ee8b2f6fd7c98d884..641cdab34449b623ff59427c513be78f268da6b1 100644 (file)
@@ -31,7 +31,6 @@
 
 #include "version.h"
 #include "visorbus.h"
-#include "channel.h"
 #include "ultrainputreport.h"
 
 /* Keyboard channel {c73416d0-b0b8-44af-b304-9d2ae99f1b3d} */
@@ -63,9 +62,10 @@ enum visorinput_device_type {
  */
 struct visorinput_devdata {
        struct visor_device *dev;
-       struct rw_semaphore lock_visor_dev; /* lock for dev */
+       struct mutex lock_visor_dev; /* lock for dev */
        struct input_dev *visorinput_dev;
        bool paused;
+       bool interrupts_enabled;
        unsigned int keycode_table_bytes; /* size of following array */
        /* for keyboard devices: visorkbd_keycode[] + visorkbd_ext_keycode[] */
        unsigned char keycode_table[0];
@@ -228,7 +228,21 @@ static int visorinput_open(struct input_dev *visorinput_dev)
                return -EINVAL;
        }
        dev_dbg(&visorinput_dev->dev, "%s opened\n", __func__);
+
+       /*
+        * If we're not paused, really enable interrupts.
+        * Regardless of whether we are paused, set a flag indicating
+        * interrupts should be enabled so when we resume, interrupts
+        * will really be enabled.
+        */
+       mutex_lock(&devdata->lock_visor_dev);
+       devdata->interrupts_enabled = true;
+       if (devdata->paused)
+               goto out_unlock;
        visorbus_enable_channel_interrupts(devdata->dev);
+
+out_unlock:
+       mutex_unlock(&devdata->lock_visor_dev);
        return 0;
 }
 
@@ -243,20 +257,35 @@ static void visorinput_close(struct input_dev *visorinput_dev)
                return;
        }
        dev_dbg(&visorinput_dev->dev, "%s closed\n", __func__);
+
+       /*
+        * If we're not paused, really disable interrupts.
+        * Regardless of whether we are paused, set a flag indicating
+        * interrupts should be disabled so when we resume we will
+        * not re-enable them.
+        */
+
+       mutex_lock(&devdata->lock_visor_dev);
+       devdata->interrupts_enabled = false;
+       if (devdata->paused)
+               goto out_unlock;
        visorbus_disable_channel_interrupts(devdata->dev);
+
+out_unlock:
+       mutex_unlock(&devdata->lock_visor_dev);
 }
 
 /*
- * register_client_keyboard() initializes and returns a Linux input node that
+ * setup_client_keyboard() initializes and returns a Linux input node that
  * we can use to deliver keyboard inputs to Linux.  We of course do this when
  * we see keyboard inputs coming in on a keyboard channel.
  */
 static struct input_dev *
-register_client_keyboard(void *devdata,  /* opaque on purpose */
-                        unsigned char *keycode_table)
+setup_client_keyboard(void *devdata,  /* opaque on purpose */
+                     unsigned char *keycode_table)
 
 {
-       int i, error;
+       int i;
        struct input_dev *visorinput_dev;
 
        visorinput_dev = input_allocate_device();
@@ -290,18 +319,12 @@ register_client_keyboard(void *devdata,  /* opaque on purpose */
        visorinput_dev->close = visorinput_close;
        input_set_drvdata(visorinput_dev, devdata); /* pre input_register! */
 
-       error = input_register_device(visorinput_dev);
-       if (error) {
-               input_free_device(visorinput_dev);
-               return NULL;
-       }
        return visorinput_dev;
 }
 
 static struct input_dev *
-register_client_mouse(void *devdata /* opaque on purpose */)
+setup_client_mouse(void *devdata /* opaque on purpose */)
 {
-       int error;
        struct input_dev *visorinput_dev = NULL;
        int xres, yres;
        struct fb_info *fb0;
@@ -336,13 +359,6 @@ register_client_mouse(void *devdata /* opaque on purpose */)
        visorinput_dev->open = visorinput_open;
        visorinput_dev->close = visorinput_close;
        input_set_drvdata(visorinput_dev, devdata); /* pre input_register! */
-
-       error = input_register_device(visorinput_dev);
-       if (error) {
-               input_free_device(visorinput_dev);
-               return NULL;
-       }
-
        input_set_capability(visorinput_dev, EV_REL, REL_WHEEL);
 
        return visorinput_dev;
@@ -360,8 +376,18 @@ devdata_create(struct visor_device *dev, enum visorinput_device_type devtype)
        devdata = kzalloc(sizeof(*devdata) + extra_bytes, GFP_KERNEL);
        if (!devdata)
                return NULL;
+       mutex_init(&devdata->lock_visor_dev);
+       mutex_lock(&devdata->lock_visor_dev);
        devdata->dev = dev;
 
+       /*
+        * visorinput_open() can be called as soon as input_register_device()
+        * happens, and that will enable channel interrupts.  Setting paused
+        * prevents us from getting into visorinput_channel_interrupt() prior
+        * to the device structure being totally initialized.
+        */
+       devdata->paused = true;
+
        /*
         * This is an input device in a client guest partition,
         * so we need to create whatever input nodes are necessary to
@@ -374,23 +400,49 @@ devdata_create(struct visor_device *dev, enum visorinput_device_type devtype)
                       KEYCODE_TABLE_BYTES);
                memcpy(devdata->keycode_table + KEYCODE_TABLE_BYTES,
                       visorkbd_ext_keycode, KEYCODE_TABLE_BYTES);
-               devdata->visorinput_dev = register_client_keyboard
+               devdata->visorinput_dev = setup_client_keyboard
                        (devdata, devdata->keycode_table);
                if (!devdata->visorinput_dev)
                        goto cleanups_register;
                break;
        case visorinput_mouse:
-               devdata->visorinput_dev = register_client_mouse(devdata);
+               devdata->visorinput_dev = setup_client_mouse(devdata);
                if (!devdata->visorinput_dev)
                        goto cleanups_register;
                break;
        }
 
-       init_rwsem(&devdata->lock_visor_dev);
+       dev_set_drvdata(&dev->device, devdata);
+       mutex_unlock(&devdata->lock_visor_dev);
+
+       /*
+        * Device struct is completely set up now, with the exception of
+        * visorinput_dev being registered.
+        * We need to unlock before we register the device, because this
+        * can cause an on-stack call of visorinput_open(), which would
+        * deadlock if we had the lock.
+        */
+       if (input_register_device(devdata->visorinput_dev)) {
+               input_free_device(devdata->visorinput_dev);
+               goto err_kfree_devdata;
+       }
+
+       mutex_lock(&devdata->lock_visor_dev);
+       /*
+        * Establish calls to visorinput_channel_interrupt() if that is
+        * the desired state that we've kept track of in interrupts_enabled
+        * while the device was being created.
+        */
+       devdata->paused = false;
+       if (devdata->interrupts_enabled)
+               visorbus_enable_channel_interrupts(dev);
+       mutex_unlock(&devdata->lock_visor_dev);
 
        return devdata;
 
 cleanups_register:
+       mutex_unlock(&devdata->lock_visor_dev);
+err_kfree_devdata:
        kfree(devdata);
        return NULL;
 }
@@ -398,7 +450,6 @@ cleanups_register:
 static int
 visorinput_probe(struct visor_device *dev)
 {
-       struct visorinput_devdata *devdata = NULL;
        uuid_le guid;
        enum visorinput_device_type devtype;
 
@@ -409,10 +460,9 @@ visorinput_probe(struct visor_device *dev)
                devtype = visorinput_keyboard;
        else
                return -ENODEV;
-       devdata = devdata_create(dev, devtype);
-       if (!devdata)
+       visorbus_disable_channel_interrupts(dev);
+       if (!devdata_create(dev, devtype))
                return -ENOMEM;
-       dev_set_drvdata(&dev->device, devdata);
        return 0;
 }
 
@@ -431,6 +481,7 @@ visorinput_remove(struct visor_device *dev)
        if (!devdata)
                return;
 
+       mutex_lock(&devdata->lock_visor_dev);
        visorbus_disable_channel_interrupts(dev);
 
        /*
@@ -438,10 +489,10 @@ visorinput_remove(struct visor_device *dev)
         * in visorinput_channel_interrupt()
         */
 
-       down_write(&devdata->lock_visor_dev);
        dev_set_drvdata(&dev->device, NULL);
+       mutex_unlock(&devdata->lock_visor_dev);
+
        unregister_client_input(devdata->visorinput_dev);
-       up_write(&devdata->lock_visor_dev);
        kfree(devdata);
 }
 
@@ -529,13 +580,7 @@ visorinput_channel_interrupt(struct visor_device *dev)
        if (!devdata)
                return;
 
-       down_write(&devdata->lock_visor_dev);
-       if (devdata->paused) /* don't touch device/channel when paused */
-               goto out_locked;
-
        visorinput_dev = devdata->visorinput_dev;
-       if (!visorinput_dev)
-               goto out_locked;
 
        while (visorchannel_signalremove(dev->visorchannel, 0, &r)) {
                scancode = r.activity.arg1;
@@ -611,8 +656,6 @@ visorinput_channel_interrupt(struct visor_device *dev)
                        break;
                }
        }
-out_locked:
-       up_write(&devdata->lock_visor_dev);
 }
 
 static int
@@ -627,16 +670,24 @@ visorinput_pause(struct visor_device *dev,
                goto out;
        }
 
-       down_write(&devdata->lock_visor_dev);
+       mutex_lock(&devdata->lock_visor_dev);
        if (devdata->paused) {
                rc = -EBUSY;
                goto out_locked;
        }
+       if (devdata->interrupts_enabled)
+               visorbus_disable_channel_interrupts(dev);
+
+       /*
+        * due to above, at this time no thread of execution will be
+        * in visorinput_channel_interrupt()
+        */
+
        devdata->paused = true;
        complete_func(dev, 0);
        rc = 0;
 out_locked:
-       up_write(&devdata->lock_visor_dev);
+       mutex_unlock(&devdata->lock_visor_dev);
 out:
        return rc;
 }
@@ -652,16 +703,25 @@ visorinput_resume(struct visor_device *dev,
                rc = -ENODEV;
                goto out;
        }
-       down_write(&devdata->lock_visor_dev);
+       mutex_lock(&devdata->lock_visor_dev);
        if (!devdata->paused) {
                rc = -EBUSY;
                goto out_locked;
        }
        devdata->paused = false;
        complete_func(dev, 0);
+
+       /*
+        * Re-establish calls to visorinput_channel_interrupt() if that is
+        * the desired state that we've kept track of in interrupts_enabled
+        * while the device was paused.
+        */
+       if (devdata->interrupts_enabled)
+               visorbus_enable_channel_interrupts(dev);
+
        rc = 0;
 out_locked:
-       up_write(&devdata->lock_visor_dev);
+       mutex_unlock(&devdata->lock_visor_dev);
 out:
        return rc;
 }
index a28388d3ddc2aee9799b55600314aa6a8ed5277c..49ee747211e65dc433d058e848d60ae1900e858c 100644 (file)
@@ -29,8 +29,6 @@
 #include "iochannel.h"
 
 #define VISORNIC_INFINITE_RSP_WAIT 0
-#define VISORNICSOPENMAX 32
-#define MAXDEVICES     16384
 
 /* MAX_BUF = 64 lines x 32 MAXVNIC x 80 characters
  *         = 163840 bytes
@@ -1586,7 +1584,7 @@ drain_resp_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata)
  *
  *     Drain the respones queue of any responses from the IO partition.
  *     Process the responses as we get them.
- *     Returns when response queue is empty or when the threadd stops.
+ *     Returns when response queue is empty or when the thread stops.
  */
 static void
 service_resp_queue(struct uiscmdrsp *cmdrsp, struct visornic_devdata *devdata,
index b7d43a5622bacfaa4aae74e627b15c0d930e78a3..029a8df4ca1cf7225dccfcc740f6184f2e7bf160 100644 (file)
@@ -193,7 +193,8 @@ bool set_channel(struct vnt_private *priv, struct ieee80211_channel *ch)
        MACvRegBitsOn(priv->PortOffset, MAC_REG_MACCR, MACCR_CLRNAV);
 
        /* TX_PE will reserve 3 us for MAX2829 A mode only,
-          it is for better TX throughput */
+        * it is for better TX throughput
+        */
 
        if (priv->byRFType == RF_AIROHA7230)
                RFbAL7230SelectChannelPostProcess(priv, priv->byCurrentCh,
index 494164045a0f9a785581940e1470f77458aab9b6..ed12b5c7fe4348145e326951888cad361153dc60 100644 (file)
@@ -113,10 +113,10 @@ DEVICE_PARAM(ShortRetryLimit, "Short frame retry limits");
 DEVICE_PARAM(LongRetryLimit, "long frame retry limits");
 
 /* BasebandType[] baseband type selected
  0: indicate 802.11a type
  1: indicate 802.11b type
  2: indicate 802.11g type
-*/
* 0: indicate 802.11a type
* 1: indicate 802.11b type
* 2: indicate 802.11g type
+ */
 #define BBP_TYPE_MIN     0
 #define BBP_TYPE_MAX     2
 #define BBP_TYPE_DEF     2
index bc8ca981a62915b08b28e7657bb36740ed75f295..7d6e7464ae51a1c34de5ec686451996817ead67d 100644 (file)
@@ -52,7 +52,7 @@
 
 /*---------------------  Export Functions  --------------------------*/
 
-/*+
+/*
  *
  * Routine Description:
  * Enable hw power saving functions
@@ -60,7 +60,7 @@
  * Return Value:
  *    None.
  *
-*/
+ */
 
 void
 PSvEnablePowerSaving(
@@ -104,7 +104,7 @@ PSvEnablePowerSaving(
        pr_debug("PS:Power Saving Mode Enable...\n");
 }
 
-/*+
+/*
  *
  * Routine Description:
  * Disable hw power saving functions
@@ -112,7 +112,7 @@ PSvEnablePowerSaving(
  * Return Value:
  *    None.
  *
-*/
+ */
 
 void
 PSvDisablePowerSaving(
@@ -134,7 +134,7 @@ PSvDisablePowerSaving(
 }
 
 
-/*+
+/*
  *
  * Routine Description:
  * Check if Next TBTT must wake up
@@ -142,7 +142,7 @@ PSvDisablePowerSaving(
  * Return Value:
  *    None.
  *
-*/
+ */
 
 bool
 PSbIsNextTBTTWakeUp(
index ae10da21ddd06eb804978393dfc09be3a02c1df8..447882c7a6beb50aef9c86dcb1e2323bac30830d 100644 (file)
@@ -169,7 +169,8 @@ static unsigned long dwAL2230PowerTable[AL2230_PWR_IDX_LEN] = {
 };
 
 /* 40MHz reference frequency
- * Need to Pull PLLON(PE3) low when writing channel registers through 3-wire.*/
+ * Need to Pull PLLON(PE3) low when writing channel registers through 3-wire.
+ */
 static const unsigned long dwAL7230InitTable[CB_AL7230_INIT_SEQ] = {
        0x00379000+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Channel1 // Need modify for 11a */
        0x13333100+(BY_AL7230_REG_LEN<<3)+IFREGCTL_REGW, /* Channel1 // Need modify for 11a */
@@ -463,7 +464,8 @@ static bool s_bAL7230Init(struct vnt_private *priv)
 }
 
 /* Need to Pull PLLON low when writing channel registers through
- * 3-wire interface */
+ * 3-wire interface
+ */
 static bool s_bAL7230SelectChannel(struct vnt_private *priv, unsigned char byChannel)
 {
        void __iomem *dwIoBase = priv->PortOffset;
@@ -873,7 +875,8 @@ bool RFbRawSetPower(
 
        case RF_AIROHA7230:
                /* 0x080F1B00 for 3 wire control TxGain(D10)
-                * and 0x31 as TX Gain value */
+                * and 0x31 as TX Gain value
+                */
                dwMax7230Pwr = 0x080C0B00 | ((byPwr) << 12) |
                        (BY_AL7230_REG_LEN << 3)  | IFREGCTL_REGW;
 
@@ -886,7 +889,7 @@ bool RFbRawSetPower(
        return ret;
 }
 
-/*+
+/*
  *
  * Routine Description:
  *     Translate RSSI to dBm
@@ -900,7 +903,7 @@ bool RFbRawSetPower(
  *
  * Return Value: none
  *
-*/
+ */
 void
 RFvRSSITodBm(
        struct vnt_private *priv,
@@ -927,7 +930,8 @@ RFvRSSITodBm(
 }
 
 /* Post processing for the 11b/g and 11a.
- * for save time on changing Reg2,3,5,7,10,12,15 */
+ * for save time on changing Reg2,3,5,7,10,12,15
+ */
 bool RFbAL7230SelectChannelPostProcess(struct vnt_private *priv,
                                       u16 byOldChannel,
                                       u16 byNewChannel)
@@ -938,7 +942,8 @@ bool RFbAL7230SelectChannelPostProcess(struct vnt_private *priv,
 
        /* if change between 11 b/g and 11a need to update the following
         * register
-        * Channel Index 1~14 */
+        * Channel Index 1~14
+        */
        if ((byOldChannel <= CB_MAX_CHANNEL_24G) && (byNewChannel > CB_MAX_CHANNEL_24G)) {
                /* Change from 2.4G to 5G [Reg] */
                ret &= IFRFbWriteEmbedded(priv, dwAL7230InitTableAMode[2]);
index e4c3165ae027556238fabb2f38405d3fd57b7873..890d108463a2394c809093f6b7e340147a85502b 100644 (file)
 /*---------------------  Static Functions  --------------------------*/
 
 /*---------------------  Static Definitions -------------------------*/
-#define CRITICAL_PACKET_LEN      256    /* if packet size < 256 -> in-direct send
-                                            packet size >= 256 -> direct send */
+/* if packet size < 256 -> in-direct send
+ * vpacket size >= 256 -> direct send
+ */
+#define CRITICAL_PACKET_LEN      256
 
 static const unsigned short wTimeStampOff[2][MAX_RATE] = {
        {384, 288, 226, 209, 54, 43, 37, 31, 28, 25, 24, 23}, /* Long Preamble */
@@ -158,11 +160,11 @@ static __le16 vnt_time_stamp_off(struct vnt_private *priv, u16 rate)
                                                        [rate % MAX_RATE]);
 }
 
-/*byPktType : PK_TYPE_11A     0
-  PK_TYPE_11B     1
-  PK_TYPE_11GB    2
-  PK_TYPE_11GA    3
-*/
+/* byPktType : PK_TYPE_11A     0
* PK_TYPE_11B     1
* PK_TYPE_11GB    2
* PK_TYPE_11GA    3
+ */
 static
 unsigned int
 s_uGetTxRsvTime(
@@ -650,13 +652,16 @@ s_vFillRTSHead(
                return;
 
        if (bDisCRC) {
-               /* When CRCDIS bit is on, H/W forgot to generate FCS for RTS frame,
-                in this case we need to decrease its length by 4. */
+               /* When CRCDIS bit is on, H/W forgot to generate FCS for
+                * RTS frame, in this case we need to decrease its length by 4.
+                */
                uRTSFrameLen -= 4;
        }
 
-       /* Note: So far RTSHead doesn't appear in ATIM & Beacom DMA, so we don't need to take them into account.
-              Otherwise, we need to modify codes for them. */
+       /* Note: So far RTSHead doesn't appear in ATIM & Beacom DMA,
+        * so we don't need to take them into account.
+        * Otherwise, we need to modify codes for them.
+        */
        if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
                if (byFBOption == AUTO_FB_NONE) {
                        struct vnt_rts_g *buf = pvRTS;
@@ -842,8 +847,9 @@ s_vFillCTSHead(
                return;
 
        if (bDisCRC) {
-               /* When CRCDIS bit is on, H/W forgot to generate FCS for CTS frame,
-                in this case we need to decrease its length by 4. */
+               /* When CRCDIS bit is on, H/W forgot to generate FCS for
+                * CTS frame, in this case we need to decrease its length by 4.
+                */
                uCTSFrameLen -= 4;
        }
 
@@ -915,7 +921,7 @@ s_vFillCTSHead(
        }
 }
 
-/*+
+/*
  *
  * Description:
  *      Generate FIFO control for MAC & Baseband controller
@@ -937,7 +943,8 @@ s_vFillCTSHead(
  * Return Value: none
  *
  -
- * unsigned int cbFrameSize, Hdr+Payload+FCS */
+ * unsigned int cbFrameSize, Hdr+Payload+FCS
+ */
 static
 void
 s_vGenerateTxParameter(
@@ -972,8 +979,8 @@ s_vGenerateTxParameter(
                return;
 
        if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
-               if (pvRTS != NULL) { /* RTS_need
-                        Fill RsvTime */
+               if (pvRTS != NULL) { /* RTS_need */
+                       /* Fill RsvTime */
                        struct vnt_rrv_time_rts *buf = pvRrvTime;
 
                        buf->rts_rrv_time_aa = s_uGetRTSCTSRsvTime(pDevice, 2, byPktType, cbFrameSize, wCurrentRate);
index 807a5809b5d90b5b8d9e7d8f396f3cb6e5a6d18a..7cc13874f8f16b18b6327763ae2d5f52231069c1 100644 (file)
@@ -84,10 +84,10 @@ struct vnt_phy_field {
 } __packed;
 
 unsigned int vnt_get_frame_time(u8 preamble_type, u8 pkt_type,
-       unsigned int frame_length, u16 tx_rate);
+                               unsigned int frame_length, u16 tx_rate);
 
 void vnt_get_phy_field(struct vnt_private *, u32 frame_length,
-       u16 tx_rate, u8 pkt_type, struct vnt_phy_field *);
+                      u16 tx_rate, u8 pkt_type, struct vnt_phy_field *);
 
 void vnt_set_short_slot_time(struct vnt_private *);
 void vnt_set_vga_gain_offset(struct vnt_private *, u8);
index a382fc6aa9d3a55827635342fdc9c4cab284d722..53b469c71dc26e740f93c5ec3b6ead53a6aae23f 100644 (file)
 #include "key.h"
 #include "usbpipe.h"
 
-/* const u16 cwRXBCNTSFOff[MAX_RATE] =
-   {17, 34, 96, 192, 34, 23, 17, 11, 8, 5, 4, 3}; */
+/* const u16 cw_rxbcntsf_off[MAX_RATE] =
+ *   {17, 34, 96, 192, 34, 23, 17, 11, 8, 5, 4, 3};
+ */
 
-static const u16 cwRXBCNTSFOff[MAX_RATE] = {
+static const u16 cw_rxbcntsf_off[MAX_RATE] = {
        192, 96, 34, 17, 34, 23, 17, 11, 8, 5, 4, 3
 };
 
@@ -65,7 +66,6 @@ static const u16 cwRXBCNTSFOff[MAX_RATE] = {
  */
 void vnt_set_channel(struct vnt_private *priv, u32 connection_channel)
 {
-
        if (connection_channel > CB_MAX_CHANNEL || !connection_channel)
                return;
 
@@ -76,10 +76,10 @@ void vnt_set_channel(struct vnt_private *priv, u32 connection_channel)
        vnt_mac_reg_bits_off(priv, MAC_REG_CHANNEL, 0xb0);
 
        vnt_control_out(priv, MESSAGE_TYPE_SELECT_CHANNEL,
-                                       connection_channel, 0, 0, NULL);
+                       connection_channel, 0, 0, NULL);
 
        vnt_control_out_u8(priv, MESSAGE_REQUEST_MACREG, MAC_REG_CHANNEL,
-               (u8)(connection_channel | 0x80));
+                          (u8)(connection_channel | 0x80));
 }
 
 /*
@@ -126,11 +126,11 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx)
        u16 ui = rate_idx;
 
        dev_dbg(&priv->usb->dev, "%s basic rate: %d\n",
-                                       __func__,  priv->basic_rates);
+               __func__,  priv->basic_rates);
 
        if (!vnt_ofdm_min_rate(priv)) {
                dev_dbg(&priv->usb->dev, "%s (NO OFDM) %d\n",
-                                               __func__, rate_idx);
+                       __func__, rate_idx);
                if (rate_idx > RATE_24M)
                        rate_idx = RATE_24M;
                return rate_idx;
@@ -139,7 +139,7 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx)
        while (ui > RATE_11M) {
                if (priv->basic_rates & (1 << ui)) {
                        dev_dbg(&priv->usb->dev, "%s rate: %d\n",
-                                                       __func__, ui);
+                               __func__, ui);
                        return ui;
                }
                ui--;
@@ -165,9 +165,8 @@ static u16 vnt_get_ofdm_rate(struct vnt_private *priv, u16 rate_idx)
  *
  */
 static void vnt_calculate_ofdm_rate(u16 rate, u8 bb_type,
-                                       u8 *tx_rate, u8 *rsv_time)
+                                   u8 *tx_rate, u8 *rsv_time)
 {
-
        switch (rate) {
        case RATE_6M:
                if (bb_type == BB_TYPE_11A) {
@@ -267,20 +266,20 @@ void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type)
        int i;
 
        /*RSPINF_b_1*/
-       vnt_get_phy_field(priv, 14,
-               vnt_get_cck_rate(priv, RATE_1M), PK_TYPE_11B, &phy[0]);
+       vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_1M),
+                         PK_TYPE_11B, &phy[0]);
 
        /*RSPINF_b_2*/
-       vnt_get_phy_field(priv, 14,
-               vnt_get_cck_rate(priv, RATE_2M), PK_TYPE_11B, &phy[1]);
+       vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_2M),
+                         PK_TYPE_11B, &phy[1]);
 
        /*RSPINF_b_5*/
-       vnt_get_phy_field(priv, 14,
-               vnt_get_cck_rate(priv, RATE_5M), PK_TYPE_11B, &phy[2]);
+       vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_5M),
+                         PK_TYPE_11B, &phy[2]);
 
        /*RSPINF_b_11*/
-       vnt_get_phy_field(priv, 14,
-               vnt_get_cck_rate(priv, RATE_11M), PK_TYPE_11B, &phy[3]);
+       vnt_get_phy_field(priv, 14, vnt_get_cck_rate(priv, RATE_11M),
+                         PK_TYPE_11B, &phy[3]);
 
        /*RSPINF_a_6*/
        vnt_calculate_ofdm_rate(RATE_6M, bb_type, &tx_rate[0], &rsv_time[0]);
@@ -299,19 +298,19 @@ void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type)
 
        /*RSPINF_a_36*/
        vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_36M),
-                                       bb_type, &tx_rate[5], &rsv_time[5]);
+                               bb_type, &tx_rate[5], &rsv_time[5]);
 
        /*RSPINF_a_48*/
        vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_48M),
-                                       bb_type, &tx_rate[6], &rsv_time[6]);
+                               bb_type, &tx_rate[6], &rsv_time[6]);
 
        /*RSPINF_a_54*/
        vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_54M),
-                                       bb_type, &tx_rate[7], &rsv_time[7]);
+                               bb_type, &tx_rate[7], &rsv_time[7]);
 
        /*RSPINF_a_72*/
        vnt_calculate_ofdm_rate(vnt_get_ofdm_rate(priv, RATE_54M),
-                                       bb_type, &tx_rate[8], &rsv_time[8]);
+                               bb_type, &tx_rate[8], &rsv_time[8]);
 
        put_unaligned(phy[0].len, (u16 *)&data[0]);
        data[2] = phy[0].signal;
@@ -334,8 +333,8 @@ void vnt_set_rspinf(struct vnt_private *priv, u8 bb_type)
                data[16 + i * 2 + 1] = rsv_time[i];
        }
 
-       vnt_control_out(priv, MESSAGE_TYPE_WRITE,
-               MAC_REG_RSPINF_B_1, MESSAGE_REQUEST_MACREG, 34, &data[0]);
+       vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_RSPINF_B_1,
+                       MESSAGE_REQUEST_MACREG, 34, &data[0]);
 }
 
 /*
@@ -429,12 +428,12 @@ void vnt_update_ifs(struct vnt_private *priv)
        data[3] = (u8)priv->slot;
 
        vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_SIFS,
-               MESSAGE_REQUEST_MACREG, 4, &data[0]);
+                       MESSAGE_REQUEST_MACREG, 4, &data[0]);
 
        max_min |= 0xa0;
 
        vnt_control_out(priv, MESSAGE_TYPE_WRITE, MAC_REG_CWMAXMIN0,
-               MESSAGE_REQUEST_MACREG, 1, &max_min);
+                       MESSAGE_REQUEST_MACREG, 1, &max_min);
 }
 
 void vnt_update_top_rates(struct vnt_private *priv)
@@ -478,7 +477,6 @@ int vnt_ofdm_min_rate(struct vnt_private *priv)
 
 u8 vnt_get_pkt_type(struct vnt_private *priv)
 {
-
        if (priv->bb_type == BB_TYPE_11A || priv->bb_type == BB_TYPE_11B)
                return (u8)priv->bb_type;
        else if (vnt_ofdm_min_rate(priv))
@@ -506,7 +504,7 @@ u64 vnt_get_tsf_offset(u8 rx_rate, u64 tsf1, u64 tsf2)
        u64 tsf_offset = 0;
        u16 rx_bcn_offset;
 
-       rx_bcn_offset = cwRXBCNTSFOff[rx_rate % MAX_RATE];
+       rx_bcn_offset = cw_rxbcntsf_off[rx_rate % MAX_RATE];
 
        tsf2 += (u64)rx_bcn_offset;
 
@@ -531,7 +529,7 @@ u64 vnt_get_tsf_offset(u8 rx_rate, u64 tsf1, u64 tsf2)
  *
  */
 void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate,
-               u64 time_stamp, u64 local_tsf)
+                   u64 time_stamp, u64 local_tsf)
 {
        u64 tsf_offset = 0;
        u8 data[8];
@@ -548,8 +546,9 @@ void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate,
        data[7] = (u8)(tsf_offset >> 56);
 
        vnt_control_out(priv, MESSAGE_TYPE_SET_TSFTBTT,
-               MESSAGE_REQUEST_TSF, 0, 8, data);
+                       MESSAGE_REQUEST_TSF, 0, 8, data);
 }
+
 /*
  * Description: Read NIC TSF counter
  *              Get local TSF counter
@@ -565,7 +564,6 @@ void vnt_adjust_tsf(struct vnt_private *priv, u8 rx_rate,
  */
 bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf)
 {
-
        *current_tsf = priv->current_tsf;
 
        return true;
@@ -584,7 +582,6 @@ bool vnt_get_current_tsf(struct vnt_private *priv, u64 *current_tsf)
  */
 bool vnt_clear_current_tsf(struct vnt_private *priv)
 {
-
        vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL, TFTCTL_TSFCNTRST);
 
        priv->current_tsf = 0;
@@ -657,7 +654,7 @@ void vnt_reset_next_tbtt(struct vnt_private *priv, u16 beacon_interval)
        data[7] = (u8)(next_tbtt >> 56);
 
        vnt_control_out(priv, MESSAGE_TYPE_SET_TSFTBTT,
-               MESSAGE_REQUEST_TBTT, 0, 8, data);
+                       MESSAGE_REQUEST_TBTT, 0, 8, data);
 }
 
 /*
@@ -676,7 +673,7 @@ void vnt_reset_next_tbtt(struct vnt_private *priv, u16 beacon_interval)
  *
  */
 void vnt_update_next_tbtt(struct vnt_private *priv, u64 tsf,
-                       u16 beacon_interval)
+                         u16 beacon_interval)
 {
        u8 data[8];
 
@@ -721,7 +718,7 @@ int vnt_radio_power_off(struct vnt_private *priv)
        case RF_VT3226D0:
        case RF_VT3342A0:
                vnt_mac_reg_bits_off(priv, MAC_REG_SOFTPWRCTL,
-                               (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3));
+                                    (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3));
                break;
        }
 
@@ -762,7 +759,7 @@ int vnt_radio_power_on(struct vnt_private *priv)
        case RF_VT3226D0:
        case RF_VT3342A0:
                vnt_mac_reg_bits_on(priv, MAC_REG_SOFTPWRCTL,
-                       (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3));
+                                   (SOFTPWRCTL_SWPE2 | SOFTPWRCTL_SWPE3));
                break;
        }
 
@@ -795,7 +792,7 @@ void vnt_set_bss_mode(struct vnt_private *priv)
                        priv->bb_vga[0] = 0x20;
 
                        vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG,
-                                               0xe7, priv->bb_vga[0]);
+                                          0xe7, priv->bb_vga[0]);
                }
 
                priv->bb_vga[2] = 0x10;
@@ -805,7 +802,7 @@ void vnt_set_bss_mode(struct vnt_private *priv)
                        priv->bb_vga[0] = 0x1c;
 
                        vnt_control_out_u8(priv, MESSAGE_REQUEST_BBREG,
-                                               0xe7, priv->bb_vga[0]);
+                                          0xe7, priv->bb_vga[0]);
                }
 
                priv->bb_vga[2] = 0x0;
index 6019aac8bdd59705e812500990a89167e172c625..c352c70b2cdb5fcbf1a04f15bbad07bf67cd8195 100644 (file)
@@ -34,7 +34,7 @@
 #include "rf.h"
 
 int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb,
-       unsigned long bytes_received)
+               unsigned long bytes_received)
 {
        struct ieee80211_hw *hw = priv->hw;
        struct ieee80211_supported_band *sband;
@@ -75,22 +75,22 @@ int vnt_rx_data(struct vnt_private *priv, struct vnt_rcb *ptr_rcb,
 
        skb_data = (u8 *)skb->data;
 
-       rx_sts = skb_data+4;
-       rx_rate = skb_data+5;
+       rx_sts = skb_data + 4;
+       rx_rate = skb_data + 5;
 
        /* real Frame Size = USBframe_size -4WbkStatus - 4RxStatus */
        /* -8TSF - 4RSR - 4SQ3 - ?Padding */
 
        /* if SQ3 the range is 24~27, if no SQ3 the range is 20~23 */
 
-       pay_load_len = (u16 *) (skb_data + 6);
+       pay_load_len = (u16 *)(skb_data + 6);
 
        /*Fix hardware bug => PLCP_Length error */
        if (((bytes_received - (*pay_load_len)) > 27) ||
-               ((bytes_received - (*pay_load_len)) < 24) ||
-                       (bytes_received < (*pay_load_len))) {
+           ((bytes_received - (*pay_load_len)) < 24) ||
+           (bytes_received < (*pay_load_len))) {
                dev_dbg(&priv->usb->dev, "Wrong PLCP Length %x\n",
-                                                       *pay_load_len);
+                       *pay_load_len);
                return false;
        }
 
index 5a92bd86cee2f9ca3b30971b34cc792e4e746d7c..ff1850c4a927dc2537053997827bf979d7c00768 100644 (file)
@@ -29,6 +29,6 @@
 #include "device.h"
 
 int vnt_rx_data(struct vnt_private *, struct vnt_rcb *,
-       unsigned long bytes_received);
+               unsigned long bytes_received);
 
 #endif /* __RXTX_H__ */
index ac4fecb30d0e9c1a38421cf4c67ffba8fa4af35b..0594828bdabf92feca8736a7b777c5d6b7b07763 100644 (file)
@@ -440,10 +440,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
 
                /* allocate URBs */
                tx_context->urb = usb_alloc_urb(0, GFP_KERNEL);
-               if (!tx_context->urb) {
-                       dev_err(&priv->usb->dev, "alloc tx urb failed\n");
+               if (!tx_context->urb)
                        goto free_tx;
-               }
 
                tx_context->in_use = false;
        }
@@ -462,10 +460,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
 
                /* allocate URBs */
                rcb->urb = usb_alloc_urb(0, GFP_KERNEL);
-               if (!rcb->urb) {
-                       dev_err(&priv->usb->dev, "Failed to alloc rx urb\n");
+               if (!rcb->urb)
                        goto free_rx_tx;
-               }
 
                rcb->skb = dev_alloc_skb(priv->rx_buf_sz);
                if (!rcb->skb)
@@ -479,10 +475,8 @@ static bool vnt_alloc_bufs(struct vnt_private *priv)
        }
 
        priv->interrupt_urb = usb_alloc_urb(0, GFP_KERNEL);
-       if (!priv->interrupt_urb) {
-               dev_err(&priv->usb->dev, "Failed to alloc int urb\n");
+       if (!priv->interrupt_urb)
                goto free_rx_tx;
-       }
 
        priv->int_buf.data_buf = kmalloc(MAX_INTERRUPT_SIZE, GFP_KERNEL);
        if (!priv->int_buf.data_buf) {
index f546553de66fb7cc649ef2c67fabdb90119d74fb..e9b6b21f742217ca8d289021ca582d7409a6e64d 100644 (file)
@@ -28,8 +28,9 @@
  *     vnt_control_in_u8 - Read one byte from MEM/BB/MAC/EEPROM
  *
  * Revision History:
- *      04-05-2004 Jerry Chen:  Initial release
- *      11-24-2004 Warren Hsu: Add ControlvWriteByte,ControlvReadByte,ControlvMaskByte
+ *      04-05-2004 Jerry Chen: Initial release
+ *      11-24-2004 Warren Hsu: Add ControlvWriteByte,ControlvReadByte,
+ *                             ControlvMaskByte
  *
  */
 
index ec93b2ee0b08c9a937bc9ad68e68c55075b767a6..ae61b55f14fd769f8275ce6e698f5855f0c94296 100644 (file)
@@ -3,7 +3,6 @@ TODO:
 - remove OS wrapper functions
 - remove custom debug and tracing functions
 - rework comments and function headers(also coding style)
-- replace all semaphores with mutexes or completions
 - Move handling for each individual members of 'union message_body' out
   into a separate 'struct work_struct' and completely remove the multiplexer
   that is currently part of host_if_work(), allowing movement of the
index 32215110d597b8889023d7a2d7408c0ad94bcdf7..6370a5efe343abd657226735be6d044e28c91d99 100644 (file)
@@ -21,7 +21,6 @@
 #include <linux/kernel.h>
 #include <linux/skbuff.h>
 #include <linux/mutex.h>
-#include <linux/semaphore.h>
 #include <linux/completion.h>
 
 static int dev_state_ev_handler(struct notifier_block *this,
index fcbc95d19d8e6d33227946e2488d27a8f6c12dc9..b052628770af5a05c7558778118f51133524e621 100644 (file)
@@ -102,35 +102,16 @@ static struct wilc_debugfs_info_t debugfs_info[] = {
 static int __init wilc_debugfs_init(void)
 {
        int i;
-
-       struct dentry *debugfs_files;
        struct wilc_debugfs_info_t *info;
 
        wilc_dir = debugfs_create_dir("wilc_wifi", NULL);
-       if (wilc_dir ==  ERR_PTR(-ENODEV)) {
-               /* it's not error. the debugfs is just not being enabled. */
-               printk("ERR, kernel has built without debugfs support\n");
-               return 0;
-       }
-
-       if (!wilc_dir) {
-               printk("ERR, debugfs create dir\n");
-               return -1;
-       }
-
        for (i = 0; i < ARRAY_SIZE(debugfs_info); i++) {
                info = &debugfs_info[i];
-               debugfs_files = debugfs_create_file(info->name,
-                                                   info->perm,
-                                                   wilc_dir,
-                                                   &info->data,
-                                                   &info->fops);
-
-               if (!debugfs_files) {
-                       printk("ERR fail to create the debugfs file, %s\n", info->name);
-                       debugfs_remove_recursive(wilc_dir);
-                       return -1;
-               }
+               debugfs_create_file(info->name,
+                                   info->perm,
+                                   wilc_dir,
+                                   &info->data,
+                                   &info->fops);
        }
        return 0;
 }
index 22cf4b7857e5317b34a940d8b100591984ea246c..0f8d62594beebb06d52ff7074ade98a776583dba 100644 (file)
@@ -871,7 +871,7 @@ static int wilc_spi_init(struct wilc *wilc, bool resume)
                /* Read failed. Try with CRC off. This might happen when module
                 * is removed but chip isn't reset*/
                g_spi.crc_off = 1;
-               dev_err(&spi->dev, "Failed internal read protocol with CRC on, retyring with CRC off...\n");
+               dev_err(&spi->dev, "Failed internal read protocol with CRC on, retrying with CRC off...\n");
                if (!spi_internal_read(wilc, WILC_SPI_PROTOCOL_OFFSET, &reg)) {
                        /* Reaad failed with both CRC on and off, something went bad */
                        dev_err(&spi->dev,
index 5cc6a82d80818f7c725f5631272a4eb3db510752..ec6b1674cf38425e3deb9a8a67e25ffb27845390 100644 (file)
@@ -131,7 +131,7 @@ struct wilc_priv {
        struct wilc_wfi_key *wilc_gtk[MAX_NUM_STA];
        struct wilc_wfi_key *wilc_ptk[MAX_NUM_STA];
        u8 wilc_groupkey;
-       /* semaphores */
+       /* mutexes */
        struct mutex scan_req_lock;
        /*  */
        bool gbAutoRateAdjusted;
index 30e5312ee87e6ac838c6701f610b7c0da63ffacd..de6c4ddbf45a75988e2f79df375f57d91a213085 100644 (file)
 
 #define ENABLE_RX_VMM          (SEL_VMM_TBL1 | EN_VMM)
 #define ENABLE_TX_VMM          (SEL_VMM_TBL0 | EN_VMM)
-/*time for expiring the semaphores of cfg packets*/
+/*time for expiring the completion of cfg packets*/
 #define CFG_PKTS_TIMEOUT       2000
 /********************************************
  *
index 410bfc034319cbc56b9f867cddcfcc0f64ffdc2e..439ac6f8d533605a607086d7988c01b8ea5a9bb8 100644 (file)
@@ -10,7 +10,6 @@
 #ifndef WILC_WLAN_IF_H
 #define WILC_WLAN_IF_H
 
-#include <linux/semaphore.h>
 #include <linux/netdevice.h>
 
 /********************************************
index f46dfe6b24e813c2ec43740dd18b9e1901c68b99..a36e40d5b970c5a01482b21b2c700fb5e487375f 100644 (file)
@@ -150,6 +150,9 @@ static int prism2_add_key(struct wiphy *wiphy, struct net_device *dev,
        int err = 0;
        int result = 0;
 
+       if (key_index >= NUM_WEPKEYS)
+               return -EINVAL;
+
        switch (params->cipher) {
        case WLAN_CIPHER_SUITE_WEP40:
        case WLAN_CIPHER_SUITE_WEP104:
@@ -160,27 +163,7 @@ static int prism2_add_key(struct wiphy *wiphy, struct net_device *dev,
                        goto exit;
 
                /* send key to driver */
-               switch (key_index) {
-               case 0:
-                       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0;
-                       break;
-
-               case 1:
-                       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1;
-                       break;
-
-               case 2:
-                       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2;
-                       break;
-
-               case 3:
-                       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3;
-                       break;
-
-               default:
-                       err = -EINVAL;
-                       goto exit;
-               }
+               did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(key_index + 1);
 
                result = prism2_domibset_pstr32(wlandev, did,
                                                params->key_len, params->key);
@@ -242,36 +225,13 @@ static int prism2_del_key(struct wiphy *wiphy, struct net_device *dev,
         * a key, so we will cheat by setting the key to a bogus value
         */
 
-       /* send key to driver */
-       switch (key_index) {
-       case 0:
-               did =
-                   DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0;
-               break;
-
-       case 1:
-               did =
-                   DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1;
-               break;
-
-       case 2:
-               did =
-                   DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2;
-               break;
-
-       case 3:
-               did =
-                   DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3;
-               break;
-
-       default:
-               err = -EINVAL;
-               goto exit;
-       }
+       if (key_index >= NUM_WEPKEYS)
+               return -EINVAL;
 
+       /* send key to driver */
+       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(key_index + 1);
        result = prism2_domibset_pstr32(wlandev, did, 13, "0000000000000");
 
-exit:
        if (result)
                err = -EFAULT;
 
@@ -529,6 +489,11 @@ static int prism2_connect(struct wiphy *wiphy, struct net_device *dev,
        /* Set the encryption - we only support wep */
        if (is_wep) {
                if (sme->key) {
+                       if (sme->key_idx >= NUM_WEPKEYS) {
+                               err = -EINVAL;
+                               goto exit;
+                       }
+
                        result = prism2_domibset_uint32(wlandev,
                                DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID,
                                sme->key_idx);
@@ -536,28 +501,8 @@ static int prism2_connect(struct wiphy *wiphy, struct net_device *dev,
                                goto exit;
 
                        /* send key to driver */
-                       switch (sme->key_idx) {
-                       case 0:
-                               did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0;
-                               break;
-
-                       case 1:
-                               did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1;
-                               break;
-
-                       case 2:
-                               did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2;
-                               break;
-
-                       case 3:
-                               did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3;
-                               break;
-
-                       default:
-                               err = -EINVAL;
-                               goto exit;
-                       }
-
+                       did = DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(
+                                       sme->key_idx + 1);
                        result = prism2_domibset_pstr32(wlandev,
                                                        did, sme->key_len,
                                                        (u8 *)sme->key);
index 0ccfba1294de6d8727ad471b8a83e418cf1f82b1..b0d3567ca0ad394f6352f7fb18dba52b86301d31 100644 (file)
 #define DIDmib_dot11smt_dot11WEPDefaultKeysTable \
                        (P80211DID_MKSECTION(1) | \
                        P80211DID_MKGROUP(4))
-#define DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0 \
-                       (P80211DID_MKSECTION(1) | \
-                       P80211DID_MKGROUP(4) | \
-                       P80211DID_MKITEM(1) | 0x0c000000)
-#define DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1 \
-                       (P80211DID_MKSECTION(1) | \
-                       P80211DID_MKGROUP(4) | \
-                       P80211DID_MKITEM(2) | 0x0c000000)
-#define DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2 \
-                       (P80211DID_MKSECTION(1) | \
-                       P80211DID_MKGROUP(4) | \
-                       P80211DID_MKITEM(3) | 0x0c000000)
-#define DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3 \
-                       (P80211DID_MKSECTION(1) | \
-                       P80211DID_MKGROUP(4) | \
-                       P80211DID_MKITEM(4) | 0x0c000000)
+#define DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(_i) \
+                       (DIDmib_dot11smt_dot11WEPDefaultKeysTable | \
+                       P80211DID_MKITEM(_i) | 0x0c000000)
 #define DIDmib_dot11smt_dot11PrivacyTable \
                        (P80211DID_MKSECTION(1) | \
                        P80211DID_MKGROUP(6))
index 4b84b568f6ca04535ad63b2f5e0c2532a6523273..f755318c165370db4733bcc0c1d0737e654428cf 100644 (file)
@@ -77,6 +77,21 @@ static void p80211req_mibset_mibget(wlandevice_t *wlandev,
                                   struct p80211msg_dot11req_mibget *mib_msg,
                                   int isget);
 
+static void p80211req_handle_action(struct wlandevice *wlandev, u32 *data,
+                                   int isget, u32 flag)
+{
+       if (isget) {
+               if (wlandev->hostwep & flag)
+                       *data = P80211ENUM_truth_true;
+               else
+                       *data = P80211ENUM_truth_false;
+       } else {
+               wlandev->hostwep &= ~flag;
+               if (*data == P80211ENUM_truth_true)
+                       wlandev->hostwep |= flag;
+       }
+}
+
 /*----------------------------------------------------------------
 * p80211req_dorequest
 *
@@ -185,26 +200,16 @@ static void p80211req_mibset_mibget(wlandevice_t *wlandev,
        u8 *key = mibitem->data + sizeof(p80211pstrd_t);
 
        switch (mibitem->did) {
-       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0:{
-               if (!isget)
-                       wep_change_key(wlandev, 0, key, pstr->len);
-       break;
-       }
-       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1:{
-               if (!isget)
-                       wep_change_key(wlandev, 1, key, pstr->len);
-       break;
-       }
-       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2:{
-               if (!isget)
-                       wep_change_key(wlandev, 2, key, pstr->len);
-       break;
-       }
-       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3:{
+       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(1):
+       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(2):
+       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(3):
+       case DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(4):
                if (!isget)
-                       wep_change_key(wlandev, 3, key, pstr->len);
-       break;
-       }
+                       wep_change_key(wlandev,
+                                      P80211DID_ITEM(mibitem->did) - 1,
+                                      key, pstr->len);
+               break;
+
        case DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID:{
                u32 *data = (u32 *) mibitem->data;
 
@@ -219,31 +224,15 @@ static void p80211req_mibset_mibget(wlandevice_t *wlandev,
        case DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked:{
                u32 *data = (u32 *) mibitem->data;
 
-               if (isget) {
-                       if (wlandev->hostwep & HOSTWEP_PRIVACYINVOKED)
-                               *data = P80211ENUM_truth_true;
-                       else
-                               *data = P80211ENUM_truth_false;
-               } else {
-                       wlandev->hostwep &= ~(HOSTWEP_PRIVACYINVOKED);
-                       if (*data == P80211ENUM_truth_true)
-                               wlandev->hostwep |= HOSTWEP_PRIVACYINVOKED;
-               }
+               p80211req_handle_action(wlandev, data, isget,
+                                       HOSTWEP_PRIVACYINVOKED);
        break;
        }
        case DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted:{
                u32 *data = (u32 *) mibitem->data;
 
-               if (isget) {
-                       if (wlandev->hostwep & HOSTWEP_EXCLUDEUNENCRYPTED)
-                               *data = P80211ENUM_truth_true;
-                       else
-                               *data = P80211ENUM_truth_false;
-               } else {
-                       wlandev->hostwep &= ~(HOSTWEP_EXCLUDEUNENCRYPTED);
-                       if (*data == P80211ENUM_truth_true)
-                               wlandev->hostwep |= HOSTWEP_EXCLUDEUNENCRYPTED;
-               }
+               p80211req_handle_action(wlandev, data, isget,
+                                       HOSTWEP_EXCLUDEUNENCRYPTED);
        break;
        }
        }
index fe914b1f904b77ac7927afa593cc9866bb6e236d..524271f5b7f1432fb60df1399b7fd4279049590b 100644 (file)
@@ -148,19 +148,19 @@ static int prism2mib_priv(struct mibrec *mib,
 static struct mibrec mibtab[] = {
 
        /* dot11smt MIB's */
-       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey0,
+       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(1),
         F_STA | F_WRITE,
         HFA384x_RID_CNFWEPDEFAULTKEY0, 0, 0,
         prism2mib_wepdefaultkey},
-       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey1,
+       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(2),
         F_STA | F_WRITE,
         HFA384x_RID_CNFWEPDEFAULTKEY1, 0, 0,
         prism2mib_wepdefaultkey},
-       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey2,
+       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(3),
         F_STA | F_WRITE,
         HFA384x_RID_CNFWEPDEFAULTKEY2, 0, 0,
         prism2mib_wepdefaultkey},
-       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_dot11WEPDefaultKey3,
+       {DIDmib_dot11smt_dot11WEPDefaultKeysTable_key(4),
         F_STA | F_WRITE,
         HFA384x_RID_CNFWEPDEFAULTKEY3, 0, 0,
         prism2mib_wepdefaultkey},
@@ -237,25 +237,25 @@ static struct mibrec mibtab[] = {
        {0, 0, 0, 0, 0, NULL}
 };
 
-/*----------------------------------------------------------------
-* prism2mgmt_mibset_mibget
-*
-* Set the value of a mib item.
-*
-* Arguments:
-     wlandev         wlan device structure
-     msgp            ptr to msg buffer
-*
-* Returns:
-     0       success and done
-     <0      success, but we're waiting for something to finish.
-     >0      an error occurred while handling the message.
-* Side effects:
-*
-* Call context:
-     process thread  (usually)
-     interrupt
-----------------------------------------------------------------*/
+/*
+ * prism2mgmt_mibset_mibget
+ *
+ * Set the value of a mib item.
+ *
+ * Arguments:
+ *     wlandev         wlan device structure
+ *     msgp            ptr to msg buffer
+ *
+ * Returns:
+ *     0       success and done
+ *     <0      success, but we're waiting for something to finish.
+ *     >0      an error occurred while handling the message.
+ * Side effects:
+ *
+ * Call context:
+ *     process thread  (usually)
+ *     interrupt
+ */
 
 int prism2mgmt_mibset_mibget(wlandevice_t *wlandev, void *msgp)
 {
@@ -346,30 +346,30 @@ done:
        return 0;
 }
 
-/*----------------------------------------------------------------
-* prism2mib_bytearea2pstr
-*
-* Get/set pstr data to/from a byte area.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Number of bytes of RID data.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_bytearea2pstr
+ *
+ * Get/set pstr data to/from a byte area.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Number of bytes of RID data.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_bytearea2pstr(struct mibrec *mib,
                                   int isget,
@@ -396,30 +396,30 @@ static int prism2mib_bytearea2pstr(struct mibrec *mib,
        return result;
 }
 
-/*----------------------------------------------------------------
-* prism2mib_uint32
-*
-* Get/set uint32 data.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Not used.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_uint32
+ *
+ * Get/set uint32 data.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Not used.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_uint32(struct mibrec *mib,
                            int isget,
@@ -443,30 +443,30 @@ static int prism2mib_uint32(struct mibrec *mib,
        return result;
 }
 
-/*----------------------------------------------------------------
-* prism2mib_flag
-*
-* Get/set a flag.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Bit to get/set.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_flag
+ *
+ * Get/set a flag.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Bit to get/set.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_flag(struct mibrec *mib,
                          int isget,
@@ -500,30 +500,30 @@ static int prism2mib_flag(struct mibrec *mib,
        return result;
 }
 
-/*----------------------------------------------------------------
-* prism2mib_wepdefaultkey
-*
-* Get/set WEP default keys.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Number of bytes of RID data.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_wepdefaultkey
+ *
+ * Get/set WEP default keys.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Number of bytes of RID data.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_wepdefaultkey(struct mibrec *mib,
                                   int isget,
@@ -550,30 +550,30 @@ static int prism2mib_wepdefaultkey(struct mibrec *mib,
        return result;
 }
 
-/*----------------------------------------------------------------
-* prism2mib_privacyinvoked
-*
-* Get/set the dot11PrivacyInvoked value.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Bit value for PrivacyInvoked flag.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_privacyinvoked
+ *
+ * Get/set the dot11PrivacyInvoked value.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Bit value for PrivacyInvoked flag.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_privacyinvoked(struct mibrec *mib,
                                    int isget,
@@ -592,30 +592,30 @@ static int prism2mib_privacyinvoked(struct mibrec *mib,
        return prism2mib_flag(mib, isget, wlandev, hw, msg, data);
 }
 
-/*----------------------------------------------------------------
-* prism2mib_excludeunencrypted
-*
-* Get/set the dot11ExcludeUnencrypted value.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Bit value for ExcludeUnencrypted flag.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_excludeunencrypted
+ *
+ * Get/set the dot11ExcludeUnencrypted value.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Bit value for ExcludeUnencrypted flag.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_excludeunencrypted(struct mibrec *mib,
                                        int isget,
@@ -628,30 +628,30 @@ static int prism2mib_excludeunencrypted(struct mibrec *mib,
        return prism2mib_flag(mib, isget, wlandev, hw, msg, data);
 }
 
-/*----------------------------------------------------------------
-* prism2mib_fragmentationthreshold
-*
-* Get/set the fragmentation threshold.
-*
-* MIB record parameters:
-*       parm1    Prism2 RID value.
-*       parm2    Not used.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_fragmentationthreshold
+ *
+ * Get/set the fragmentation threshold.
+ *
+ * MIB record parameters:
+ *       parm1    Prism2 RID value.
+ *       parm2    Not used.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_fragmentationthreshold(struct mibrec *mib,
                                            int isget,
@@ -674,30 +674,30 @@ static int prism2mib_fragmentationthreshold(struct mibrec *mib,
        return prism2mib_uint32(mib, isget, wlandev, hw, msg, data);
 }
 
-/*----------------------------------------------------------------
-* prism2mib_priv
-*
-* Get/set values in the "priv" data structure.
-*
-* MIB record parameters:
-*       parm1    Not used.
-*       parm2    Not used.
-*       parm3    Not used.
-*
-* Arguments:
-*       mib      MIB record.
-*       isget    MIBGET/MIBSET flag.
-*       wlandev  wlan device structure.
-*       priv     "priv" structure.
-*       hw       "hw" structure.
-*       msg      Message structure.
-*       data     Data buffer.
-*
-* Returns:
-*       0   - Success.
-*       ~0  - Error.
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mib_priv
+ *
+ * Get/set values in the "priv" data structure.
+ *
+ * MIB record parameters:
+ *       parm1    Not used.
+ *       parm2    Not used.
+ *       parm3    Not used.
+ *
+ * Arguments:
+ *       mib      MIB record.
+ *       isget    MIBGET/MIBSET flag.
+ *       wlandev  wlan device structure.
+ *       priv     "priv" structure.
+ *       hw       "hw" structure.
+ *       msg      Message structure.
+ *       data     Data buffer.
+ *
+ * Returns:
+ *       0   - Success.
+ *       ~0  - Error.
+ *
+ */
 
 static int prism2mib_priv(struct mibrec *mib,
                          int isget,
@@ -736,20 +736,20 @@ static int prism2mib_priv(struct mibrec *mib,
        return 0;
 }
 
-/*----------------------------------------------------------------
-* prism2mgmt_pstr2bytestr
-*
-* Convert the pstr data in the WLAN message structure into an hfa384x
-* byte string format.
-*
-* Arguments:
-     bytestr         hfa384x byte string data type
-     pstr            wlan message data
-*
-* Returns:
-     Nothing
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mgmt_pstr2bytestr
+ *
+ * Convert the pstr data in the WLAN message structure into an hfa384x
+ * byte string format.
+ *
+ * Arguments:
+ *     bytestr         hfa384x byte string data type
+ *     pstr            wlan message data
+ *
+ * Returns:
+ *     Nothing
+ *
+ */
 
 void prism2mgmt_pstr2bytestr(struct hfa384x_bytestr *bytestr,
                             p80211pstrd_t *pstr)
@@ -758,20 +758,20 @@ void prism2mgmt_pstr2bytestr(struct hfa384x_bytestr *bytestr,
        memcpy(bytestr->data, pstr->data, pstr->len);
 }
 
-/*----------------------------------------------------------------
-* prism2mgmt_bytestr2pstr
-*
-* Convert the data in an hfa384x byte string format into a
-* pstr in the WLAN message.
-*
-* Arguments:
-     bytestr         hfa384x byte string data type
-     msg             wlan message
-*
-* Returns:
-     Nothing
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mgmt_bytestr2pstr
+ *
+ * Convert the data in an hfa384x byte string format into a
+ * pstr in the WLAN message.
+ *
+ * Arguments:
+ *     bytestr         hfa384x byte string data type
+ *     msg             wlan message
+ *
+ * Returns:
+ *     Nothing
+ *
+ */
 
 void prism2mgmt_bytestr2pstr(struct hfa384x_bytestr *bytestr,
                             p80211pstrd_t *pstr)
@@ -780,20 +780,20 @@ void prism2mgmt_bytestr2pstr(struct hfa384x_bytestr *bytestr,
        memcpy(pstr->data, bytestr->data, pstr->len);
 }
 
-/*----------------------------------------------------------------
-* prism2mgmt_bytearea2pstr
-*
-* Convert the data in an hfa384x byte area format into a pstr
-* in the WLAN message.
-*
-* Arguments:
-     bytearea        hfa384x byte area data type
-     msg             wlan message
-*
-* Returns:
-     Nothing
-*
-----------------------------------------------------------------*/
+/*
+ * prism2mgmt_bytearea2pstr
+ *
+ * Convert the data in an hfa384x byte area format into a pstr
+ * in the WLAN message.
+ *
+ * Arguments:
+ *     bytearea        hfa384x byte area data type
+ *     msg             wlan message
+ *
+ * Returns:
+ *     Nothing
+ *
+ */
 
 void prism2mgmt_bytearea2pstr(u8 *bytearea, p80211pstrd_t *pstr, int len)
 {
index b26d09ff840c1238b0dbca0e477941c5f82f5466..0463ec16802c0ae264bc4444aac109f74e985217 100644 (file)
@@ -47,11 +47,11 @@ static const struct usb_device_id usb_prism_tbl[] = {
        PRISM_DEV(0x0bb2, 0x0302, "Ambit Microsystems Corp."),
        PRISM_DEV(0x9016, 0x182d, "Sitecom WL-022 802.11b USB Adapter"),
        PRISM_DEV(0x0543, 0x0f01,
-               "ViewSonic Airsync USB Adapter 11Mbps (Prism2.5)"),
+                 "ViewSonic Airsync USB Adapter 11Mbps (Prism2.5)"),
        PRISM_DEV(0x067c, 0x1022,
-               "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter"),
+                 "Siemens SpeedStream 1022 11Mbps WLAN USB Adapter"),
        PRISM_DEV(0x049f, 0x0033,
-               "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter"),
+                 "Compaq/Intel W100 PRO/Wireless 11Mbps multiport WLAN Adapter"),
        { } /* terminator */
 };
 MODULE_DEVICE_TABLE(usb, usb_prism_tbl);
@@ -74,7 +74,7 @@ static int prism2sta_probe_usb(struct usb_interface *interface,
        }
        hw = wlandev->priv;
 
-       if (wlan_setup(wlandev, &(interface->dev)) != 0) {
+       if (wlan_setup(wlandev, &interface->dev) != 0) {
                dev_err(&interface->dev, "wlan_setup() failed.\n");
                result = -EIO;
                goto failed;
@@ -87,7 +87,7 @@ static int prism2sta_probe_usb(struct usb_interface *interface,
        /* Register the wlandev, this gets us a name and registers the
         * linux netdevice.
         */
-       SET_NETDEV_DEV(wlandev->netdev, &(interface->dev));
+       SET_NETDEV_DEV(wlandev->netdev, &interface->dev);
 
        /* Do a chip-level reset on the MAC */
        if (prism2_doreset) {
@@ -137,7 +137,7 @@ static void prism2sta_disconnect_usb(struct usb_interface *interface)
        wlandevice_t *wlandev;
 
        wlandev = (wlandevice_t *)usb_get_intfdata(interface);
-       if (wlandev != NULL) {
+       if (wlandev) {
                LIST_HEAD(cleanlist);
                hfa384x_usbctlx_t *ctlx, *temp;
                unsigned long flags;
@@ -216,7 +216,7 @@ exit:
 
 #ifdef CONFIG_PM
 static int prism2sta_suspend(struct usb_interface *interface,
-                               pm_message_t message)
+                            pm_message_t message)
 {
        hfa384x_t *hw = NULL;
        wlandevice_t *wlandev;
index c02b5ce6c5cdb787c3cb5ddb1ca7652dc5fe9d1e..dd85f3503410c16c7bfa98c44f5b13edcda1f4e2 100644 (file)
@@ -236,6 +236,7 @@ struct hid_sensor_common {
        struct hid_sensor_hub_attribute_info report_state;
        struct hid_sensor_hub_attribute_info power_state;
        struct hid_sensor_hub_attribute_info sensitivity;
+       struct work_struct work;
 };
 
 /* Convert from hid unit expo to regular exponent */
index 3d672f72e7ecc7ad1218c9888c6f805d0d0c4589..9edccfba1ffbbae780dfe278eb6a1c48f2be2b43 100644 (file)
@@ -164,6 +164,18 @@ void iio_channel_stop_all_cb(struct iio_cb_buffer *cb_buff);
 struct iio_channel
 *iio_channel_cb_get_channels(const struct iio_cb_buffer *cb_buffer);
 
+/**
+ * iio_channel_cb_get_iio_dev() - get access to the underlying device.
+ * @cb_buffer:         The callback buffer from whom we want the device
+ *                     information.
+ *
+ * This function allows one to obtain information about the device.
+ * The primary aim is to allow drivers that are consuming a device to query
+ * things like current trigger.
+ */
+struct iio_dev
+*iio_channel_cb_get_iio_dev(const struct iio_cb_buffer *cb_buffer);
+
 /**
  * iio_read_channel_raw() - read from a given channel
  * @chan:              The channel being queried.
index 3d650e668252f8f195a8e6a14380117d60b329cc..ab0f5cf1602592c7b5e8f9846657d6234208851b 100644 (file)
@@ -51,7 +51,8 @@ static int dump_channels(const char *dev_dir_name)
 
        while (ent = readdir(dp), ent)
                if (check_prefix(ent->d_name, "in_") &&
-                   check_postfix(ent->d_name, "_raw"))
+                  (check_postfix(ent->d_name, "_raw") ||
+                   check_postfix(ent->d_name, "_input")))
                        printf("   %-10s\n", ent->d_name);
 
        return (closedir(dp) == -1) ? -errno : 0;
This page took 1.801005 seconds and 5 git commands to generate.